[josm] 01/08: New upstream version 0.0.svn12914+dfsg

Bas Couwenberg sebastic at debian.org
Tue Oct 3 14:19:21 UTC 2017


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

sebastic pushed a commit to branch master
in repository josm.

commit 42134c9ec60f8d977db2c789e1dff1750487de67
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date:   Tue Oct 3 12:44:46 2017 +0200

    New upstream version 0.0.svn12914+dfsg
---
 .classpath                                         |    2 +-
 .settings/edu.umd.cs.findbugs.core.prefs           |    2 +-
 CONTRIBUTION                                       |    2 +-
 Dockerfile                                         |    4 +-
 README                                             |    4 +-
 REVISION                                           |   12 +-
 build.xml                                          |   86 +-
 data/defaultpresets.xml                            |  120 +-
 data/validator/geometry.mapcss                     |    8 +
 data/validator/highway.mapcss                      |    4 +-
 data/validator/relation.mapcss                     |    6 +
 data/validator/territories.mapcss                  |    6 +-
 i18n/po/af.po                                      |  800 +++--
 i18n/po/am.po                                      |  800 +++--
 i18n/po/ar.po                                      |  800 +++--
 i18n/po/ast.po                                     |  961 ++---
 i18n/po/az.po                                      |  800 +++--
 i18n/po/be.po                                      |  969 ++---
 i18n/po/bg.po                                      |  876 +++--
 i18n/po/bn.po                                      |  800 +++--
 i18n/po/br.po                                      |  800 +++--
 i18n/po/bs.po                                      |  800 +++--
 i18n/po/ca.po                                      |  971 ++---
 i18n/po/ca at valencia.po                             |  971 ++---
 i18n/po/cs.po                                      | 1075 +++---
 i18n/po/cy.po                                      |  800 +++--
 i18n/po/da.po                                      |  975 ++---
 i18n/po/de.po                                      | 1026 +++---
 i18n/po/de_DE.po                                   |  808 +++--
 i18n/po/el.po                                      |  856 +++--
 i18n/po/en_AU.po                                   |  932 ++---
 i18n/po/en_CA.po                                   |  800 +++--
 i18n/po/en_GB.po                                   |  951 ++---
 i18n/po/eo.po                                      |  800 +++--
 i18n/po/es.po                                      |  988 ++---
 i18n/po/et.po                                      |  832 +++--
 i18n/po/eu.po                                      |  826 +++--
 i18n/po/fa.po                                      |  800 +++--
 i18n/po/fi.po                                      |  876 +++--
 i18n/po/fil.po                                     |  800 +++--
 i18n/po/fo.po                                      |  800 +++--
 i18n/po/fr.po                                      |  989 ++---
 i18n/po/ga.po                                      |  800 +++--
 i18n/po/gl.po                                      |  867 +++--
 i18n/po/he.po                                      |  810 +++--
 i18n/po/hi.po                                      |  800 +++--
 i18n/po/hr.po                                      |  810 +++--
 i18n/po/ht.po                                      |  800 +++--
 i18n/po/hu.po                                      | 1408 ++++----
 i18n/po/hy.po                                      |  800 +++--
 i18n/po/ia.po                                      |  800 +++--
 i18n/po/id.po                                      |  944 ++---
 i18n/po/is.po                                      |  808 +++--
 i18n/po/it.po                                      | 1074 +++---
 i18n/po/ja.po                                      |  940 ++---
 i18n/po/ka.po                                      |  800 +++--
 i18n/po/km.po                                      |  831 +++--
 i18n/po/ko.po                                      |  806 +++--
 i18n/po/ku.po                                      |  800 +++--
 i18n/po/ky.po                                      |  800 +++--
 i18n/po/lb.po                                      |  800 +++--
 i18n/po/lo.po                                      |  800 +++--
 i18n/po/lt.po                                      | 1406 +++++---
 i18n/po/lv.po                                      |  800 +++--
 i18n/po/mk.po                                      |  800 +++--
 i18n/po/mr.po                                      |  802 +++--
 i18n/po/ms.po                                      |  800 +++--
 i18n/po/nb.po                                      |  979 ++---
 i18n/po/nds.po                                     |  800 +++--
 i18n/po/nl.po                                      | 1323 ++++---
 i18n/po/nn.po                                      |  800 +++--
 i18n/po/oc.po                                      |  800 +++--
 i18n/po/pa.po                                      |  800 +++--
 i18n/po/pl.po                                      |  908 +++--
 i18n/po/pt.po                                      | 1932 +++++-----
 i18n/po/pt_BR.po                                   |  991 ++---
 i18n/po/rm.po                                      |  800 +++--
 i18n/po/ro.po                                      |  800 +++--
 i18n/po/ru.po                                      |  994 +++---
 i18n/po/sk.po                                      | 1251 ++++---
 i18n/po/sl.po                                      |  804 +++--
 i18n/po/sq.po                                      |  800 +++--
 i18n/po/sr.po                                      |  800 +++--
 i18n/po/sv.po                                      |  999 +++---
 i18n/po/ta.po                                      |  806 +++--
 i18n/po/te.po                                      |  800 +++--
 i18n/po/th.po                                      |  800 +++--
 i18n/po/tr.po                                      |  814 +++--
 i18n/po/ug.po                                      |  800 +++--
 i18n/po/uk.po                                      | 1273 ++++---
 i18n/po/ur.po                                      |  800 +++--
 i18n/po/vi.po                                      |  948 ++---
 i18n/po/wae.po                                     |  800 +++--
 i18n/po/zh_CN.po                                   | 3777 ++++++++++----------
 i18n/po/zh_TW.po                                   |  935 ++---
 josm-latest.jnlp                                   |    2 +-
 josm.jnlp                                          |    2 +-
 linux/latest/usr/bin/josm-latest                   |    4 +-
 linux/tested/usr/bin/josm                          |    4 +-
 netbeans/nbproject/project.properties              |    4 +-
 scripts/TagInfoExtract.groovy                      |    6 +
 scripts/since_xxx.py                               |   47 +-
 src/gnu/getopt/Getopt.java                         |   23 +-
 src/org/apache/commons/jcs/JCS.java                |   61 +-
 .../commons/jcs/admin/servlet/JCSAdminServlet.java |  180 -
 .../jcs/admin/servlet/JCSAdminServletDefault.vm    |   64 -
 .../admin/servlet/JCSAdminServletRegionDetail.vm   |   50 -
 .../jcs/auxiliary/disk/block/BlockDisk.java        |   13 -
 .../disk/jdbc/JDBCDiskCacheAttributes.java         |   18 +-
 .../dsfactory/SharedPoolDataSourceFactory.java     |    9 +-
 .../remote/AbstractRemoteCacheNoWaitFacade.java    |   33 -
 .../auxiliary/remote/RemoteCacheNoWaitFacade.java  |   25 -
 .../remote/http/client/AbstractHttpClient.java     |  121 +-
 .../http/client/RemoteHttpCacheDispatcher.java     |  160 +-
 .../auxiliary/remote/server/RemoteCacheServer.java |   66 +-
 .../remote/server/RemoteCacheServerFactory.java    |   60 +-
 .../jcs/engine/AbstractCacheEventQueue.java        |   27 -
 .../jcs/engine/behavior/ICacheEventQueue.java      |    9 -
 .../util/DefaultMemoryElementDescriptor.java       |   45 -
 .../commons/jcs/utils/config/PropertySetter.java   |   19 +-
 .../jcs/utils/threadpool/ThreadPoolManager.java    |   29 +-
 src/org/openstreetmap/josm/CLIModule.java          |   27 +
 src/org/openstreetmap/josm/Main.java               |   77 +-
 .../openstreetmap/josm/actions/AddNodeAction.java  |    6 +-
 .../josm/actions/AutoScaleAction.java              |    7 +-
 .../josm/actions/CreateCircleAction.java           |   51 +-
 .../josm/actions/CreateMultipolygonAction.java     |   12 +-
 .../openstreetmap/josm/actions/DeleteAction.java   |   93 +
 .../josm/actions/DialogsToggleAction.java          |   22 +-
 .../josm/actions/FollowLineAction.java             |   14 +-
 .../josm/actions/FullscreenToggleAction.java       |    7 +-
 .../josm/actions/JoinAreasAction.java              |   28 +-
 .../josm/actions/JoinNodeWayAction.java            |   21 +-
 src/org/openstreetmap/josm/actions/JosmAction.java |   55 +
 .../openstreetmap/josm/actions/JumpToAction.java   |    3 +-
 .../josm/actions/MapRectifierWMSmenuAction.java    |    4 +-
 .../josm/actions/MergeNodesAction.java             |    3 +-
 src/org/openstreetmap/josm/actions/MoveAction.java |    2 +-
 .../openstreetmap/josm/actions/OpenFileAction.java |    8 +-
 .../josm/actions/OpenLocationAction.java           |    5 +-
 .../josm/actions/PreferenceToggleAction.java       |    8 +-
 .../openstreetmap/josm/actions/PurgeAction.java    |    7 +-
 src/org/openstreetmap/josm/actions/RedoAction.java |    4 +-
 .../josm/actions/RenameLayerAction.java            |    5 +-
 .../openstreetmap/josm/actions/RestartAction.java  |    3 +-
 .../josm/actions/ReverseWayAction.java             |    6 +-
 .../openstreetmap/josm/actions/SaveActionBase.java |    8 +-
 .../openstreetmap/josm/actions/SaveAsAction.java   |    2 +-
 .../josm/actions/SearchNotesDownloadAction.java    |    9 +-
 .../josm/actions/ShowStatusReportAction.java       |   11 +-
 .../josm/actions/SimplifyWayAction.java            |    5 +-
 .../openstreetmap/josm/actions/SplitWayAction.java |  404 +--
 .../TaggingPresetSearchAction.java                 |    5 +-
 .../openstreetmap/josm/actions/UnGlueAction.java   |    8 +-
 src/org/openstreetmap/josm/actions/UndoAction.java |    4 +-
 .../josm/actions/UploadSelectionAction.java        |   10 +-
 .../josm/actions/audio/AudioBackAction.java        |    4 +-
 .../josm/actions/audio/AudioFastSlowAction.java    |    4 +-
 .../josm/actions/audio/AudioFwdAction.java         |    4 +-
 .../actions/downloadtasks/ChangesetQueryTask.java  |    8 +-
 .../actions/downloadtasks/DownloadGpsTask.java     |    4 +-
 .../actions/downloadtasks/DownloadSessionTask.java |    4 +-
 .../josm/actions/mapmode/DeleteAction.java         |   23 +-
 .../josm/actions/mapmode/DrawAction.java           |   13 +-
 .../josm/actions/mapmode/DrawSnapHelper.java       |    5 +-
 .../josm/actions/mapmode/ExtrudeAction.java        |   48 +-
 .../actions/mapmode/ImproveWayAccuracyAction.java  |    9 +-
 .../josm/actions/mapmode/MapMode.java              |   14 +-
 .../josm/actions/mapmode/ParallelWays.java         |    7 +-
 .../josm/actions/mapmode/SelectAction.java         |   34 +-
 .../josm/actions/relation/EditRelationAction.java  |    3 +-
 .../actions/relation/RecentRelationsAction.java    |    2 +-
 .../josm/actions/search/SearchAction.java          |   24 +-
 .../josm/actions/upload/FixDataHook.java           |    4 +-
 src/org/openstreetmap/josm/command/AddCommand.java |    4 +
 .../josm/command/AddPrimitivesCommand.java         |   28 +
 .../openstreetmap/josm/command/ChangeCommand.java  |   10 +-
 .../josm/command/ChangeNodesCommand.java           |   13 +
 .../josm/command/ChangePropertyCommand.java        |   36 +-
 .../josm/command/ChangePropertyKeyCommand.java     |   22 +-
 .../command/ChangeRelationMemberRoleCommand.java   |    8 +-
 src/org/openstreetmap/josm/command/Command.java    |   78 +-
 .../openstreetmap/josm/command/DeleteCommand.java  |  279 +-
 .../openstreetmap/josm/command/MoveCommand.java    |   66 +-
 .../openstreetmap/josm/command/PurgeCommand.java   |   24 +-
 .../josm/command/RemoveNodesCommand.java           |    3 +-
 .../openstreetmap/josm/command/SelectCommand.java  |    2 +
 .../josm/command/SequenceCommand.java              |   25 +-
 .../josm/command/SplitWayCommand.java              |  472 +++
 .../josm/command/TransformNodesCommand.java        |   11 +-
 .../josm/command/conflict/ConflictAddCommand.java  |   12 +-
 .../command/conflict/ConflictResolveCommand.java   |   31 +-
 .../conflict/CoordinateConflictResolveCommand.java |    1 +
 .../DeletedStateConflictResolveCommand.java        |    1 +
 .../conflict/ModifiedConflictResolveCommand.java   |    1 +
 .../RelationMemberConflictResolverCommand.java     |   13 +-
 .../conflict/TagConflictResolveCommand.java        |    1 +
 .../conflict/VersionConflictResolveCommand.java    |    1 +
 .../conflict/WayNodesConflictResolverCommand.java  |    1 +
 src/org/openstreetmap/josm/data/APIDataSet.java    |    7 +-
 src/org/openstreetmap/josm/data/Bounds.java        |    2 +
 src/org/openstreetmap/josm/data/Preferences.java   |  619 ++--
 .../openstreetmap/josm/data/PreferencesUtils.java  |  188 +-
 .../openstreetmap/josm/data/ProjectionBounds.java  |   17 +
 src/org/openstreetmap/josm/data/StructUtils.java   |  331 ++
 .../josm/data/SystemOfMeasurement.java             |    8 +-
 .../openstreetmap/josm/data/UndoRedoHandler.java   |   64 +-
 .../UserIdentityManager.java}                      |   38 +-
 .../josm/data/cache/CacheEntryAttributes.java      |    7 +-
 .../josm/data/cache/HostLimitQueue.java            |    6 +-
 .../josm/data/cache/JCSCacheManager.java           |   53 +-
 .../josm/data/cache/JCSCachedTileLoaderJob.java    |   45 +-
 .../openstreetmap/josm/data/coor/Coordinate.java   |    2 +
 .../josm/data/coor/CoordinateFormat.java           |   31 +-
 src/org/openstreetmap/josm/data/coor/ILatLon.java  |    4 +-
 src/org/openstreetmap/josm/data/coor/LatLon.java   |  262 +-
 .../coor/conversion/AbstractCoordinateFormat.java  |   58 +
 .../coor/conversion/CoordinateFormatManager.java   |   80 +
 .../data/coor/conversion/DMSCoordinateFormat.java  |   72 +
 .../conversion/DecimalDegreesCoordinateFormat.java |   32 +
 .../data/coor/conversion/ICoordinateFormat.java    |   37 +
 .../josm/data/coor/conversion/LatLonParser.java    |  235 ++
 .../coor/conversion/NauticalCoordinateFormat.java  |   62 +
 .../coor/conversion/ProjectedCoordinateFormat.java |   34 +
 src/org/openstreetmap/josm/data/gpx/GpxData.java   |   12 +-
 .../josm/data/imagery/CachedTileLoaderFactory.java |    8 +-
 .../josm/data/imagery/ImageryInfo.java             |   70 +-
 .../josm/data/imagery/ImageryLayerInfo.java        |   13 +-
 .../josm/data/imagery/OffsetBookmark.java          |   29 +-
 .../josm/data/imagery/TMSCachedTileLoaderJob.java  |   22 +-
 .../josm/data/oauth/OAuthAccessTokenHolder.java    |    2 +-
 src/org/openstreetmap/josm/data/osm/Changeset.java |    5 +-
 .../josm/data/osm/ChangesetCache.java              |   31 +-
 src/org/openstreetmap/josm/data/osm/DataSet.java   |   51 +-
 .../josm/data/osm/DefaultNameFormatter.java        |   32 +-
 src/org/openstreetmap/josm/data/osm/Filter.java    |   32 +-
 .../openstreetmap/josm/data/osm/FilterMatcher.java |    4 +-
 .../openstreetmap/josm/data/osm/FilterModel.java   |    7 +-
 src/org/openstreetmap/josm/data/osm/Node.java      |   34 +-
 src/org/openstreetmap/josm/data/osm/NodeData.java  |   10 +-
 src/org/openstreetmap/josm/data/osm/NoteData.java  |   13 +-
 .../openstreetmap/josm/data/osm/OsmPrimitive.java  |   40 +-
 src/org/openstreetmap/josm/data/osm/Relation.java  |   17 +-
 .../josm/data/osm/RelationMemberData.java          |    4 +-
 src/org/openstreetmap/josm/data/osm/User.java      |    7 +-
 src/org/openstreetmap/josm/data/osm/Way.java       |   32 +-
 .../josm/data/osm/history/HistoryDataSet.java      |    5 +-
 .../josm/data/osm/visitor/AbstractVisitor.java     |    2 +
 .../josm/data/osm/visitor/AllNodesVisitor.java     |    2 +-
 .../josm/data/osm/visitor/BoundingXYVisitor.java   |   24 +-
 .../osm/visitor/MergeSourceBuildingVisitor.java    |    2 +-
 .../{Visitor.java => OsmPrimitiveVisitor.java}     |   15 +-
 .../josm/data/osm/visitor/Visitor.java             |   27 +-
 .../osm/visitor/paint/AbstractMapRenderer.java     |    8 +-
 .../osm/visitor/paint/ComputeStyleListWorker.java  |   18 +-
 .../data/osm/visitor/paint/MapPaintSettings.java   |   46 +-
 .../data/osm/visitor/paint/MapRendererFactory.java |    6 +-
 .../visitor/paint/RenderBenchmarkCollector.java    |    4 +-
 .../data/osm/visitor/paint/StyledMapRenderer.java  |   17 +-
 .../osm/visitor/paint/WireframeMapRenderer.java    |   16 +-
 .../osm/visitor/paint/relations/Multipolygon.java  |   19 +-
 .../josm/data/preferences/AbstractProperty.java    |    4 +-
 .../data/preferences/AbstractToStringProperty.java |    2 +-
 .../josm/data/preferences/CachedProperty.java      |   16 +-
 .../josm/data/preferences/CollectionProperty.java  |    2 +
 .../josm/data/preferences/ListProperty.java        |   34 +
 .../data/preferences/ParametrizedEnumProperty.java |    6 +-
 .../josm/data/preferences/PreferencesReader.java   |    5 +
 .../josm/data/preferences/PreferencesWriter.java   |    6 +
 .../preferences/sources/ExtendedSourceEntry.java   |    6 +-
 .../preferences/sources/MapPaintPrefHelper.java    |   15 +-
 .../data/preferences/sources/PresetPrefHelper.java |    6 +-
 .../josm/data/preferences/sources/SourceEntry.java |   18 +-
 .../data/preferences/sources/SourcePrefHelper.java |   20 +-
 .../preferences/sources/ValidatorPrefHelper.java   |    8 +-
 .../josm/data/projection/AbstractProjection.java   |   56 +-
 .../josm/data/projection/CustomProjection.java     |   50 +-
 .../josm/data/projection/Projection.java           |   13 +
 .../josm/data/projection/ProjectionCLI.java        |  209 ++
 .../josm/data/projection/Projections.java          |   67 +-
 .../projection/datum/NTV2GridShiftFileSource.java  |   19 +
 .../projection/datum/NTV2GridShiftFileWrapper.java |   59 +-
 .../datum/NTV2Proj4DirGridShiftFileSource.java     |   88 +
 .../tagging/ac/AutoCompletionItem.java}            |   42 +-
 .../tagging/ac/AutoCompletionPriority.java}        |   48 +-
 .../josm/data/tagging/ac/AutoCompletionSet.java    |   87 +
 .../{gui => data}/tagging/ac/package-info.java     |    2 +-
 .../josm/data/validation/OsmValidator.java         |    5 +-
 .../openstreetmap/josm/data/validation/Test.java   |    9 +-
 .../data/validation/routines/DomainValidator.java  |    1 -
 .../josm/data/validation/tests/Addresses.java      |    4 +-
 .../josm/data/validation/tests/CrossingWays.java   |    8 +-
 .../josm/data/validation/tests/DuplicateNode.java  |    4 +-
 .../josm/data/validation/tests/Highways.java       |    3 +-
 .../josm/data/validation/tests/LongSegment.java    |    4 +-
 .../data/validation/tests/MapCSSTagChecker.java    |   28 +-
 .../data/validation/tests/MultipolygonTest.java    |    2 +-
 .../data/validation/tests/OverlappingWays.java     |    4 +-
 .../data/validation/tests/RelationChecker.java     |    8 +-
 .../josm/data/validation/tests/TagChecker.java     |   63 +-
 .../data/validation/tests/UnconnectedWays.java     |    7 +-
 .../util/AggregatePrimitivesVisitor.java           |    4 +-
 .../josm/data/validation/util/NameVisitor.java     |    4 +-
 .../josm/data/validation/util/ValUtil.java         |   28 +-
 .../josm/gui/ConditionalOptionPaneUtil.java        |   11 +-
 src/org/openstreetmap/josm/gui/GettingStarted.java |   15 +-
 .../openstreetmap/josm/gui/IconToggleButton.java   |   10 +-
 .../josm/gui/JosmUserIdentityManager.java          |  159 +-
 .../openstreetmap/josm/gui/MainApplication.java    |  299 +-
 src/org/openstreetmap/josm/gui/MainFrame.java      |    4 +-
 src/org/openstreetmap/josm/gui/MainMenu.java       |    7 +-
 src/org/openstreetmap/josm/gui/MapFrame.java       |   28 +-
 src/org/openstreetmap/josm/gui/MapMover.java       |    7 +-
 src/org/openstreetmap/josm/gui/MapStatus.java      |   57 +-
 src/org/openstreetmap/josm/gui/MapView.java        |   68 +-
 src/org/openstreetmap/josm/gui/MapViewState.java   |    6 +-
 .../josm/gui/NavigatableComponent.java             |   49 +-
 src/org/openstreetmap/josm/gui/Notification.java   |   10 +-
 .../openstreetmap/josm/gui/PleaseWaitDialog.java   |    6 +-
 .../openstreetmap/josm/gui/PleaseWaitRunnable.java |    2 +-
 .../openstreetmap/josm/gui/ProgramArguments.java   |    5 +-
 src/org/openstreetmap/josm/gui/ScrollViewport.java |   11 +-
 .../josm/gui/autofilter/AutoFilterManager.java     |    8 +-
 .../josm/gui/bbox/SlippyMapBBoxChooser.java        |    7 +-
 .../josm/gui/bugreport/BugReportDialog.java        |   30 +
 .../josm/gui/bugreport/DebugTextDisplay.java       |    5 +-
 .../tags/RelationMemberConflictResolver.java       |    5 +-
 .../conflict/tags/TagConflictResolutionUtil.java   |   38 +-
 .../gui/conflict/tags/TagConflictResolver.java     |   12 +-
 .../datatransfer/data/PrimitiveTransferData.java   |    2 +-
 .../importers/PrimitiveDataPaster.java             |    4 +-
 .../importers/PrimitiveTagTransferPaster.java      |   12 +-
 .../josm/gui/dialogs/ChangesetDialog.java          |    5 +-
 .../josm/gui/dialogs/CommandStackDialog.java       |   11 +-
 .../josm/gui/dialogs/ConflictDialog.java           |    7 +-
 .../josm/gui/dialogs/FilterDialog.java             |    4 +-
 .../josm/gui/dialogs/InspectPrimitiveDataText.java |   28 +-
 .../josm/gui/dialogs/LatLonDialog.java             |    9 +-
 .../josm/gui/dialogs/LayerListDialog.java          |   12 +-
 .../josm/gui/dialogs/MapPaintDialog.java           |    3 +-
 .../josm/gui/dialogs/NotesDialog.java              |   15 +-
 .../josm/gui/dialogs/OsmIdSelectionDialog.java     |   14 +-
 .../josm/gui/dialogs/RelationListDialog.java       |    8 +-
 .../josm/gui/dialogs/SelectionListDialog.java      |   28 +-
 .../josm/gui/dialogs/ToggleDialog.java             |   23 +-
 .../josm/gui/dialogs/ValidatorDialog.java          |    5 +-
 .../dialogs/changeset/ChangesetCacheManager.java   |    4 +-
 .../changeset/ChangesetCacheManagerModel.java      |    8 +-
 .../dialogs/changeset/ChangesetDetailPanel.java    |   30 +
 .../gui/dialogs/changeset/ChangesetListModel.java  |    7 +-
 .../changeset/SingleChangesetDownloadPanel.java    |    3 +-
 .../query/AdvancedChangesetQueryPanel.java         |   18 +-
 .../changeset/query/BasicChangesetQueryPanel.java  |   18 +-
 .../query/OpenAndCloseStateRestrictionPanel.java   |   10 +-
 .../changeset/query/TimeRestrictionPanel.java      |   32 +-
 .../changeset/query/UserRestrictionPanel.java      |   26 +-
 .../gui/dialogs/layer/ActivateLayerAction.java     |    2 +-
 .../gui/dialogs/layer/ShowHideLayerAction.java     |    2 +-
 .../gui/dialogs/properties/PropertiesDialog.java   |   21 +-
 .../dialogs/properties/RecentTagCollection.java    |    8 +-
 .../josm/gui/dialogs/properties/TagEditHelper.java |   46 +-
 .../dialogs/relation/GenericRelationEditor.java    |    6 +-
 .../gui/dialogs/relation/MemberRoleCellEditor.java |    3 +-
 .../josm/gui/dialogs/relation/MemberTable.java     |    3 +-
 .../relation/ParentRelationLoadingTask.java        |    2 +-
 .../actions/AbstractRelationEditorAction.java      |    2 +-
 .../relation/actions/AddFromSelectionAction.java   |    2 +-
 .../gui/dialogs/relation/actions/CancelAction.java |    5 +-
 .../gui/dialogs/relation/actions/OKAction.java     |    6 +-
 .../dialogs/relation/actions/RefreshAction.java    |    2 +-
 .../gui/dialogs/relation/actions/SavingAction.java |   11 +-
 .../gui/dialogs/relation/sort/RelationNodeMap.java |   50 +-
 .../gui/dialogs/relation/sort/RelationSorter.java  |    9 +-
 .../josm/gui/download/BookmarkList.java            |   14 +-
 .../josm/gui/download/BookmarkSelection.java       |    4 +-
 .../josm/gui/download/BoundingBoxSelection.java    |   10 +-
 .../josm/gui/download/DownloadDialog.java          |   42 +-
 .../josm/gui/download/DownloadObjectDialog.java    |   13 +-
 .../josm/gui/download/DownloadSettings.java        |    4 +-
 .../josm/gui/download/DownloadSource.java          |    4 +-
 .../josm/gui/download/DownloadSourceListener.java  |   15 +
 .../josm/gui/download/OSMDownloadSource.java       |   16 +-
 .../josm/gui/download/OverpassDownloadSource.java  |   59 +-
 .../gui/download/OverpassQueryWizardDialog.java    |   14 +-
 .../josm/gui/download/PlaceSelection.java          |    9 +-
 .../{OverpassQueryList.java => UserQueryList.java} |   40 +-
 src/org/openstreetmap/josm/gui/help/HelpUtil.java  |    5 +-
 .../josm/gui/history/CoordinateInfoViewer.java     |    6 +-
 .../josm/gui/history/HistoryBrowserModel.java      |    8 +-
 .../josm/gui/history/HistoryLoadTask.java          |    4 +-
 .../josm/gui/history/OpenChangesetPopupMenu.java   |  101 +
 .../josm/gui/history/VersionInfoPanel.java         |   18 +-
 .../josm/gui/history/VersionTable.java             |    3 +-
 .../josm/gui/io/ActionFlagsTableCell.java          |    4 +-
 .../josm/gui/io/BasicUploadSettingsPanel.java      |   42 +-
 .../josm/gui/io/ChangesetManagementPanel.java      |    8 +-
 .../josm/gui/io/ChangesetReviewModel.java          |   35 +
 .../josm/gui/io/CredentialDialog.java              |   45 +-
 .../josm/gui/io/CustomConfigurator.java            |   93 +-
 .../josm/gui/io/DownloadOpenChangesetsTask.java    |    8 +-
 .../josm/gui/io/OpenChangesetComboBoxModel.java    |    3 +-
 .../josm/gui/io/RecentlyOpenedFilesMenu.java       |    6 +-
 .../josm/gui/io/TagSettingsPanel.java              |   35 +-
 .../openstreetmap/josm/gui/io/UploadDialog.java    |   22 +-
 .../josm/gui/io/UploadStrategySelectionPanel.java  |    6 +-
 .../josm/gui/io/importexport/GeoJSONExporter.java  |    2 +-
 .../josm/gui/io/importexport/GpxExporter.java      |   17 +-
 .../josm/gui/io/importexport/GpxImporter.java      |    8 +-
 .../josm/gui/io/importexport/NMEAImporter.java     |    3 +-
 .../josm/gui/io/importexport/OsmExporter.java      |    5 +-
 .../josm/gui/io/importexport/WMSLayerExporter.java |    4 +-
 .../josm/gui/io/importexport/WMSLayerImporter.java |    4 +-
 .../josm/gui/layer/AbstractTileSourceLayer.java    |  152 +-
 .../openstreetmap/josm/gui/layer/AutosaveTask.java |    8 +-
 .../openstreetmap/josm/gui/layer/ImageryLayer.java |    1 +
 .../josm/gui/layer/JumpToMarkerActions.java        |    4 +-
 src/org/openstreetmap/josm/gui/layer/Layer.java    |    3 +-
 .../openstreetmap/josm/gui/layer/NoteLayer.java    |    4 +-
 .../openstreetmap/josm/gui/layer/OsmDataLayer.java |   37 +-
 .../josm/gui/layer/ValidatorLayer.java             |    2 +-
 .../gui/layer/geoimage/CorrelateGpxWithImages.java |   17 +-
 .../josm/gui/layer/geoimage/ImageDisplay.java      |    4 +-
 .../josm/gui/layer/geoimage/ThumbsLoader.java      |    6 +-
 .../gui/layer/gpx/ConvertToDataLayerAction.java    |    3 +-
 .../josm/gui/layer/gpx/DateFilterPanel.java        |   14 +-
 .../josm/gui/layer/gpx/DownloadAlongPanel.java     |   17 +-
 .../josm/gui/layer/gpx/GpxDrawHelper.java          |   75 +-
 .../josm/gui/layer/gpx/ImportAudioAction.java      |   17 +-
 .../josm/gui/layer/gpx/ImportImagesAction.java     |    3 +-
 .../gui/layer/imagery/ColorfulImageProcessor.java  |    2 +-
 .../gui/layer/imagery/GammaImageProcessor.java     |    2 +-
 .../gui/layer/imagery/ImageryFilterSettings.java   |    2 +-
 .../josm/gui/layer/imagery/ReprojectionTile.java   |    5 +-
 .../gui/layer/imagery/SharpenImageProcessor.java   |    2 +-
 .../layer/imagery/TileSourceDisplaySettings.java   |    7 +-
 .../josm/gui/layer/markerlayer/ButtonMarker.java   |    8 +-
 .../josm/gui/layer/markerlayer/Marker.java         |   28 +-
 .../josm/gui/layer/markerlayer/MarkerLayer.java    |   13 +-
 .../josm/gui/layer/markerlayer/PlayHeadMarker.java |   21 +-
 .../layer}/validation/PaintVisitor.java            |    9 +-
 .../josm/gui/layer/validation/package-info.java    |    6 +
 .../josm/gui/mappaint/BooleanStyleSettingGui.java  |   41 +
 .../josm/gui/mappaint/ElemStyles.java              |   14 +-
 .../josm/gui/mappaint/MapPaintStyles.java          |    9 +-
 .../josm/gui/mappaint/RenderingCLI.java            |  649 ++++
 .../josm/gui/mappaint/StyleSetting.java            |   39 +-
 .../josm/gui/mappaint/StyleSettingGui.java         |   18 +
 .../josm/gui/mappaint/StyleSettingGuiFactory.java  |   32 +
 .../josm/gui/mappaint/StyleSource.java             |    3 +-
 .../gui/mappaint/loader/MapPaintStyleLoader.java   |   16 +
 .../gui/mappaint/mapcss/ExpressionFactory.java     |    4 +-
 .../gui/mappaint/mapcss/MapCSSStyleSource.java     |    2 +-
 .../josm/gui/mappaint/mapcss/Selector.java         |    8 +-
 .../gui/mappaint/styleelement/AreaElement.java     |   14 +-
 .../gui/mappaint/styleelement/AreaIconElement.java |    2 +-
 .../styleelement/LabelCompositionStrategy.java     |   12 +-
 .../josm/gui/mappaint/styleelement/MapImage.java   |   14 +-
 .../gui/mappaint/styleelement/NodeElement.java     |   15 +-
 .../gui/mappaint/styleelement/StyleElement.java    |    6 +-
 .../gui/oauth/AdvancedOAuthPropertiesPanel.java    |    2 +-
 .../josm/gui/oauth/OAuthAuthorizationWizard.java   |   29 +
 .../josm/gui/preferences/SourceEditor.java         |   11 +-
 .../josm/gui/preferences/ToolbarPreferences.java   |   23 +-
 .../preferences/advanced/AdvancedPreference.java   |   10 +-
 .../preferences/advanced/ExportProfileAction.java  |    2 +-
 .../josm/gui/preferences/advanced/ListEditor.java  |    2 +-
 .../gui/preferences/advanced/ListListEditor.java   |    2 +-
 .../gui/preferences/advanced/MapListEditor.java    |    2 +-
 .../josm/gui/preferences/advanced/PrefEntry.java   |    2 +-
 .../gui/preferences/advanced/PreferencesTable.java |   10 +-
 .../gui/preferences/advanced/StringEditor.java     |    2 +-
 .../gui/preferences/audio/AudioPreference.java     |   50 +-
 .../gui/preferences/display/ColorPreference.java   |    3 +-
 .../gui/preferences/display/DrawingPreference.java |   62 +-
 .../gui/preferences/display/GPXSettingsPanel.java  |  141 +-
 .../gui/preferences/display/LafPreference.java     |   19 +-
 .../preferences/display/LanguagePreference.java    |    8 +-
 .../gui/preferences/map/MapPaintPreference.java    |    7 +-
 .../preferences/map/TaggingPresetPreference.java   |    7 +-
 .../gui/preferences/plugin/PluginPreference.java   |    5 +-
 .../preferences/plugin/PluginPreferencesModel.java |    8 +-
 .../plugin/PluginUpdatePolicyPanel.java            |   28 +-
 .../projection/CustomProjectionChoice.java         |   12 +-
 .../projection/ProjectionPreference.java           |   52 +-
 .../remotecontrol/RemoteControlPreference.java     |   17 +-
 .../server/AuthenticationPreferencesPanel.java     |    3 +-
 .../preferences/server/OsmApiUrlInputPanel.java    |   10 +-
 .../server/OverpassServerPreference.java           |   31 +-
 .../preferences/server/ProxyPreferencesPanel.java  |   93 +-
 .../ValidatorTagCheckerRulesPreference.java        |    2 +-
 .../validator/ValidatorTestsPreference.java        |   10 +-
 .../josm/gui/tagging/TagEditorModel.java           |    6 +-
 .../josm/gui/tagging/TagEditorPanel.java           |    2 +-
 .../gui/tagging/ac/AutoCompletingComboBox.java     |   64 +-
 .../gui/tagging/ac/AutoCompletingTextField.java    |    6 +-
 .../gui/tagging/ac/AutoCompletionItemPriority.java |   78 +-
 .../josm/gui/tagging/ac/AutoCompletionList.java    |  202 +-
 .../gui/tagging/ac/AutoCompletionListItem.java     |   82 +-
 .../josm/gui/tagging/ac/AutoCompletionManager.java |  169 +-
 .../josm/gui/tagging/ac/package-info.java          |    2 +-
 .../josm/gui/tagging/presets/TaggingPreset.java    |    3 +-
 .../gui/tagging/presets/TaggingPresetItem.java     |   13 +-
 .../josm/gui/tagging/presets/TaggingPresets.java   |    6 +-
 .../josm/gui/tagging/presets/items/Check.java      |    2 +-
 .../josm/gui/tagging/presets/items/Combo.java      |    8 +-
 .../tagging/presets/items/ComboMultiSelect.java    |    4 +-
 .../josm/gui/tagging/presets/items/Roles.java      |    2 +-
 .../josm/gui/tagging/presets/items/Text.java       |    4 +-
 src/org/openstreetmap/josm/gui/util/GuiHelper.java |    3 +
 .../{tools => gui/util}/MultiLineFlowLayout.java   |    2 +-
 .../util}/MultikeyActionsHandler.java              |   15 +-
 .../util}/MultikeyShortcutAction.java              |    8 +-
 .../josm/gui/util/WindowGeometry.java              |    5 +-
 .../gui/widgets/BoundingBoxSelectionPanel.java     |   10 +-
 .../josm/gui/widgets/ButtonColumn.java             |    1 -
 .../josm/gui/widgets/ComboBoxHistory.java          |   18 +-
 .../gui/widgets/CompileSearchTextDecorator.java    |    2 +-
 .../josm/gui/widgets/FileChooserManager.java       |    7 +-
 .../josm/gui/widgets/HistoryComboBox.java          |    4 +-
 .../josm/gui/widgets/MultiSplitLayout.java         |    9 +-
 .../josm/gui/widgets/QuadStateCheckBox.java        |   13 +-
 .../josm/gui/widgets/TextContextualPopupMenu.java  |    4 +-
 .../openstreetmap/josm/io/CacheCustomContent.java  |    8 +-
 src/org/openstreetmap/josm/io/CachedFile.java      |   17 +-
 .../josm/io/CertificateAmendment.java              |    3 +-
 src/org/openstreetmap/josm/io/ChangesetQuery.java  |    4 +-
 src/org/openstreetmap/josm/io/Compression.java     |   59 +-
 .../josm/io/DefaultProxySelector.java              |   37 +-
 src/org/openstreetmap/josm/io/FileWatcher.java     |   86 +-
 src/org/openstreetmap/josm/io/GeoJSONWriter.java   |   27 +-
 src/org/openstreetmap/josm/io/MessageNotifier.java |   55 +-
 .../josm/io/MultiFetchOverpassObjectReader.java    |    3 +-
 .../josm/io/MultiFetchServerObjectReader.java      |    9 +-
 src/org/openstreetmap/josm/io/OsmApi.java          |   63 +-
 src/org/openstreetmap/josm/io/OsmConnection.java   |   57 +-
 .../josm/io/OsmServerBackreferenceReader.java      |    2 +-
 .../josm/io/OsmServerObjectReader.java             |    2 +-
 src/org/openstreetmap/josm/io/OsmServerWriter.java |    4 +-
 src/org/openstreetmap/josm/io/OsmWriter.java       |   39 +-
 .../josm/io/OverpassDownloadReader.java            |  137 +-
 src/org/openstreetmap/josm/io/ProxyPolicy.java     |   48 +
 src/org/openstreetmap/josm/io/UploadStrategy.java  |   11 +-
 .../openstreetmap/josm/io/audio/AudioPlayer.java   |   15 +-
 src/org/openstreetmap/josm/io/audio/AudioUtil.java |    3 +-
 .../josm/io/audio/JavaFxMediaPlayer.java           |    9 +-
 .../josm/io/auth/AbstractCredentialsAgent.java     |   58 +-
 .../josm/io/auth/CredentialsManager.java           |    4 +-
 .../io/auth/JosmPreferencesCredentialAgent.java    |   48 +-
 .../remotecontrol/PermissionPrefWithDefault.java   |    4 +-
 .../josm/io/remotecontrol/RemoteControl.java       |    8 +-
 .../io/remotecontrol/RemoteControlHttpServer.java  |    4 +-
 .../io/remotecontrol/RemoteControlHttpsServer.java |    3 +-
 .../io/remotecontrol/handler/AddNodeHandler.java   |   10 +-
 .../io/remotecontrol/handler/AddWayHandler.java    |   13 +-
 .../io/remotecontrol/handler/ImportHandler.java    |    5 +-
 .../remotecontrol/handler/LoadAndZoomHandler.java  |    2 +-
 .../io/remotecontrol/handler/RequestHandler.java   |    8 +-
 .../josm/io/session/ImagerySessionExporter.java    |    4 +-
 .../josm/io/session/ImagerySessionImporter.java    |    4 +-
 .../josm/io/session/OsmDataSessionExporter.java    |    2 +-
 .../josm/io/session/SessionWriter.java             |    3 +-
 .../josm/plugins/PluginClassLoader.java            |   47 +-
 .../josm/plugins/PluginDownloadTask.java           |   20 +-
 .../openstreetmap/josm/plugins/PluginHandler.java  |   56 +-
 .../plugins/ReadRemotePluginInformationTask.java   |   35 +-
 src/org/openstreetmap/josm/spi/package-info.java   |   18 +
 .../josm/spi/preferences/AbstractPreferences.java  |  144 +
 .../{data => spi}/preferences/AbstractSetting.java |    4 +-
 .../openstreetmap/josm/spi/preferences/Config.java |   55 +
 .../preferences/DefaultPreferenceChangeEvent.java  |   35 +
 .../josm/spi/preferences/IBaseDirectories.java     |   42 +
 .../josm/spi/preferences/IPreferences.java         |  236 ++
 .../{data => spi}/preferences/ListListSetting.java |    4 +-
 .../{data => spi}/preferences/ListSetting.java     |    4 +-
 .../{data => spi}/preferences/MapListSetting.java  |    4 +-
 .../josm/spi/preferences/MemoryPreferences.java    |   62 +
 .../spi/preferences/PreferenceChangeEvent.java     |   28 +
 .../spi/preferences/PreferenceChangedListener.java |   17 +
 .../josm/{data => spi}/preferences/Setting.java    |    8 +-
 .../{data => spi}/preferences/SettingVisitor.java  |    4 +-
 .../{data => spi}/preferences/StringSetting.java   |    4 +-
 .../josm/spi/preferences/package-info.java         |    6 +
 .../josm/tools/AlphanumComparator.java             |   29 +-
 .../josm/tools/CheckParameterUtil.java             |   71 +
 src/org/openstreetmap/josm/tools/Diff.java         |    2 +-
 src/org/openstreetmap/josm/tools/Geometry.java     |   58 +-
 .../openstreetmap/josm/tools/GuiSizesHelper.java   |    4 +-
 src/org/openstreetmap/josm/tools/HiDPISupport.java |  266 ++
 src/org/openstreetmap/josm/tools/HttpClient.java   |    7 +-
 src/org/openstreetmap/josm/tools/ImageOverlay.java |    6 +-
 .../josm/{gui/layer => tools}/ImageProcessor.java  |    7 +-
 .../openstreetmap/josm/tools/ImageProvider.java    |  211 +-
 .../openstreetmap/josm/tools/ImageResource.java    |  162 +-
 src/org/openstreetmap/josm/tools/ImageWarp.java    |   14 +-
 .../josm/tools/ListenableWeakReference.java        |    3 +-
 src/org/openstreetmap/josm/tools/ListenerList.java |    2 +-
 src/org/openstreetmap/josm/tools/Logging.java      |   12 +
 src/org/openstreetmap/josm/tools/MultiMap.java     |   14 +-
 .../openstreetmap/josm/tools/OsmUrlToBounds.java   |   25 +-
 src/org/openstreetmap/josm/tools/Platform.java     |   76 +
 src/org/openstreetmap/josm/tools/PlatformHook.java |   52 +-
 .../openstreetmap/josm/tools/PlatformHookOsx.java  |   16 +-
 .../josm/tools/PlatformHookUnixoid.java            |   63 +-
 .../josm/tools/PlatformHookWindows.java            |   86 +-
 .../openstreetmap/josm/tools/PlatformVisitor.java  |   27 +
 .../josm/tools/RightAndLefthandTraffic.java        |    9 +-
 .../josm/{gui/util => tools}/RotationAngle.java    |    6 +-
 src/org/openstreetmap/josm/tools/Shortcut.java     |   12 +-
 .../openstreetmap/josm/tools/TextTagParser.java    |    8 +-
 src/org/openstreetmap/josm/tools/Utils.java        |   58 +-
 src/org/openstreetmap/josm/tools/WikiReader.java   |    3 +-
 src/org/openstreetmap/josm/tools/WinRegistry.java  |    2 +-
 .../josm/tools/bugreport/BugReport.java            |    9 +-
 .../josm/tools/bugreport/BugReportQueue.java       |   48 +-
 .../josm/tools/bugreport/BugReportSender.java      |   89 +-
 .../template_engine/CompoundTemplateEntry.java     |    2 +-
 .../openstreetmap/josm/data/BoundariesTestIT.java  |   11 +
 .../josm/data/imagery/ImageryCompareTestIT.java    |   11 +
 .../openstreetmap/josm/data/osm/TaginfoTestIT.java |   17 +-
 .../josm/gui/mappaint/MapCSSRendererTest.java      |    3 +-
 .../josm/io/MultiFetchServerObjectReaderTest.java  |    6 +-
 .../josm/io/OsmServerBackreferenceReaderTest.java  |    5 +-
 .../josm/io/OsmServerHistoryReaderTest.java        |    4 +-
 .../openstreetmap/josm/tools/HttpClientTest.java   |    2 +-
 .../gui/mappaint/MapRendererPerformanceTest.java   |    4 +-
 .../gui/mappaint/mapcss/MapCSSPerformanceTest.java |    2 +
 test/unit/org/CustomMatchers.java                  |  109 +
 test/unit/org/openstreetmap/josm/JOSMFixture.java  |   17 +-
 test/unit/org/openstreetmap/josm/TestUtils.java    |    6 +-
 .../josm/actions/CreateMultipolygonActionTest.java |   43 +-
 .../josm/actions/JoinAreasActionTest.java          |    4 +-
 .../josm/actions/MergeNodesActionTest.java         |   10 +-
 .../josm/actions/SplitWayActionTest.java           |  117 -
 .../josm/actions/mapmode/SelectActionTest.java     |    4 +-
 .../josm/actions/upload/FixDataHookTest.java       |    7 +-
 .../openstreetmap/josm/command/AddCommandTest.java |   46 +-
 .../josm/command/AddPrimitivesCommandTest.java     |  131 +-
 .../josm/command/ChangeCommandTest.java            |    7 +-
 .../josm/command/ChangeNodesCommandTest.java       |    4 +-
 .../josm/command/ChangePropertyCommandTest.java    |    5 +-
 .../openstreetmap/josm/command/CommandTest.java    |   65 -
 .../josm/command/DeleteCommandTest.java            |   33 +-
 .../josm/command/MoveCommandTest.java              |    2 +-
 .../josm/command/PurgeCommandTest.java             |   12 +-
 .../josm/command/RotateCommandTest.java            |    2 +
 .../josm/command/ScaleCommandTest.java             |    2 +
 .../josm/command/SelectCommandTest.java            |   19 +-
 .../josm/command/SequenceCommandTest.java          |   63 +-
 .../SplitWayCommandTest.java}                      |  367 +-
 .../command/conflict/ConflictAddCommandTest.java   |   26 +-
 .../CoordinateConflictResolveCommandTest.java      |   20 +-
 .../josm/data/PreferencesUtilsTest.java            |   56 +
 .../UserIdentityManagerTest.java}                  |  144 +-
 .../openstreetmap/josm/data/coor/LatLonTest.java   |   65 -
 .../coor/conversion/ICoordinateFormatTest.java     |   47 +
 .../data/coor/conversion/LatLonParserTest.java     |   69 +
 .../openstreetmap/josm/data/gpx/GpxDataTest.java   |    8 +-
 .../josm/data/imagery/ImageryInfoTest.java         |   14 +-
 .../josm/data/osm/ChangesetCacheTest.java          |  150 +-
 .../openstreetmap/josm/data/osm/ChangesetTest.java |   36 -
 .../josm/data/osm/DataSetMergerTest.java           |    1 -
 .../org/openstreetmap/josm/data/osm/UserTest.java  |   24 +-
 .../visitor/MergeSourceBuildingVisitorTest.java    |    9 -
 .../josm/data/preferences/ColorPropertyTest.java   |    6 +-
 .../data/preferences/PreferencesWriterTest.java    |    6 +
 .../josm/data/preferences/StrokePropertyTest.java  |   14 +-
 .../josm/data/projection/ProjectionRefTest.java    |    2 +-
 .../josm/data/projection/SwissGridTest.java        |    2 +-
 .../tagging/ac/AutoCompletionPriorityTest.java     |  127 +
 .../validation/tests/MapCSSTagCheckerTest.java     |   10 +-
 .../josm/gui/MainApplicationTest.java              |   11 +-
 .../bugreport/BugReportSettingsPanelTest.java      |    4 +-
 .../bugreport/DebugTextDisplayTest.java            |    3 +-
 .../gui/conflict/pair/ConflictResolverTest.java    |    8 +-
 .../gui/datatransfer/OsmTransferHandlerTest.java   |    1 +
 .../josm/gui/dialogs/CommandStackDialogTest.java   |    7 +-
 .../properties/RecentTagCollectionTest.java        |    4 +-
 .../gui/dialogs/properties/TagEditHelperTest.java  |   18 +-
 .../relation/GenericRelationEditorTest.java        |   14 +-
 .../josm/gui/io/BasicUploadSettingsPanelTest.java  |    2 +-
 .../josm/gui/io/CustomConfiguratorTest.java        |   59 +-
 .../gui/io/DownloadOpenChangesetsTaskTest.java     |    8 +-
 .../josm/gui/io/TagSettingsPanelTest.java          |    2 +-
 .../josm/gui/layer/gpx/GpxDrawHelperTest.java      |   16 +-
 .../gui/layer/markerlayer/MarkerLayerTest.java     |    4 +-
 .../josm/gui/mappaint/RenderingCLIAreaTest.java    |  169 +
 .../gui/preferences/advanced/PrefEntryTest.java    |    2 +-
 .../preferences/advanced/PreferencesTableTest.java |    2 +-
 .../gui/preferences/audio/AudioPreferenceTest.java |    6 +-
 .../preferences/imagery/ImageryPreferenceTest.java |    4 +-
 .../map/TaggingPresetPreferenceTestIT.java         |    6 +-
 .../util}/MultiLineFlowLayoutTest.java             |    2 +-
 .../josm/gui/util/WindowGeometryTest.java          |   14 +-
 .../openstreetmap/josm/io/GeoJSONWriterTest.java   |   13 +-
 .../josm/io/OverpassDownloadReaderTest.java        |   39 +
 .../josm/io/remotecontrol/RemoteControlTest.java   |    6 +-
 .../josm/plugins/PluginDownloadExceptionTest.java  |   13 +-
 .../josm/plugins/PluginExceptionTest.java          |   13 +-
 .../josm/plugins/PluginHandlerTest.java            |   12 +-
 .../josm/plugins/PluginHandlerTestIT.java          |   23 +-
 .../josm/plugins/PluginListParseExceptionTest.java |   13 +-
 .../preferences/ListListSettingTest.java           |    2 +-
 .../{data => spi}/preferences/ListSettingTest.java |    2 +-
 .../preferences/MapListSettingTest.java            |    2 +-
 .../preferences/StringSettingTest.java             |    2 +-
 .../josm/testutils/JOSMTestRules.java              |   35 +-
 .../openstreetmap/josm/tools/ExifReaderTest.java   |    5 +-
 .../org/openstreetmap/josm/tools/LoggingTest.java  |   10 +-
 .../josm/tools/OsmUrlToBoundsTest.java             |    4 +-
 .../josm/tools/PlatformHookOsxTest.java            |    2 +-
 .../josm/tools/PlatformHookWindowsTest.java        |    2 +-
 .../{gui/util => tools}/RotationAngleTest.java     |    2 +-
 .../openstreetmap/josm/tools/TerritoriesTest.java  |    2 +-
 .../bugreport/BugReportExceptionHandlerTest.java   |    4 +-
 .../josm/tools/bugreport/BugReportTest.java        |    7 +-
 tools/checkstyle/josm_checks.xml                   |    2 +-
 tools/checkstyle/josm_filters.xml                  |    5 +-
 tools/findbugs/buggy.icns                          |  Bin 36133 -> 0 bytes
 tools/japicc/japi-compliance-checker.pl            |  488 ++-
 tools/japicc/modules/Internals/APIDump.pm          |   48 +-
 tools/japicc/modules/Internals/Basic.pm            |    2 +-
 tools/japicc/modules/Internals/Css/Report.css      |   24 +-
 tools/japicc/modules/Internals/Filter.pm           |    7 +
 tools/japicc/modules/Internals/RegTests.pm         |  546 ++-
 tools/japicc/modules/Internals/SysFiles.pm         |    4 +-
 tools/japicc/modules/Internals/TypeAttr.pm         |    7 +
 tools/japicc/modules/Internals/Utils.pm            |    4 +-
 tools/japicc/modules/RulesBin.xml                  |  138 +-
 tools/japicc/modules/RulesSrc.xml                  |  164 +-
 tools/pmd/josm-ruleset.xml                         |    1 +
 tools/{findbugs => spotbugs}/josm-filter.xml       |    0
 731 files changed, 57257 insertions(+), 39835 deletions(-)

diff --git a/.classpath b/.classpath
index cf578e3..b46bc0d 100644
--- a/.classpath
+++ b/.classpath
@@ -30,6 +30,6 @@
 	<classpathentry kind="lib" path="test/lib/unitils-core/ognl-2.6.9.jar"/>
 	<classpathentry kind="lib" path="test/lib/fest/debug-1.0.jar"/>
 	<classpathentry exported="true" kind="con" path="GROOVY_DSL_SUPPORT"/>
-	<classpathentry kind="lib" path="tools/findbugs/annotations.jar"/>
+	<classpathentry exported="true" kind="lib" path="tools/spotbugs/spotbugs-annotations.jar"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/.settings/edu.umd.cs.findbugs.core.prefs b/.settings/edu.umd.cs.findbugs.core.prefs
index d9797f0..7d1dbfe 100644
--- a/.settings/edu.umd.cs.findbugs.core.prefs
+++ b/.settings/edu.umd.cs.findbugs.core.prefs
@@ -202,7 +202,7 @@ detectorXssServletDetector=XssServletDetector|true
 detectorXxeDetector=XxeDetector|true
 detector_threshold=3
 effort=max
-excludefilter0=tools/findbugs/josm-filter.xml|true
+excludefilter0=tools/spotbugs/josm-filter.xml|true
 filter_settings=Low|BAD_PRACTICE,CORRECTNESS,EXPERIMENTAL,I18N,MALICIOUS_CODE,MT_CORRECTNESS,PERFORMANCE,SECURITY,STYLE|false|20
 filter_settings_neg=NOISE|
 run_at_full_build=true
diff --git a/CONTRIBUTION b/CONTRIBUTION
index f21c0e2..0f66c84 100644
--- a/CONTRIBUTION
+++ b/CONTRIBUTION
@@ -53,7 +53,7 @@ is from Peter Yuill and licensed with LGPL.
 The MultiSplitPane is from Hans Muller and licensed with LGPL
 (https://today.java.net/pub/a/today/2006/03/23/multi-split-pane.html).
 
-The Alphanum Algorithm is from David Koelle and license with LGPL
+The Alphanum Algorithm is from David Koelle and license with MIT
 (http://www.davekoelle.com/alphanum.html)
 
 The Diff code (http://www.bmsi.com/java/#diff) 
diff --git a/Dockerfile b/Dockerfile
index 020049b..fdb8f59 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -3,6 +3,8 @@ FROM openjdk:8-jdk-alpine
 RUN apk update && \
     apk add apache-ant && \
     apk add ttf-dejavu && \
+    apk add subversion && \
+    apk add git && \
     rm /var/cache/apk/*
 
 COPY . /josm
@@ -10,4 +12,4 @@ COPY . /josm
 RUN mkdir -p /josm/test/report
 
 CMD cd /josm && \
-    ant test-html
+    ant test-html -DnoJavaFX=true
diff --git a/README b/README
index 5a63eb0..9b5dc5d 100644
--- a/README
+++ b/README
@@ -116,14 +116,14 @@ This is an overview of the files and directories in the JOSM code repository:
     - performance/          performance tests (source code)
     - unit/                 unit tests (source code)
 - tools/                    libraries and tools that help in the development process
-    - animal-sniffer-ant-tasks-1.15.jar
+    - animal-sniffer-ant-tasks.jar
                             used to build and check code signatures to ensure plugins binary compatibility 
     - appbundler-1.0ea.jar  used to build Mac OS X package
     - 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
     - error_prone_ant.jar   used to detect code errors during compilation
-    - findbugs/             libs and config files for findbugs (automatically detects common bugs and potential
+    - spotbugs/             libs and config files for spotbugs (automatically detects common bugs and potential
                             problems in source code); can be launched as an ant target in build.xml
     - groovy-all.jar        used for some unit tests and various scripts
     - jacocoant.jar         used to include coverage data into JUnit test reports
diff --git a/REVISION b/REVISION
index d65885f..a6a9981 100644
--- a/REVISION
+++ b/REVISION
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <info>
 <entry
-   path="trunk"
-   revision="12712"
-   kind="dir">
+   revision="12914"
+   kind="dir"
+   path="trunk">
 <url>https://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="12712">
-<author>Don-vip</author>
-<date>2017-09-02T12:47:18.517740Z</date>
+   revision="12914">
+<author>bastiK</author>
+<date>2017-10-01T17:25:11.610775Z</date>
 </commit>
 </entry>
 </info>
diff --git a/build.xml b/build.xml
index 9810895..ba1c097 100644
--- a/build.xml
+++ b/build.xml
@@ -47,7 +47,7 @@
             </fileset>
             <pathelement path="${dist.jar}"/>
             <pathelement path="${groovy.jar}"/>
-            <pathelement path="tools/findbugs/annotations.jar"/>
+            <pathelement path="tools/spotbugs/spotbugs-annotations.jar"/>
         </path>
         <path id="pmd.classpath">
             <fileset dir="${base.dir}/tools/pmd/">
@@ -231,7 +231,7 @@ Build-Date: ${build.tstamp}
     </target>
     <target name="compile-cots" depends="init">
         <!-- COTS -->
-        <javac srcdir="${src.dir}" includes="com/**,javax/**,oauth/**,org/apache/commons/**,org/glassfish/**" nowarn="on" encoding="iso-8859-1"
+        <javac srcdir="${src.dir}" includes="com/**,javax/**,oauth/**,org/apache/commons/**,org/glassfish/**,gnu/**" nowarn="on" encoding="iso-8859-1"
             destdir="${build.dir}" target="${java.lang.version}" source="${java.lang.version}" debug="on" includeAntRuntime="false" createMissingPackageInfoClass="false">
             <!-- get rid of "internal proprietary API" warning -->
             <compilerarg value="-XDignore.symbol.file"/>
@@ -310,7 +310,7 @@ Build-Date: ${build.tstamp}
     <target name="compile" depends="init,javacc,compile-cots,compile-jmapviewer">
         <!-- JOSM -->
         <javac compiler="${javac.compiler}" sourcepath="" srcdir="${src.dir}"
-            excludes="com/**,javax/**,oauth/**,org/apache/commons/**,org/glassfish/**,org/openstreetmap/gui/jmapviewer/**"
+            excludes="com/**,javax/**,oauth/**,org/apache/commons/**,org/glassfish/**,org/openstreetmap/gui/jmapviewer/**,gnu/**"
             destdir="${build.dir}" target="${java.lang.version}" source="${java.lang.version}" debug="on" includeantruntime="false" createMissingPackageInfoClass="false" encoding="UTF-8">
             <compilerclasspath>
                 <pathelement location="${error_prone_ant.jar}"/>
@@ -335,6 +335,7 @@ Build-Date: ${build.tstamp}
             <compilerarg value="-Xep:ShortCircuitBoolean:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
             <compilerarg value="-Xep:LiteralClassName:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
             <compilerarg line="-Xmaxwarns 1000"/>
+            <exclude name="org/openstreetmap/josm/io/audio/JavaFxMediaPlayer.java" if:set="noJavaFX"/>
         </javac>
 
         <copy todir="build" failonerror="no" includeemptydirs="no">
@@ -453,7 +454,7 @@ Build-Date: ${build.tstamp}
                 <junit printsummary="yes" fork="true" forkmode="once">
                     <jvmarg value="-Dfile.encoding=UTF-8"/>
                     <jvmarg value="--add-modules" if:set="isJava9" />
-                    <jvmarg value="java.se.ee" if:set="isJava9" />
+                    <jvmarg value="java.activation,java.se.ee" if:set="isJava9" />
                     <jvmarg value="--add-exports" if:set="isJava9" />
                     <jvmarg value="java.base/sun.security.util=ALL-UNNAMED" if:set="isJava9" />
                     <jvmarg value="--add-exports" if:set="isJava9" />
@@ -566,15 +567,19 @@ Build-Date: ${build.tstamp}
             public static ** valueOf(java.lang.String);
         }
 
-        # Keep unused public methods (can be useful for plugins)
-        -keepclassmembers class * {
+        # Keep unused public classes and methods (needed for plugins)
+        -keep public class * {
             public protected *;
         }
 
-        # Keep serialization methods
+        # Keep serialization code
         -keepclassmembers class * implements java.io.Serializable {
+            static final long serialVersionUID; 
+            private static final java.io.ObjectStreamField[] serialPersistentFields;
             private void writeObject(java.io.ObjectOutputStream);
             private void readObject(java.io.ObjectInputStream);
+            java.lang.Object writeReplace(); 
+            java.lang.Object readResolve();
         }
 
         # Disable annoying [proguard] Note: the configuration keeps the entry point '...', but not the descriptor class '...'.
@@ -596,13 +601,12 @@ Build-Date: ${build.tstamp}
             <arg value="${dist-optimized.jar}"/>
         </exec>
     </target>
-    <target name="check-plugins" depends="dist-optimized">
-        <echo message="Check of plugins binary compatibility (needs ant 1.8)"/>
+    <target name="check-plugins" depends="dist-optimized" description="Check of plugins binary compatibility">
         <local name="dir"/>
         <local name="plugins"/>
         <property name="dir" value="plugin-check"/>
         <typedef uri="antlib:org.codehaus.mojo.animal_sniffer">
-            <classpath path="tools/animal-sniffer-ant-tasks-1.15.jar"/>
+            <classpath path="tools/animal-sniffer-ant-tasks.jar"/>
         </typedef>
         <mkdir dir="${dir}"/>
         <!-- List of deprecated plugins -->
@@ -657,7 +661,7 @@ Build-Date: ${build.tstamp}
             </restrict>
         </delete>
         <!-- Download plugins -->
-        <copy todir="${dir}" flatten="true">
+        <copy todir="${dir}" flatten="true" verbose="true" failonerror="false">
             <resourcelist>
                 <string value="${plugins}"/>
             </resourcelist>
@@ -668,41 +672,61 @@ Build-Date: ${build.tstamp}
                 <fileset file="${dist-optimized.jar}"/>
                 <fileset file="${java.home}/lib/rt.jar"/>
                 <fileset file="${java.home}/lib/jce.jar"/>
+                <fileset file="${java.home}/lib/ext/jfxrt.jar"/>
             </path>
         </as:build-signatures>
-        <as:check-signature signature="${dir}/api.sig">
-            <ignore classname="au.edu.*"/>
-            <ignore classname="au.com.*"/>
+        <as:check-signature signature="${dir}/api.sig" failonerror="false">
+            <ignore classname="au.*"/>
             <ignore classname="com.*"/>
-            <ignore classname="de.miethxml.*"/>
-            <ignore classname="javafx.*"/>
+            <ignore classname="de.*"/>
+            <ignore classname="edu.*"/>
+            <ignore classname="groovy.*"/>
+            <ignore classname="it.*"/>
             <ignore classname="javax.*"/>
             <ignore classname="jogamp.*"/>
             <ignore classname="junit.*"/>
-            <ignore classname="net.sf.*"/>
-            <ignore classname="nu.xom.*"/>
+            <ignore classname="kdu_jni.*"/>
+            <ignore classname="net.*"/>
+            <ignore classname="netscape.*"/>
+            <ignore classname="nu.*"/>
+            <ignore classname="oracle.*"/>
             <ignore classname="org.apache.*"/>
+            <ignore classname="org.bouncycastle.*"/>
             <ignore classname="org.codehaus.*"/>
             <ignore classname="org.dom4j.*"/>
+            <ignore classname="org.eclipse.*"/>
+            <ignore classname="org.ejml.*"/>
+            <ignore classname="org.gdal.*"/>
+            <ignore classname="org.hibernate.*"/>
             <ignore classname="org.hsqldb.*"/>
             <ignore classname="org.ibex.*"/>
             <ignore classname="org.iso_relax.*"/>
             <ignore classname="org.jaitools.*"/>
             <ignore classname="org.jaxen.*"/>
+            <ignore classname="org.jboss.*"/>
             <ignore classname="org.jdom2.*"/>
+            <ignore classname="org.jfree.*"/>
             <ignore classname="org.jgraph.*"/>
-            <ignore classname="org.joda.time.*"/>
-            <ignore classname="org.jvnet.staxex.*"/>
+            <ignore classname="org.joda.*"/>
+            <ignore classname="org.junit.*"/>
+            <ignore classname="org.jvnet.*"/>
             <ignore classname="org.kxml2.*"/>
             <ignore classname="org.objectweb.*"/>
+            <ignore classname="org.osgi.*"/>
+            <ignore classname="org.postgresql.*"/>
             <ignore classname="org.python.*"/>
+            <ignore classname="org.seasar.*"/>
             <ignore classname="org.slf4j.*"/>
+            <ignore classname="org.springframework.*"/>
+            <ignore classname="org.testng.*"/>
+            <ignore classname="org.zeromq.*"/>
             <!-- plugins used by another ones -->
             <ignore classname="org.openstreetmap.josm.plugins.geotools.*"/>
             <ignore classname="org.openstreetmap.josm.plugins.jna.*"/>
             <ignore classname="org.openstreetmap.josm.plugins.jts.*"/>
             <ignore classname="org.openstreetmap.josm.plugins.log4j.*"/>
             <ignore classname="org.openstreetmap.josm.plugins.utilsplugin2.*"/>
+            <ignore classname="sun.*"/>
             <path path="${dir}"/>
         </as:check-signature>
     </target>
@@ -712,7 +736,7 @@ Build-Date: ${build.tstamp}
         <attribute name="output"/>
         <sequential>
             <echo message="Generating Taginfo for type @{type} to @{output}"/>
-            <groovy src="${taginfoextract}" classpath="${dist.jar}:tools/findbugs/annotations.jar">
+            <groovy src="${taginfoextract}" classpath="${dist.jar}:tools/spotbugs/spotbugs-annotations.jar">
                 <arg value="-t"/>
                 <arg value="@{type}"/>
                 <arg value="--noexit"/>
@@ -788,25 +812,25 @@ Build-Date: ${build.tstamp}
         </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">
-            <fileset dir="${base.dir}/tools/findbugs/">
+    <target name="spotbugs" depends="dist">
+        <taskdef name="spotbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask" classpath="tools/spotbugs/spotbugs-ant.jar"/>
+        <path id="spotbugs-classpath">
+            <fileset dir="${base.dir}/tools/spotbugs/">
                 <include name="*.jar"/>
             </fileset>
         </path>
-        <property name="findbugs-classpath" refid="findbugs-classpath"/>
-        <findbugs output="xml"
-                outputFile="findbugs-josm.xml"
-                classpath="${findbugs-classpath}"
+        <property name="spotbugs-classpath" refid="spotbugs-classpath"/>
+        <spotbugs output="xml"
+                outputFile="spotbugs-josm.xml"
+                classpath="${spotbugs-classpath}"
                 pluginList=""
-                excludeFilter="tools/findbugs/josm-filter.xml"
+                excludeFilter="tools/spotbugs/josm-filter.xml"
                 effort="max"
                 reportLevel="low"
                 >
             <sourcePath path="${base.dir}/src" />
             <class location="${dist.jar}" />
-        </findbugs>
+        </spotbugs>
     </target>
 
     <target name="pmd" depends="init-properties">
diff --git a/data/defaultpresets.xml b/data/defaultpresets.xml
index eff67b7..eaeba11 100644
--- a/data/defaultpresets.xml
+++ b/data/defaultpresets.xml
@@ -66,7 +66,7 @@
     </chunk>
     <chunk id="highway_yesno_incline_oneway_lit_width_sidewalk">
         <reference ref="highway_yesno_incline_oneway_lit_width" />
-        <combo key="sidewalk" text="Sidewalk" values="both,left,right,no" values_context="sidewalk" />
+        <combo key="sidewalk" text="Sidewalk" values="both,left,right,no,separate" values_context="sidewalk" />
     </chunk>
     <chunk id="railway_service">
         <combo key="service" text="Service type" values="yard,siding,spur,crossover" />
@@ -181,6 +181,17 @@
             <text key="maxwidth" text="Max. width (meters)" length="7" />
         </optional>
     </chunk>
+    <chunk id="optional_name">
+        <optional>
+            <text key="name" text="Name" />
+        </optional>
+    </chunk>
+    <chunk id="optional_name_operator">
+        <optional>
+            <text key="name" text="Name" />
+            <text key="operator" text="Operator" />
+        </optional>
+    </chunk>
     <chunk id="name_leisure_pitch">
         <text key="name" text="Name" />
         <combo key="leisure" text="Type" values="pitch,sports_centre,stadium" default="pitch" />
@@ -734,7 +745,7 @@
                 <reference ref="highway_yesno_incline" />
                 <check key="lit" text="Lit" />
                 <text key="width" text="Width (meters)" />
-                <combo key="sidewalk" text="Sidewalk" values="both,left,right,no" values_context="sidewalk" />
+                <combo key="sidewalk" text="Sidewalk" values="both,left,right,no,separate" values_context="sidewalk" />
             </optional>
             <preset_link preset_name="Road Restrictions" />
         </item> <!-- Bicycle Road -->
@@ -1588,6 +1599,7 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:highway=traffic_mirror"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:highway=traffic_mirror"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:highway=traffic_mirror"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:highway=traffic_mirror"
                   uk.href="http://wiki.openstreetmap.org/wiki/Uk:Tag:highway=traffic_mirror" />
             <key key="highway" value="traffic_mirror" />
         </item> <!-- Traffic Mirror -->
@@ -1808,6 +1820,7 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:barrier=city_wall"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:barrier=city_wall"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:barrier=city_wall"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:barrier=city_wall"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:barrier=city_wall"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:barrier=city_wall"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:barrier=city_wall"
@@ -2292,8 +2305,8 @@
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:landuse=basin" />
             <space />
             <key key="landuse" value="basin" />
-            <text key="name" text="Name" />
             <combo key="basin" text="Type" values="retention,infiltration,detention" />
+            <reference ref="optional_name" />
         </item> <!-- Basin -->
         <item name="Reservoir" icon="presets/landuse/reservoir.svg" type="node,closedway,multipolygon" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=reservoir"
@@ -2305,8 +2318,8 @@
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:landuse=reservoir" />
             <space />
             <key key="landuse" value="reservoir" />
-            <text key="name" text="Name" />
             <combo key="reservoir_type" text="Type" values="evaporator,sewage,tailings,water_storage" />
+            <reference ref="optional_name" />
         </item> <!-- Reservoir -->
         <item name="Covered Reservoir" icon="presets/landmark/reservoir_covered.svg" type="node,closedway,multipolygon" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:man_made=reservoir_covered"
@@ -2319,7 +2332,7 @@
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:man_made=reservoir_covered" />
             <space />
             <key key="man_made" value="reservoir_covered" />
-            <text key="name" text="Name" />
+            <reference ref="optional_name" />
         </item> <!-- Covered Reservoir -->
         <separator/>
         <item name="Water" name_context="natural" icon="presets/nautical/water.svg" type="closedway,multipolygon" preset_name_label="true">
@@ -2439,7 +2452,7 @@
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:natural=bay"
                   pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:natural=bay"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:natural=bay" />
-            <label text="A large body of water partially enclosed by land but with a wide mouth." />
+            <label text="An area of water mostly surrounded by land but with level connection to the ocean or a lake." />
             <space />
             <key key="natural" value="bay" />
             <text key="name" text="Name" />
@@ -2868,7 +2881,8 @@
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:aerialway=chair_lift"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:aerialway=chair_lift"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:aerialway=chair_lift"
-                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:aerialway=chair_lift" />
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:aerialway=chair_lift"
+                  pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:aerialway=chair_lift" />
             <space />
             <key key="aerialway" value="chair_lift" />
             <reference ref="name_ref" />
@@ -2885,7 +2899,8 @@
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:aerialway=gondola"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:aerialway=gondola"
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:aerialway=gondola"
-                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:aerialway=gondola" />
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:aerialway=gondola"
+                  pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:aerialway=gondola" />
             <space />
             <key key="aerialway" value="gondola" />
             <reference ref="name_ref" />
@@ -2898,7 +2913,8 @@
         </item> <!-- Gondola -->
         <item name="Mixed Lift" icon="presets/transport/aerialway/mixed_lift.svg" type="way" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:aerialway=mixed_lift"
-                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:aerialway=mixed_lift" />
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:aerialway=mixed_lift"
+                  pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:aerialway=mixed_lift" />
             <space />
             <key key="aerialway" value="mixed_lift" />
             <reference ref="name_ref" />
@@ -2914,7 +2930,8 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:aerialway=drag_lift"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:aerialway=drag_lift"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:aerialway=drag_lift"
-                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:aerialway=drag_lift" />
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:aerialway=drag_lift"
+                  pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:aerialway=drag_lift" />
             <space />
             <combo key="aerialway" text="Type" values="drag_lift,t-bar,j-bar,platter,rope_tow" display_values="drag_lift (general type - use only if exact type (see values below) is unknown),t-bar,j-bar,platter,rope_tow" match="keyvalue" />
             <reference ref="name_ref" />
@@ -2927,7 +2944,8 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:aerialway=magic_carpet"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:aerialway=magic_carpet"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:aerialway=magic_carpet"
-                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:aerialway=magic_carpet" />
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:aerialway=magic_carpet"
+                  pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:aerialway=magic_carpet" />
             <space />
             <key key="aerialway" value="magic_carpet" />
             <reference ref="name_ref" />
@@ -2964,7 +2982,8 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:aerialway=pylon"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:aerialway=pylon"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:aerialway=pylon"
-                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:aerialway=pylon" />
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:aerialway=pylon"
+                  pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:aerialway=pylon" />
             <space />
             <key key="aerialway" value="pylon" />
             <text key="name" text="Name" />
@@ -3511,6 +3530,7 @@
                   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"
+                  it.href="http://wiki.openstreetmap.org/wiki/IT: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"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:public_transport=station" />
@@ -3797,13 +3817,16 @@
         <item name="Beacon" icon="presets/transport/airport/airmark_beacon.svg" name_context="airmark" type="node" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:airmark=beacon"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:airmark=beacon"
-                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:airmark=beacon" />
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:airmark=beacon"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:airmark=beacon" />
             <key key="airmark" value="beacon" />
         </item> <!-- Beacon -->
         <item name="Navigationaid" icon="presets/transport/airport/navigationaid.svg" type="node" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:aeroway=navigationaid"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:aeroway=navigationaid"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:aeroway=navigationaid"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:aeroway=navigationaid"
+                  pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:aeroway=navigationaid"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:aeroway=navigationaid" />
             <key key="aeroway" value="navigationaid" />
         </item> <!-- Navigationaid -->
@@ -4353,6 +4376,7 @@
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:information=guidepost"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:information=guidepost"
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:information=guidepost"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:information=guidepost"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:information=guidepost"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:information=guidepost"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:information=guidepost" />
@@ -4551,7 +4575,8 @@
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:leisure=fitness_station"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:leisure=fitness_station"
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:leisure=fitness_station"
-                  pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:leisure=fitness_station" />
+                  pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:leisure=fitness_station"
+                  sv.href="http://wiki.openstreetmap.org/wiki/Sv:Tag:leisure=fitness_station" />
             <space />
             <key key="leisure" value="fitness_station" />
             <reference ref="name_operator_oh_wheelchair" />
@@ -6107,6 +6132,7 @@
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:leisure=track"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:leisure=track"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:leisure=track"
+                  it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:leisure=track"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:leisure=track"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:leisure=track"
                   pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:leisure=track"
@@ -8162,6 +8188,7 @@
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Key:organic"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Key:organic"
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Key:organic"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Key:organic"
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Key:organic"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Key:organic" />
             <space />
@@ -8171,7 +8198,8 @@
             <link href="http://wiki.openstreetmap.org/wiki/Key:fair_trade"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Key:fair_trade"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Key:fair_trade"
-                  es.href="http://wiki.openstreetmap.org/wiki/ES:Key:fair_trade" />
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Key:fair_trade"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Key:fair_trade" />
             <space />
             <combo text="Fair Trade" key="fair_trade" values="no,yes,only" match="key" />
         </item> <!-- Fair Trade -->
@@ -9303,6 +9331,7 @@
         <link href="http://wiki.openstreetmap.org/wiki/Tag:office=estate_agent"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:office=estate_agent"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:office=estate_agent"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:office=estate_agent"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:office=estate_agent"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:office=estate_agent"
                   pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:office=estate_agent"
@@ -9521,6 +9550,7 @@
     <item name="Caterer" type="node,closedway,multipolygon" preset_name_label="true">
         <link href="http://wiki.openstreetmap.org/wiki/Tag:craft=caterer"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:craft=caterer"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:craft=caterer"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:craft=caterer"
                   pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:craft=caterer"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:craft=caterer" />
@@ -10273,8 +10303,8 @@
                   uk.href="http://wiki.openstreetmap.org/wiki/Uk:Tag:landuse=forest" />
             <space />
             <key key="landuse" value="forest" />
-            <text key="name" text="Name" />
             <reference ref="leaf" />
+            <reference ref="optional_name" />
         </item> <!-- Forest -->
         <item name="Cutline" icon="presets/landmark/cutline.svg" type="way" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:man_made=cutline"
@@ -10313,6 +10343,7 @@
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:leisure=nature_reserve"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:leisure=nature_reserve"
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:leisure=nature_reserve"
+                  it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:leisure=nature_reserve"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:leisure=nature_reserve"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:leisure=nature_reserve"
                   pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:leisure=nature_reserve" />
@@ -10474,7 +10505,7 @@
                   pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:landuse=farmyard" />
             <space />
             <key key="landuse" value="farmyard" />
-            <text key="name" text="Name" />
+            <reference ref="optional_name" />
         </item> <!-- Farmyard -->
         <item name="Farmland" icon="presets/landuse/farmland.svg" type="closedway,multipolygon" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=farmland"
@@ -10487,8 +10518,8 @@
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:landuse=farmland" />
             <space />
             <key key="landuse" value="farmland" />
-            <text key="name" text="Name" />
             <combo key="crop" text="Crop" values="corn,grass,rice,wheat,hop" values_context="crop" />
+            <reference ref="optional_name" />
         </item> <!-- Farmland -->
         <item name="Meadow" icon="presets/landuse/meadow.svg" type="closedway,multipolygon" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=meadow"
@@ -10501,7 +10532,7 @@
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:landuse=meadow" />
             <space />
             <key key="landuse" value="meadow" />
-            <text key="name" text="Name" />
+            <reference ref="optional_name" />
         </item> <!-- Meadow -->
         <item name="Orchard" icon="presets/landuse/orchard.svg" type="closedway,multipolygon" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=orchard"
@@ -10514,8 +10545,8 @@
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:landuse=orchard" />
             <space />
             <key key="landuse" value="orchard" />
-            <text key="name" text="Name" />
             <combo key="trees" text="Trees" values="olive_trees,apple_trees,oil_palms,orange_trees,almond_trees,banana_plants,coconut_palms,hazel_plants,cherry_trees,persimmon_trees,walnut_trees,plum_trees,peach_trees,tea_plants" />
+            <reference ref="optional_name" />
         </item> <!-- Orchard -->
         <item name="Vineyard" icon="presets/landuse/vineyard.svg" type="closedway,multipolygon" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=vineyard"
@@ -10526,7 +10557,7 @@
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:landuse=vineyard" />
             <space />
             <key key="landuse" value="vineyard" />
-            <text key="name" text="Name" />
+            <reference ref="optional_name" />
         </item> <!-- Vineyard -->
         <item name="Greenhouse Horticulture" icon="presets/landuse/greenhouse_horticulture.svg" type="closedway,multipolygon" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=greenhouse_horticulture"
@@ -10541,8 +10572,7 @@
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:landuse=greenhouse_horticulture" />
             <space />
             <key key="landuse" value="greenhouse_horticulture" />
-            <text key="name" text="Name" />
-            <text key="operator" text="Operator" />
+            <reference ref="optional_name_operator" />
         </item> <!-- Greenhouse Horticulture -->
         <item name="Plant Nursery" icon="presets/landuse/plant_nursery.svg" type="closedway,multipolygon" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=plant_nursery"
@@ -10554,9 +10584,8 @@
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:landuse=plant_nursery" />
             <space />
             <key key="landuse" value="plant_nursery" />
-            <text key="name" text="Name" />
-            <text key="operator" text="Operator" />
             <reference ref="genus_species_taxon" />
+            <reference ref="optional_name_operator" />
         </item> <!-- Plant Nursery -->
         <item name="Aquaculture" icon="presets/landuse/aquaculture.svg" type="closedway,multipolygon" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=aquaculture"
@@ -10565,9 +10594,8 @@
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:landuse=aquaculture" />
             <space />
             <key key="landuse" value="aquaculture" />
-            <text key="name" text="Name" />
-            <text key="operator" text="Operator" />
             <combo key="aquaculture" text="Aquaculture" values="shrimp,fish,mussels" />
+            <reference ref="optional_name_operator" />
         </item> <!-- Aquaculture -->
         <item name="Allotments" icon="presets/landuse/allotments.svg" type="closedway,multipolygon" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=allotments"
@@ -10581,7 +10609,7 @@
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:landuse=allotments" />
             <space />
             <key key="landuse" value="allotments" />
-            <text key="name" text="Name" />
+            <reference ref="optional_name" />
         </item> <!-- Allotments -->
         <separator/>
         <item name="Garden" icon="presets/leisure/garden.svg" type="node,closedway,multipolygon" preset_name_label="true">
@@ -10589,12 +10617,13 @@
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs: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"
+                  it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:leisure=garden"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:leisure=garden"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:leisure=garden"
                   pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:leisure=garden" />
             <space />
             <key key="leisure" value="garden" />
-            <text key="name" text="Name" />
+            <reference ref="optional_name" />
         </item> <!-- Garden -->
         <item name="Grass" icon="presets/landuse/meadow.svg" type="closedway,multipolygon" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=grass"
@@ -10609,7 +10638,7 @@
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:landuse=grass" />
             <space />
             <key key="landuse" value="grass" />
-            <text key="name" text="Name" />
+            <reference ref="optional_name" />
         </item> <!-- Grass -->
         <item name="Village Green" icon="presets/leisure/common.svg" type="closedway,multipolygon" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=village_green"
@@ -10624,7 +10653,7 @@
                   uk.href="http://wiki.openstreetmap.org/wiki/Uk:Tag:landuse=village_green" />
             <space />
             <key key="landuse" value="village_green" />
-            <text key="name" text="Name" />
+            <reference ref="optional_name" />
         </item> <!-- Village Green -->
         <item name="Common" icon="presets/leisure/common.svg" type="closedway,multipolygon" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:leisure=common"
@@ -10638,7 +10667,7 @@
                   uk.href="http://wiki.openstreetmap.org/wiki/Uk:Tag:leisure=common" />
             <space />
             <key key="leisure" value="common" />
-            <text key="name" text="Name" />
+            <reference ref="optional_name" />
         </item> <!-- Common -->
         <item name="Park" icon="presets/leisure/park.svg" type="closedway,multipolygon" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:leisure=park"
@@ -10652,7 +10681,7 @@
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:leisure=park" />
             <space />
             <key key="leisure" value="park" />
-            <text key="name" text="Name" />
+            <reference ref="optional_name" />
         </item> <!-- Park -->
         <item name="Recreation Ground" icon="presets/leisure/common.svg" type="closedway,multipolygon" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=recreation_ground"
@@ -10665,7 +10694,7 @@
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:landuse=recreation_ground" />
             <space />
             <key key="landuse" value="recreation_ground" />
-            <text key="name" text="Name" />
+            <reference ref="optional_name" />
         </item> <!-- Recreation Ground -->
         <separator/>
         <item name="Residential Area" icon="presets/landmark/building.svg" type="closedway,multipolygon" preset_name_label="true">
@@ -10680,7 +10709,7 @@
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:landuse=residential" />
             <space />
             <key key="landuse" value="residential" />
-            <text key="name" text="Name" />
+            <reference ref="optional_name" />
         </item> <!-- Residential Area -->
         <item name="Graveyard" icon="presets/landuse/graveyard.svg" type="node,closedway,multipolygon" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=grave_yard"
@@ -10734,7 +10763,7 @@
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:landuse=retail" />
             <space />
             <key key="landuse" value="retail" />
-            <text key="name" text="Name" />
+            <reference ref="optional_name" />
         </item> <!-- Retail -->
         <item name="Commercial" icon="presets/landuse/commercial.svg" type="closedway,multipolygon" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=commercial"
@@ -10747,7 +10776,7 @@
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:landuse=commercial" />
             <space />
             <key key="landuse" value="commercial" />
-            <text key="name" text="Name" />
+            <reference ref="optional_name" />
         </item> <!-- Commercial -->
         <item name="Industrial" icon="presets/landmark/works.svg" type="closedway,multipolygon" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=industrial"
@@ -10761,8 +10790,8 @@
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:landuse=industrial" />
             <space />
             <key key="landuse" value="industrial" />
-            <text key="name" text="Name" />
             <combo key="industrial" text="Type" values="bakery,brewery,brickyard,depot,distributor,factory,grinding_mill,heating_station,machine_shop,mine,oil,port,salt_pond,sawmill,scrap_yard,shipyard,slaughterhouse,warehouse" values_context="industrial" />
+            <reference ref="optional_name" />
         </item> <!-- Industrial -->
         <item name="Garages" icon="presets/landuse/garages.svg" type="closedway,multipolygon" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=garages"
@@ -10775,8 +10804,7 @@
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:landuse=garages" />
             <space />
             <key key="landuse" value="garages" />
-            <text key="name" text="Name" />
-            <text key="operator" text="Operator" />
+            <reference ref="optional_name_operator" />
         </item> <!-- Garages -->
         <item name="Railway Land" icon="presets/landuse/railway.svg" type="closedway,multipolygon" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=railway"
@@ -10788,7 +10816,7 @@
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:landuse=railway" />
             <space />
             <key key="landuse" value="railway" />
-            <text key="name" text="Name" />
+            <reference ref="optional_name" />
         </item> <!-- Railway Land -->
         <item name="Military" icon="presets/landuse/military.svg" type="closedway,multipolygon" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=military"
@@ -10799,7 +10827,7 @@
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:landuse=military" />
             <space />
             <key key="landuse" value="military" />
-            <text key="name" text="Name" />
+            <reference ref="optional_name" />
         </item> <!-- Military -->
         <separator/>
         <item name="Construction Area" icon="presets/landuse/construction.svg" type="closedway,multipolygon" preset_name_label="true">
@@ -10814,7 +10842,7 @@
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:landuse=construction" />
             <space />
             <key key="landuse" value="construction" />
-            <text key="name" text="Name" />
+            <reference ref="optional_name" />
         </item> <!-- Construction Area -->
         <item name="Brownfield" icon="presets/landuse/brownfield.svg" type="closedway,multipolygon" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=brownfield"
@@ -10827,7 +10855,7 @@
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:landuse=brownfield" />
             <space />
             <key key="landuse" value="brownfield" />
-            <text key="name" text="Name" />
+            <reference ref="optional_name" />
         </item> <!-- Brownfield -->
         <item name="Greenfield" icon="presets/landuse/greenfield.svg" type="closedway,multipolygon" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=greenfield"
@@ -10839,7 +10867,7 @@
                   pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:landuse=greenfield" />
             <space />
             <key key="landuse" value="greenfield" />
-            <text key="name" text="Name" />
+            <reference ref="optional_name" />
         </item> <!-- Greenfield -->
         <item name="Landfill" icon="presets/landuse/landfill.svg" type="closedway,multipolygon" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=landfill"
@@ -10852,7 +10880,7 @@
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:landuse=landfill" />
             <space />
             <key key="landuse" value="landfill" />
-            <text key="name" text="Name" />
+            <reference ref="optional_name" />
         </item> <!-- Landfill -->
         <item name="Quarry" icon="presets/landmark/mine.svg" type="closedway,multipolygon" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=quarry"
diff --git a/data/validator/geometry.mapcss b/data/validator/geometry.mapcss
index f55d819..7527dd5 100644
--- a/data/validator/geometry.mapcss
+++ b/data/validator/geometry.mapcss
@@ -94,6 +94,14 @@ way[natural=peak],
 way[natural=saddle],
 way[natural=volcano],
 way[natural=tree],
+way[highway=give_way],
+way[highway=milestone],
+way[highway=mini_roundabout],
+way[highway=stop],
+way[highway=street_lamp],
+way[highway=traffic_signals],
+way[highway=turning_loop],
+way[highway=turning_circle],
 way[highway=motorway_junction] {
   throwWarning: tr("{0} on a way. Should be used on a node.", "{0.tag}"); 
 }
diff --git a/data/validator/highway.mapcss b/data/validator/highway.mapcss
index 447e624..c5daf4b 100644
--- a/data/validator/highway.mapcss
+++ b/data/validator/highway.mapcss
@@ -126,8 +126,8 @@ way[footway][footway!=sidewalk][footway!=crossing]!.fixable_footway!.not_fixable
   assertMatch: "way footway=bar";
 }
 
-/* #11270 */
-way[railway =~ /^(light_rail|miniature|narrow_gauge|preserved|rail)$/] > node { set .is_in_railway }
+/* #11270, #9297 */
+way[railway =~ /^(light_rail|miniature|narrow_gauge|preserved|rail)$/][!highway] > node { set .is_in_railway }
 way[highway =~ /^(bridleway|cycleway|footway|path|steps)$/] > node { set .is_in_minor_road }
 way[highway =~ /^(bus_guideway|living_street|motorway|pedestrian|primary|raceway|residential|road|secondary|service|tertiary|track|trunk|unclassified)/] > node { set .is_in_major_road }
 node[railway!=crossing].is_in_railway.is_in_minor_road!.is_in_major_road {
diff --git a/data/validator/relation.mapcss b/data/validator/relation.mapcss
index 8133b28..deaa451 100644
--- a/data/validator/relation.mapcss
+++ b/data/validator/relation.mapcss
@@ -33,3 +33,9 @@ relation[type=enforcement][!enforcement] {
   assertMatch: "relation type=enforcement";
   assertNoMatch: "relation type=enforcement enforcement=maxspeed";
 }
+
+/* #15208 */
+relation[type=route][route=mtb    ] > way[bicycle=use_sidepath],
+relation[type=route][route=bicycle] > way[bicycle=use_sidepath] { 
+  throwWarning: tr("way with {0} is part of a bicycle route relation", "{0.tag}");
+}
\ No newline at end of file
diff --git a/data/validator/territories.mapcss b/data/validator/territories.mapcss
index c736566..3841632 100644
--- a/data/validator/territories.mapcss
+++ b/data/validator/territories.mapcss
@@ -6,9 +6,9 @@
   fixAdd: "operator=Enedis";
 }
 
-/* #13932 */
-*[addr:street =~ /(?i).*Strasse.*/][inside("DE,AT")],
-*[name =~ /(?i).*Strasse.*/][inside("DE,AT")] {
+/* #13932, #15283 */
+*[addr:street =~ /(?i).*Strasse.*/][addr:street !~ /(?i).*Strasser.*/][inside("DE,AT")],
+*[name =~ /(?i).*Strasse.*/][name !~ /(?i).*Strasser.*/][inside("DE,AT")] {
   throwError: tr("street name contains ss");
 }
 *[addr:street =~ /(?i).*Straße.*/][inside("LI,CH")],
diff --git a/i18n/po/af.po b/i18n/po/af.po
index 5425320..0569e18 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+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: 2017-09-03 04:33+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:31+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: af\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -387,6 +387,34 @@ msgstr "Verwyder"
 msgid "Delete selected objects."
 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 "Delete Layer"
 msgstr ""
 
@@ -1293,29 +1321,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2724,34 +2738,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2783,6 +2769,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2902,6 +2911,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3009,6 +3030,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr ""
 
@@ -3052,6 +3076,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3688,6 +3715,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4728,9 +4809,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4776,6 +4854,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr ""
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4797,9 +4878,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -5000,6 +5078,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5252,6 +5338,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7034,6 +7124,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7256,9 +7349,6 @@ 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."
@@ -8186,15 +8276,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8223,33 +8313,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8373,6 +8436,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8506,6 +8596,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8515,6 +8611,9 @@ msgstr ""
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8659,6 +8758,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9698,9 +9800,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12837,15 +12936,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -12951,6 +13041,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13200,14 +13293,6 @@ 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 ""
 
@@ -13271,9 +13356,6 @@ msgid ""
 "{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 ""
 
@@ -14505,9 +14587,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14604,10 +14683,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15195,6 +15270,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17232,7 +17311,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23058,6 +23138,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23116,6 +23199,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23197,6 +23283,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23218,9 +23319,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23815,6 +23913,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24226,6 +24327,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24669,6 +24773,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25872,6 +25979,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26052,10 +26162,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26103,9 +26209,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26449,11 +26552,6 @@ msgid ""
 "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 ""
 
@@ -27064,13 +27162,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28367,6 +28465,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28382,77 +28618,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28503,27 +28744,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28664,160 +28884,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28867,17 +29024,6 @@ 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 ""
 
@@ -29314,18 +29460,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35071,26 +35205,6 @@ 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 ""
 
@@ -35259,6 +35373,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/am.po b/i18n/po/am.po
index 938e8c3..d2299f2 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+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: 2017-09-03 04:34+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:31+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: am\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -387,6 +387,34 @@ msgstr ""
 msgid "Delete selected objects."
 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 "Delete Layer"
 msgstr ""
 
@@ -1293,29 +1321,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2724,34 +2738,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2783,6 +2769,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2902,6 +2911,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3009,6 +3030,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr ""
 
@@ -3052,6 +3076,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3688,6 +3715,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4728,9 +4809,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4776,6 +4854,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr ""
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4797,9 +4878,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -5000,6 +5078,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5252,6 +5338,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7034,6 +7124,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7256,9 +7349,6 @@ 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."
@@ -8186,15 +8276,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8223,33 +8313,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8373,6 +8436,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8506,6 +8596,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8515,6 +8611,9 @@ msgstr ""
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8659,6 +8758,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9698,9 +9800,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12837,15 +12936,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -12951,6 +13041,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13200,14 +13293,6 @@ 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 ""
 
@@ -13271,9 +13356,6 @@ msgid ""
 "{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 ""
 
@@ -14505,9 +14587,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14604,10 +14683,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15195,6 +15270,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17232,7 +17311,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23058,6 +23138,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23116,6 +23199,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23197,6 +23283,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23218,9 +23319,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23815,6 +23913,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24226,6 +24327,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24669,6 +24773,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25872,6 +25979,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26052,10 +26162,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26103,9 +26209,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26449,11 +26552,6 @@ msgid ""
 "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 ""
 
@@ -27064,13 +27162,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28367,6 +28465,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28382,77 +28618,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28503,27 +28744,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28664,160 +28884,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28867,17 +29024,6 @@ 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 ""
 
@@ -29314,18 +29460,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35071,26 +35205,6 @@ 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 ""
 
@@ -35259,6 +35373,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/ar.po b/i18n/po/ar.po
index 06ecd6d..4e45606 100644
--- a/i18n/po/ar.po
+++ b/i18n/po/ar.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
 "PO-Revision-Date: 2017-06-05 02:55+0000\n"
 "Last-Translator: Chdoula <chdoula at gmail.com>\n"
 "Language-Team: Arabic <ar at li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
 "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: 2017-09-03 04:34+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:32+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: ar\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -392,6 +392,34 @@ msgstr "أحذف"
 msgid "Delete selected objects."
 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 "Delete Layer"
 msgstr ""
 
@@ -1311,29 +1339,15 @@ msgstr " [id: {0}]"
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2743,34 +2757,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2802,6 +2788,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2921,6 +2930,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3028,6 +3049,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr "مجهول"
 
@@ -3071,6 +3095,9 @@ msgctxt "compass"
 msgid "E"
 msgstr "ش."
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3723,6 +3750,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr "أعرض هذه المساعدة"
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4762,9 +4843,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4810,6 +4888,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr "تهيئة OSM API"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4831,9 +4912,6 @@ msgstr "الإستعمال"
 msgid "options"
 msgstr "الخيارات"
 
-msgid "Show this help"
-msgstr "أعرض هذه المساعدة"
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -5034,6 +5112,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5286,6 +5372,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7072,6 +7162,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7294,9 +7387,6 @@ 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."
@@ -8224,15 +8314,15 @@ msgstr "هذه المساحة ممكن تنزيلها، القياس مقبول
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8261,33 +8351,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr "التاريخ"
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8411,6 +8474,33 @@ msgstr "خريطة زالقة"
 msgid "Tile Numbers"
 msgstr "أرقام البلاطة"
 
+msgid "history"
+msgstr "التاريخ"
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8544,6 +8634,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8553,6 +8649,9 @@ msgstr ""
 msgid "Object"
 msgstr "الغرض"
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8697,6 +8796,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 "الرجاء التزويد ببعض الملاحظات في ما يخص التغييرات اللتي تريد إرسالها:"
@@ -9739,9 +9841,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12888,15 +12987,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr "خطأ في التحليل النحوي  {0}: "
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr "التعيينات المسبقة"
 
@@ -13002,6 +13092,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13251,14 +13344,6 @@ 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 ""
 
@@ -13322,9 +13407,6 @@ msgid ""
 "{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 ""
 
@@ -14556,9 +14638,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14655,10 +14734,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15246,6 +15321,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17283,7 +17362,8 @@ msgid "Bay"
 msgstr "خليج"
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23109,6 +23189,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23167,6 +23250,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23248,6 +23334,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23269,9 +23370,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23866,6 +23964,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24277,6 +24378,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24720,6 +24824,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25923,6 +26030,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26103,10 +26213,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26154,9 +26260,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26500,11 +26603,6 @@ msgid ""
 "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 ""
 
@@ -27115,13 +27213,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28418,6 +28516,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28433,77 +28669,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
+msgstr "العنوان"
+
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "symbol"
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download water bodies in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28554,27 +28795,6 @@ msgstr ""
 msgid "low"
 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 "تمكين الإخباء التلقائي"
 
@@ -28715,160 +28935,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Cadastre: {0}"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
-msgstr "حمّل الموقع من الخابية ( فقط عند تمكين الخابية)"
-
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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>"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Add new layer"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Open Cadastre Preferences"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Reset cookie"
-msgstr "إستعادة كعكة الإنترنت"
-
-msgid "Get a new cookie (session timeout)"
-msgstr "أطلب كعكة إنترنت جديدة (إنتهاء مهلة الجلسة)"
-
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28918,17 +29075,6 @@ 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 ""
 
@@ -29365,18 +29511,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35122,26 +35256,6 @@ 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 ""
 
@@ -35310,6 +35424,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/ast.po b/i18n/po/ast.po
index 9550496..52d761a 100644
--- a/i18n/po/ast.po
+++ b/i18n/po/ast.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
 "PO-Revision-Date: 2017-07-04 07:51+0000\n"
 "Last-Translator: Dirk Stöcker <launchpad at dstoecker.de>\n"
 "Language-Team: Asturian <ast 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: 2017-09-03 04:35+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:33+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: ast\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -400,6 +400,45 @@ msgstr "Desaniciar"
 msgid "Delete selected objects."
 msgstr "Desaniciar los oxetos seleicionaos."
 
+msgid "Delete confirmation"
+msgstr "Confirmación de desaniciu"
+
+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 ""
+"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 "
+"because you don''t see the real object.<br>Do you really want to delete?"
+msgstr ""
+"Va esaniciar oxetos incompletos.<br> Esto va causar problemes porque nun ve "
+"l''oxetu real.<br>¿Ta seguru que deseya borrar?"
+
+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] ""
+"Ta a puntu d`esaniciar {0} relación: {1}<br/>Esti pasu raramente ye "
+"necesariu y non puede desfacer d`una manera fácil una vegada que se xubió al "
+"servidor.<br/>¿Realmente quier esaniciala?"
+msgstr[1] ""
+"Ta a puntu d`esaniciar {0} relaciones: {1}<br/>Esti pasu raramente ye "
+"necesariu y non puede desfacer d`una manera fácil una vegada que se xubió al "
+"servidor.<br/>¿Realmente quier esaniciales?"
+
+msgid "Delete relation?"
+msgstr "¿Esaniciar rellación?"
+
 msgid "Delete Layer"
 msgstr "Desaniciar capa"
 
@@ -1401,34 +1440,14 @@ msgstr " [ID: {0}]"
 msgid "Segment {0}: {1}"
 msgstr "Segmentu {0}: {1}"
 
-msgid "You must select two or more nodes to split a circular way."
-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 pué partise polos nudos seleicionaos. (Gabitu: seleiciona nudos "
-"na metá de la vía)."
-
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
-msgstr ""
-"Un miembru de la relación basada en roles foi copiáu a toles nueves "
-"víes.<br> Tendría de verificalo y correxir nos casos que sía necesariu."
+msgid "Search preset"
+msgstr "Buscar predefiníu"
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
-msgstr ""
-"Un miembru de la relación foi copiáu a toles nueves víes.<br> Tendría De "
-"verificalo y correxilo onde sía necesariu."
+msgid "Show preset search dialog"
+msgstr "Amosar diálogu de busca preestablecía"
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] "Divide la vía {0} en {1} parte"
-msgstr[1] "Divide la vía {0} en {1} partes"
+msgid "Search presets"
+msgstr "Buscar predefiníos"
 
 msgid "Discourage upload"
 msgstr "Desaconseyar subida"
@@ -2949,45 +2968,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] "Desaniciar {0} rellación"
 msgstr[1] "Desaniciar {0} rellaciones"
 
-msgid "Delete confirmation"
-msgstr "Confirmación de desaniciu"
-
-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 ""
-"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 "
-"because you don''t see the real object.<br>Do you really want to delete?"
-msgstr ""
-"Va esaniciar oxetos incompletos.<br> Esto va causar problemes porque nun ve "
-"l''oxetu real.<br>¿Ta seguru que deseya borrar?"
-
-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] ""
-"Ta a puntu d`esaniciar {0} relación: {1}<br/>Esti pasu raramente ye "
-"necesariu y non puede desfacer d`una manera fácil una vegada que se xubió al "
-"servidor.<br/>¿Realmente quier esaniciala?"
-msgstr[1] ""
-"Ta a puntu d`esaniciar {0} relaciones: {1}<br/>Esti pasu raramente ye "
-"necesariu y non puede desfacer d`una manera fácil una vegada que se xubió al "
-"servidor.<br/>¿Realmente quier esaniciales?"
-
-msgid "Delete relation?"
-msgstr "¿Esaniciar rellación?"
-
 msgid "Move {0} node"
 msgid_plural "Move {0} nodes"
 msgstr[0] "Mover {0} nudu"
@@ -3019,6 +2999,35 @@ msgstr[1] "Seleccionaos {0} oxetos"
 msgid "Sequence: {0}"
 msgstr "Secuencia: {0}"
 
+msgid "You must select two or more nodes to split a circular way."
+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 pué partise polos nudos seleicionaos. (Gabitu: seleiciona nudos "
+"na metá de la vía)."
+
+msgid ""
+"A role based relation membership was copied to all new ways.<br>You should "
+"verify this and correct it when necessary."
+msgstr ""
+"Un miembru de la relación basada en roles foi copiáu a toles nueves "
+"víes.<br> Tendría de verificalo y correxir nos casos que sía necesariu."
+
+msgid ""
+"A relation membership was copied to all new ways.<br>You should verify this "
+"and correct it when necessary."
+msgstr ""
+"Un miembru de la relación foi copiáu a toles nueves víes.<br> Tendría De "
+"verificalo y correxilo onde sía necesariu."
+
+msgid "Split way {0} into {1} part"
+msgid_plural "Split way {0} into {1} parts"
+msgstr[0] "Divide la vía {0} en {1} parte"
+msgstr[1] "Divide la vía {0} en {1} partes"
+
 msgid "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] "Tresformar {0} nudu"
@@ -3153,6 +3162,18 @@ msgstr "Valor de llatitú illegal \"{0}\""
 msgid "Illegal longitude value ''{0}''"
 msgstr "Valor de llonxitú illegal \"{0}\""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr "Erru al crear el directoriu de caxé faltante: {0}"
 
@@ -3286,6 +3307,10 @@ msgstr "Anglosajón"
 msgid "Nautical Mile"
 msgstr "Milla náutica"
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+"Esperáu un valor non-vacíu pal parámetru ''{0}'', suministráu ''{1}''"
+
 msgid "UNKNOWN"
 msgstr "DESCONOCÍU"
 
@@ -3331,6 +3356,9 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr "Data de les imaxes: {0}"
 
@@ -4023,6 +4051,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr "Proyección axustá"
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr "Descripción"
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr "Amuesa esta axuda"
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr "Exemplos"
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr "GRS80"
 
@@ -5115,10 +5197,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr "Offset"
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-"Esperáu un valor non-vacíu pal parámetru ''{0}'', suministráu ''{1}''"
-
 msgid "Outdated Java version"
 msgstr "Versión desactualizada de Java"
 
@@ -5167,6 +5245,10 @@ msgstr "Aniciando datos internos de llendes"
 msgid "Initializing OSM API"
 msgstr "Aniciando API d''OSM"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+"Esaniciada la capa {0} porque nun ta dexáu pola configuración del API."
+
 msgid "Initializing internal traffic data"
 msgstr "Aniciando datos internos de tráficu"
 
@@ -5188,9 +5270,6 @@ msgstr "usu"
 msgid "options"
 msgstr "Opciones"
 
-msgid "Show this help"
-msgstr "Amuesa esta axuda"
-
 msgid "Standard unix geometry argument"
 msgstr "Argumentu de xeometría standard d''unix"
 
@@ -5422,6 +5501,14 @@ msgstr ""
 "Esto pue ser por cuenta de una configuración de proxy errónea. <br> ¿Deseya "
 "camudar la configuración del proxy agora?"
 
+msgid "You have {0} unread message."
+msgid_plural "You have {0} unread messages."
+msgstr[0] "Tien {0} mensaxe ensin lleer."
+msgstr[1] "Tien {0} mensaxes ensin lleer."
+
+msgid "Click here to see your inbox."
+msgstr "Faiga clic equí pa ver la bandexa d''entrada."
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5683,6 +5770,10 @@ msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 "El valor actual non ye un índice de tesela válidu pal nivel de zoom dáu"
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr "Atopó un erru en JOSM"
 
@@ -7604,6 +7695,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr "Actualizar el conxuntu de cambeos dende''l servidor de OSM"
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7868,9 +7962,6 @@ msgstr "URL: "
 msgid "Please enter or paste an URL to retrieve changesets from the OSM API."
 msgstr "Introduza o apegue una URL pa recuperar cambeos de la API de OSM."
 
-msgid "Examples"
-msgstr "Exemplos"
-
 msgid ""
 "Note that changeset queries are currently always submitted to ''{0}'', "
 "regardless of the host, port and path of the URL entered below."
@@ -8874,15 +8965,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8911,33 +9002,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr "hestoria"
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -9061,6 +9125,33 @@ msgstr "Mapa deslizante"
 msgid "Tile Numbers"
 msgstr "Númberos de teseles"
 
+msgid "history"
+msgstr "hestoria"
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr "Navegador de axuda de JOSM"
 
@@ -9221,6 +9312,12 @@ 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"
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr "Vía {0}"
 
@@ -9230,6 +9327,9 @@ msgstr "Relación {0}"
 msgid "Object"
 msgstr "Oxetu"
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr "Comentar conxuntu de cambeos"
 
@@ -9401,6 +9501,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "Pon-yos un breve comentariu a los cambéos que tas xubiendo:"
 
@@ -10571,9 +10674,6 @@ msgid_plural "{0} tracks"
 msgstr[0] "{0} pista"
 msgstr[1] "{0} pistas"
 
-msgid "Description"
-msgstr "Descripción"
-
 msgid "Timespan"
 msgstr "Intervalu de tiempu"
 
@@ -14055,15 +14155,6 @@ msgstr "Subelementu preestablecíu ensin padre"
 msgid "Error parsing {0}: "
 msgstr "Erru analizando {0}: "
 
-msgid "Search preset"
-msgstr "Buscar predefiníu"
-
-msgid "Show preset search dialog"
-msgstr "Amosar diálogu de busca preestablecía"
-
-msgid "Search presets"
-msgstr "Buscar predefiníos"
-
 msgid "Presets"
 msgstr "Axustes Predefiníos"
 
@@ -14184,6 +14275,9 @@ msgstr "Tolos arquivos (*.*)"
 msgid "Received error page:"
 msgstr "Recibióse una páxina d''erru"
 
+msgid "{0}... [please type its number]"
+msgstr "{0}... [por favor, teclee el so númberu]"
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -14492,14 +14586,6 @@ msgstr "mou desconocíu {0}."
 msgid "get number of unread messages"
 msgstr "Llograr el númberu de mensaxes ensin lleer"
 
-msgid "You have {0} unread message."
-msgid_plural "You have {0} unread messages."
-msgstr[0] "Tien {0} mensaxe ensin lleer."
-msgstr[1] "Tien {0} mensaxes ensin lleer."
-
-msgid "Click here to see your inbox."
-msgstr "Faiga clic equí pa ver la bandexa d''entrada."
-
 msgid "Message notifier"
 msgstr "Mensaxe notificador"
 
@@ -14567,10 +14653,6 @@ msgstr ""
 "Ye compatible cola versión 0.6 del protocolu, ente que´l servidor diz que "
 "soporta {0} a {1}."
 
-msgid "Removed layer {0} because it is not allowed by the configured API."
-msgstr ""
-"Esaniciada la capa {0} porque nun ta dexáu pola configuración del API."
-
 msgid "Unexpected format of ID replied by the server. Got ''{0}''."
 msgstr "Formatu de ID inesperáu respondíu pol servidor. Llogróse ''{0}''."
 
@@ -16041,9 +16123,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr "{0}... [por favor, teclee el so númberu]"
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -16156,10 +16235,6 @@ msgid "Failed to load XML schema."
 msgstr "Erru al cargar l''esquema XML."
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -16760,6 +16835,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr "Tipu de serviciu"
 
@@ -18819,9 +18898,9 @@ msgid "Bay"
 msgstr "Concha"
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
-"Un gran cuerpu d''agua parcialmente cerráu per tierra pero con una gran boca."
 
 msgid "Shipping"
 msgstr "Saléu"
@@ -24676,6 +24755,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -24734,6 +24816,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -24815,6 +24900,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -24836,9 +24936,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -25435,6 +25532,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -25847,6 +25947,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Niger Delta Oct 2012 Landsat"
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -26290,6 +26393,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr "MSR Maps Topo"
 
@@ -27500,6 +27606,9 @@ msgstr "relation ensin tipu"
 msgid "{0} relation without {0} tag"
 msgstr "relación {0} ensin etiqueta {0}"
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr "religion ensin denominación"
 
@@ -27701,12 +27810,6 @@ msgid "Customization of public public transport stops."
 msgstr ""
 
 msgid ""
-"Creating and handling address nodes and buildings within Czech Republic."
-msgstr ""
-"Creación y manipulación de nodos de direcciones y edificios dientro de la "
-"República Checa."
-
-msgid ""
 "Allows to import various file formats into JOSM directly. Currently "
 "supported: TangoGPS, Garmin Trainings Center TCX."
 msgstr ""
@@ -27762,9 +27865,6 @@ msgstr ""
 "Fale colos usuarios editar el mapa cercanu, va ser notificáu de cuando "
 "daquién tea cerca de la so posición."
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -28187,13 +28287,6 @@ msgstr ""
 "sincroniza un vídeu georreferenciáu afaciéndolo a''l so posición na traza "
 "GPS. Preséu pa identificar oxetos visibles."
 
-msgid ""
-"Supports downloading tiled, scanned maps from walking-papers.org. This "
-"plugin is still under early development and may be buggy."
-msgstr ""
-"Soporta la descarga de teseles, mapes digitalizados de walking-papers.org. "
-"Esti componente entá ta nun desenvolvimientu tempranu y puede ser inestable."
-
 msgid "Easy downloading along a long set of interconnected ways"
 msgstr ""
 "Descargar fácilmente a lo llargo d''una llarga serie de víes interconectaes"
@@ -28843,13 +28936,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -30269,6 +30362,162 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+msgstr "Dixitalización automática"
+
+msgid ""
+"Please enable at least two WMS layers in the cadastre-fr plugin "
+"configuration.\n"
+"Layers ''Building'' and ''Parcel'' added by default."
+msgstr ""
+"Por favor dexar siquier dos capes WMS na configuración del complemento "
+"catastru-fr.\n"
+"Capar ''Edificios'' y ''Parceles'' fueron añedíes por omisión."
+
+msgid ""
+"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+msgstr ""
+"Alvertencia: fallu al establecer la opción de diálogu siempres visible. La "
+"esceición foi: {0}"
+
+msgid ""
+"To enable the cadastre WMS plugin, change\n"
+"the current projection to one of the cadastre\n"
+"projections and retry"
+msgstr ""
+"P''habilitar el plugin de catastru WMS, camude la\n"
+"proyección actual a una de proyección catastral\n"
+"y reintente"
+
+msgid "Change the current projection"
+msgstr "Camudar la proyección actual"
+
+msgid "Extract commune boundary"
+msgstr "Estrayer les llendes de la comuña"
+
+msgid "Only on vectorized layers"
+msgstr "Namá sobre capes vectorizaes"
+
+msgid "Cancel current grab"
+msgstr "Atayar la suxeción actual"
+
+msgid "Cancel current grab (only vector images)"
+msgstr "Atayar la suxeción actual (solo imaxes de vectores)"
+
+msgid "Cadastre grab"
+msgstr "Suxetar catastru"
+
+msgid "Download Image from French Cadastre WMS"
+msgstr "Descargando imaxes dende''l servidor francés WMS del Catastru"
+
+msgid "Cadastre: {0}"
+msgstr "Catastru: {0}"
+
+msgid "Georeference an image"
+msgstr "Xeorreferencia una imaxe"
+
+msgid "Grab non-georeferenced image"
+msgstr "Llograr imaxe non xeorreferenciada"
+
+msgid "Georeferencing interrupted"
+msgstr "Xeorreferenciación atayada"
+
+msgid ""
+"This image contains georeference data.\n"
+"Do you want to use them ?"
+msgstr ""
+"Esta imaxe contien información de georreferenciación.\n"
+"Deseya usala?"
+
+msgid "Load layer from cache"
+msgstr "Cargar la capa dende la memoria rápida"
+
+msgid "Load location from cache (only if cache is enabled)"
+msgstr "Cargar localizaciones dende cache (solu si la cache ta activada)"
+
+msgid "{0} not allowed with the current projection"
+msgstr "Nun se dexa {0} cola proyección actual"
+
+msgid ""
+"Cannot load cache {0} which is not compatible with current projection zone"
+msgstr ""
+"Non puede cargase el caxé {0} que ye incompatible cola proyección actual de "
+"la zona"
+
+msgid ""
+"Selected file {0} is not a cache file from this plugin (invalid extension)"
+msgstr ""
+"El ficheru escoyíu {0} nun ye un ficheru de caxé d''esti plugin (estensión "
+"inválida)"
+
+msgid "The location {0} is already on screen. Cache not loaded."
+msgstr "El llugar {0} yá ta na pantalla. Nun se carga caxé."
+
+msgid "(optional)"
+msgstr "(opcional)"
+
+msgid "Change location"
+msgstr "Camudar localización"
+
+msgid "Set a new location for the next request"
+msgstr "Establecer una nueva localización pa la nueva solicitú"
+
+msgid "Add a new municipality layer"
+msgstr "Añedir una nueva capa de conceyu"
+
+msgid "Commune"
+msgstr "Comuña"
+
+msgid ""
+"<html>Enter the town,village or city name.<br>Use the syntax and punctuation "
+"known by www.cadastre.gouv.fr .</html>"
+msgstr ""
+"<html>Introduza''l nome de la población.<br>Utilice la sintaxis y la "
+"puntuación conocida por www.cadastre.gouv.fr.</html>"
+
+msgid "Departement"
+msgstr "Departamentu"
+
+msgid "<html>Departement number (optional)</html>"
+msgstr "<html>Númberu de Departamentu (opcional)</html>"
+
+msgid "Add new layer"
+msgstr "Añedir nueva capa"
+
+msgid "Open Cadastre Preferences"
+msgstr "Abrir les Preferencies de Catastru"
+
+msgid "Refine georeferencing"
+msgstr "Refinar la xeorreferenciación"
+
+msgid "Improve georeferencing (only raster images)"
+msgstr "Ameyorar la xeorreferenciación (solo imaxes raster)"
+
+msgid "Reset cookie"
+msgstr "Reinicializar cookie"
+
+msgid "Get a new cookie (session timeout)"
+msgstr "Llograr nueva cookie (sesión caducada)"
+
+msgid "Save image as..."
+msgstr "Guardar imaxe como..."
+
+msgid "PNG files (*.png)"
+msgstr "Arquivos PNG (*.png)"
+
+msgid "GeoTiff files (*.tif)"
+msgstr "Arquivos GeoTiff (*.tif)"
+
+msgid "Export image (only raster images)"
+msgstr "Esportar imaxe (solamente imaxes raster)"
+
+msgid ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+"Más d''una capa WMS presente\n"
+"Escueya primero una d''elles y reinténtelo"
+
 msgid "on polygon"
 msgstr "en polígonu"
 
@@ -30284,96 +30533,83 @@ msgstr "Siguiente Númberu"
 msgid "Enter addresses"
 msgstr "Ingresar direcciones"
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
+msgstr "Axustar WMS"
+
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
+msgstr "Afaer la posición de la capa WMS (guardáu pa imaxes raster namá)"
+
+msgid "Add \"source=...\" to elements?"
+msgstr "¿Añedir etiqueta sobre la fonte a los elementos (source=...)?"
+
+msgid "Download from Cadastre"
 msgstr ""
-"Atopóse´l llugar ''{0}'' na  caxé.\n"
-"Invocar primero la caxé?\n"
-"(No = nueva caxé)"
 
-msgid "Select Feuille"
-msgstr "Escoyer Feuille"
+msgid "Objects:"
+msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Select to download buildings in the selected download area."
 msgstr ""
-"Erru al cargar el ficheru.\n"
-"Probablemente una versión antigua de caxé del ficheru."
 
-msgid "Lambert Zone {0} cache file (.{0})"
-msgstr "Zona Lambert {0} ficheru de caxé (.{0})"
+msgid "address"
+msgstr "dirección"
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
-msgstr "Lambert CC9 Zone {0} ficheru de caxé (.CC{0})"
+msgid "Select to download addresses in the selected download area."
+msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
-msgstr "Ficheru de Caxé Guadeloupe Fort-Marigot (.UTM1)"
+msgid "symbol"
+msgstr "símbolu"
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
-msgstr "Ficheru de Caxé Guadeloupe Ste-Anne (.UTM2)"
+msgid "Select to download symbols in the selected download area."
+msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
-msgstr "Ficheru de Caxé Martinique Fort Desaix(.UTM3)"
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
-msgstr "Ficheru de Caxé Reunion RGR92 (.UTM4)"
+msgid "parcel"
+msgstr "parcela"
 
-msgid "CadastreGrabber: Illegal url."
-msgstr "CadastreGrabber: URL Illegal."
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
+msgstr "númberu de parcela"
 
 msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
-"Non puede abrir una nueva sesión de veceru.\n"
-"Servidor en caltenimientu o temporalmente sobrecargáu."
 
-msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+msgid "section"
+msgstr "sección"
+
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
-"Nun s´atopó o nun ta disponible\n"
-"el barriu o la ciudá {0}, o atayóse\n"
-"l''acción"
 
-msgid "Choose from..."
-msgstr "Escoyer dende..."
+msgid "locality"
+msgstr "localidá"
 
-msgid "Select commune"
-msgstr "Escoyer comuña"
+msgid "Select to download localities in the selected download area."
+msgstr ""
 
-msgid "Auto sourcing"
-msgstr "Dixitalización automática"
+msgid "commune"
+msgstr "comuña"
 
 msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+"Select to download municipality boundary in the selected download area."
 msgstr ""
-"Por favor dexar siquier dos capes WMS na configuración del complemento "
-"catastru-fr.\n"
-"Capar ''Edificios'' y ''Parceles'' fueron añedíes por omisión."
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
-"Alvertencia: fallu al establecer la opción de diálogu siempres visible. La "
-"esceición foi: {0}"
 
-msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+msgid "Recipient"
 msgstr ""
-"P''habilitar el plugin de catastru WMS, camude la\n"
-"proyección actual a una de proyección catastral\n"
-"y reintente"
 
-msgid "Change the current projection"
-msgstr "Camudar la proyección actual"
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
+msgstr ""
 
 msgid "Replace original background by JOSM background color."
 msgstr ""
@@ -30426,27 +30662,6 @@ msgstr "mediu"
 msgid "low"
 msgstr "baxu"
 
-msgid "symbol"
-msgstr "símbolu"
-
-msgid "parcel"
-msgstr "parcela"
-
-msgid "parcel number"
-msgstr "númberu de parcela"
-
-msgid "address"
-msgstr "dirección"
-
-msgid "locality"
-msgstr "localidá"
-
-msgid "section"
-msgstr "sección"
-
-msgid "commune"
-msgstr "comuña"
-
 msgid "Enable automatic caching."
 msgstr "Activar caxé automática"
 
@@ -30610,8 +30825,66 @@ msgstr "Habilitar pa emplegar la etiqueta ''add:street'' nos nodos."
 msgid "Unexpected file extension. {0}"
 msgstr "Estensión d´arquivu inesperada. {0}"
 
-msgid "Add \"source=...\" to elements?"
-msgstr "¿Añedir etiqueta sobre la fonte a los elementos (source=...)?"
+msgid ""
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
+msgstr ""
+"Atopóse´l llugar ''{0}'' na  caxé.\n"
+"Invocar primero la caxé?\n"
+"(No = nueva caxé)"
+
+msgid "Select Feuille"
+msgstr "Escoyer Feuille"
+
+msgid ""
+"Error loading file.\n"
+"Probably an old version of the cache file."
+msgstr ""
+"Erru al cargar el ficheru.\n"
+"Probablemente una versión antigua de caxé del ficheru."
+
+msgid "Lambert Zone {0} cache file (.{0})"
+msgstr "Zona Lambert {0} ficheru de caxé (.{0})"
+
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgstr "Lambert CC9 Zone {0} ficheru de caxé (.CC{0})"
+
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgstr "Ficheru de Caxé Guadeloupe Fort-Marigot (.UTM1)"
+
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgstr "Ficheru de Caxé Guadeloupe Ste-Anne (.UTM2)"
+
+msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgstr "Ficheru de Caxé Martinique Fort Desaix(.UTM3)"
+
+msgid "Reunion RGR92 cache file (.UTM4)"
+msgstr "Ficheru de Caxé Reunion RGR92 (.UTM4)"
+
+msgid "CadastreGrabber: Illegal url."
+msgstr "CadastreGrabber: URL Illegal."
+
+msgid ""
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
+msgstr ""
+"Non puede abrir una nueva sesión de veceru.\n"
+"Servidor en caltenimientu o temporalmente sobrecargáu."
+
+msgid ""
+"Town/city {0} not found or not available\n"
+"or action canceled"
+msgstr ""
+"Nun s´atopó o nun ta disponible\n"
+"el barriu o la ciudá {0}, o atayóse\n"
+"l''acción"
+
+msgid "Choose from..."
+msgstr "Escoyer dende..."
+
+msgid "Select commune"
+msgstr "Escoyer comuña"
 
 msgid "Downloading {0}"
 msgstr "Descargando {0}"
@@ -30662,125 +30935,6 @@ msgstr ""
 "Esta comuña nun ta vectorizada.\n"
 "Por favor use la otra entrada del menú pa georeferenciar una Imaxe de Plan''"
 
-msgid "Extract commune boundary"
-msgstr "Estrayer les llendes de la comuña"
-
-msgid "Only on vectorized layers"
-msgstr "Namá sobre capes vectorizaes"
-
-msgid "Cancel current grab"
-msgstr "Atayar la suxeción actual"
-
-msgid "Cancel current grab (only vector images)"
-msgstr "Atayar la suxeción actual (solo imaxes de vectores)"
-
-msgid "Cadastre grab"
-msgstr "Suxetar catastru"
-
-msgid "Download Image from French Cadastre WMS"
-msgstr "Descargando imaxes dende''l servidor francés WMS del Catastru"
-
-msgid "Cadastre: {0}"
-msgstr "Catastru: {0}"
-
-msgid "Georeference an image"
-msgstr "Xeorreferencia una imaxe"
-
-msgid "Grab non-georeferenced image"
-msgstr "Llograr imaxe non xeorreferenciada"
-
-msgid "Georeferencing interrupted"
-msgstr "Xeorreferenciación atayada"
-
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
-msgstr ""
-"Esta imaxe contien información de georreferenciación.\n"
-"Deseya usala?"
-
-msgid "Load layer from cache"
-msgstr "Cargar la capa dende la memoria rápida"
-
-msgid "Load location from cache (only if cache is enabled)"
-msgstr "Cargar localizaciones dende cache (solu si la cache ta activada)"
-
-msgid "{0} not allowed with the current projection"
-msgstr "Nun se dexa {0} cola proyección actual"
-
-msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
-msgstr ""
-"Non puede cargase el caxé {0} que ye incompatible cola proyección actual de "
-"la zona"
-
-msgid ""
-"Selected file {0} is not a cache file from this plugin (invalid extension)"
-msgstr ""
-"El ficheru escoyíu {0} nun ye un ficheru de caxé d''esti plugin (estensión "
-"inválida)"
-
-msgid "The location {0} is already on screen. Cache not loaded."
-msgstr "El llugar {0} yá ta na pantalla. Nun se carga caxé."
-
-msgid "(optional)"
-msgstr "(opcional)"
-
-msgid "Change location"
-msgstr "Camudar localización"
-
-msgid "Set a new location for the next request"
-msgstr "Establecer una nueva localización pa la nueva solicitú"
-
-msgid "Add a new municipality layer"
-msgstr "Añedir una nueva capa de conceyu"
-
-msgid "Commune"
-msgstr "Comuña"
-
-msgid ""
-"<html>Enter the town,village or city name.<br>Use the syntax and punctuation "
-"known by www.cadastre.gouv.fr .</html>"
-msgstr ""
-"<html>Introduza''l nome de la población.<br>Utilice la sintaxis y la "
-"puntuación conocida por www.cadastre.gouv.fr.</html>"
-
-msgid "Departement"
-msgstr "Departamentu"
-
-msgid "<html>Departement number (optional)</html>"
-msgstr "<html>Númberu de Departamentu (opcional)</html>"
-
-msgid "Add new layer"
-msgstr "Añedir nueva capa"
-
-msgid "Open Cadastre Preferences"
-msgstr "Abrir les Preferencies de Catastru"
-
-msgid "Refine georeferencing"
-msgstr "Refinar la xeorreferenciación"
-
-msgid "Improve georeferencing (only raster images)"
-msgstr "Ameyorar la xeorreferenciación (solo imaxes raster)"
-
-msgid "Reset cookie"
-msgstr "Reinicializar cookie"
-
-msgid "Get a new cookie (session timeout)"
-msgstr "Llograr nueva cookie (sesión caducada)"
-
-msgid "Save image as..."
-msgstr "Guardar imaxe como..."
-
-msgid "PNG files (*.png)"
-msgstr "Arquivos PNG (*.png)"
-
-msgid "GeoTiff files (*.tif)"
-msgstr "Arquivos GeoTiff (*.tif)"
-
-msgid "Export image (only raster images)"
-msgstr "Esportar imaxe (solamente imaxes raster)"
-
 msgid ""
 "Click first corner for image cropping\n"
 "(two points required)"
@@ -30834,19 +30988,6 @@ msgstr "Escueya la segunda esquina pa tosquilar(crop)"
 msgid "Click second Lambert crosspiece for georeferencing"
 msgstr "Faiga click na segunda Pieza cruciada Lambert pa Georeferenciar"
 
-msgid "Adjust WMS"
-msgstr "Axustar WMS"
-
-msgid "Adjust the position of the WMS layer (saved for raster images only)"
-msgstr "Afaer la posición de la capa WMS (guardáu pa imaxes raster namá)"
-
-msgid ""
-"More than one WMS layer present\n"
-"Select one of them first, then retry"
-msgstr ""
-"Más d''una capa WMS presente\n"
-"Escueya primero una d''elles y reinténtelo"
-
 msgid "Reset offset"
 msgstr "Reiniciar rectificación"
 
@@ -31287,20 +31428,6 @@ msgid ""
 "to cancel the download."
 msgstr ""
 
-msgid "Split area"
-msgstr "Estremar área"
-
-msgid "Splits an area by an untagged way."
-msgstr "Estremar una área por aciu una vía ensin etiquetar"
-
-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 ""
-"La área escoyida nun puede estremase porque ye miembru de dalguna relación.\n"
-"Esanicie la área de la relación antes d''estremalo."
-
 msgid "TangoGPS Files (*.log)"
 msgstr "Arquivos TangoGPS (*.log)"
 
@@ -37471,28 +37598,6 @@ msgstr "bucle"
 msgid "mute"
 msgstr "silenciar"
 
-msgid "Walking Papers Scanned Map"
-msgstr "Mapes Escaniaos de Walking Papers"
-
-msgid ""
-"Display a map that was previously scanned and uploaded to walking-papers.org"
-msgstr ""
-"Amosar un mapa que taba enantes escaniáu y xubíu a walking-papers.org"
-
-msgid ""
-"Enter a walking-papers.org URL or ID (the bit after the ?id= in the URL)"
-msgstr ""
-"Introduz una URL de walking-papers.org o un ID (xusto dempués de ?id= na URL)"
-
-msgid "Could not read information from walking-papers.org the id \"{0}\""
-msgstr "Non pudo lleese la información de walking-papers.org el id \"{0}\""
-
-msgid "Walking Papers: {0}"
-msgstr "Walking Papers: {0}"
-
-msgid "Walking Papers layer ({0}) in zoom {1}"
-msgstr "Capa Walking Papers ({0}) en zoom {1}"
-
 msgid "Way Download"
 msgstr "Descargar vía"
 
@@ -37681,6 +37786,26 @@ msgstr ""
 "Añede una etiqueta ''wikipedia'' correspondiente a esti artículu pa los "
 "oxetos escoyíos"
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "The Ultimate WMS Super-speed Turbo Challenge II"
 
diff --git a/i18n/po/az.po b/i18n/po/az.po
index 5848c04..71235eb 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
 "PO-Revision-Date: 2016-12-17 13:38+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: 2017-09-03 04:35+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:33+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
 msgstr ""
@@ -386,6 +386,34 @@ msgstr ""
 msgid "Delete selected objects."
 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 "Delete Layer"
 msgstr ""
 
@@ -1292,29 +1320,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2723,34 +2737,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2782,6 +2768,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2901,6 +2910,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3008,6 +3029,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr ""
 
@@ -3051,6 +3075,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3687,6 +3714,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4727,9 +4808,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4775,6 +4853,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr "OSM API-nin inisalizasiyası"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4796,9 +4877,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -4999,6 +5077,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5251,6 +5337,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7033,6 +7123,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7255,9 +7348,6 @@ 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."
@@ -8185,15 +8275,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8222,33 +8312,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8372,6 +8435,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8505,6 +8595,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8514,6 +8610,9 @@ msgstr ""
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8658,6 +8757,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9697,9 +9799,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12836,15 +12935,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -12950,6 +13040,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13199,14 +13292,6 @@ 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 ""
 
@@ -13270,9 +13355,6 @@ msgid ""
 "{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 ""
 
@@ -14504,9 +14586,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14603,10 +14682,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15194,6 +15269,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17231,7 +17310,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23057,6 +23137,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23115,6 +23198,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23196,6 +23282,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23217,9 +23318,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23814,6 +23912,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24225,6 +24326,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24668,6 +24772,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25871,6 +25978,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26051,10 +26161,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26102,9 +26208,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26448,11 +26551,6 @@ msgid ""
 "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 ""
 
@@ -27063,13 +27161,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28366,6 +28464,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28381,77 +28617,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28502,27 +28743,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28663,160 +28883,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28866,17 +29023,6 @@ 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 ""
 
@@ -29313,18 +29459,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35070,26 +35204,6 @@ 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 ""
 
@@ -35258,6 +35372,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/be.po b/i18n/po/be.po
index 727c0ff..5d26085 100644
--- a/i18n/po/be.po
+++ b/i18n/po/be.po
@@ -10,7 +10,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
 "PO-Revision-Date: 2017-02-19 15:59+0000\n"
 "Last-Translator: Darafei Praliaskouski <komzpa at gmail.com>\n"
 "Language-Team: Belarusian <i18n at mova.org>\n"
@@ -19,8 +19,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: 2017-09-03 04:36+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:34+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: be\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -407,6 +407,50 @@ msgstr "Выдаліць"
 msgid "Delete selected objects."
 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 ""
+"Вы збіраецеся выдаліць пункты, змешчаныя за межамі запампаванай "
+"зоны.<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 "
+"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] ""
+"Вы хочаце выдаліць {0} дачыненне: {1}<br/>Патрэба ў гэтым узнікае вельмі "
+"рэдка і адмяніць выдаленне пасля загрузкі дадзеных на сервер можа быць не "
+"лёгка. <br/> Вы сапраўды жадаеце выдаліць дачыненне?"
+msgstr[1] ""
+"Вы хочаце выдаліць {0} дачыненняў: {1}<br/>Патрэба ў гэтым узнікае вельмі "
+"рэдка і адмяніць выдаленне пасля загрузкі дадзеных на сервер можа быць не "
+"лёгка. <br/> Вы сапраўды жадаеце выдаліць дачыненні?"
+msgstr[2] ""
+"Вы хочаце выдаліць {0} дачыненняў: {1}<br/>Патрэба ў гэтым узнікае вельмі "
+"рэдка і адмяніць выдаленне пасля загрузкі дадзеных на сервер можа быць не "
+"лёгка. <br/> Вы сапраўды жадаеце выдаліць дачыненні?"
+
+msgid "Delete relation?"
+msgstr "Выдаліць дачыненне?"
+
 msgid "Delete Layer"
 msgstr "Выдаліць пласт"
 
@@ -1414,35 +1458,14 @@ msgstr " [id: {0}]"
 msgid "Segment {0}: {1}"
 msgstr "Сегмент {0}: {1}"
 
-msgid "You must select two or more nodes to split a circular way."
-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 "Search preset"
+msgstr "Знайсці нарыхтоўку..."
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
-msgstr ""
-"Удзел у дачыненні скапіяваны ва ўсе новыя лініі.<br>Праверце яго і, пры "
-"неабходнасці, выправіце."
+msgid "Show preset search dialog"
+msgstr "Паказаць дыялог пошуку нарыхтовак"
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] "Падзяліць лінію {0} на {1} адрэзак"
-msgstr[1] "Падзяліць лінію {0} на {1} адрэзкі"
-msgstr[2] "Падзяліць лінію {0} на {1} адрэзкаў"
+msgid "Search presets"
+msgstr "Пошук нарыхтовак"
 
 msgid "Discourage upload"
 msgstr ""
@@ -2993,50 +3016,6 @@ msgstr[0] "Выдаліць {0} дачыненне"
 msgstr[1] "Выдаліць {0} дачыненні"
 msgstr[2] "Выдаліць {0} дачыненняў"
 
-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 ""
-"Вы збіраецеся выдаліць пункты, змешчаныя за межамі запампаванай "
-"зоны.<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 "
-"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] ""
-"Вы хочаце выдаліць {0} дачыненне: {1}<br/>Патрэба ў гэтым узнікае вельмі "
-"рэдка і адмяніць выдаленне пасля загрузкі дадзеных на сервер можа быць не "
-"лёгка. <br/> Вы сапраўды жадаеце выдаліць дачыненне?"
-msgstr[1] ""
-"Вы хочаце выдаліць {0} дачыненняў: {1}<br/>Патрэба ў гэтым узнікае вельмі "
-"рэдка і адмяніць выдаленне пасля загрузкі дадзеных на сервер можа быць не "
-"лёгка. <br/> Вы сапраўды жадаеце выдаліць дачыненні?"
-msgstr[2] ""
-"Вы хочаце выдаліць {0} дачыненняў: {1}<br/>Патрэба ў гэтым узнікае вельмі "
-"рэдка і адмяніць выдаленне пасля загрузкі дадзеных на сервер можа быць не "
-"лёгка. <br/> Вы сапраўды жадаеце выдаліць дачыненні?"
-
-msgid "Delete relation?"
-msgstr "Выдаліць дачыненне?"
-
 msgid "Move {0} node"
 msgid_plural "Move {0} nodes"
 msgstr[0] "Перамясціць {0} пункт"
@@ -3073,6 +3052,36 @@ msgstr[2] "Вылучаны {0} аб’ектаў"
 msgid "Sequence: {0}"
 msgstr "Паслядоўнасць: {0}"
 
+msgid "You must select two or more nodes to split a circular way."
+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] "Падзяліць лінію {0} на {1} адрэзак"
+msgstr[1] "Падзяліць лінію {0} на {1} адрэзкі"
+msgstr[2] "Падзяліць лінію {0} на {1} адрэзкаў"
+
 msgid "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] "Трансфармаваць {0} пункт"
@@ -3212,6 +3221,18 @@ msgstr "Няправільнае значэнне шыраты ''{0}''"
 msgid "Illegal longitude value ''{0}''"
 msgstr "Няправільнае значэнне даўгаты ''{0}''"
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr "Не атрымалася стварыць адсутны каталог кэша: {0}"
 
@@ -3338,6 +3359,9 @@ msgstr "Ангельская сістэма мер"
 msgid "Nautical Mile"
 msgstr "Марская міля"
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr "Чакалася непустое значэнне для параметру ''{0}'', атрымана ''{1}''"
+
 msgid "UNKNOWN"
 msgstr "НЕВЯДОМА"
 
@@ -3382,6 +3406,9 @@ msgctxt "compass"
 msgid "E"
 msgstr "У"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr "Дата здымка: {0}"
 
@@ -4061,6 +4088,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr "Уласная праекцыя"
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr "Апісанне"
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr "Паказаць гэту даведку"
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr "Прыклады"
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr "GRS80"
 
@@ -5145,9 +5226,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr "Зрушэнне"
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr "Чакалася непустое значэнне для параметру ''{0}'', атрымана ''{1}''"
-
 msgid "Outdated Java version"
 msgstr "Састарэлая версія Java"
 
@@ -5197,6 +5275,9 @@ msgstr "Ініцыялізацыя ўнутраных даных пра межы
 msgid "Initializing OSM API"
 msgstr "Ініцыялізацыя OSM API"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr "Пласт {0} выдалены, бо забаронены да выкарыстання."
+
 msgid "Initializing internal traffic data"
 msgstr "Ініцыялізацыя ўнутраных даных пра дарожны рух"
 
@@ -5218,9 +5299,6 @@ msgstr "выкарыстанне"
 msgid "options"
 msgstr "опцыі"
 
-msgid "Show this help"
-msgstr "Паказаць гэту даведку"
-
 msgid "Standard unix geometry argument"
 msgstr "Стандартны параметр геаметрыі unix"
 
@@ -5456,6 +5534,15 @@ msgstr ""
 "атрымалася</b> з-за наступных памылак сеткі:<br>{1}Магчыма, чыннік у "
 "адсутнасці канфігурацыі проксі.<br>Жадаеце змяніць налады проксі цяпер?"
 
+msgid "You have {0} unread message."
+msgid_plural "You have {0} unread messages."
+msgstr[0] "У вас {0} непрачытанае паведамленне."
+msgstr[1] "У вас {0} непрачытаных паведамленні."
+msgstr[2] "У вас {0} непрачытаных паведамленняў."
+
+msgid "Click here to see your inbox."
+msgstr "Пстрыкніце тут для прагляду ўваходных паведамленняў."
+
 msgctxt "menu"
 msgid "File"
 msgstr "Файл"
@@ -5719,6 +5806,12 @@ msgstr ""
 "Бягучае значэнне не з’яўляецца правільным індэксам квадрата для дадзенага "
 "ўзроўня маштабавання"
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+"Не атрымалася адкрыць справаздачу пра памылку. Калі ласка, паведаміце пра яе "
+"ўручную на гэтым вэб-сайце:"
+
 msgid "You have encountered a bug in JOSM"
 msgstr "Вы сутыкнуліся з памылкай у JOSM"
 
@@ -7675,6 +7768,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr "Абнавіць пакет правак з сервера OSM"
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7934,9 +8030,6 @@ msgid "Please enter or paste an URL to retrieve changesets from the OSM API."
 msgstr ""
 "Калі ласка, увядзіце ці ўстаўце URL для атрымання пакетаў правак з OSM API."
 
-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."
@@ -8948,15 +9041,15 @@ msgstr "Плошча ўчастка для загрузкі прымальная
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8985,33 +9078,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr "гісторыя"
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -9135,6 +9201,33 @@ msgstr "Карта"
 msgid "Tile Numbers"
 msgstr "Нумары квадратаў"
 
+msgid "history"
+msgstr "гісторыя"
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr "Браўзар даведкі JOSM"
 
@@ -9293,6 +9386,12 @@ msgstr "Наблізіцца да гэтага пункта ў бягучым п
 msgid "Open a history browser with the history of this node"
 msgstr "Адкрыць гісторыю гэтага пункта з дапамогай браўзара"
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr "Лінія {0}"
 
@@ -9302,6 +9401,9 @@ msgstr "Дачыненне {0}"
 msgid "Object"
 msgstr "Аб’ект"
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr "Каментар да пакета правак"
 
@@ -9476,6 +9578,9 @@ msgstr "Уключыце \"Перадаць на сервер\" для адпр
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr "Уключыце \"Захаваць\" для захавання пласта ў паказаны злева файл."
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "Пракаментуйце дадзеныя, якія перадаюцца на сервер:"
 
@@ -10680,9 +10785,6 @@ msgstr[0] "{0} трэк"
 msgstr[1] "{0} трэка"
 msgstr[2] "{0} трэкаў"
 
-msgid "Description"
-msgstr "Апісанне"
-
 msgid "Timespan"
 msgstr "Перыяд"
 
@@ -14150,15 +14252,6 @@ msgstr "Нарыхтоўка ўкладзенага элемента без ба
 msgid "Error parsing {0}: "
 msgstr "Памылка пры разборы {0}: "
 
-msgid "Search preset"
-msgstr "Знайсці нарыхтоўку..."
-
-msgid "Show preset search dialog"
-msgstr "Паказаць дыялог пошуку нарыхтовак"
-
-msgid "Search presets"
-msgstr "Пошук нарыхтовак"
-
 msgid "Presets"
 msgstr "Нарыхтоўкі"
 
@@ -14277,6 +14370,9 @@ msgstr "Усе файлы (*.*)"
 msgid "Received error page:"
 msgstr "Атрыманая старонка паведамлення пра памылку:"
 
+msgid "{0}... [please type its number]"
+msgstr "{0}... [калі ласка, увядзіце яго нумар]"
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -14579,15 +14675,6 @@ msgstr "Невядомы рэжым {0}."
 msgid "get number of unread messages"
 msgstr "атрымаць лік непрачытаных паведамленняў"
 
-msgid "You have {0} unread message."
-msgid_plural "You have {0} unread messages."
-msgstr[0] "У вас {0} непрачытанае паведамленне."
-msgstr[1] "У вас {0} непрачытаных паведамленні."
-msgstr[2] "У вас {0} непрачытаных паведамленняў."
-
-msgid "Click here to see your inbox."
-msgstr "Пстрыкніце тут для прагляду ўваходных паведамленняў."
-
 msgid "Message notifier"
 msgstr "Паведамленні"
 
@@ -14656,9 +14743,6 @@ msgstr ""
 "Падтрымліваецца пратакол версіі 0.6, у той час як сервер сказаў, што ён "
 "падтрымлівае {0} да {1}."
 
-msgid "Removed layer {0} because it is not allowed by the configured API."
-msgstr "Пласт {0} выдалены, бо забаронены да выкарыстання."
-
 msgid "Unexpected format of ID replied by the server. Got ''{0}''."
 msgstr "сервер вярнуў нечаканы фармат id, бягучае значэнне \"{0}\""
 
@@ -16180,9 +16264,6 @@ msgstr ""
 "http://forum.openstreetmap.org/viewtopic.php?id=25677).\n"
 "Зараз JOSM выдзелена {1,number,#}МБ"
 
-msgid "{0}... [please type its number]"
-msgstr "{0}... [калі ласка, увядзіце яго нумар]"
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -16295,12 +16376,6 @@ msgid "Failed to load XML schema."
 msgstr "Немагчыма загрузіць XML схему."
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-"Не атрымалася адкрыць справаздачу пра памылку. Калі ласка, паведаміце пра яе "
-"ўручную на гэтым вэб-сайце:"
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -16902,6 +16977,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr "не"
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr "Тып службовага шляху"
 
@@ -18966,9 +19045,9 @@ msgid "Bay"
 msgstr "Бухта"
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
-"Вялікі водны ўчастак, часткова абмежаваны сушай, але мае шырокае вусце"
 
 msgid "Shipping"
 msgstr "Суднаходства"
@@ -24817,6 +24896,9 @@ msgstr "Waymarked Trails: верхавая язда"
 msgid "Waymarked Trails: Winter Sports"
 msgstr "Waymarked Trails: Зімовыя віды спорту"
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr "OSM Inspector: геаметрыя"
 
@@ -24876,6 +24958,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -24957,6 +25042,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -24978,9 +25078,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -25576,6 +25673,9 @@ msgstr "Берлін - аэрафотаздымка 2015"
 msgid "Berlin aerial photograph 2016"
 msgstr "Берлін - аэрафотаздымка 2016"
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -25994,6 +26094,9 @@ msgstr "Люксембург Inspire Воды"
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Дэльта Нігера, кастрычнік 2012 Landsat"
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -26439,6 +26542,9 @@ msgstr "NLSC Open Data WMTS"
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr "Здымкі з imagico.de: Кіліманджара 2016"
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr "MSR Maps Topo"
 
@@ -27685,6 +27791,9 @@ msgstr "дачыненне без тыпу"
 msgid "{0} relation without {0} tag"
 msgstr "{0} дачыненне без тэга {0}"
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr "тэг religion без тэга denomination"
 
@@ -27889,11 +27998,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -27952,9 +28056,6 @@ msgstr ""
 "Кантактуйце з іншымі ўдзельнікамі, якія працуюць з картай побач з вамі, "
 "атрымлівайце абвесткі, калі хто-то з’яўляецца побач."
 
-msgid "Allows you to view a GeoJSON file as a layer."
-msgstr "Дазваляе загрузіць файл GeoJSON як пласт."
-
 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."
@@ -28396,13 +28497,6 @@ 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 "Хуткая запампоўка ўздоўж вялікага набору злучаных ліній"
 
@@ -29049,15 +29143,15 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
+msgid "Start Mapillary layer"
+msgstr "Запусціць пласт Mapillary"
+
 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 для бягучага віду"
 
@@ -30494,6 +30588,160 @@ msgstr[2] "{0} будынкаў з канфліктамі адрасоў"
 msgid "No address nodes inside buildings found"
 msgstr "Адрасныя пункты ўсярэдзіне будынкаў не знойдзены"
 
+msgid "Auto sourcing"
+msgstr "Аўта крыніцы"
+
+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 "Змяніць бягучую праекцыю"
+
+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 "Запампаваць малюнак з WMS французскага кадастра"
+
+msgid "Cadastre: {0}"
+msgstr "Кадастр: {0}"
+
+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 ""
+"Гэта выява змяшчае дадзеныя геаспасылак.\n"
+"Вы хочаце скарыстацца імі?"
+
+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 "{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 "Становішча {0} ужо на экране. Кэш не загружаны."
+
+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 ""
+"<html>Калі ласка, увядзіце назву сяла, вёскі ці горада.<br>Выкарыстоўвайце "
+"сінтаксіс і пунктуацыю, апублікаваную на www.cadastre.gouv.fr</html>"
+
+msgid "Departement"
+msgstr "Дэпартамент"
+
+msgid "<html>Departement number (optional)</html>"
+msgstr "<html>Нумар дэпартамента (не абавязкова)</html>"
+
+msgid "Add new layer"
+msgstr "Дадаць новы пласт"
+
+msgid "Open Cadastre Preferences"
+msgstr "Налады Open Cadastre"
+
+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 "Файлы PNG (*.png)"
+
+msgid "GeoTiff files (*.tif)"
+msgstr "Файлы GeoTiff (*.tif)"
+
+msgid "Export image (only raster images)"
+msgstr "Экспартаваць малюнак (толькі растравыя малюнкі)"
+
+msgid ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+"Прысутнічае больш, чым адзін пласт WMS.\n"
+"Выберыце спачатку адзін з іх, а затым паўтарыце."
+
 msgid "on polygon"
 msgstr "на палігоне"
 
@@ -30509,95 +30757,83 @@ msgstr "Наступны №"
 msgid "Enter addresses"
 msgstr "Увесці адрасы"
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
+msgstr "Падбудаваць WMS"
+
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
+msgstr "Налада становішча пласта WMS (захавана толькі для растравых выяў)"
+
+msgid "Add \"source=...\" to elements?"
+msgstr "Дадаць \"source=...\" да элементаў?"
+
+msgid "Download from Cadastre"
 msgstr ""
-"Становішча \"{0}\" знойдзена ў кэшы.\n"
-"Спачатку загрузіць кэш?\n"
-"(Не = новы кэш)"
 
-msgid "Select Feuille"
-msgstr "Абраць аркуш"
+msgid "Objects:"
+msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Select to download buildings in the selected download area."
 msgstr ""
-"Памылка загрузкі файла.\n"
-"Магчыма ў кэшы старая версія файла."
 
-msgid "Lambert Zone {0} cache file (.{0})"
-msgstr "Файл кэша (.{0}) зоны Lambert {0}"
+msgid "address"
+msgstr "адрас"
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
-msgstr "Файл кэша  (.CC{0}) зоны Lambert CC9 {0}"
+msgid "Select to download addresses in the selected download area."
+msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
-msgstr "Файл кэша Guadeloupe Fort-Marigot (.UTM1)"
+msgid "symbol"
+msgstr "знак"
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
-msgstr "Файл кэша Guadeloupe Ste-Anne (.UTM2)"
+msgid "Select to download symbols in the selected download area."
+msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
-msgstr "Файл кэша Martinique Fort Desaix (.UTM3)"
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
-msgstr "Файл кэша Reunion RGR92 (.UTM4)"
+msgid "parcel"
+msgstr "участак"
 
-msgid "CadastreGrabber: Illegal url."
-msgstr "CadastreGrabber: Няправільная спасылка"
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
+msgstr "нумар участку"
 
 msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
-"Не атрымоўваецца адкрыць новую сесію кліента.\n"
-"Сервер на абслугоўванні ці часова перагружаны."
 
-msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+msgid "section"
+msgstr "частка"
+
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
-"Горад {0} не знойдзены ці недаступны\n"
-"ці дзеянне адменена"
 
-msgid "Choose from..."
-msgstr "Абраць з..."
+msgid "locality"
+msgstr "раён"
 
-msgid "Select commune"
-msgstr "Выберыце камуну"
+msgid "Select to download localities in the selected download area."
+msgstr ""
 
-msgid "Auto sourcing"
-msgstr "Аўта крыніцы"
+msgid "commune"
+msgstr "камуна"
 
 msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+"Select to download municipality boundary in the selected download area."
 msgstr ""
-"Калі ласка, уключыце не меней дзвюх WMS пластоў у наладах модуля cadastre-"
-"fr.\n"
-"Пласты ''Building''і ''Parcel''дадаюцца па змаўчанні."
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
-"Папярэджанне: Не атрымалася вывесці наверх дадатковую панэль. Тэкст памылкі: "
-"{0}"
 
-msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+msgid "Recipient"
 msgstr ""
-"Каб уключыць модуль кадастру WMS,\n"
-"змяніце праекцыю на адну з кадастравых\n"
-"праекцый і паспрабуйце яшчэ раз"
 
-msgid "Change the current projection"
-msgstr "Змяніць бягучую праекцыю"
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
+msgstr ""
 
 msgid "Replace original background by JOSM background color."
 msgstr "Памяняць арыгінальны фон на колер фону JOSM."
@@ -30649,27 +30885,6 @@ msgstr "сярэдняе"
 msgid "low"
 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 "Уключыць аўтаматычнае кэшаванне."
 
@@ -30827,8 +31042,65 @@ msgstr "Дазволіць пры гэтым выкарыстоўваць тэг
 msgid "Unexpected file extension. {0}"
 msgstr "Неспадзяванае пашырэнне файла. {0}"
 
-msgid "Add \"source=...\" to elements?"
-msgstr "Дадаць \"source=...\" да элементаў?"
+msgid ""
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
+msgstr ""
+"Становішча \"{0}\" знойдзена ў кэшы.\n"
+"Спачатку загрузіць кэш?\n"
+"(Не = новы кэш)"
+
+msgid "Select Feuille"
+msgstr "Абраць аркуш"
+
+msgid ""
+"Error loading file.\n"
+"Probably an old version of the cache file."
+msgstr ""
+"Памылка загрузкі файла.\n"
+"Магчыма ў кэшы старая версія файла."
+
+msgid "Lambert Zone {0} cache file (.{0})"
+msgstr "Файл кэша (.{0}) зоны Lambert {0}"
+
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgstr "Файл кэша  (.CC{0}) зоны Lambert CC9 {0}"
+
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgstr "Файл кэша Guadeloupe Fort-Marigot (.UTM1)"
+
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgstr "Файл кэша Guadeloupe Ste-Anne (.UTM2)"
+
+msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgstr "Файл кэша Martinique Fort Desaix (.UTM3)"
+
+msgid "Reunion RGR92 cache file (.UTM4)"
+msgstr "Файл кэша Reunion RGR92 (.UTM4)"
+
+msgid "CadastreGrabber: Illegal url."
+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 "Абраць з..."
+
+msgid "Select commune"
+msgstr "Выберыце камуну"
 
 msgid "Downloading {0}"
 msgstr "Спампоўваецца {0}"
@@ -30878,123 +31150,6 @@ msgstr ""
 "Гэтая камуна не вектарызавана.\n"
 "Калі ласка, выкарыстоўвайце іншае меню для прывязкі \"Плана-схемы\""
 
-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 "Запампаваць малюнак з WMS французскага кадастра"
-
-msgid "Cadastre: {0}"
-msgstr "Кадастр: {0}"
-
-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 ""
-"Гэта выява змяшчае дадзеныя геаспасылак.\n"
-"Вы хочаце скарыстацца імі?"
-
-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 "{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 "Становішча {0} ужо на экране. Кэш не загружаны."
-
-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 ""
-"<html>Калі ласка, увядзіце назву сяла, вёскі ці горада.<br>Выкарыстоўвайце "
-"сінтаксіс і пунктуацыю, апублікаваную на www.cadastre.gouv.fr</html>"
-
-msgid "Departement"
-msgstr "Дэпартамент"
-
-msgid "<html>Departement number (optional)</html>"
-msgstr "<html>Нумар дэпартамента (не абавязкова)</html>"
-
-msgid "Add new layer"
-msgstr "Дадаць новы пласт"
-
-msgid "Open Cadastre Preferences"
-msgstr "Налады Open Cadastre"
-
-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 "Файлы PNG (*.png)"
-
-msgid "GeoTiff files (*.tif)"
-msgstr "Файлы GeoTiff (*.tif)"
-
-msgid "Export image (only raster images)"
-msgstr "Экспартаваць малюнак (толькі растравыя малюнкі)"
-
 msgid ""
 "Click first corner for image cropping\n"
 "(two points required)"
@@ -31050,19 +31205,6 @@ msgstr "Адзначце другі кут для абразання малюн
 msgid "Click second Lambert crosspiece for georeferencing"
 msgstr "Адзначце другую папярочку Lambert для геапрывязкі"
 
-msgid "Adjust WMS"
-msgstr "Падбудаваць WMS"
-
-msgid "Adjust the position of the WMS layer (saved for raster images only)"
-msgstr "Налада становішча пласта WMS (захавана толькі для растравых выяў)"
-
-msgid ""
-"More than one WMS layer present\n"
-"Select one of them first, then retry"
-msgstr ""
-"Прысутнічае больш, чым адзін пласт WMS.\n"
-"Выберыце спачатку адзін з іх, а затым паўтарыце."
-
 msgid "Reset offset"
 msgstr "Скід зрушэння"
 
@@ -31518,21 +31660,6 @@ 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 ""
-"Выдзелены палігон не можа быць разрэзаны, таму што ён з''яўляецца "
-"ўдзельнікам дачынення.\n"
-"Выдаліце палігон з дачынення, перш чым разрэзаць яго."
-
 msgid "TangoGPS Files (*.log)"
 msgstr "TangoGPS Файлы (*.log)"
 
@@ -37703,28 +37830,6 @@ msgstr "цыклічна"
 msgid "mute"
 msgstr "адключыць гук"
 
-msgid "Walking Papers Scanned Map"
-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 "Увядзіце 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 "Walking Papers: {0}"
-
-msgid "Walking Papers layer ({0}) in zoom {1}"
-msgstr "Пласт ({0}) Walking Papers у маштабе {1}"
-
 msgid "Way Download"
 msgstr "Запампаваць лінію"
 
@@ -37915,6 +38020,26 @@ msgid ""
 "objects"
 msgstr "Дадае тэг wikipedia, адпаведны гэтаму артыкулу, абраным аб’ектам"
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "Канчатковы WMS Супер-хуткасць Турба выклік II"
 
diff --git a/i18n/po/bg.po b/i18n/po/bg.po
index 9978e5d..d33c4ea 100644
--- a/i18n/po/bg.po
+++ b/i18n/po/bg.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
 "PO-Revision-Date: 2017-07-15 21:07+0000\n"
 "Last-Translator: pl <Unknown>\n"
 "Language-Team: Bulgarian <bg 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: 2017-09-03 04:38+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:36+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: bg\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -394,6 +394,43 @@ msgstr "Изтриване"
 msgid "Delete selected objects."
 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 ""
+"Вие се каните да изтриете възли, намиращи се извън зоната, която сте свалили "
+"от сървъра.<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 ""
+
+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] ""
+"Ще изтриете {0} релация(-ии): {1}<br/>Това не е елементарна операция и "
+"трудно може да бъде възстановена след качването й на сървъра.<br/>Наистина "
+"ли искате да изтриете релацията(-иите)?"
+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 "Изтриване на релация?"
+
 msgid "Delete Layer"
 msgstr ""
 
@@ -1358,33 +1395,15 @@ msgstr " [id: {0}]"
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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 "Search preset"
+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 "Show preset search dialog"
+msgstr "Извежда допълнителен екран за търсене"
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] "Разделяне на път {0} на {1} части"
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2833,43 +2852,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] "Изтриване на {0} отношение"
 msgstr[1] "Изтриване на {0} отношения"
 
-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 ""
-"Вие се каните да изтриете възли, намиращи се извън зоната, която сте свалили "
-"от сървъра.<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 ""
-
-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] ""
-"Ще изтриете {0} релация(-ии): {1}<br/>Това не е елементарна операция и "
-"трудно може да бъде възстановена след качването й на сървъра.<br/>Наистина "
-"ли искате да изтриете релацията(-иите)?"
-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 "Изтриване на релация?"
-
 msgid "Move {0} node"
 msgid_plural "Move {0} nodes"
 msgstr[0] "Преместване {0} възел"
@@ -2901,6 +2883,33 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr "Последователност: {0}"
 
+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] "Разделяне на път {0} на {1} части"
+
 msgid "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -3023,6 +3032,18 @@ msgstr "Невалидна стойност на географска ширин
 msgid "Illegal longitude value ''{0}''"
 msgstr "Невалидна стойност на географска дължина ''{0}''"
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3134,6 +3155,9 @@ msgstr "Имперски"
 msgid "Nautical Mile"
 msgstr "Морска миля"
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr "НЕИЗВЕСТНО"
 
@@ -3177,6 +3201,9 @@ msgctxt "compass"
 msgid "E"
 msgstr "И"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3822,6 +3849,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr "Потребителска проекция"
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr "Описание"
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr "Показване на тази помощ"
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr "Примери"
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr "GRS80"
 
@@ -4879,9 +4960,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr "Отместване"
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4927,6 +5005,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr "Инициализиране на OSM API"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4948,9 +5029,6 @@ msgstr "използване"
 msgid "options"
 msgstr "опции"
 
-msgid "Show this help"
-msgstr "Показване на тази помощ"
-
 msgid "Standard unix geometry argument"
 msgstr "Стандартен параметри на unix геометрия"
 
@@ -5151,6 +5229,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5403,6 +5489,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7191,6 +7281,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7413,9 +7506,6 @@ msgstr "URL: "
 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."
@@ -8347,15 +8437,15 @@ msgstr "Областта за сваляне е ОК, размерът е при
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8384,33 +8474,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr "история"
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8534,6 +8597,33 @@ msgstr "Интерактивна карта"
 msgid "Tile Numbers"
 msgstr "Номера квадранти"
 
+msgid "history"
+msgstr "история"
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8667,6 +8757,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr "Път {0}"
 
@@ -8676,6 +8772,9 @@ msgstr "Връзка {0}"
 msgid "Object"
 msgstr "Обект"
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8833,6 +8932,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "Опишете измененията на качваните от вас данни:"
 
@@ -9894,9 +9996,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr "Описание"
-
 msgid "Timespan"
 msgstr ""
 
@@ -13097,15 +13196,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr "Грешка при разбор {0}: "
 
-msgid "Search preset"
-msgstr "Търсене"
-
-msgid "Show preset search dialog"
-msgstr "Извежда допълнителен екран за търсене"
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr "Шаблони"
 
@@ -13211,6 +13301,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13462,14 +13555,6 @@ msgstr "Непознат режим {0}."
 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 ""
 
@@ -13533,9 +13618,6 @@ msgid ""
 "{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 ""
 
@@ -14780,9 +14862,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14879,10 +14958,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15474,6 +15549,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr "не"
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17511,8 +17590,9 @@ msgid "Bay"
 msgstr "Залив"
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
-msgstr "Голяма водна площ, частично затворена от суша"
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
+msgstr ""
 
 msgid "Shipping"
 msgstr ""
@@ -23339,6 +23419,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr "OSM Inspector: Geometry"
 
@@ -23397,6 +23480,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23478,6 +23564,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23499,9 +23600,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -24098,6 +24196,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24509,6 +24610,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Niger Delta Oct 2012 Landsat"
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24952,6 +25056,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr "MSR Maps Topo"
 
@@ -26155,6 +26262,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26335,10 +26445,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26388,9 +26494,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26747,11 +26850,6 @@ msgid ""
 "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 ""
 
@@ -27364,13 +27462,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28667,6 +28765,148 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 "Зареждане на изображение от френски кадастърен WMS"
+
+msgid "Cadastre: {0}"
+msgstr "Кадастър: {0}"
+
+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 ""
+"<html>Въведете име на град или село.<br>Използвайте синтаксиса и "
+"пунктуацията известни от  www.cadastre.gouv.fr .</html>"
+
+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 "Нулиране на cookie"
+
+msgid "Get a new cookie (session timeout)"
+msgstr "Взимане ново cookie (изтичане на сесията)"
+
+msgid "Save image as..."
+msgstr ""
+
+msgid "PNG files (*.png)"
+msgstr ""
+
+msgid "GeoTiff files (*.tif)"
+msgstr ""
+
+msgid "Export image (only raster images)"
+msgstr ""
+
+msgid ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+"Има повече от един WMS слой. Изберете\n"
+"един от тях първо, после опитайте отново."
+
 msgid "on polygon"
 msgstr ""
 
@@ -28682,77 +28922,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
+msgstr "Настройка на WMS"
+
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Add \"source=...\" to elements?"
+msgstr "Добавяне на \"source=...\" към ?"
+
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Objects:"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "address"
+msgstr "адрес"
+
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "symbol"
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download water bodies in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "parcel"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
-msgstr "CadastreGrabber: Невалидно url."
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
-msgstr "Избери от..."
+msgid "section"
+msgstr ""
 
-msgid "Select commune"
-msgstr "Избор на комуна"
+msgid "Select to download cadastral sections in the selected download area."
+msgstr ""
 
-msgid "Auto sourcing"
-msgstr "Авто-определяне източници"
+msgid "locality"
+msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28803,27 +29048,6 @@ msgstr ""
 msgid "low"
 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 "Включване автоматично кеширане."
 
@@ -28977,164 +29201,99 @@ msgstr ""
 msgid "Unexpected file extension. {0}"
 msgstr ""
 
-msgid "Add \"source=...\" to elements?"
-msgstr "Добавяне на \"source=...\" към ?"
-
-msgid "Downloading {0}"
-msgstr "Сваляне {0}"
-
-msgid "Contacting WMS Server..."
-msgstr "Свързване с WMS Сървър..."
-
-msgid "Create buildings"
-msgstr "Създаване на сгради"
-
 msgid ""
-"To avoid cadastre WMS overload,\n"
-"building import size is limited to 1 km2 max."
-msgstr ""
-"За да избегенете претоварване на cadastre WMS,\n"
-"размера на импорта на сгради е ограничен до 1 km2 макс."
-
-msgid "Please, enable auto-sourcing and check cadastre millesime."
-msgstr "Моля, включете авто-източниците и проверете cadastre millesime."
-
-msgid "Extract SVG ViewBox..."
-msgstr "Екстракт SVG ViewBox..."
-
-msgid "Extract best fitting boundary..."
-msgstr "Екстракт най-добре съвпадаща граница..."
-
-msgid "Create boundary"
-msgstr "Създаване на граница"
-
-msgid "Contacting cadastre WMS ..."
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid "Image already loaded"
-msgstr "Изображението вече е заредено"
-
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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)"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Cadastre grab"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Download Image from French Cadastre WMS"
-msgstr "Зареждане на изображение от френски кадастърен WMS"
-
-msgid "Cadastre: {0}"
-msgstr "Кадастър: {0}"
-
-msgid "Georeference an image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
-msgstr "Зареждане на местоположението от кеша (само ако той е включен)"
-
-msgid "{0} not allowed with the current projection"
-msgstr ""
+msgid "CadastreGrabber: Illegal url."
+msgstr "CadastreGrabber: Невалидно url."
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
-msgstr ""
+msgid "Choose from..."
+msgstr "Избери от..."
 
-msgid "Change location"
-msgstr "Промяна местоположение"
+msgid "Select commune"
+msgstr "Избор на комуна"
 
-msgid "Set a new location for the next request"
-msgstr "Посочете ново местоположения за следващата заявка"
+msgid "Downloading {0}"
+msgstr "Сваляне {0}"
 
-msgid "Add a new municipality layer"
-msgstr ""
+msgid "Contacting WMS Server..."
+msgstr "Свързване с WMS Сървър..."
 
-msgid "Commune"
-msgstr ""
+msgid "Create buildings"
+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 ""
-
-msgid "<html>Departement number (optional)</html>"
-msgstr ""
-
-msgid "Add new layer"
-msgstr "Добавяне на нов слой"
-
-msgid "Open Cadastre Preferences"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
+"За да избегенете претоварване на cadastre WMS,\n"
+"размера на импорта на сгради е ограничен до 1 km2 макс."
 
-msgid "Refine georeferencing"
-msgstr ""
+msgid "Please, enable auto-sourcing and check cadastre millesime."
+msgstr "Моля, включете авто-източниците и проверете cadastre millesime."
 
-msgid "Improve georeferencing (only raster images)"
-msgstr ""
+msgid "Extract SVG ViewBox..."
+msgstr "Екстракт SVG ViewBox..."
 
-msgid "Reset cookie"
-msgstr "Нулиране на cookie"
+msgid "Extract best fitting boundary..."
+msgstr "Екстракт най-добре съвпадаща граница..."
 
-msgid "Get a new cookie (session timeout)"
-msgstr "Взимане ново cookie (изтичане на сесията)"
+msgid "Create boundary"
+msgstr "Създаване на граница"
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
-msgstr ""
+msgid "Image already loaded"
+msgstr "Изображението вече е заредено"
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -29184,19 +29343,6 @@ msgstr ""
 msgid "Click second Lambert crosspiece for georeferencing"
 msgstr ""
 
-msgid "Adjust WMS"
-msgstr "Настройка на WMS"
-
-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 ""
-"Има повече от един WMS слой. Изберете\n"
-"един от тях първо, после опитайте отново."
-
 msgid "Reset offset"
 msgstr ""
 
@@ -29635,20 +29781,6 @@ msgid ""
 "to cancel the download."
 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 ""
-"Избраната област не може да бъде разделена, защото е член на връзка.\n"
-"Премахнете областта от връзката преди да я разделите."
-
 msgid "TangoGPS Files (*.log)"
 msgstr "файлове на TangoGPS (*.log)"
 
@@ -35424,26 +35556,6 @@ 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 "Walking Papers: {0}"
-
-msgid "Walking Papers layer ({0}) in zoom {1}"
-msgstr ""
-
 msgid "Way Download"
 msgstr ""
 
@@ -35612,6 +35724,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/bn.po b/i18n/po/bn.po
index eb458c0..f874766 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+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: 2017-09-03 04:37+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:35+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: bn\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -390,6 +390,34 @@ msgstr "মুছে ফেলুন"
 msgid "Delete selected objects."
 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 "Delete Layer"
 msgstr ""
 
@@ -1296,29 +1324,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2727,34 +2741,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2786,6 +2772,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2905,6 +2914,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3012,6 +3033,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr "অজ্ঞাত"
 
@@ -3055,6 +3079,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3691,6 +3718,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4731,9 +4812,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4779,6 +4857,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr ""
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4800,9 +4881,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -5003,6 +5081,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5255,6 +5341,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7037,6 +7127,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7259,9 +7352,6 @@ 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."
@@ -8189,15 +8279,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8226,33 +8316,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8376,6 +8439,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8509,6 +8599,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8518,6 +8614,9 @@ msgstr ""
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8662,6 +8761,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9701,9 +9803,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12840,15 +12939,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -12954,6 +13044,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13203,14 +13296,6 @@ 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 ""
 
@@ -13274,9 +13359,6 @@ msgid ""
 "{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 ""
 
@@ -14508,9 +14590,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14607,10 +14686,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15198,6 +15273,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17235,7 +17314,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23061,6 +23141,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23119,6 +23202,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23200,6 +23286,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23221,9 +23322,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23818,6 +23916,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24229,6 +24330,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24672,6 +24776,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25875,6 +25982,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26055,10 +26165,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26106,9 +26212,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26452,11 +26555,6 @@ msgid ""
 "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 ""
 
@@ -27067,13 +27165,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28370,6 +28468,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28385,77 +28621,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28506,27 +28747,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28667,160 +28887,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28870,17 +29027,6 @@ 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 ""
 
@@ -29317,18 +29463,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35074,26 +35208,6 @@ 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 ""
 
@@ -35262,6 +35376,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/br.po b/i18n/po/br.po
index b775570..2600be8 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+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: 2017-09-03 04:38+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:35+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: br\n"
 
 msgid "License"
@@ -387,6 +387,34 @@ msgstr ""
 msgid "Delete selected objects."
 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 "Delete Layer"
 msgstr ""
 
@@ -1293,29 +1321,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2724,34 +2738,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2783,6 +2769,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2902,6 +2911,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3009,6 +3030,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr "DIANAV"
 
@@ -3052,6 +3076,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3688,6 +3715,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4728,9 +4809,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4776,6 +4854,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr ""
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4797,9 +4878,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -5000,6 +5078,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5252,6 +5338,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7034,6 +7124,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7256,9 +7349,6 @@ 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."
@@ -8186,15 +8276,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8223,33 +8313,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8373,6 +8436,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8506,6 +8596,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8515,6 +8611,9 @@ msgstr ""
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8659,6 +8758,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9698,9 +9800,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12837,15 +12936,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -12951,6 +13041,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13200,14 +13293,6 @@ 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 ""
 
@@ -13271,9 +13356,6 @@ msgid ""
 "{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 ""
 
@@ -14505,9 +14587,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14604,10 +14683,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15195,6 +15270,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17232,7 +17311,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23058,6 +23138,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23116,6 +23199,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23197,6 +23283,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23218,9 +23319,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23815,6 +23913,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24226,6 +24327,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24669,6 +24773,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25872,6 +25979,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26052,10 +26162,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26103,9 +26209,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26449,11 +26552,6 @@ msgid ""
 "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 ""
 
@@ -27064,13 +27162,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28367,6 +28465,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28382,77 +28618,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28503,27 +28744,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28664,160 +28884,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28867,17 +29024,6 @@ 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 ""
 
@@ -29314,18 +29460,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35071,26 +35205,6 @@ 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 ""
 
@@ -35259,6 +35373,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/bs.po b/i18n/po/bs.po
index efc8414..56a989b 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+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: 2017-09-03 04:37+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:35+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: bs\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -390,6 +390,34 @@ msgstr "Obriši"
 msgid "Delete selected objects."
 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 "Delete Layer"
 msgstr ""
 
@@ -1296,29 +1324,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2727,34 +2741,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2786,6 +2772,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2905,6 +2914,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3012,6 +3033,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr "NEPOZNAT"
 
@@ -3055,6 +3079,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3691,6 +3718,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4731,9 +4812,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4779,6 +4857,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr "Inicijalizacija OSM API-a"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4800,9 +4881,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -5003,6 +5081,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5255,6 +5341,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7037,6 +7127,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7259,9 +7352,6 @@ 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."
@@ -8189,15 +8279,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8226,33 +8316,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8376,6 +8439,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8509,6 +8599,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8518,6 +8614,9 @@ msgstr ""
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8662,6 +8761,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9701,9 +9803,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12840,15 +12939,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -12954,6 +13044,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13203,14 +13296,6 @@ 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 ""
 
@@ -13274,9 +13359,6 @@ msgid ""
 "{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 ""
 
@@ -14508,9 +14590,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14607,10 +14686,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15198,6 +15273,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17235,7 +17314,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23061,6 +23141,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23119,6 +23202,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23200,6 +23286,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23221,9 +23322,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23818,6 +23916,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24229,6 +24330,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24672,6 +24776,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25875,6 +25982,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26055,10 +26165,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26106,9 +26212,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26452,11 +26555,6 @@ msgid ""
 "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 ""
 
@@ -27067,13 +27165,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28370,6 +28468,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28385,77 +28621,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28506,27 +28747,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28667,160 +28887,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28870,17 +29027,6 @@ 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 ""
 
@@ -29317,18 +29463,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35074,26 +35208,6 @@ 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 ""
 
@@ -35262,6 +35376,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/ca.po b/i18n/po/ca.po
index d83c11f..ba6672b 100644
--- a/i18n/po/ca.po
+++ b/i18n/po/ca.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
 "PO-Revision-Date: 2017-03-14 22:52+0000\n"
 "Last-Translator: Don-vip <Unknown>\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: 2017-09-03 04:38+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:36+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: ca\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -402,6 +402,45 @@ msgstr "Suprimeix"
 msgid "Delete selected objects."
 msgstr "Suprimeix els objectes seleccionats"
 
+msgid "Delete confirmation"
+msgstr "Confirma l''eliminació"
+
+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 ""
+"Sou a punt de suprimir nodes situats fora de la zona que heu baixat.<br>Això "
+"pot provocar problemes perquè pot haver altres obejectes, que no veieu, que "
+"els poden estar utilitzant.<br>Segur que els voleu eliminar?"
+
+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 ""
+"Sou a punt de suprimir objectes incomplets.<br>Això provocarà problemes "
+"perquè no esteu veient els objectes reals.<br>Segur que els voleu suprimir?"
+
+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] ""
+"Ets a punt de suprimir {0} relació: {1}<br/>Aquesta acció és necessària molt "
+"poques vegades i no és fàcil de desfer un cop ha estat processada pel "
+"servidor.<br/>Estàs segur que vols continuar?"
+msgstr[1] ""
+"Ets a punt de suprimir {0} relacions: {1}<br/>Aquesta acció és necessària "
+"molt poques vegades i no és fàcil de desfer un cop ha estat processada pel "
+"servidor.<br/>Estàs segur que vols continuar?"
+
+msgid "Delete relation?"
+msgstr "Vols esborrar la relació?"
+
 msgid "Delete Layer"
 msgstr "Suprimeix la capa"
 
@@ -1405,37 +1444,14 @@ msgstr " [id: {0}]"
 msgid "Segment {0}: {1}"
 msgstr "Segment {0}: {1}"
 
-msgid "You must select two or more nodes to split a circular way."
-msgstr ""
-"Heu de seleccionar dos o més nodes per poder dividir una via tancada."
-
-msgid ""
-"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
-"middle of the way.)"
-msgstr ""
-"La via no es pot dividir en els nodes seleccionats. (Consell: seleccioneu "
-"nodes al mig de la via.)"
-
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
-msgstr ""
-"Una pertinença a una relació basada al rol ha estat copiada a totes les "
-"noves vies.<br>Haurieu de comprovar-ho i fer les correccions necessàries si "
-"calgués."
+msgid "Search preset"
+msgstr "Cerca predefinit"
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
-msgstr ""
-"Una pertinença a una relació ha estat copiada a totes les noves "
-"vies.<br>Haurieu de comprovar-ho i fer les correccions necessàries si "
-"calgués."
+msgid "Show preset search dialog"
+msgstr "Mostrar la finestra de cerca de preconfiguracions"
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] "Divideix la via {0} en {1} part"
-msgstr[1] "Divideix la via {0} en {1} parts"
+msgid "Search presets"
+msgstr "Cercar element predefinit"
 
 msgid "Discourage upload"
 msgstr ""
@@ -2965,45 +2981,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] "Esborra {0} relació"
 msgstr[1] "Esborra {0} relacions"
 
-msgid "Delete confirmation"
-msgstr "Confirma l''eliminació"
-
-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 ""
-"Sou a punt de suprimir nodes situats fora de la zona que heu baixat.<br>Això "
-"pot provocar problemes perquè pot haver altres obejectes, que no veieu, que "
-"els poden estar utilitzant.<br>Segur que els voleu eliminar?"
-
-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 ""
-"Sou a punt de suprimir objectes incomplets.<br>Això provocarà problemes "
-"perquè no esteu veient els objectes reals.<br>Segur que els voleu suprimir?"
-
-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] ""
-"Ets a punt de suprimir {0} relació: {1}<br/>Aquesta acció és necessària molt "
-"poques vegades i no és fàcil de desfer un cop ha estat processada pel "
-"servidor.<br/>Estàs segur que vols continuar?"
-msgstr[1] ""
-"Ets a punt de suprimir {0} relacions: {1}<br/>Aquesta acció és necessària "
-"molt poques vegades i no és fàcil de desfer un cop ha estat processada pel "
-"servidor.<br/>Estàs segur que vols continuar?"
-
-msgid "Delete relation?"
-msgstr "Vols esborrar la relació?"
-
 msgid "Move {0} node"
 msgid_plural "Move {0} nodes"
 msgstr[0] "Moure {0} node"
@@ -3035,6 +3012,38 @@ msgstr[1] "{0} objectes seleccionats"
 msgid "Sequence: {0}"
 msgstr "Seqüència: {0}"
 
+msgid "You must select two or more nodes to split a circular way."
+msgstr ""
+"Heu de seleccionar dos o més nodes per poder dividir una via tancada."
+
+msgid ""
+"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
+"middle of the way.)"
+msgstr ""
+"La via no es pot dividir en els nodes seleccionats. (Consell: seleccioneu "
+"nodes al mig de la via.)"
+
+msgid ""
+"A role based relation membership was copied to all new ways.<br>You should "
+"verify this and correct it when necessary."
+msgstr ""
+"Una pertinença a una relació basada al rol ha estat copiada a totes les "
+"noves vies.<br>Haurieu de comprovar-ho i fer les correccions necessàries si "
+"calgués."
+
+msgid ""
+"A relation membership was copied to all new ways.<br>You should verify this "
+"and correct it when necessary."
+msgstr ""
+"Una pertinença a una relació ha estat copiada a totes les noves "
+"vies.<br>Haurieu de comprovar-ho i fer les correccions necessàries si "
+"calgués."
+
+msgid "Split way {0} into {1} part"
+msgid_plural "Split way {0} into {1} parts"
+msgstr[0] "Divideix la via {0} en {1} part"
+msgstr[1] "Divideix la via {0} en {1} parts"
+
 msgid "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] "Transformar {0} node"
@@ -3170,6 +3179,18 @@ msgstr "El valor de latitud ''{0}'' és erroni"
 msgid "Illegal longitude value ''{0}''"
 msgstr "El valor de longitud ''{0}'' és erroni"
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr "Ha fallat la creació del directori mancant per la memòria cau: {0}"
 
@@ -3301,6 +3322,9 @@ msgstr "Imperial"
 msgid "Nautical Mile"
 msgstr "Milla nàutica"
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr "S''esperava un valor per al paràmetre ''{0}'', ara és ''{1}''"
+
 msgid "UNKNOWN"
 msgstr "Desconegut"
 
@@ -3346,6 +3370,9 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -4042,6 +4069,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr "Projecció personalitzada"
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr "Descripció"
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr "Mostrar aquesta ajuda"
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr "Exemples"
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr "GRS80"
 
@@ -5143,9 +5224,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr "Desplaçament"
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr "S''esperava un valor per al paràmetre ''{0}'', ara és ''{1}''"
-
 msgid "Outdated Java version"
 msgstr "Versió obsoleta de Java"
 
@@ -5195,6 +5273,10 @@ msgstr "S''estan inicialitzant les dades de de fronteres internes"
 msgid "Initializing OSM API"
 msgstr "S''està inicialitzant l''API de l''OSM"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+"La capa {0} ha estat suprimida perquè no és permesa per l''API configurada."
+
 msgid "Initializing internal traffic data"
 msgstr "S''estan inicialitzant les dades de trànsit internes"
 
@@ -5216,9 +5298,6 @@ msgstr "ús"
 msgid "options"
 msgstr "opcions"
 
-msgid "Show this help"
-msgstr "Mostrar aquesta ajuda"
-
 msgid "Standard unix geometry argument"
 msgstr "Argument de geometria estàndard UNIX"
 
@@ -5447,6 +5526,14 @@ msgstr ""
 "(proxy).<br>Voleu canviar ara la vostra configuració de servidor "
 "intermediari?"
 
+msgid "You have {0} unread message."
+msgid_plural "You have {0} unread messages."
+msgstr[0] "Teniu {0} missatge sense llegir"
+msgstr[1] "Teniu {0} missatges sense llegir"
+
+msgid "Click here to see your inbox."
+msgstr "Feu clic aquí per a veure la vostra bústia."
+
 msgctxt "menu"
 msgid "File"
 msgstr "Fitxer"
@@ -5714,6 +5801,10 @@ msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 "El valor no és un índex de tessel·les vàlid per al nivell d''ampliació donat."
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr "Heu trobat un error dins JOSM"
 
@@ -7662,6 +7753,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr "Actualitzar el conjunt de canvis amb dades del servidor OSM"
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7926,9 +8020,6 @@ msgid "Please enter or paste an URL to retrieve changesets from the OSM API."
 msgstr ""
 "Indiqueu o enganxeu una URL per recuperar conjunts de canvis de l''API OSM"
 
-msgid "Examples"
-msgstr "Exemples"
-
 msgid ""
 "Note that changeset queries are currently always submitted to ''{0}'', "
 "regardless of the host, port and path of the URL entered below."
@@ -8935,15 +9026,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8972,33 +9063,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr "historial"
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -9123,6 +9187,33 @@ msgstr "Mapa lliscant"
 msgid "Tile Numbers"
 msgstr "Nombres de les tessel·les"
 
+msgid "history"
+msgstr "historial"
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr "Ajuda del JOSM"
 
@@ -9282,6 +9373,12 @@ msgstr "Ampliar la zona del node a la capa actual"
 msgid "Open a history browser with the history of this node"
 msgstr "Obre l''historial d''aquest node a un navegador web"
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr "Via {0}"
 
@@ -9291,6 +9388,9 @@ msgstr "Relació {0}"
 msgid "Object"
 msgstr "Objecte"
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr "Comentari del conjunt de canvis"
 
@@ -9461,6 +9561,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "Afegeix un comentari descrivint els canvis que estàs pujant:"
 
@@ -10632,9 +10735,6 @@ msgid_plural "{0} tracks"
 msgstr[0] "{0} track"
 msgstr[1] "{0} tracks"
 
-msgid "Description"
-msgstr "Descripció"
-
 msgid "Timespan"
 msgstr "Durada"
 
@@ -14134,15 +14234,6 @@ msgstr "Sotselement predefinit sense parent"
 msgid "Error parsing {0}: "
 msgstr "Error d''anàlisi {0}: "
 
-msgid "Search preset"
-msgstr "Cerca predefinit"
-
-msgid "Show preset search dialog"
-msgstr "Mostrar la finestra de cerca de preconfiguracions"
-
-msgid "Search presets"
-msgstr "Cercar element predefinit"
-
 msgid "Presets"
 msgstr "Predefinicions"
 
@@ -14261,6 +14352,9 @@ msgstr "Tots els fitxers (*.*)"
 msgid "Received error page:"
 msgstr "S''ha rebut un error de pàgina:"
 
+msgid "{0}... [please type its number]"
+msgstr "{0}... [escriviu el nombre]"
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -14573,14 +14667,6 @@ msgstr "Node {0} desconegut."
 msgid "get number of unread messages"
 msgstr "obté el nombre de missatges no llegits"
 
-msgid "You have {0} unread message."
-msgid_plural "You have {0} unread messages."
-msgstr[0] "Teniu {0} missatge sense llegir"
-msgstr[1] "Teniu {0} missatges sense llegir"
-
-msgid "Click here to see your inbox."
-msgstr "Feu clic aquí per a veure la vostra bústia."
-
 msgid "Message notifier"
 msgstr "Notificador de missatges"
 
@@ -14651,10 +14737,6 @@ msgstr ""
 "Suporta la versió 0.6 del protocol mentre el servidor suporta les versions "
 "entre la {0} i la {1}."
 
-msgid "Removed layer {0} because it is not allowed by the configured API."
-msgstr ""
-"La capa {0} ha estat suprimida perquè no és permesa per l''API configurada."
-
 msgid "Unexpected format of ID replied by the server. Got ''{0}''."
 msgstr ""
 "Format no esperat de l''ID enviat pel servidor. El seu valor és ''{0}''."
@@ -16152,9 +16234,6 @@ msgstr ""
 "http://forum.openstreetmap.org/viewtopic.php?id=25677).\n"
 "Actualment teniu {1,number,#}MB memory allocated for JOSM"
 
-msgid "{0}... [please type its number]"
-msgstr "{0}... [escriviu el nombre]"
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -16266,10 +16345,6 @@ msgid "Failed to load XML schema."
 msgstr "Ha fallat la càrrega de l''esquema XML"
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -16871,6 +16946,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr "no"
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr "Tipus de servei"
 
@@ -18937,10 +19016,9 @@ msgid "Bay"
 msgstr "Badia"
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
-"Un cos d''aigua força gran parcialment tancat per terra però amb una boca "
-"ampla."
 
 msgid "Shipping"
 msgstr "Navegació"
@@ -24794,6 +24872,9 @@ msgstr "Waymarked Trails: Cavall"
 msgid "Waymarked Trails: Winter Sports"
 msgstr "Waymarked Trails: Esports d’hivern"
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr "Inspector OSM: Geometria"
 
@@ -24852,6 +24933,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -24933,6 +25017,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -24954,9 +25053,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -25553,6 +25649,9 @@ msgstr "Berlin fotografia aèria 2015"
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -25965,6 +26064,9 @@ msgstr "Luxembourg Inspire Water"
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Delta del Níger Oct 2012 Landsat"
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -26408,6 +26510,9 @@ msgstr "NLSC Open Data WMTS"
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr "MSR Mapes Topogràfics"
 
@@ -27637,6 +27742,9 @@ msgstr "relació sense tipus"
 msgid "{0} relation without {0} tag"
 msgstr "{0} relació sense l''etiqueta {0}"
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr "religió sense denominació"
 
@@ -27842,10 +27950,6 @@ msgid "Customization of public public transport stops."
 msgstr ""
 
 msgid ""
-"Creating and handling address nodes and buildings within Czech Republic."
-msgstr "Crea i manega adreces i edificis a la República Txeca."
-
-msgid ""
 "Allows to import various file formats into JOSM directly. Currently "
 "supported: TangoGPS, Garmin Trainings Center TCX."
 msgstr ""
@@ -27906,9 +28010,6 @@ msgstr ""
 "Parleu amb els usuaris que fan modificacions del mapa a prop vostre, sereu "
 "avisats quan algú tanqui la seva sessió."
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -28347,14 +28448,6 @@ msgstr ""
 "(Connector en desenvolupament) Enllaça i sincronitza un vídeo georeferenciat "
 "amb un track GPS, per se utilitzat per identificar objectes visibles."
 
-msgid ""
-"Supports downloading tiled, scanned maps from walking-papers.org. This "
-"plugin is still under early development and may be buggy."
-msgstr ""
-"Suporta la baixada de walking-papers.org de tessel·les de mapes escanejats. "
-"Aquest connnector és encara en un estadi inicial de desenvolupament i pot "
-"tenir errors."
-
 msgid "Easy downloading along a long set of interconnected ways"
 msgstr ""
 "Facilita la baixada al llarg d''un gran conjunt de vies interconnectades"
@@ -28998,15 +29091,15 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
+msgid "Start Mapillary layer"
+msgstr "Inicia una capa de Mapillary"
+
 msgid "Mapillary"
 msgstr "Mapillary"
 
 msgid "Create Mapillary layer"
 msgstr "Crea una capa de Mapillary"
 
-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"
 
@@ -30432,6 +30525,164 @@ msgstr[1] "Hi ha {0} edificacions amb conflictes d''adreça"
 msgid "No address nodes inside buildings found"
 msgstr "No s''ha trobat cap node d''adreça dins de les edificacions"
 
+msgid "Auto sourcing"
+msgstr "Enregistrar la font de manera automàtica"
+
+msgid ""
+"Please enable at least two WMS layers in the cadastre-fr plugin "
+"configuration.\n"
+"Layers ''Building'' and ''Parcel'' added by default."
+msgstr ""
+"Si us plau, habiliteu com a mínim dues capes WMS a la configuració del "
+"connector del cadastre-fr.\n"
+"Les capes ''Building'' (edificis) i ''Parcel'' (parcel·les) han estat "
+"afegides de manera predeterminada."
+
+msgid ""
+"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+msgstr ""
+"Avís: no ha estat possible de posar sempre en primer pla la finestra del "
+"quadre d''opcions. L''excepció ha estat: {0}"
+
+msgid ""
+"To enable the cadastre WMS plugin, change\n"
+"the current projection to one of the cadastre\n"
+"projections and retry"
+msgstr ""
+"Per activar el connector del cadastre, canvieu\n"
+"la projecció actual per una de les suportades\n"
+"i torneu a provar"
+
+msgid "Change the current projection"
+msgstr "Canvia la projecció actual"
+
+msgid "Extract commune boundary"
+msgstr "Extreure els límts de la comuna"
+
+msgid "Only on vectorized layers"
+msgstr "Només sobre capes vectorials"
+
+msgid "Cancel current grab"
+msgstr "Anul·lar la baixada"
+
+msgid "Cancel current grab (only vector images)"
+msgstr "Anul·lar la baixada (només les imatges vectorials)"
+
+msgid "Cadastre grab"
+msgstr "Baixada del cadastre"
+
+msgid "Download Image from French Cadastre WMS"
+msgstr "Baixar imatge del cadastre francès WMS"
+
+msgid "Cadastre: {0}"
+msgstr "Cadastre: {0}"
+
+msgid "Georeference an image"
+msgstr "Georeferenciar una imatge"
+
+msgid "Grab non-georeferenced image"
+msgstr "Prendre una imatge no georeferenciada"
+
+msgid "Georeferencing interrupted"
+msgstr "Georeferenciació interrompuda"
+
+msgid ""
+"This image contains georeference data.\n"
+"Do you want to use them ?"
+msgstr ""
+"Aquesta imatge conté dades georeferenciades.\n"
+"Les voleu utilitzar?"
+
+msgid "Load layer from cache"
+msgstr "Carregar de la memòria cau"
+
+msgid "Load location from cache (only if cache is enabled)"
+msgstr ""
+"Carregar la localització de la memòria cau (només si aquesta està activada)"
+
+msgid "{0} not allowed with the current projection"
+msgstr "{0} no és possible amb la projecció actual"
+
+msgid ""
+"Cannot load cache {0} which is not compatible with current projection zone"
+msgstr ""
+"No és possible de carregar {0} de la memòria cau perquè no és compatible amb "
+"la projecció de la zona"
+
+msgid ""
+"Selected file {0} is not a cache file from this plugin (invalid extension)"
+msgstr ""
+"El fitxer seleccionat {0} no és a la memòria cau d''aquest connector "
+"(extensió incorrecta)"
+
+msgid "The location {0} is already on screen. Cache not loaded."
+msgstr "El lloc {0} ja és a la pantalla. No s''ha utilitzat la memòria cau."
+
+msgid "(optional)"
+msgstr "(opcional)"
+
+msgid "Change location"
+msgstr "Canvia la ubicació"
+
+msgid "Set a new location for the next request"
+msgstr "Seleccionar un nou lloc per a la següent petició"
+
+msgid "Add a new municipality layer"
+msgstr "Afegeix una nova capa de municipi"
+
+msgid "Commune"
+msgstr "Comuna"
+
+msgid ""
+"<html>Enter the town,village or city name.<br>Use the syntax and punctuation "
+"known by www.cadastre.gouv.fr .</html>"
+msgstr ""
+"<html>Indiqueu el non del poble, la vila o la ciutat.<br>Utilitzeu la "
+"sintaxi i la puntuació explicada a www.cadastre.gouv.fr .</html>"
+
+msgid "Departement"
+msgstr "Departament"
+
+msgid "<html>Departement number (optional)</html>"
+msgstr "<html>Codi de departament (opcional)</html>"
+
+msgid "Add new layer"
+msgstr "Afegeix una nova capa"
+
+msgid "Open Cadastre Preferences"
+msgstr "Preferències de l''Open Cadastre"
+
+msgid "Refine georeferencing"
+msgstr "Refina la georeferenciació"
+
+msgid "Improve georeferencing (only raster images)"
+msgstr "Millora la georeferenciació (només imatges ràster)"
+
+msgid "Reset cookie"
+msgstr "Inicialitzar galeta"
+
+msgid "Get a new cookie (session timeout)"
+msgstr "Obtenir una nova galeta (la sessió ha expirat)"
+
+msgid "Save image as..."
+msgstr "Desa la imatge com..."
+
+msgid "PNG files (*.png)"
+msgstr "Fitxers PNG (*.png)"
+
+msgid "GeoTiff files (*.tif)"
+msgstr "Fitxer GeoTiff (*.tif)"
+
+msgid "Export image (only raster images)"
+msgstr "Exporta la imatge (nomes imatges ràster)"
+
+msgid ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+"Hi ha més d''una capa WMS\n"
+"Seleccioneu-ne una i torneu a provar"
+
 msgid "on polygon"
 msgstr "al polígon"
 
@@ -30447,96 +30698,84 @@ msgstr "Nombre següent"
 msgid "Enter addresses"
 msgstr "Entrar adreces"
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
+msgstr "Adjustament WMS"
+
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
-"Localització \"{0}\" trobada a la memòria cau.\n"
-"Carregar primer la memòria cau?\n"
-"(No = nova baixada)"
+"Ajusta la posició de la capa WMS (només enregistrada per les imatges ràster)"
 
-msgid "Select Feuille"
-msgstr "Fulla seleccionada"
+msgid "Add \"source=...\" to elements?"
+msgstr "Afegir \"source=...\" (font) als objectes?"
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Download from Cadastre"
 msgstr ""
-"Error en carregar el fitxer.\n"
-"Probablement es tracta d''una versió antiga de la memòria cau"
 
-msgid "Lambert Zone {0} cache file (.{0})"
-msgstr "Fitxer a la memòria cau de la zona Lambert {0}. (.{0})"
+msgid "Objects:"
+msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
-msgstr "Fitxer a la memòria cau de la zona Lambert CC9 {0}. (.CC{0})"
+msgid "Select to download buildings in the selected download area."
+msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
-msgstr "Fitxer a la memòria cau de Guadalupe Fort-Marigot (.UTM1)"
+msgid "address"
+msgstr "adreça"
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
-msgstr "Fitxer a la memòria cau de Guadalupe Ste-Anne (.UTM2)"
+msgid "Select to download addresses in the selected download area."
+msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
-msgstr "Fitxer a la memòria cau de la Martinica Fort Desaix (.UTM3)"
+msgid "symbol"
+msgstr "símbol"
 
-msgid "Reunion RGR92 cache file (.UTM4)"
-msgstr "Fitxer a la memòria cau de la Reunion (.UTM4)"
+msgid "Select to download symbols in the selected download area."
+msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
-msgstr "CadastreGrabber: url incorrecta."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "parcel"
+msgstr "parcel·la"
+
+msgid "Select to download cadastral parcels in the selected download area."
 msgstr ""
-"No és possible d''obrir una nova sessió.\n"
-"Es fan tasques de manteniment o el servidor està sobrecarregat temporalement."
+
+msgid "parcel number"
+msgstr "nombre de parcel·la"
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
-"Vila/Ciutat {0} no trobada, no disponible\n"
-"o l''acció ha estat anul·lada"
 
-msgid "Choose from..."
-msgstr "Escollir de..."
+msgid "section"
+msgstr "secció"
 
-msgid "Select commune"
-msgstr "Seleccionar comuna"
+msgid "Select to download cadastral sections in the selected download area."
+msgstr ""
 
-msgid "Auto sourcing"
-msgstr "Enregistrar la font de manera automàtica"
+msgid "locality"
+msgstr "localitat"
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
 msgstr ""
-"Si us plau, habiliteu com a mínim dues capes WMS a la configuració del "
-"connector del cadastre-fr.\n"
-"Les capes ''Building'' (edificis) i ''Parcel'' (parcel·les) han estat "
-"afegides de manera predeterminada."
+
+msgid "commune"
+msgstr "comuna"
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
-"Avís: no ha estat possible de posar sempre en primer pla la finestra del "
-"quadre d''opcions. L''excepció ha estat: {0}"
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
-"Per activar el connector del cadastre, canvieu\n"
-"la projecció actual per una de les suportades\n"
-"i torneu a provar"
 
-msgid "Change the current projection"
-msgstr "Canvia la projecció actual"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
+msgstr ""
 
 msgid "Replace original background by JOSM background color."
 msgstr "Reemplaça el fons original pel color de fons del JOSM"
@@ -30588,27 +30827,6 @@ msgstr "mitjà"
 msgid "low"
 msgstr "baix"
 
-msgid "symbol"
-msgstr "símbol"
-
-msgid "parcel"
-msgstr "parcel·la"
-
-msgid "parcel number"
-msgstr "nombre de parcel·la"
-
-msgid "address"
-msgstr "adreça"
-
-msgid "locality"
-msgstr "localitat"
-
-msgid "section"
-msgstr "secció"
-
-msgid "commune"
-msgstr "comuna"
-
 msgid "Enable automatic caching."
 msgstr "Activar la utilització automàtica de la memòria cau"
 
@@ -30773,8 +30991,65 @@ msgstr "Habiliteu això per utilitzar l''etiqueta \"add:street\" als nodes."
 msgid "Unexpected file extension. {0}"
 msgstr "Extensió de fitxer no esperada. [{0}"
 
-msgid "Add \"source=...\" to elements?"
-msgstr "Afegir \"source=...\" (font) als objectes?"
+msgid ""
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
+msgstr ""
+"Localització \"{0}\" trobada a la memòria cau.\n"
+"Carregar primer la memòria cau?\n"
+"(No = nova baixada)"
+
+msgid "Select Feuille"
+msgstr "Fulla seleccionada"
+
+msgid ""
+"Error loading file.\n"
+"Probably an old version of the cache file."
+msgstr ""
+"Error en carregar el fitxer.\n"
+"Probablement es tracta d''una versió antiga de la memòria cau"
+
+msgid "Lambert Zone {0} cache file (.{0})"
+msgstr "Fitxer a la memòria cau de la zona Lambert {0}. (.{0})"
+
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgstr "Fitxer a la memòria cau de la zona Lambert CC9 {0}. (.CC{0})"
+
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgstr "Fitxer a la memòria cau de Guadalupe Fort-Marigot (.UTM1)"
+
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgstr "Fitxer a la memòria cau de Guadalupe Ste-Anne (.UTM2)"
+
+msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgstr "Fitxer a la memòria cau de la Martinica Fort Desaix (.UTM3)"
+
+msgid "Reunion RGR92 cache file (.UTM4)"
+msgstr "Fitxer a la memòria cau de la Reunion (.UTM4)"
+
+msgid "CadastreGrabber: Illegal url."
+msgstr "CadastreGrabber: url incorrecta."
+
+msgid ""
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
+msgstr ""
+"No és possible d''obrir una nova sessió.\n"
+"Es fan tasques de manteniment o el servidor està sobrecarregat temporalement."
+
+msgid ""
+"Town/city {0} not found or not available\n"
+"or action canceled"
+msgstr ""
+"Vila/Ciutat {0} no trobada, no disponible\n"
+"o l''acció ha estat anul·lada"
+
+msgid "Choose from..."
+msgstr "Escollir de..."
+
+msgid "Select commune"
+msgstr "Seleccionar comuna"
 
 msgid "Downloading {0}"
 msgstr "S''està baixant {0}"
@@ -30825,126 +31100,6 @@ msgstr ""
 "Aquest municipi no ha estat vectoritzat.\n"
 "Si us plau, utilitzeu una altra eina per georeferenciar la imatge."
 
-msgid "Extract commune boundary"
-msgstr "Extreure els límts de la comuna"
-
-msgid "Only on vectorized layers"
-msgstr "Només sobre capes vectorials"
-
-msgid "Cancel current grab"
-msgstr "Anul·lar la baixada"
-
-msgid "Cancel current grab (only vector images)"
-msgstr "Anul·lar la baixada (només les imatges vectorials)"
-
-msgid "Cadastre grab"
-msgstr "Baixada del cadastre"
-
-msgid "Download Image from French Cadastre WMS"
-msgstr "Baixar imatge del cadastre francès WMS"
-
-msgid "Cadastre: {0}"
-msgstr "Cadastre: {0}"
-
-msgid "Georeference an image"
-msgstr "Georeferenciar una imatge"
-
-msgid "Grab non-georeferenced image"
-msgstr "Prendre una imatge no georeferenciada"
-
-msgid "Georeferencing interrupted"
-msgstr "Georeferenciació interrompuda"
-
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
-msgstr ""
-"Aquesta imatge conté dades georeferenciades.\n"
-"Les voleu utilitzar?"
-
-msgid "Load layer from cache"
-msgstr "Carregar de la memòria cau"
-
-msgid "Load location from cache (only if cache is enabled)"
-msgstr ""
-"Carregar la localització de la memòria cau (només si aquesta està activada)"
-
-msgid "{0} not allowed with the current projection"
-msgstr "{0} no és possible amb la projecció actual"
-
-msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
-msgstr ""
-"No és possible de carregar {0} de la memòria cau perquè no és compatible amb "
-"la projecció de la zona"
-
-msgid ""
-"Selected file {0} is not a cache file from this plugin (invalid extension)"
-msgstr ""
-"El fitxer seleccionat {0} no és a la memòria cau d''aquest connector "
-"(extensió incorrecta)"
-
-msgid "The location {0} is already on screen. Cache not loaded."
-msgstr "El lloc {0} ja és a la pantalla. No s''ha utilitzat la memòria cau."
-
-msgid "(optional)"
-msgstr "(opcional)"
-
-msgid "Change location"
-msgstr "Canvia la ubicació"
-
-msgid "Set a new location for the next request"
-msgstr "Seleccionar un nou lloc per a la següent petició"
-
-msgid "Add a new municipality layer"
-msgstr "Afegeix una nova capa de municipi"
-
-msgid "Commune"
-msgstr "Comuna"
-
-msgid ""
-"<html>Enter the town,village or city name.<br>Use the syntax and punctuation "
-"known by www.cadastre.gouv.fr .</html>"
-msgstr ""
-"<html>Indiqueu el non del poble, la vila o la ciutat.<br>Utilitzeu la "
-"sintaxi i la puntuació explicada a www.cadastre.gouv.fr .</html>"
-
-msgid "Departement"
-msgstr "Departament"
-
-msgid "<html>Departement number (optional)</html>"
-msgstr "<html>Codi de departament (opcional)</html>"
-
-msgid "Add new layer"
-msgstr "Afegeix una nova capa"
-
-msgid "Open Cadastre Preferences"
-msgstr "Preferències de l''Open Cadastre"
-
-msgid "Refine georeferencing"
-msgstr "Refina la georeferenciació"
-
-msgid "Improve georeferencing (only raster images)"
-msgstr "Millora la georeferenciació (només imatges ràster)"
-
-msgid "Reset cookie"
-msgstr "Inicialitzar galeta"
-
-msgid "Get a new cookie (session timeout)"
-msgstr "Obtenir una nova galeta (la sessió ha expirat)"
-
-msgid "Save image as..."
-msgstr "Desa la imatge com..."
-
-msgid "PNG files (*.png)"
-msgstr "Fitxers PNG (*.png)"
-
-msgid "GeoTiff files (*.tif)"
-msgstr "Fitxer GeoTiff (*.tif)"
-
-msgid "Export image (only raster images)"
-msgstr "Exporta la imatge (nomes imatges ràster)"
-
 msgid ""
 "Click first corner for image cropping\n"
 "(two points required)"
@@ -31000,20 +31155,6 @@ msgstr "Feu clic sobre el segon punt (cantonada) per retallar la imatge"
 msgid "Click second Lambert crosspiece for georeferencing"
 msgstr "Feu clic sobre el segon encreuament Lambert per georeferenciar"
 
-msgid "Adjust WMS"
-msgstr "Adjustament WMS"
-
-msgid "Adjust the position of the WMS layer (saved for raster images only)"
-msgstr ""
-"Ajusta la posició de la capa WMS (només enregistrada per les imatges ràster)"
-
-msgid ""
-"More than one WMS layer present\n"
-"Select one of them first, then retry"
-msgstr ""
-"Hi ha més d''una capa WMS\n"
-"Seleccioneu-ne una i torneu a provar"
-
 msgid "Reset offset"
 msgstr "Inicialitza decalatge"
 
@@ -31469,20 +31610,6 @@ msgstr ""
 "aquesta opció no hi haurà cap tipus d''indicació del que fa el procés de "
 "descàrrega i no podrà ser anul·lat."
 
-msgid "Split area"
-msgstr "Divideix l''àrea"
-
-msgid "Splits an area by an untagged way."
-msgstr "Divideix una àrea amb una via sense etiquetar"
-
-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 ""
-"L''àrea selecciona no pot ser dividida perquè és membre d''alguna relació.\n"
-"Abans de pode dividir heu de treure l''àrea de la relació."
-
 msgid "TangoGPS Files (*.log)"
 msgstr "Fitxers TangoGPS (*.log)"
 
@@ -37703,30 +37830,6 @@ msgstr "bucle"
 msgid "mute"
 msgstr "silencia"
 
-msgid "Walking Papers Scanned Map"
-msgstr "Mapa Walking Papers escanejat"
-
-msgid ""
-"Display a map that was previously scanned and uploaded to walking-papers.org"
-msgstr "Mostrar un mapa escanejat i pujat a walking-papers.org"
-
-msgid ""
-"Enter a walking-papers.org URL or ID (the bit after the ?id= in the URL)"
-msgstr ""
-"Introduïu una adreça web de walking-papers.org o un ID (el valor que hi ha "
-"després de ?id= a l''URL)"
-
-msgid "Could not read information from walking-papers.org the id \"{0}\""
-msgstr ""
-"No ha estat possible de llegir informació a walking-papers.org per l''ID "
-"\"{0}\""
-
-msgid "Walking Papers: {0}"
-msgstr "Walking Papers: {0}"
-
-msgid "Walking Papers layer ({0}) in zoom {1}"
-msgstr "Capa Walking Papers ({0}) en nivell d''ampliació {1}"
-
 msgid "Way Download"
 msgstr "Baixar una via"
 
@@ -37920,6 +38023,26 @@ msgstr ""
 "Afegeix una etiqueta \"wikipedia\" corresponent a aquest article als "
 "objectes seleccionats"
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "Ultimate WMS Super-speed Turbo Challenge II"
 
diff --git a/i18n/po/ca at valencia.po b/i18n/po/ca at valencia.po
index 416cf54..d70c399 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+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: 2017-09-03 05:09+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 05:08+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: ca at valencia\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -396,6 +396,46 @@ msgstr "Suprimeix"
 msgid "Delete selected objects."
 msgstr "Suprimeix els objectes seleccionats"
 
+msgid "Delete confirmation"
+msgstr "Confirma l''eliminació"
+
+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 ""
+"Sou a punt de suprimir nodes situats fora de la zona que heu "
+"descarregat.<br>Això pot provocar problemes perquè pot haver altres "
+"obejectes, que no veieu, que els poden estar utilitzant.<br>Segur que els "
+"voleu eliminar?"
+
+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 ""
+"Sou a punt de suprimir objectes incomplets.<br>Això provocarà problemes "
+"perquè no esteu veient els objectes reals.<br>Segur que els voleu suprimir?"
+
+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] ""
+"Sou a punt de suprimir {0} relació: {1}<br/>Esta acció és necessària molt "
+"poques vegades i no és fàcil de desfer un cop ha estat processada pel "
+"servidor.<br/>Segur que voleu continuar?"
+msgstr[1] ""
+"Sou a punt de suprimir {0} relacions: {1}<br/>Esta acció és necessària molt "
+"poques vegades i no és fàcil de desfer un cop ha estat processada pel "
+"servidor.<br/>Segur que voleu continuar?"
+
+msgid "Delete relation?"
+msgstr "Vols esborrar la relació?"
+
 msgid "Delete Layer"
 msgstr ""
 
@@ -1394,37 +1434,14 @@ msgstr " [id: {0}]"
 msgid "Segment {0}: {1}"
 msgstr ""
 
-msgid "You must select two or more nodes to split a circular way."
-msgstr ""
-"Heu de seleccionar dos o més nodes per poder dividir una via tancada."
-
-msgid ""
-"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
-"middle of the way.)"
-msgstr ""
-"La via no es pot dividir en els nodes seleccionats. (Consell: seleccioneu "
-"nodes al mig de la via.)"
-
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
-msgstr ""
-"Una pertinença a una relació basada al rol ha estat copiada a totes les "
-"noves vies.<br>Haurieu de comprovar-ho i fer les correccions necessàries si "
-"calguera."
+msgid "Search preset"
+msgstr "Cerca predefinit"
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
-msgstr ""
-"Una pertinença a una relació ha estat copiada a totes les noves "
-"vies.<br>Haurieu de comprovar-ho i fer les correccions necessàries si "
-"calguera."
+msgid "Show preset search dialog"
+msgstr "Mostrar la finestra de cerca de preconfiguracions"
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
+msgid "Search presets"
+msgstr "Cercar element predefinit"
 
 msgid "Discourage upload"
 msgstr ""
@@ -2930,46 +2947,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] "Esborra {0} relació"
 msgstr[1] "Esborra {0} relacions"
 
-msgid "Delete confirmation"
-msgstr "Confirma l''eliminació"
-
-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 ""
-"Sou a punt de suprimir nodes situats fora de la zona que heu "
-"descarregat.<br>Això pot provocar problemes perquè pot haver altres "
-"obejectes, que no veieu, que els poden estar utilitzant.<br>Segur que els "
-"voleu eliminar?"
-
-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 ""
-"Sou a punt de suprimir objectes incomplets.<br>Això provocarà problemes "
-"perquè no esteu veient els objectes reals.<br>Segur que els voleu suprimir?"
-
-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] ""
-"Sou a punt de suprimir {0} relació: {1}<br/>Esta acció és necessària molt "
-"poques vegades i no és fàcil de desfer un cop ha estat processada pel "
-"servidor.<br/>Segur que voleu continuar?"
-msgstr[1] ""
-"Sou a punt de suprimir {0} relacions: {1}<br/>Esta acció és necessària molt "
-"poques vegades i no és fàcil de desfer un cop ha estat processada pel "
-"servidor.<br/>Segur que voleu continuar?"
-
-msgid "Delete relation?"
-msgstr "Vols esborrar la relació?"
-
 msgid "Move {0} node"
 msgid_plural "Move {0} nodes"
 msgstr[0] "Moure {0} node"
@@ -3001,6 +2978,38 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr "Seqüència: {0}"
 
+msgid "You must select two or more nodes to split a circular way."
+msgstr ""
+"Heu de seleccionar dos o més nodes per poder dividir una via tancada."
+
+msgid ""
+"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
+"middle of the way.)"
+msgstr ""
+"La via no es pot dividir en els nodes seleccionats. (Consell: seleccioneu "
+"nodes al mig de la via.)"
+
+msgid ""
+"A role based relation membership was copied to all new ways.<br>You should "
+"verify this and correct it when necessary."
+msgstr ""
+"Una pertinença a una relació basada al rol ha estat copiada a totes les "
+"noves vies.<br>Haurieu de comprovar-ho i fer les correccions necessàries si "
+"calguera."
+
+msgid ""
+"A relation membership was copied to all new ways.<br>You should verify this "
+"and correct it when necessary."
+msgstr ""
+"Una pertinença a una relació ha estat copiada a totes les noves "
+"vies.<br>Haurieu de comprovar-ho i fer les correccions necessàries si "
+"calguera."
+
+msgid "Split way {0} into {1} part"
+msgid_plural "Split way {0} into {1} parts"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] "Transformar {0} node"
@@ -3134,6 +3143,18 @@ msgstr "El valor de latitud ''{0}'' és erroni"
 msgid "Illegal longitude value ''{0}''"
 msgstr "El valor de longitud ''{0}'' és erroni"
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr "Ha fallat la creació del directori mancant per la memòria cau: {0}"
 
@@ -3263,6 +3284,9 @@ msgstr "Imperial"
 msgid "Nautical Mile"
 msgstr "Milla nàutica"
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr "S''esperava un valor per al paràmetre ''{0}'', ara és ''{1}''"
+
 msgid "UNKNOWN"
 msgstr "Desconegut"
 
@@ -3308,6 +3332,9 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3994,6 +4021,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr "Projecció personalitzada"
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr "Descripció"
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr "Mostra esta ajuda"
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr "Exemples"
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr "GRS80"
 
@@ -5070,9 +5151,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr "Desplaçament"
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr "S''esperava un valor per al paràmetre ''{0}'', ara és ''{1}''"
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -5118,6 +5196,10 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr "S''està inicialitzant l''API de l''OSM"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+"La capa {0} ha estat suprimida perquè no és permesa per l''API configurada."
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -5139,9 +5221,6 @@ msgstr "ús"
 msgid "options"
 msgstr "opcions"
 
-msgid "Show this help"
-msgstr "Mostra esta ajuda"
-
 msgid "Standard unix geometry argument"
 msgstr "Argument de geometria estàndard UNIX"
 
@@ -5351,6 +5430,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5610,6 +5697,10 @@ msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 "El valor no és un índex de tessel·les vàlid per al nivell d''ampliació donat."
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr "Heu trobat un error dins JOSM"
 
@@ -7495,6 +7586,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr "Actualitzar el conjunt de canvis amb dades del servidor OSM"
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7763,9 +7857,6 @@ msgstr ""
 "Per favor, indiqueu o apegueu una URL per recuperar conjunts de canvis de "
 "l''API OSM"
 
-msgid "Examples"
-msgstr "Exemples"
-
 msgid ""
 "Note that changeset queries are currently always submitted to ''{0}'', "
 "regardless of the host, port and path of the URL entered below."
@@ -8765,15 +8856,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8802,33 +8893,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr "historial"
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8952,6 +9016,33 @@ msgstr "Mapa lliscant"
 msgid "Tile Numbers"
 msgstr "Nombres de les tessel·les"
 
+msgid "history"
+msgstr "historial"
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr "Ajuda de JOSM"
 
@@ -9111,6 +9202,12 @@ msgstr "Ampliar la zona del node a la capa actual"
 msgid "Open a history browser with the history of this node"
 msgstr "Obri l''historial d''este node a un navegador web"
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr "Via {0}"
 
@@ -9120,6 +9217,9 @@ msgstr "Relació {0}"
 msgid "Object"
 msgstr "Objecte"
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -9290,6 +9390,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "Afegiu un comentari descrivint els canvis que esteu pujant:"
 
@@ -10464,9 +10567,6 @@ msgid_plural "{0} tracks"
 msgstr[0] "{0} track"
 msgstr[1] "{0} tracks"
 
-msgid "Description"
-msgstr "Descripció"
-
 msgid "Timespan"
 msgstr "Durada"
 
@@ -13947,15 +14047,6 @@ msgstr "Sotselement predefinit sense parent"
 msgid "Error parsing {0}: "
 msgstr "Error d''anàlisi {0}: "
 
-msgid "Search preset"
-msgstr "Cerca predefinit"
-
-msgid "Show preset search dialog"
-msgstr "Mostrar la finestra de cerca de preconfiguracions"
-
-msgid "Search presets"
-msgstr "Cercar element predefinit"
-
 msgid "Presets"
 msgstr "Predefinicions"
 
@@ -14073,6 +14164,9 @@ msgstr "Tots els fitxers (*.*)"
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr "{0}... [per favor escriviu el nombre]"
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -14384,14 +14478,6 @@ msgstr "Node {0} desconegut."
 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 ""
 
@@ -14460,10 +14546,6 @@ msgstr ""
 "Suporta la versió 0.6 del protocol mentre el servidor suporta les versions "
 "entre la {0} i la {1}."
 
-msgid "Removed layer {0} because it is not allowed by the configured API."
-msgstr ""
-"La capa {0} ha estat suprimida perquè no és permesa per l''API configurada."
-
 msgid "Unexpected format of ID replied by the server. Got ''{0}''."
 msgstr ""
 "Format no esperat de l''ID enviat pel servidor. El seu valor és ''{0}''."
@@ -15956,9 +16038,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr "{0}... [per favor escriviu el nombre]"
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -16059,10 +16138,6 @@ msgid "Failed to load XML schema."
 msgstr "Ha fallat la càrrega de l''esquema XML"
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -16665,6 +16740,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr "Tipus de servei"
 
@@ -18717,7 +18796,8 @@ msgid "Bay"
 msgstr "Badia"
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -24545,6 +24625,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -24603,6 +24686,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -24684,6 +24770,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -24705,9 +24806,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -25302,6 +25400,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -25713,6 +25814,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -26156,6 +26260,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -27359,6 +27466,9 @@ msgstr "relació sense tipus"
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr "religió sense denominació"
 
@@ -27555,10 +27665,6 @@ msgid "Customization of public public transport stops."
 msgstr ""
 
 msgid ""
-"Creating and handling address nodes and buildings within Czech Republic."
-msgstr "Crea i manega adreces i edificis a la República Txeca."
-
-msgid ""
 "Allows to import various file formats into JOSM directly. Currently "
 "supported: TangoGPS, Garmin Trainings Center TCX."
 msgstr ""
@@ -27614,9 +27720,6 @@ msgstr ""
 "Parleu amb els usuaris que fan modificacions del mapa a prop vostre, sereu "
 "avisats quan algú tanque la seua sessió."
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -28026,14 +28129,6 @@ msgstr ""
 "(Connector en desenvolupament) Enllaça i sincronitza un vídeo georeferenciat "
 "amb un track GPS, per se utilitzat per identificar objectes visibles."
 
-msgid ""
-"Supports downloading tiled, scanned maps from walking-papers.org. This "
-"plugin is still under early development and may be buggy."
-msgstr ""
-"Suporta la descàrrega de walking-papers.org de tessel·les de mapes "
-"escanejats. Este connnector és encara en un estadi inicial de "
-"desenvolupament i pot tindre errors."
-
 msgid "Easy downloading along a long set of interconnected ways"
 msgstr ""
 "Facilita la descàrrega al llarg d''un gran conjunt de vies interconnectades"
@@ -28672,13 +28767,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -30088,6 +30183,164 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+msgstr "Enregistrar la font de manera automàtica"
+
+msgid ""
+"Please enable at least two WMS layers in the cadastre-fr plugin "
+"configuration.\n"
+"Layers ''Building'' and ''Parcel'' added by default."
+msgstr ""
+"Per favor, habiliteu com a mínim dues capes WMS a la configuració del "
+"connector del cadastre-fr.\n"
+"Les capes ''Building'' (edificis) i ''Parcel'' (parcel·les) han estat "
+"afegides de manera predeterminada."
+
+msgid ""
+"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+msgstr ""
+"Avís: no ha estat possible de posar sempre en primer pla la finestra del "
+"quadre d''opcions. L''excepció ha estat: {0}"
+
+msgid ""
+"To enable the cadastre WMS plugin, change\n"
+"the current projection to one of the cadastre\n"
+"projections and retry"
+msgstr ""
+"Per activar el connector del cadastre, canvieu\n"
+"la projecció actual per una de les suportades\n"
+"i torneu a provar"
+
+msgid "Change the current projection"
+msgstr "Canvia la projecció actual"
+
+msgid "Extract commune boundary"
+msgstr "Extraure els límts de la comuna"
+
+msgid "Only on vectorized layers"
+msgstr "Només sobre capes vectorials"
+
+msgid "Cancel current grab"
+msgstr "Anul·lar la descàrrega"
+
+msgid "Cancel current grab (only vector images)"
+msgstr "Anul·lar la descàrrega (només les imatges vectorials)"
+
+msgid "Cadastre grab"
+msgstr "Descàrrega del cadastre"
+
+msgid "Download Image from French Cadastre WMS"
+msgstr "Descarregar imatge del cadastre francés WMS"
+
+msgid "Cadastre: {0}"
+msgstr "Cadastre: {0}"
+
+msgid "Georeference an image"
+msgstr "Georeferenciar una imatge"
+
+msgid "Grab non-georeferenced image"
+msgstr "Prendre una imatge no georeferenciada"
+
+msgid "Georeferencing interrupted"
+msgstr "Georeferenciació interrompuda"
+
+msgid ""
+"This image contains georeference data.\n"
+"Do you want to use them ?"
+msgstr ""
+"Esta imatge conté dades georeferenciades.\n"
+"Les voleu utilitzar?"
+
+msgid "Load layer from cache"
+msgstr "Carregar de la memòria cau"
+
+msgid "Load location from cache (only if cache is enabled)"
+msgstr ""
+"Carregar la localització de la memòria cau (només si esta està activada)"
+
+msgid "{0} not allowed with the current projection"
+msgstr "{0} no és possible amb la projecció actual"
+
+msgid ""
+"Cannot load cache {0} which is not compatible with current projection zone"
+msgstr ""
+"No és possible de carregar {0} de la memòria cau perquè no és compatible amb "
+"la projecció de la zona"
+
+msgid ""
+"Selected file {0} is not a cache file from this plugin (invalid extension)"
+msgstr ""
+"El fitxer seleccionat {0} no és a la memòria cau d''este connector (extensió "
+"incorrecta)"
+
+msgid "The location {0} is already on screen. Cache not loaded."
+msgstr "El lloc {0} ja és a la pantalla. No s''ha utilitzat la memòria cau."
+
+msgid "(optional)"
+msgstr "(opcional)"
+
+msgid "Change location"
+msgstr "Canvia la ubicació"
+
+msgid "Set a new location for the next request"
+msgstr "Seleccionar un nou lloc per a la següent petició"
+
+msgid "Add a new municipality layer"
+msgstr "Afig una nova capa de municipi"
+
+msgid "Commune"
+msgstr "Comuna"
+
+msgid ""
+"<html>Enter the town,village or city name.<br>Use the syntax and punctuation "
+"known by www.cadastre.gouv.fr .</html>"
+msgstr ""
+"<html>Indiqueu el non del poble, la vila o la ciutat.<br>Utilitzeu la "
+"sintaxi i la puntuació explicada a www.cadastre.gouv.fr .</html>"
+
+msgid "Departement"
+msgstr "Departament"
+
+msgid "<html>Departement number (optional)</html>"
+msgstr "<html>Codi de departament (opcional)</html>"
+
+msgid "Add new layer"
+msgstr "Afig una nova capa"
+
+msgid "Open Cadastre Preferences"
+msgstr "Preferències de l''Open Cadastre"
+
+msgid "Refine georeferencing"
+msgstr "Refina la georeferenciació"
+
+msgid "Improve georeferencing (only raster images)"
+msgstr "Millora la georeferenciació (només imatges ràster)"
+
+msgid "Reset cookie"
+msgstr "Inicialitzar galeta"
+
+msgid "Get a new cookie (session timeout)"
+msgstr "Obtindre una nova galeta (la sessió ha expirat)"
+
+msgid "Save image as..."
+msgstr "Guarda la imatge com..."
+
+msgid "PNG files (*.png)"
+msgstr "Fitxers PNG (*.png)"
+
+msgid "GeoTiff files (*.tif)"
+msgstr "Fitxer GeoTiff (*.tif)"
+
+msgid "Export image (only raster images)"
+msgstr "Exporta la imatge (nomes imatges ràster)"
+
+msgid ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+"Hi ha més d''una capa WMS\n"
+"Seleccioneu-ne una i torneu a provar"
+
 msgid "on polygon"
 msgstr "al polígon"
 
@@ -30103,96 +30356,84 @@ msgstr "Nombre següent"
 msgid "Enter addresses"
 msgstr "Entrar adreces"
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
+msgstr "Adjustament WMS"
+
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
-"Localització \"{0}\" trobada a la memòria cau.\n"
-"Carregar primer la memòria cau?\n"
-"(No = nova descàrrega)"
+"Ajusta la posició de la capa WMS (només enregistrada per les imatges ràster)"
 
-msgid "Select Feuille"
-msgstr "Fulla seleccionada"
+msgid "Add \"source=...\" to elements?"
+msgstr "Afegir \"source=...\" (font) als objectes?"
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Download from Cadastre"
 msgstr ""
-"Error en carregar el fitxer.\n"
-"Probablement es tracta d''una versió antiga de la memòria cau"
 
-msgid "Lambert Zone {0} cache file (.{0})"
-msgstr "Fitxer a la memòria cau de la zona Lambert {0}. (.{0})"
+msgid "Objects:"
+msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
-msgstr "Fitxer a la memòria cau de la zona Lambert CC9 {0}. (.CC{0})"
+msgid "Select to download buildings in the selected download area."
+msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
-msgstr "Fitxer a la memòria cau de Guadalupe Fort-Marigot (.UTM1)"
+msgid "address"
+msgstr "adreça"
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
-msgstr "Fitxer a la memòria cau de Guadalupe Ste-Anne (.UTM2)"
+msgid "Select to download addresses in the selected download area."
+msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
-msgstr "Fitxer a la memòria cau de la Martinica Fort Desaix (.UTM3)"
+msgid "symbol"
+msgstr "símbol"
 
-msgid "Reunion RGR92 cache file (.UTM4)"
-msgstr "Fitxer a la memòria cau de la Reunion (.UTM4)"
+msgid "Select to download symbols in the selected download area."
+msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
-msgstr "CadastreGrabber: url incorrecta."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "parcel"
+msgstr "parcel·la"
+
+msgid "Select to download cadastral parcels in the selected download area."
 msgstr ""
-"No és possible d''obrir una nova sessió.\n"
-"Es fan tasques de manteniment o el servidor està sobrecarregat temporalement."
+
+msgid "parcel number"
+msgstr "nombre de parcel·la"
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
-"Vila/Ciutat {0} no trobada, no disponible\n"
-"o l''acció ha estat anul·lada"
 
-msgid "Choose from..."
-msgstr "Escollir de..."
+msgid "section"
+msgstr "secció"
 
-msgid "Select commune"
-msgstr "Seleccionar comuna"
+msgid "Select to download cadastral sections in the selected download area."
+msgstr ""
 
-msgid "Auto sourcing"
-msgstr "Enregistrar la font de manera automàtica"
+msgid "locality"
+msgstr "localitat"
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
 msgstr ""
-"Per favor, habiliteu com a mínim dues capes WMS a la configuració del "
-"connector del cadastre-fr.\n"
-"Les capes ''Building'' (edificis) i ''Parcel'' (parcel·les) han estat "
-"afegides de manera predeterminada."
+
+msgid "commune"
+msgstr "comuna"
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
-"Avís: no ha estat possible de posar sempre en primer pla la finestra del "
-"quadre d''opcions. L''excepció ha estat: {0}"
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
-"Per activar el connector del cadastre, canvieu\n"
-"la projecció actual per una de les suportades\n"
-"i torneu a provar"
 
-msgid "Change the current projection"
-msgstr "Canvia la projecció actual"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
+msgstr ""
 
 msgid "Replace original background by JOSM background color."
 msgstr "Reemplaça el fons original pel color de fons de JOSM"
@@ -30244,27 +30485,6 @@ msgstr "mitjà"
 msgid "low"
 msgstr "baix"
 
-msgid "symbol"
-msgstr "símbol"
-
-msgid "parcel"
-msgstr "parcel·la"
-
-msgid "parcel number"
-msgstr "nombre de parcel·la"
-
-msgid "address"
-msgstr "adreça"
-
-msgid "locality"
-msgstr "localitat"
-
-msgid "section"
-msgstr "secció"
-
-msgid "commune"
-msgstr "comuna"
-
 msgid "Enable automatic caching."
 msgstr "Activar la utilització automàtica de la memòria cau"
 
@@ -30429,8 +30649,65 @@ msgstr "Habiliteu això per utilitzar l''etiqueta \"add:street\" als nodes."
 msgid "Unexpected file extension. {0}"
 msgstr "Extensió de fitxer no esperada. [{0}"
 
-msgid "Add \"source=...\" to elements?"
-msgstr "Afegir \"source=...\" (font) als objectes?"
+msgid ""
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
+msgstr ""
+"Localització \"{0}\" trobada a la memòria cau.\n"
+"Carregar primer la memòria cau?\n"
+"(No = nova descàrrega)"
+
+msgid "Select Feuille"
+msgstr "Fulla seleccionada"
+
+msgid ""
+"Error loading file.\n"
+"Probably an old version of the cache file."
+msgstr ""
+"Error en carregar el fitxer.\n"
+"Probablement es tracta d''una versió antiga de la memòria cau"
+
+msgid "Lambert Zone {0} cache file (.{0})"
+msgstr "Fitxer a la memòria cau de la zona Lambert {0}. (.{0})"
+
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgstr "Fitxer a la memòria cau de la zona Lambert CC9 {0}. (.CC{0})"
+
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgstr "Fitxer a la memòria cau de Guadalupe Fort-Marigot (.UTM1)"
+
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgstr "Fitxer a la memòria cau de Guadalupe Ste-Anne (.UTM2)"
+
+msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgstr "Fitxer a la memòria cau de la Martinica Fort Desaix (.UTM3)"
+
+msgid "Reunion RGR92 cache file (.UTM4)"
+msgstr "Fitxer a la memòria cau de la Reunion (.UTM4)"
+
+msgid "CadastreGrabber: Illegal url."
+msgstr "CadastreGrabber: url incorrecta."
+
+msgid ""
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
+msgstr ""
+"No és possible d''obrir una nova sessió.\n"
+"Es fan tasques de manteniment o el servidor està sobrecarregat temporalement."
+
+msgid ""
+"Town/city {0} not found or not available\n"
+"or action canceled"
+msgstr ""
+"Vila/Ciutat {0} no trobada, no disponible\n"
+"o l''acció ha estat anul·lada"
+
+msgid "Choose from..."
+msgstr "Escollir de..."
+
+msgid "Select commune"
+msgstr "Seleccionar comuna"
 
 msgid "Downloading {0}"
 msgstr "Descarregant {0}"
@@ -30481,126 +30758,6 @@ msgstr ""
 "Este municipi no ha estat vectoritzat.\n"
 "Per favor, utilitzeu una altra eina per georeferenciar la imatge."
 
-msgid "Extract commune boundary"
-msgstr "Extraure els límts de la comuna"
-
-msgid "Only on vectorized layers"
-msgstr "Només sobre capes vectorials"
-
-msgid "Cancel current grab"
-msgstr "Anul·lar la descàrrega"
-
-msgid "Cancel current grab (only vector images)"
-msgstr "Anul·lar la descàrrega (només les imatges vectorials)"
-
-msgid "Cadastre grab"
-msgstr "Descàrrega del cadastre"
-
-msgid "Download Image from French Cadastre WMS"
-msgstr "Descarregar imatge del cadastre francés WMS"
-
-msgid "Cadastre: {0}"
-msgstr "Cadastre: {0}"
-
-msgid "Georeference an image"
-msgstr "Georeferenciar una imatge"
-
-msgid "Grab non-georeferenced image"
-msgstr "Prendre una imatge no georeferenciada"
-
-msgid "Georeferencing interrupted"
-msgstr "Georeferenciació interrompuda"
-
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
-msgstr ""
-"Esta imatge conté dades georeferenciades.\n"
-"Les voleu utilitzar?"
-
-msgid "Load layer from cache"
-msgstr "Carregar de la memòria cau"
-
-msgid "Load location from cache (only if cache is enabled)"
-msgstr ""
-"Carregar la localització de la memòria cau (només si esta està activada)"
-
-msgid "{0} not allowed with the current projection"
-msgstr "{0} no és possible amb la projecció actual"
-
-msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
-msgstr ""
-"No és possible de carregar {0} de la memòria cau perquè no és compatible amb "
-"la projecció de la zona"
-
-msgid ""
-"Selected file {0} is not a cache file from this plugin (invalid extension)"
-msgstr ""
-"El fitxer seleccionat {0} no és a la memòria cau d''este connector (extensió "
-"incorrecta)"
-
-msgid "The location {0} is already on screen. Cache not loaded."
-msgstr "El lloc {0} ja és a la pantalla. No s''ha utilitzat la memòria cau."
-
-msgid "(optional)"
-msgstr "(opcional)"
-
-msgid "Change location"
-msgstr "Canvia la ubicació"
-
-msgid "Set a new location for the next request"
-msgstr "Seleccionar un nou lloc per a la següent petició"
-
-msgid "Add a new municipality layer"
-msgstr "Afig una nova capa de municipi"
-
-msgid "Commune"
-msgstr "Comuna"
-
-msgid ""
-"<html>Enter the town,village or city name.<br>Use the syntax and punctuation "
-"known by www.cadastre.gouv.fr .</html>"
-msgstr ""
-"<html>Indiqueu el non del poble, la vila o la ciutat.<br>Utilitzeu la "
-"sintaxi i la puntuació explicada a www.cadastre.gouv.fr .</html>"
-
-msgid "Departement"
-msgstr "Departament"
-
-msgid "<html>Departement number (optional)</html>"
-msgstr "<html>Codi de departament (opcional)</html>"
-
-msgid "Add new layer"
-msgstr "Afig una nova capa"
-
-msgid "Open Cadastre Preferences"
-msgstr "Preferències de l''Open Cadastre"
-
-msgid "Refine georeferencing"
-msgstr "Refina la georeferenciació"
-
-msgid "Improve georeferencing (only raster images)"
-msgstr "Millora la georeferenciació (només imatges ràster)"
-
-msgid "Reset cookie"
-msgstr "Inicialitzar galeta"
-
-msgid "Get a new cookie (session timeout)"
-msgstr "Obtindre una nova galeta (la sessió ha expirat)"
-
-msgid "Save image as..."
-msgstr "Guarda la imatge com..."
-
-msgid "PNG files (*.png)"
-msgstr "Fitxers PNG (*.png)"
-
-msgid "GeoTiff files (*.tif)"
-msgstr "Fitxer GeoTiff (*.tif)"
-
-msgid "Export image (only raster images)"
-msgstr "Exporta la imatge (nomes imatges ràster)"
-
 msgid ""
 "Click first corner for image cropping\n"
 "(two points required)"
@@ -30656,20 +30813,6 @@ msgstr "Feu clic sobre el segon punt (cantonada) per retallar la imatge"
 msgid "Click second Lambert crosspiece for georeferencing"
 msgstr "Feu clic sobre el segon encreuament Lambert per georeferenciar"
 
-msgid "Adjust WMS"
-msgstr "Adjustament WMS"
-
-msgid "Adjust the position of the WMS layer (saved for raster images only)"
-msgstr ""
-"Ajusta la posició de la capa WMS (només enregistrada per les imatges ràster)"
-
-msgid ""
-"More than one WMS layer present\n"
-"Select one of them first, then retry"
-msgstr ""
-"Hi ha més d''una capa WMS\n"
-"Seleccioneu-ne una i torneu a provar"
-
 msgid "Reset offset"
 msgstr "Inicialitza decalatge"
 
@@ -31109,20 +31252,6 @@ msgid ""
 "to cancel the download."
 msgstr ""
 
-msgid "Split area"
-msgstr "Divideix l''àrea"
-
-msgid "Splits an area by an untagged way."
-msgstr "Divideix una àrea amb una via sense etiquetar"
-
-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 ""
-"L''àrea selecciona no pot ser dividida perquè és membre d''alguna relació.\n"
-"Abans de pode dividir heu de traure l''àrea de la relació."
-
 msgid "TangoGPS Files (*.log)"
 msgstr "Fitxers TangoGPS (*.log)"
 
@@ -37322,30 +37451,6 @@ msgstr "bucle"
 msgid "mute"
 msgstr "silencia"
 
-msgid "Walking Papers Scanned Map"
-msgstr "Mapa Walking Papers escanejat"
-
-msgid ""
-"Display a map that was previously scanned and uploaded to walking-papers.org"
-msgstr "Mostrar un mapa escanejat i carregat al web walking-papers.org"
-
-msgid ""
-"Enter a walking-papers.org URL or ID (the bit after the ?id= in the URL)"
-msgstr ""
-"Introduïu una adreça web de walking-papers.org o un ID (el valor que hi ha "
-"després de ?id= a la URL)"
-
-msgid "Could not read information from walking-papers.org the id \"{0}\""
-msgstr ""
-"No ha estat possible de llegir informació a walking-papers.org per l''ID "
-"\"{0}\""
-
-msgid "Walking Papers: {0}"
-msgstr "Walking Papers: {0}"
-
-msgid "Walking Papers layer ({0}) in zoom {1}"
-msgstr "Capa Walking Papers ({0}) en nivell d''ampliació {1}"
-
 msgid "Way Download"
 msgstr "Descarregar una via"
 
@@ -37539,6 +37644,26 @@ msgstr ""
 "Afig una etiqueta \"wikipedia\" corresponent a este article als objectes "
 "seleccionats"
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "Ultimate WMS Super-speed Turbo Challenge II"
 
diff --git a/i18n/po/cs.po b/i18n/po/cs.po
index 082999e..3ffcd2b 100644
--- a/i18n/po/cs.po
+++ b/i18n/po/cs.po
@@ -8,16 +8,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-02 22:59+0200\n"
-"PO-Revision-Date: 2017-08-07 06:48+0000\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
+"PO-Revision-Date: 2017-09-27 06:04+0000\n"
 "Last-Translator: Dalibor Jelínek <launchpad.net at dalibor.cz>\n"
 "Language-Team: Czech <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=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-"X-Launchpad-Export-Date: 2017-09-03 04:39+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:37+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: cs\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -405,6 +405,49 @@ msgstr "Smazat"
 msgid "Delete selected objects."
 msgstr "Smazat označené objekty"
 
+msgid "Delete confirmation"
+msgstr "Potvrďte smazá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 ""
+"Chystáte se smazat uzly mimo oblast, jež jste stáhli.<br>To může způsobit "
+"problémy, protože jiné objekty (které nevidíte) je mohou "
+"používat.<br>Opravdu je chcete smazat?"
+
+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 ""
+"Pokoušíte se smazat nekompletní objekty.<br>To způsobí problémy, protože "
+"nevidíte reálné objekty.<br>Opravdu je chcete smazat?"
+
+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] ""
+"Chystáte se smazat {0} relaci: {1}<br/>Tento krok je nutný velice zřídka a "
+"nelze jej po odeslaní na server jednoduše vrátit zpět.<br/>Opravdu chcete "
+"relaci smazat?"
+msgstr[1] ""
+"Chystáte se smazat {0} relace: {1}<br/>Tento krok je nutný velice zřídka a "
+"nelze jej po odeslaní na server jednoduše vrátit zpět.<br/>Opravdu chcete "
+"relace smazat?"
+msgstr[2] ""
+"Chystáte se smazat {0} relací: {1}<br/>Tento krok je nutný velice zřídka a "
+"nelze jej po odeslaní na server jednoduše vrátit zpět.<br/>Opravdu chcete "
+"relace smazat?"
+
+msgid "Delete relation?"
+msgstr "Smazat relaci?"
+
 msgid "Delete Layer"
 msgstr "Smazat vrstvu"
 
@@ -439,7 +482,7 @@ msgid "Download data"
 msgstr "Stahování dat"
 
 msgid "Download map data from a server of your choice"
-msgstr ""
+msgstr "Stažení mapových dat z vybraného serveru"
 
 msgid ""
 "<html>This action will require {0} individual<br>download requests. Do you "
@@ -1398,35 +1441,14 @@ msgstr " [id: {0}]"
 msgid "Segment {0}: {1}"
 msgstr "Část {0}: {1}"
 
-msgid "You must select two or more nodes to split a circular way."
-msgstr "Pro rozdělení kruhové cesty musíte zvolit dva nebo více uzlů."
-
-msgid ""
-"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
-"middle of the way.)"
-msgstr ""
-"Cesta nemůže být rozdělena ve zvolených uzlech. (Tip: Zvolte uzly uprostřed "
-"cesty.)"
-
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
-msgstr ""
-"Členství i s rolí bylo zkopírováno do všech nových cest.<br>Je třeba provést "
-"kontrolu a případné opravy."
+msgid "Search preset"
+msgstr "Najít předvolbu"
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
-msgstr ""
-"Členství v relacích bylo zkopírováno do všech nových cest.<br>Je třeba "
-"provést kontrolu a případné opravy."
+msgid "Show preset search dialog"
+msgstr "Zobrazit vyhledávací dialog předvoleb"
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] "Rozdělit cestu {0} na {1} část"
-msgstr[1] "Rozdělit cestu {0} na {1} části"
-msgstr[2] "Rozdělit cestu {0} na {1} částí"
+msgid "Search presets"
+msgstr "Najít předvolby"
 
 msgid "Discourage upload"
 msgstr "Odradit od nahrávání na server"
@@ -2970,49 +2992,6 @@ msgstr[0] "Smazat {0} relaci"
 msgstr[1] "Smazat {0} relace"
 msgstr[2] "Smazat {0} relací"
 
-msgid "Delete confirmation"
-msgstr "Potvrďte smazá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 ""
-"Chystáte se smazat uzly mimo oblast, jež jste stáhli.<br>To může způsobit "
-"problémy, protože jiné objekty (které nevidíte) je mohou "
-"používat.<br>Opravdu je chcete smazat?"
-
-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 ""
-"Pokoušíte se smazat nekompletní objekty.<br>To způsobí problémy, protože "
-"nevidíte reálné objekty.<br>Opravdu je chcete smazat?"
-
-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] ""
-"Chystáte se smazat {0} relaci: {1}<br/>Tento krok je nutný velice zřídka a "
-"nelze jej po odeslaní na server jednoduše vrátit zpět.<br/>Opravdu chcete "
-"relaci smazat?"
-msgstr[1] ""
-"Chystáte se smazat {0} relace: {1}<br/>Tento krok je nutný velice zřídka a "
-"nelze jej po odeslaní na server jednoduše vrátit zpět.<br/>Opravdu chcete "
-"relace smazat?"
-msgstr[2] ""
-"Chystáte se smazat {0} relací: {1}<br/>Tento krok je nutný velice zřídka a "
-"nelze jej po odeslaní na server jednoduše vrátit zpět.<br/>Opravdu chcete "
-"relace smazat?"
-
-msgid "Delete relation?"
-msgstr "Smazat relaci?"
-
 msgid "Move {0} node"
 msgid_plural "Move {0} nodes"
 msgstr[0] "Přesunout uzel {0}"
@@ -3049,6 +3028,36 @@ msgstr[2] "Zvoleno {0} objektů"
 msgid "Sequence: {0}"
 msgstr "Sekvence: {0}"
 
+msgid "You must select two or more nodes to split a circular way."
+msgstr "Pro rozdělení kruhové cesty musíte zvolit dva nebo více uzlů."
+
+msgid ""
+"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
+"middle of the way.)"
+msgstr ""
+"Cesta nemůže být rozdělena ve zvolených uzlech. (Tip: Zvolte uzly uprostřed "
+"cesty.)"
+
+msgid ""
+"A role based relation membership was copied to all new ways.<br>You should "
+"verify this and correct it when necessary."
+msgstr ""
+"Členství i s rolí bylo zkopírováno do všech nových cest.<br>Je třeba provést "
+"kontrolu a případné opravy."
+
+msgid ""
+"A relation membership was copied to all new ways.<br>You should verify this "
+"and correct it when necessary."
+msgstr ""
+"Členství v relacích bylo zkopírováno do všech nových cest.<br>Je třeba "
+"provést kontrolu a případné opravy."
+
+msgid "Split way {0} into {1} part"
+msgid_plural "Split way {0} into {1} parts"
+msgstr[0] "Rozdělit cestu {0} na {1} část"
+msgstr[1] "Rozdělit cestu {0} na {1} části"
+msgstr[2] "Rozdělit cestu {0} na {1} částí"
+
 msgid "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] "Transformace {0} bodu"
@@ -3188,6 +3197,20 @@ msgstr "Neplatná zeměpisná šířka ''{0}''"
 msgid "Illegal longitude value ''{0}''"
 msgstr "Neplatná zeměpisná délka ''{0}''"
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr "Nepodařilo se vytvořit chybějící složku konfigurace: {0}"
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+"<html>Nepodařilo se vytvořit chybějící složku konfigurace: {0}</html>"
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr "Nepodařilo se vytvořit chybějící složku uživatelských dat: {0}"
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+"Nepodařilo se vytvořit chybějící složku uživatelských dat: {0}</html>"
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr "Chybějící adresář keše se nepodařilo vytvořit: {0}"
 
@@ -3318,6 +3341,9 @@ msgstr "Imperiální"
 msgid "Nautical Mile"
 msgstr "Námořní míle"
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr "Očekávána neprázdná hodnota pro parametr ''{0}'', nalezeno ''{1}''"
+
 msgid "UNKNOWN"
 msgstr "NEZNÁMÁ"
 
@@ -3361,6 +3387,9 @@ msgctxt "compass"
 msgid "E"
 msgstr "V"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr "Nelze parsovat hodnotu souřadnic: ''{0}''"
+
 msgid "Date of imagery: {0}"
 msgstr "Datum mapového podkladu: {0}"
 
@@ -4046,6 +4075,65 @@ msgstr ""
 msgid "Custom Projection"
 msgstr "Vlastní nastavení projekce"
 
+msgid "Error: {0}"
+msgstr "Chyba: {0}"
+
+msgid "JOSM projection command line interface"
+msgstr "Příkazová řádka rozhraní JOSM projekce"
+
+msgid "Description"
+msgstr "Popis"
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr "Konvertuje koordináty z jednoho souřadnicového systému na jiný."
+
+msgid "Options"
+msgstr "Nastavení"
+
+msgid "Show this help"
+msgstr "Zobrazí tuto nápovědu"
+
+msgid "Switch input and output crs"
+msgstr "Změnit vstupní a výstupni souřadnicový systém"
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr "Změnit pořadí vstupních souřadnic (jih/sever, délka/šírka)"
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr "Změnit pořadí výstupních souřadnic (jih/sever, délka/šírka)"
+
+msgid "<crs>"
+msgstr "<systém>"
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+"Formát vstupních a výstupních souřadnic referenčního systému je obdobný jako "
+"u aplikace PROJ.4."
+
+msgid "[file]"
+msgstr "[soubor]"
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+"Čte vstupní data z jednoho nebo více souborů, které jsou uvedeny jako "
+"argumenty. Pokud nejsou žádné soubory uvedeny, nebo je název souboru \"-\", "
+"jsou data čtena ze standardního vstupu."
+
+msgid "Examples"
+msgstr "Příklady"
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr "Očekávány dvě souřadnice oddělené mezerou, nalezeno {0} v ''{1}''"
+
+msgid "Unable to parse number ''{0}''"
+msgstr "Nepodařilo se parsovat číslo ''{0}''"
+
 msgid "GRS80"
 msgstr "GRS80"
 
@@ -5125,9 +5213,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr "Posunutí"
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr "Očekávána neprázdná hodnota pro parametr ''{0}'', nalezeno ''{1}''"
-
 msgid "Outdated Java version"
 msgstr "Zastaralá verze Java"
 
@@ -5161,7 +5246,7 @@ msgid "Would you like to update now ?"
 msgstr "Chcete aktualizovat nyní?"
 
 msgid "Starting file watcher"
-msgstr ""
+msgstr "Startuji sledovač souborů"
 
 msgid "Executing platform startup hook"
 msgstr "Startovací činnosti specifické pro platformu"
@@ -5178,6 +5263,9 @@ msgstr "Inicializuji interní data hranic"
 msgid "Initializing OSM API"
 msgstr "Inicializace API OSM"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr "Odstraněna vrstva {0}, protože není povolena nastaveným API."
+
 msgid "Initializing internal traffic data"
 msgstr "Inicializuji interní data o dopravě"
 
@@ -5199,9 +5287,6 @@ msgstr "použití"
 msgid "options"
 msgstr "Možnosti"
 
-msgid "Show this help"
-msgstr "Zobrazí tuto nápovědu"
-
 msgid "Standard unix geometry argument"
 msgstr "Standardní unixová geometrie okna"
 
@@ -5431,6 +5516,15 @@ msgstr ""
 "důsledek chybějícího nastavení proxy serveru.<br>Chcete teď změnit nastavení "
 "proxy?"
 
+msgid "You have {0} unread message."
+msgid_plural "You have {0} unread messages."
+msgstr[0] "Máte {0} nepřečtenou zprávu."
+msgstr[1] "Máte {0} nepřečtené zprávy."
+msgstr[2] "Máte {0} nepřečtených zpráv."
+
+msgid "Click here to see your inbox."
+msgstr "Kliknutím sem otevřete svou poštovní schránku."
+
 msgctxt "menu"
 msgid "File"
 msgstr "Soubor"
@@ -5695,6 +5789,12 @@ msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 "Zadaná hodnota není identifikátorem dlaždice pro zvolenou úroveň zvětšení"
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+"Založení hlášení chyby se nezdařilo. Prosím, nahlaste to ručně na této "
+"stránce:"
+
 msgid "You have encountered a bug in JOSM"
 msgstr "Narazili jste na chybu v JOSM"
 
@@ -7633,6 +7733,9 @@ msgstr "Odstranit sadu změn v panelu z lokální keše"
 msgid "Update the changeset from the OSM server"
 msgstr "Aktualizovat sadu změn ze serveru OSM"
 
+msgid "View changeset"
+msgstr "Zobrazit sadu změn"
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7883,9 +7986,6 @@ msgstr "URL: "
 msgid "Please enter or paste an URL to retrieve changesets from the OSM API."
 msgstr "Prosím zadejte nebo vložte URL pro získání sad změn z API OSM."
 
-msgid "Examples"
-msgstr "Příklady"
-
 msgid ""
 "Note that changeset queries are currently always submitted to ''{0}'', "
 "regardless of the host, port and path of the URL entered below."
@@ -8832,7 +8932,7 @@ msgid "Download referrers (parent relations and ways)"
 msgstr "Stáhnout odkazující objekty (rodičovské relace a cesty)"
 
 msgid "Download from OSM"
-msgstr ""
+msgstr "Stáhnout z OSM"
 
 msgid "Data Sources and Types:"
 msgstr "Zdroje a typy dat:"
@@ -8878,13 +8978,7 @@ msgstr ""
 "akceptována."
 
 msgid "Download from Overpass API"
-msgstr ""
-
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
-msgstr "Vytvořit dotaz Overpass pomocníkem s dotazy Overpass Turbo"
-
-msgid "Query Wizard"
-msgstr "Pomocník s dotazy"
+msgstr "Stáhnout z Overpass API"
 
 msgid ""
 "Place your Overpass query below or generate one using the Overpass Turbo "
@@ -8893,58 +8987,38 @@ msgstr ""
 "Napište svůj dotaz Overpass níže, nebo ho vytvořte pomocí pomocníka s dotazy "
 "Overpass Turbo"
 
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgstr "Vytvořit dotaz Overpass pomocníkem s dotazy Overpass Turbo"
+
+msgid "Query Wizard"
+msgstr "Pomocník s dotazy"
+
 msgid "Your saved queries:"
-msgstr ""
+msgstr "Uložené dotazy:"
 
 msgid "Show/hide Overpass snippet list"
-msgstr "Zobrazit/skrýt seznam kousků dotazů Overpass"
+msgstr "Zobrazit/skrýt seznam uložených dotazů Overpass"
 
 msgid "Overpass query:"
-msgstr ""
+msgstr "Overpass dotaz:"
 
 msgid ""
 "You entered an empty query. Do you want to download all data in this area "
 "instead?"
 msgstr ""
+"Bylo vložen prázdný dotaz. Chcete stáhnou veškerá data ve vybrané oblasti?"
 
 msgid "Download all data?"
-msgstr ""
+msgstr "Stáhnout všechna data?"
 
 msgid "Add new snippet"
-msgstr ""
+msgstr "Přidat dotaz"
 
 msgid "Delete selected snippet"
-msgstr ""
+msgstr "Smazat vybraný dotaz"
 
 msgid "Edit selected snippet"
-msgstr ""
-
-msgid "history"
-msgstr "informace o historii"
-
-msgid "Please select an item first"
-msgstr "Zvolte, prosím, nejdříve položku"
-
-msgid "Edit item"
-msgstr "Upravit položku"
-
-msgid "Add snippet"
-msgstr "Přidat kousek dotazu"
-
-msgid "Query cannot be empty"
-msgstr "Dotaz nemůže být prázdný"
-
-msgid "This name can be used for the item"
-msgstr "Tento název lze pro položku použít"
-
-msgid "Item with this name already exists"
-msgstr "Položka s tímto názvem již existuje"
-
-msgid "The item cannot be created with provided name"
-msgstr "S tímto názvem nelze položku vytvořit"
-
-msgid "The item cannot be created with an empty query"
-msgstr "Nelze vytvořit položku s prázdným dotazem"
+msgstr "Upravit vybraný dotaz"
 
 msgid "Overpass Turbo Query Wizard"
 msgstr "Pomocník s dotazy Overpass Turbo"
@@ -9019,6 +9093,9 @@ msgid ""
 "with any contents for the value, the value matching some regular expression. "
 "\"Not equal\" operators are supported as well.</span>"
 msgstr ""
+"<span>Stažení objektů které mají konkretní značky a hodnoty, případně "
+"obsahují vybrané značky libovolných hodnot nebo odpovídají regulárnímu "
+"výrazu. Je také možné používat operátor negace.</span>"
 
 msgid "<i>expression1 {0} expression2</i>"
 msgstr "<i>výraz1 {0} výraz2</i>"
@@ -9028,6 +9105,8 @@ msgid ""
 "Instead of \"or\" - \"|\", \"||\" can be used, and instead of \"and\" - "
 "\"&\", \"&&\"."
 msgstr ""
+"Základní logické operátory je možné využít k vytváření složitějších dotazů. "
+"Místo „or“ lze použít „|“, „||“, a místo „and“ pak „&“, „&&“."
 
 msgid "Class Type"
 msgstr "Hodnota značky"
@@ -9077,6 +9156,33 @@ msgstr "Aktuální mapa"
 msgid "Tile Numbers"
 msgstr "Čísla dlaždic"
 
+msgid "history"
+msgstr "informace o historii"
+
+msgid "Please select an item first"
+msgstr "Zvolte, prosím, nejdříve položku"
+
+msgid "Edit item"
+msgstr "Upravit položku"
+
+msgid "Add snippet"
+msgstr "Přidat dotaz"
+
+msgid "Query cannot be empty"
+msgstr "Dotaz nemůže být prázdný"
+
+msgid "This name can be used for the item"
+msgstr "Tento název lze pro položku použít"
+
+msgid "Item with this name already exists"
+msgstr "Položka s tímto názvem již existuje"
+
+msgid "The item cannot be created with provided name"
+msgstr "S tímto názvem nelze položku vytvořit"
+
+msgid "The item cannot be created with an empty query"
+msgstr "Nelze vytvořit položku s prázdným dotazem"
+
 msgid "JOSM Help Browser"
 msgstr "Prohlížeč nápovědy JOSM"
 
@@ -9233,6 +9339,12 @@ msgstr "Zvětšit na tento uzel v aktuální datové vrstvě"
 msgid "Open a history browser with the history of this node"
 msgstr "Otevřít prohlížeč historie s historií tohoto uzlu"
 
+msgid "View changeset in web browser"
+msgstr "Zobrazit sadu změn ve webovém prohlížeči"
+
+msgid "Open {0}"
+msgstr "Otevřít {0}"
+
 msgid "Way {0}"
 msgstr "Cesta {0}"
 
@@ -9242,6 +9354,9 @@ msgstr "Relace {0}"
 msgid "Object"
 msgstr "Objekt"
 
+msgid "Open Changeset Manager"
+msgstr "Otevřít správce sad změn"
+
 msgid "Changeset comment"
 msgstr "Komentář k sadě změn"
 
@@ -9414,6 +9529,9 @@ msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 "Zaškrtněte \"Uložit\", aby se vrstva uložila do souboru určeného vlevo."
 
+msgid "I would like someone to review my edits."
+msgstr "Požádat o posouzení změn ostatní editory."
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "Stručný komentář ke změnám"
 
@@ -10429,7 +10547,7 @@ msgid "Open OSM file"
 msgstr "Otevřít OSM soubor"
 
 msgid "Validation Error Files"
-msgstr ""
+msgstr "Soubory chyb validace"
 
 msgid "WMS Files (*.wms)"
 msgstr "WMS soubory (*.wms)"
@@ -10598,9 +10716,6 @@ msgstr[0] "{0} stopa"
 msgstr[1] "{0} stopy"
 msgstr[2] "{0} stop"
 
-msgid "Description"
-msgstr "Popis"
-
 msgid "Timespan"
 msgstr "Časový interval"
 
@@ -10686,7 +10801,7 @@ msgid "Changes need uploading?"
 msgstr "Je třeba nahrát změny na server?"
 
 msgid "Save Note file"
-msgstr ""
+msgstr "Uložit soubor poznámek"
 
 msgid "outside downloaded area"
 msgstr "mimo staženou oblast"
@@ -10765,7 +10880,7 @@ msgid "No validation errors"
 msgstr "Žádné chyby při kontrole"
 
 msgid "Save Validation errors file"
-msgstr ""
+msgstr "Uložit soubor chyb validace"
 
 msgid "Set WMS Bookmark"
 msgstr "Nastavit záložku WMS"
@@ -14044,15 +14159,6 @@ msgstr "Pod-prvek předvolby bez rodiče"
 msgid "Error parsing {0}: "
 msgstr "Chyba parsování {0}: "
 
-msgid "Search preset"
-msgstr "Najít předvolbu"
-
-msgid "Show preset search dialog"
-msgstr "Zobrazit vyhledávací dialog předvoleb"
-
-msgid "Search presets"
-msgstr "Najít předvolby"
-
 msgid "Presets"
 msgstr "Předvolby"
 
@@ -14170,6 +14276,9 @@ msgstr "Všechny soubory (*.*)"
 msgid "Received error page:"
 msgstr "Obdržena chybová stránka:"
 
+msgid "{0}... [please type its number]"
+msgstr "{0}… [zadejte prosím jeho číslo]"
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -14464,15 +14573,6 @@ msgstr "Neznámý režim {0}."
 msgid "get number of unread messages"
 msgstr "získat počet nepřečtených zpráv"
 
-msgid "You have {0} unread message."
-msgid_plural "You have {0} unread messages."
-msgstr[0] "Máte {0} nepřečtenou zprávu."
-msgstr[1] "Máte {0} nepřečtené zprávy."
-msgstr[2] "Máte {0} nepřečtených zpráv."
-
-msgid "Click here to see your inbox."
-msgstr "Kliknutím sem otevřete svou poštovní schránku."
-
 msgid "Message notifier"
 msgstr "Oznamování zpráv"
 
@@ -14540,9 +14640,6 @@ msgstr ""
 "Podporován je protokol verze 0.6, ale server tvrdí že podporuje od {0} do "
 "{1}."
 
-msgid "Removed layer {0} because it is not allowed by the configured API."
-msgstr "Odstraněna vrstva {0}, protože není povolena nastaveným API."
-
 msgid "Unexpected format of ID replied by the server. Got ''{0}''."
 msgstr "neočekávaný formát id získaný ze serveru, získáno ''{0}''"
 
@@ -16039,9 +16136,6 @@ msgstr ""
 "http://forum.openstreetmap.org/viewtopic.php?id=25677).\n"
 "Aktuálně máte pro JOSM alokováno {1,number,#}MB paměti"
 
-msgid "{0}... [please type its number]"
-msgstr "{0}… [zadejte prosím jeho číslo]"
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -16157,12 +16251,6 @@ msgid "Failed to load XML schema."
 msgstr "Nepodařilo se načíst XML schéma."
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-"Založení hlášení chyby se nezdařilo. Prosím, nahlaste to ručně na této "
-"stránce:"
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -16762,6 +16850,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr "žádný"
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr "oddělené"
+
 msgid "Service type"
 msgstr "Druh obslužné koleje"
 
@@ -18686,7 +18778,7 @@ msgid "Culvert"
 msgstr "Propustek"
 
 msgid "Basin"
-msgstr "Vodní nádrž"
+msgstr "Polder (suchá nádrž)"
 
 msgid "retention"
 msgstr "retenční nádrž"
@@ -18823,9 +18915,11 @@ msgid "Bay"
 msgstr "Zátoka"
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
-"Velká vodní plocha, částečně obklopená pevninou, ale se širokým ústím."
+"Vodní plocha téměř uzavřená pevninou, ale úrovňově propojená s mořem či "
+"jezerem."
 
 msgid "Shipping"
 msgstr "Lodní doprava"
@@ -20493,7 +20587,7 @@ msgid "Nursing Home"
 msgstr "Pečovatelský ústav"
 
 msgid "Nursing Home (Legacy)"
-msgstr ""
+msgstr "Dům s pečovatelskou službou (legacy)"
 
 msgid "Group Home"
 msgstr "Společný domov pro osoby se sociálními a zdravotními službami."
@@ -22938,7 +23032,7 @@ msgid "Variety Store"
 msgstr "Levné věci"
 
 msgid "Charity"
-msgstr ""
+msgstr "Charita"
 
 msgid "Bookmaker"
 msgstr "Sázková kancelář"
@@ -23816,75 +23910,75 @@ msgstr "Průmysl"
 
 msgctxt "industrial"
 msgid "bakery"
-msgstr ""
+msgstr "pekárna"
 
 msgctxt "industrial"
 msgid "brewery"
-msgstr ""
+msgstr "pivovar"
 
 msgctxt "industrial"
 msgid "brickyard"
-msgstr ""
+msgstr "cihelna"
 
 msgctxt "industrial"
 msgid "depot"
-msgstr ""
+msgstr "sklady"
 
 msgctxt "industrial"
 msgid "distributor"
-msgstr ""
+msgstr "distributor"
 
 msgctxt "industrial"
 msgid "factory"
-msgstr ""
+msgstr "továrna"
 
 msgctxt "industrial"
 msgid "grinding_mill"
-msgstr ""
+msgstr "mlýn"
 
 msgctxt "industrial"
 msgid "heating_station"
-msgstr ""
+msgstr "teplárna"
 
 msgctxt "industrial"
 msgid "machine_shop"
-msgstr ""
+msgstr "strojírna"
 
 msgctxt "industrial"
 msgid "mine"
-msgstr ""
+msgstr "důl"
 
 msgctxt "industrial"
 msgid "oil"
-msgstr ""
+msgstr "rafinérie"
 
 msgctxt "industrial"
 msgid "port"
-msgstr ""
+msgstr "přístav"
 
 msgctxt "industrial"
 msgid "salt_pond"
-msgstr ""
+msgstr "salina"
 
 msgctxt "industrial"
 msgid "sawmill"
-msgstr ""
+msgstr "pila"
 
 msgctxt "industrial"
 msgid "scrap_yard"
-msgstr ""
+msgstr "vrakoviště"
 
 msgctxt "industrial"
 msgid "shipyard"
-msgstr ""
+msgstr "loděnice"
 
 msgctxt "industrial"
 msgid "slaughterhouse"
-msgstr ""
+msgstr "jatka"
 
 msgctxt "industrial"
 msgid "warehouse"
-msgstr ""
+msgstr "sklady"
 
 msgid "Garages"
 msgstr "Garáže"
@@ -24592,7 +24686,7 @@ msgstr ""
 "je 2,31 roku a některé oblasti jsou aktualizovány dvakrát ročně."
 
 msgid "Esri World Imagery"
-msgstr ""
+msgstr "Snímky světa Esri"
 
 msgid "OpenCycleMap"
 msgstr "OpenCycleMap"
@@ -24678,6 +24772,9 @@ msgstr "Značené trasy: Jízda na koních"
 msgid "Waymarked Trails: Winter Sports"
 msgstr "Značené trasy: Zimní sporty"
 
+msgid "Wikimedia Map"
+msgstr "Mapa Wikimedia"
+
 msgid "OSM Inspector: Geometry"
 msgstr "OSM Inspector: Geometrie"
 
@@ -24741,6 +24838,9 @@ msgstr "Snímky Sentinel-2 oblasti Enderby Land a Kemp Coast (pravé barvy)"
 msgid "IGN topographical map (TMS)"
 msgstr "IGN topographical map (TMS)"
 
+msgid "IGN topographical map (WMTS)"
+msgstr "IGN topographical map (WMTS)"
+
 msgid "IGN topographical map (WMS)"
 msgstr "IGN topographical map (WMS)"
 
@@ -24822,6 +24922,21 @@ msgstr "IGN orthophoto Río Paraná B (WMTS)"
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr "IGN orthophoto Rosario (WMTS)"
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr "IGN orthophoto Salta (WMTS)"
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr "IGN orthophoto Salta 1 (WMTS)"
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr "IGN orthophoto Salta 2 (WMTS)"
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr "IGN orthophoto Salta 3 (WMTS)"
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr "IGN orthophoto Salta 4 (WMTS)"
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr "IGN orthophoto Salto Grande (WMTS)"
 
@@ -24843,9 +24958,6 @@ msgstr "IGN orthophoto Santa Cruz VI (WMTS)"
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr "IGN orthophoto Santa Fe and Paraná (WMTS)"
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr "IGN orthophoto Trelew (WMTS)"
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr "IGN orthophoto Tucumán (WMTS)"
 
@@ -25367,7 +25479,7 @@ msgid "French land registry"
 msgstr "Francouzký pozemkový katastr"
 
 msgid "CRAIG - Auvergne 2016 - 25 cm"
-msgstr ""
+msgstr "CRAIG - Auvergne 2016 - 25 cm"
 
 msgid "CRAIG - Auvergne 2013 - 25 cm"
 msgstr "CRAIG - Auvergne 2013 - 25 cm"
@@ -25457,6 +25569,9 @@ msgstr "Berlin aerial photograph 2015"
 msgid "Berlin aerial photograph 2016"
 msgstr "Berlin aerial photograph 2016"
 
+msgid "Berlin aerial photograph 2017"
+msgstr "Berlin aerial photograph 2017"
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr "Deutsche Bahn VzG lines Nov 2013"
 
@@ -25898,6 +26013,9 @@ msgstr "Luxembourg Inspire Water"
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Niger Delta Oct 2012 Landsat"
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr "INEGI Digital Map of Mexico (WMS)"
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 
@@ -26360,6 +26478,9 @@ msgstr "NLSC Open Data WMTS"
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 
+msgid "Aşgabat (high resolution)"
+msgstr "Aşgabat (high resolution)"
+
 msgid "MSR Maps Topo"
 msgstr "MSR Maps Topo"
 
@@ -27771,6 +27892,9 @@ msgstr "relace bez \"type\""
 msgid "{0} relation without {0} tag"
 msgstr "{0} relace bez {0} značky"
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr "cesta s {0} je součástí relace cyklostezky"
+
 msgid "religion without denomination"
 msgstr "\"religion\" bez \"denomination\""
 
@@ -27986,10 +28110,6 @@ msgid "Customization of public public transport stops."
 msgstr "Úpravy zastávek veřejné dopravy."
 
 msgid ""
-"Creating and handling address nodes and buildings within Czech Republic."
-msgstr "Vytváření a správa adresních bodů a budov v rámci  České Republiky."
-
-msgid ""
 "Allows to import various file formats into JOSM directly. Currently "
 "supported: TangoGPS, Garmin Trainings Center TCX."
 msgstr ""
@@ -28049,9 +28169,6 @@ msgstr ""
 "Povídejte si s uživateli, kteří editují mapu poblíž místa, kde editujete vy. "
 "Budete upozorněni, když se někdo přiblíží."
 
-msgid "Allows you to view a GeoJSON file as a layer."
-msgstr "Umožňuje zobrazit soubor GeoJSON jako vrstvu."
-
 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."
@@ -28482,14 +28599,6 @@ msgstr ""
 "(Pozor! Doplněk je stále ve vývoji!) Přiřazuje a synchronizuje video s údaji "
 "o poloze k trase GPS, aby bylo možné identifikovat objekty na videu."
 
-msgid ""
-"Supports downloading tiled, scanned maps from walking-papers.org. This "
-"plugin is still under early development and may be buggy."
-msgstr ""
-"Podpora stahování naskenovaných map rozdělených na dlaždice ze serveru "
-"walking-papers.org. Tento doplněk je stále v rané fázi vývoje a může "
-"obsahovat chyby."
-
 msgid "Easy downloading along a long set of interconnected ways"
 msgstr "Snadné stahovaní velmi dlouhých propojených cest"
 
@@ -29133,15 +29242,15 @@ msgstr "Vrstva objektů Mapillary"
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr "Zobrazí vrstvu, ve které jsou mapové objekty detekované Mapillary"
 
+msgid "Start Mapillary layer"
+msgstr "Spustit vrstvu Mapillary"
+
 msgid "Mapillary"
 msgstr "Mapillary"
 
 msgid "Create Mapillary layer"
 msgstr "Vytvořit vrstvu Mapillary"
 
-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í"
 
@@ -30592,6 +30701,159 @@ msgstr[2] "Existuje {0} budov s konfliktem adres"
 msgid "No address nodes inside buildings found"
 msgstr "Nebyly nalezeny žádné uzly adres uvnitř budov"
 
+msgid "Auto sourcing"
+msgstr "Automatické zdrojování"
+
+msgid ""
+"Please enable at least two WMS layers in the cadastre-fr plugin "
+"configuration.\n"
+"Layers ''Building'' and ''Parcel'' added by default."
+msgstr ""
+"Povolte, prosím, minimálně dvě vrstvy v nastavení doplňku cadastre-fr.\n"
+"Vrstvy ''Building'' a ''Parcel'' jsou přidávány standardně."
+
+msgid ""
+"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+msgstr ""
+"Varování: neúspěšná volba umístit panel dialogu vždy na vrchu. Výjimka byla: "
+"{0}"
+
+msgid ""
+"To enable the cadastre WMS plugin, change\n"
+"the current projection to one of the cadastre\n"
+"projections and retry"
+msgstr ""
+"Chcete-li zapnout doplněk Cadastre WMS,\n"
+"změňte aktuální projekci na tu, kterou\n"
+"používá katastr, a zkuste to znovu."
+
+msgid "Change the current projection"
+msgstr "Změnit aktuální projekci"
+
+msgid "Extract commune boundary"
+msgstr "Vybrat hranice obce(samosprávy)"
+
+msgid "Only on vectorized layers"
+msgstr "Pouze na vektorizovaných vrstvách"
+
+msgid "Cancel current grab"
+msgstr "Zrušit aktuální zachytávání"
+
+msgid "Cancel current grab (only vector images)"
+msgstr "Zrušit aktuální zachytávání (pouze vektorových obrázků)"
+
+msgid "Cadastre grab"
+msgstr "Zachycení katastru"
+
+msgid "Download Image from French Cadastre WMS"
+msgstr "Stáhnout obrázek z Francouzského katastrálního WMS"
+
+msgid "Cadastre: {0}"
+msgstr "Katastr: {0}"
+
+msgid "Georeference an image"
+msgstr "Přiřazení souřadnic obrázku"
+
+msgid "Grab non-georeferenced image"
+msgstr "Zachytit obrázek bez zeměpisných souřadnic"
+
+msgid "Georeferencing interrupted"
+msgstr "Zjišťování zeměpisných souřadnic přerušeno"
+
+msgid ""
+"This image contains georeference data.\n"
+"Do you want to use them ?"
+msgstr ""
+"Tento obrázek obsahuje georeferenční data.\n"
+"Chcete je použít?"
+
+msgid "Load layer from cache"
+msgstr "Načíst vrstvu z keše"
+
+msgid "Load location from cache (only if cache is enabled)"
+msgstr "Načíst lokalitu z keše (pouze pokud je keš povolená)"
+
+msgid "{0} not allowed with the current projection"
+msgstr "{0} není se současnou projekcí dovolena"
+
+msgid ""
+"Cannot load cache {0} which is not compatible with current projection zone"
+msgstr ""
+"Nelze načíst keš {0}, která není kompatibilní s aktuální oblastí projekce"
+
+msgid ""
+"Selected file {0} is not a cache file from this plugin (invalid extension)"
+msgstr ""
+"Vybraný soubor {0} není souborem keše pro tento doplněk (špatná přípona)"
+
+msgid "The location {0} is already on screen. Cache not loaded."
+msgstr "Místo {0} je právě zobrazeno. Keš nebyla načtena."
+
+msgid "(optional)"
+msgstr "(volitelné)"
+
+msgid "Change location"
+msgstr "Změnit umístění"
+
+msgid "Set a new location for the next request"
+msgstr "Nastavení nového místa pro další požadavek"
+
+msgid "Add a new municipality layer"
+msgstr "Přidat novou vrstvu obce"
+
+msgid "Commune"
+msgstr "Obec"
+
+msgid ""
+"<html>Enter the town,village or city name.<br>Use the syntax and punctuation "
+"known by www.cadastre.gouv.fr .</html>"
+msgstr ""
+"<html>Vložte název města nebo obce.<br>Použijte syntax a interpunkci dle "
+"www.cadastre.gouv.fr .</html>"
+
+msgid "Departement"
+msgstr "Departement"
+
+msgid "<html>Departement number (optional)</html>"
+msgstr "<html>Číslo departementu (volitelné)</html>"
+
+msgid "Add new layer"
+msgstr "Přidat novou vrstvu"
+
+msgid "Open Cadastre Preferences"
+msgstr "Otevřít nastavení Katastru"
+
+msgid "Refine georeferencing"
+msgstr "Upřesnit přiřazení souřadnic"
+
+msgid "Improve georeferencing (only raster images)"
+msgstr "Zlepšit přiřazení souřadnic obrázku (pouze pro rastrové obrázky)"
+
+msgid "Reset cookie"
+msgstr "Vymazat cookie"
+
+msgid "Get a new cookie (session timeout)"
+msgstr "Získat nový cookie (vypršení sezení)"
+
+msgid "Save image as..."
+msgstr "Uložit obrázek jako..."
+
+msgid "PNG files (*.png)"
+msgstr "PNG soubory (*.png)"
+
+msgid "GeoTiff files (*.tif)"
+msgstr "GeoTiff soubory (*.tif)"
+
+msgid "Export image (only raster images)"
+msgstr "Export obrázku (pouze bitmapy)"
+
+msgid ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+"Je zobrazena více než jedna WMS vrstva\n"
+"Nejdříve vyberte jednu z nich a potom zopakujte"
+
 msgid "on polygon"
 msgstr "na polygonu"
 
@@ -30607,94 +30869,87 @@ msgstr "Další číslo"
 msgid "Enter addresses"
 msgstr "Zadejte adresy"
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
-msgstr ""
-"Lokalita \"{0}\" nalezena v keši.\n"
-"Načíst nejdříve keš?\n"
-"(Ne = nová keš)"
+msgid "Adjust WMS"
+msgstr "Upravit WMS"
 
-msgid "Select Feuille"
-msgstr "Vybrat Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
+msgstr "Upravit pozici WMS podkladu (ukládáno pouze pro rastrové obrázky)"
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
-msgstr ""
-"Chyba při nahrávání souboru.\n"
-"Pravděpodobně jde o starou verzi nakešovaného souboru."
+msgid "Add \"source=...\" to elements?"
+msgstr "Přidat značku \"source=...\" k prvkům?"
 
-msgid "Lambert Zone {0} cache file (.{0})"
-msgstr "Lambertova projekce {0} soubor keše (.{0})"
+msgid "Download from Cadastre"
+msgstr "Stáhnout z katastru"
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
-msgstr "Lambertova projekce CC9 {0} soubor keše (.CC{0})"
+msgid "Objects:"
+msgstr "Objekty:"
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
-msgstr "Guadeloupe Fort-Marigot soubor keše (.UTM1)"
+msgid "Select to download buildings in the selected download area."
+msgstr "Zvolte pro stažení budov ve vybrané oblasti stahování."
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
-msgstr "Guadeloupe Ste-Anne soubor keše (.UTM2)"
+msgid "address"
+msgstr "adresa"
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
-msgstr "Martinique Fort Desaix soubor keše (.UTM3)"
+msgid "Select to download addresses in the selected download area."
+msgstr "Zvolte pro stažení adres ve vybrané oblasti stahování."
 
-msgid "Reunion RGR92 cache file (.UTM4)"
-msgstr "Reunion RGR92 soubor keše (.UTM4)"
+msgid "symbol"
+msgstr "symbol"
 
-msgid "CadastreGrabber: Illegal url."
-msgstr "CadastreGrabber: Neplatné URL."
+msgid "Select to download symbols in the selected download area."
+msgstr "Zvolte pro stažení symbolů ve vybrané oblasti stahování."
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr "Zvolte pro stažení vodstva ve vybrané oblasti stahování."
+
+msgid "parcel"
+msgstr "parcela"
+
+msgid "Select to download cadastral parcels in the selected download area."
 msgstr ""
-"Nelze otevřít nové spojení pro klienta.\n"
-"Na serveru probíhá údržba, nebo je přetížený."
+"Zvolte pro stažení katastrálních parcel ve vybrané oblasti stahování."
+
+msgid "parcel number"
+msgstr "číslo parcely"
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
-"Město {0} nenalezeno, nebo není dostupné\n"
-"nebo byla akce přerušena"
+"Zvolte pro stažení čísel katastrálních parcel ve vybrané oblasti stahování."
 
-msgid "Choose from..."
-msgstr "Vyberte z..."
+msgid "section"
+msgstr "kraj"
 
-msgid "Select commune"
-msgstr "Vybrat commune"
+msgid "Select to download cadastral sections in the selected download area."
+msgstr "Zvolte pro stažení katastrálních sekcí ve vybrané oblasti stahování."
 
-msgid "Auto sourcing"
-msgstr "Automatické zdrojování"
+msgid "locality"
+msgstr "lokalita"
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
-msgstr ""
-"Povolte, prosím, minimálně dvě vrstvy v nastavení doplňku cadastre-fr.\n"
-"Vrstvy ''Building'' a ''Parcel'' jsou přidávány standardně."
+msgid "Select to download localities in the selected download area."
+msgstr "Zvolte pro stažení lokalit ve vybrané oblasti stahování."
+
+msgid "commune"
+msgstr "obec"
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
-"Varování: neúspěšná volba umístit panel dialogu vždy na vrchu. Výjimka byla: "
-"{0}"
+"Zvolte pro stažení hranic samosprávných jednotek ve vybrané oblasti "
+"stahování."
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
-msgstr ""
-"Chcete-li zapnout doplněk Cadastre WMS,\n"
-"změňte aktuální projekci na tu, kterou\n"
-"používá katastr, a zkuste to znovu."
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
+msgstr "<html>Nic není povoleno.<br>Vyberte, prosím, něco ke stažení.</html>"
 
-msgid "Change the current projection"
-msgstr "Změnit aktuální projekci"
+msgid "Recipient"
+msgstr "Příjemce"
+
+msgid "Diffusion restriction"
+msgstr "Omezení rozšíření"
+
+msgid "Cadastre Edigeo files"
+msgstr "Soubory Edigeo katastru"
 
 msgid "Replace original background by JOSM background color."
 msgstr "Nahradit původní pozadí pozadím nastaveným v JOSM."
@@ -30745,27 +31000,6 @@ msgstr "střední"
 msgid "low"
 msgstr "nízké"
 
-msgid "symbol"
-msgstr "symbol"
-
-msgid "parcel"
-msgstr "parcela"
-
-msgid "parcel number"
-msgstr "číslo parcely"
-
-msgid "address"
-msgstr "adresa"
-
-msgid "locality"
-msgstr "lokalita"
-
-msgid "section"
-msgstr "kraj"
-
-msgid "commune"
-msgstr "obec"
-
 msgid "Enable automatic caching."
 msgstr "Zapnout automatické kešování."
 
@@ -30922,8 +31156,65 @@ msgstr "Tohle povolte, aby se používala značka ''addr:street'' na uzlech."
 msgid "Unexpected file extension. {0}"
 msgstr "Neočekávaná přípona souboru. {0}"
 
-msgid "Add \"source=...\" to elements?"
-msgstr "Přidat značku \"source=...\" k prvkům?"
+msgid ""
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
+msgstr ""
+"Lokalita \"{0}\" nalezena v keši.\n"
+"Načíst nejdříve keš?\n"
+"(Ne = nová keš)"
+
+msgid "Select Feuille"
+msgstr "Vybrat Feuille"
+
+msgid ""
+"Error loading file.\n"
+"Probably an old version of the cache file."
+msgstr ""
+"Chyba při nahrávání souboru.\n"
+"Pravděpodobně jde o starou verzi nakešovaného souboru."
+
+msgid "Lambert Zone {0} cache file (.{0})"
+msgstr "Lambertova projekce {0} soubor keše (.{0})"
+
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgstr "Lambertova projekce CC9 {0} soubor keše (.CC{0})"
+
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgstr "Guadeloupe Fort-Marigot soubor keše (.UTM1)"
+
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgstr "Guadeloupe Ste-Anne soubor keše (.UTM2)"
+
+msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgstr "Martinique Fort Desaix soubor keše (.UTM3)"
+
+msgid "Reunion RGR92 cache file (.UTM4)"
+msgstr "Reunion RGR92 soubor keše (.UTM4)"
+
+msgid "CadastreGrabber: Illegal url."
+msgstr "CadastreGrabber: Neplatné URL."
+
+msgid ""
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
+msgstr ""
+"Nelze otevřít nové spojení pro klienta.\n"
+"Na serveru probíhá údržba, nebo je přetížený."
+
+msgid ""
+"Town/city {0} not found or not available\n"
+"or action canceled"
+msgstr ""
+"Město {0} nenalezeno, nebo není dostupné\n"
+"nebo byla akce přerušena"
+
+msgid "Choose from..."
+msgstr "Vyberte z..."
+
+msgid "Select commune"
+msgstr "Vybrat commune"
 
 msgid "Downloading {0}"
 msgstr "Stahuji {0}"
@@ -30973,123 +31264,6 @@ msgstr ""
 "Tato komunita nebyla zdigitalizována.\n"
 "Použijte prosím jinou položku menu, abyste mohli určit polohu \"Plan image\""
 
-msgid "Extract commune boundary"
-msgstr "Vybrat hranice obce(samosprávy)"
-
-msgid "Only on vectorized layers"
-msgstr "Pouze na vektorizovaných vrstvách"
-
-msgid "Cancel current grab"
-msgstr "Zrušit aktuální zachytávání"
-
-msgid "Cancel current grab (only vector images)"
-msgstr "Zrušit aktuální zachytávání (pouze vektorových obrázků)"
-
-msgid "Cadastre grab"
-msgstr "Zachycení katastru"
-
-msgid "Download Image from French Cadastre WMS"
-msgstr "Stáhnout obrázek z Francouzského katastrálního WMS"
-
-msgid "Cadastre: {0}"
-msgstr "Katastr: {0}"
-
-msgid "Georeference an image"
-msgstr "Přiřazení souřadnic obrázku"
-
-msgid "Grab non-georeferenced image"
-msgstr "Zachytit obrázek bez zeměpisných souřadnic"
-
-msgid "Georeferencing interrupted"
-msgstr "Zjišťování zeměpisných souřadnic přerušeno"
-
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
-msgstr ""
-"Tento obrázek obsahuje georeferenční data.\n"
-"Chcete je použít?"
-
-msgid "Load layer from cache"
-msgstr "Načíst vrstvu z keše"
-
-msgid "Load location from cache (only if cache is enabled)"
-msgstr "Načíst lokalitu z keše (pouze pokud je keš povolená)"
-
-msgid "{0} not allowed with the current projection"
-msgstr "{0} není se současnou projekcí dovolena"
-
-msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
-msgstr ""
-"Nelze načíst keš {0}, která není kompatibilní s aktuální oblastí projekce"
-
-msgid ""
-"Selected file {0} is not a cache file from this plugin (invalid extension)"
-msgstr ""
-"Vybraný soubor {0} není souborem keše pro tento doplněk (špatná přípona)"
-
-msgid "The location {0} is already on screen. Cache not loaded."
-msgstr "Místo {0} je právě zobrazeno. Keš nebyla načtena."
-
-msgid "(optional)"
-msgstr "(volitelné)"
-
-msgid "Change location"
-msgstr "Změnit umístění"
-
-msgid "Set a new location for the next request"
-msgstr "Nastavení nového místa pro další požadavek"
-
-msgid "Add a new municipality layer"
-msgstr "Přidat novou vrstvu obce"
-
-msgid "Commune"
-msgstr "Obec"
-
-msgid ""
-"<html>Enter the town,village or city name.<br>Use the syntax and punctuation "
-"known by www.cadastre.gouv.fr .</html>"
-msgstr ""
-"<html>Vložte název města nebo obce.<br>Použijte syntax a interpunkci dle "
-"www.cadastre.gouv.fr .</html>"
-
-msgid "Departement"
-msgstr "Departement"
-
-msgid "<html>Departement number (optional)</html>"
-msgstr "<html>Číslo departementu (volitelné)</html>"
-
-msgid "Add new layer"
-msgstr "Přidat novou vrstvu"
-
-msgid "Open Cadastre Preferences"
-msgstr "Otevřít nastavení Katastru"
-
-msgid "Refine georeferencing"
-msgstr "Upřesnit přiřazení souřadnic"
-
-msgid "Improve georeferencing (only raster images)"
-msgstr "Zlepšit přiřazení souřadnic obrázku (pouze pro rastrové obrázky)"
-
-msgid "Reset cookie"
-msgstr "Vymazat cookie"
-
-msgid "Get a new cookie (session timeout)"
-msgstr "Získat nový cookie (vypršení sezení)"
-
-msgid "Save image as..."
-msgstr "Uložit obrázek jako..."
-
-msgid "PNG files (*.png)"
-msgstr "PNG soubory (*.png)"
-
-msgid "GeoTiff files (*.tif)"
-msgstr "GeoTiff soubory (*.tif)"
-
-msgid "Export image (only raster images)"
-msgstr "Export obrázku (pouze bitmapy)"
-
 msgid ""
 "Click first corner for image cropping\n"
 "(two points required)"
@@ -31146,19 +31320,6 @@ msgid "Click second Lambert crosspiece for georeferencing"
 msgstr ""
 "Zvolte druhý Lambertův příčník (crosspiece) pro určení zeměpisné polohy"
 
-msgid "Adjust WMS"
-msgstr "Upravit WMS"
-
-msgid "Adjust the position of the WMS layer (saved for raster images only)"
-msgstr "Upravit pozici WMS podkladu (ukládáno pouze pro rastrové obrázky)"
-
-msgid ""
-"More than one WMS layer present\n"
-"Select one of them first, then retry"
-msgstr ""
-"Je zobrazena více než jedna WMS vrstva\n"
-"Nejdříve vyberte jednu z nich a potom zopakujte"
-
 msgid "Reset offset"
 msgstr "Vynulovat posuv"
 
@@ -31622,20 +31783,6 @@ msgstr ""
 "povolena, pak není žádný indikátor, že se něco stahuje a ani žádná možnost "
 "jak stahování přerušit."
 
-msgid "Split area"
-msgstr "Rozdělit oblast"
-
-msgid "Splits an area by an untagged way."
-msgstr "Rozdělit oblast pomocí neoznačené cesty"
-
-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 ""
-"Zvolená oblast nemůže být rozdělena, protože je členem relace.\n"
-"Odstraňte oblast z relace před rozdělením."
-
 msgid "TangoGPS Files (*.log)"
 msgstr "Soubory TangoGPS (*.log)"
 
@@ -34176,10 +34323,10 @@ msgid "Writing position information to image files..."
 msgstr "Zápis informací o poloze do souborů s obrázky…"
 
 msgid "Retry"
-msgstr ""
+msgstr "Opakovat"
 
 msgid "Unable to process file ''{0}'':"
-msgstr ""
+msgstr "Nelze zpracovat soubor ''{0}'':"
 
 msgid "File could not be deleted!"
 msgstr "Soubor nemohl být smazán!"
@@ -34696,6 +34843,7 @@ msgstr "VD: varování testovacího testu"
 
 msgid "PT: Route needs to be sorted, found tag fixme:relation=order members"
 msgstr ""
+"VD: Trasu je potřeba seřadit, nalezena značka fixme:relation=order members"
 
 msgid "PT: Route contains a gap that can be fixed by sorting"
 msgstr "VD: Trasa obsahuje mezeru, kterou lze zcelit seřazením."
@@ -34708,7 +34856,7 @@ msgstr ""
 "zkontrolovat."
 
 msgid "PT: Route gap can be closed by adding a single way"
-msgstr ""
+msgstr "VD: Mezeru v trase lze zacelit přidání jedné cesty"
 
 msgid ""
 "PT: The name of the first stop does not match the \"from\" tag of the route "
@@ -37796,27 +37944,6 @@ msgstr "smyčka"
 msgid "mute"
 msgstr "ztlumit"
 
-msgid "Walking Papers Scanned Map"
-msgstr "Naskenovaná mapa Walking Papers"
-
-msgid ""
-"Display a map that was previously scanned and uploaded to walking-papers.org"
-msgstr ""
-"Zobraz mapu, která byla předem naskenována a nahrána na walking-papers.org"
-
-msgid ""
-"Enter a walking-papers.org URL or ID (the bit after the ?id= in the URL)"
-msgstr "Vložte URL nebo id (část URL za \"?id=\") z walking-papers.org"
-
-msgid "Could not read information from walking-papers.org the id \"{0}\""
-msgstr "Nepodařilo se načíst informace z walking-papers.org id ''{0}''"
-
-msgid "Walking Papers: {0}"
-msgstr "Walking Papers: {0}"
-
-msgid "Walking Papers layer ({0}) in zoom {1}"
-msgstr "Walking Papers vrstva ({0}) zvětšení {1}"
-
 msgid "Way Download"
 msgstr "Stažení cest"
 
@@ -38006,6 +38133,26 @@ msgid ""
 msgstr ""
 "Přidá značku ''wikipedia'' odpovídající tomuto článku k vybraným objektům"
 
+msgid "Download from Wikosm API"
+msgstr "Stáhnout z Wikosm API"
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr "Najít místa vzdělávání nejméně 2 km a nejvíce 3 km od středu výběru"
+
+msgid "Show/hide Wikosm snippet list"
+msgstr "Zobrazit/skrýt dotazy z Wikosm"
+
+msgid "help"
+msgstr "nápověda"
+
+msgid "Server: "
+msgstr "Server: "
+
+msgid "Wikidata+OSM server"
+msgstr "Wikidata+OSM server"
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "Ultimativní WMS Vysokorychlostní Turbo Závod II"
 
diff --git a/i18n/po/cy.po b/i18n/po/cy.po
index 568bf8d..1f7e40e 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+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: 2017-09-03 05:05+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 05:03+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: cy\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -388,6 +388,34 @@ msgstr ""
 msgid "Delete selected objects."
 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 "Delete Layer"
 msgstr ""
 
@@ -1294,29 +1322,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2725,34 +2739,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2784,6 +2770,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2903,6 +2912,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3010,6 +3031,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr "ANHYSBYS"
 
@@ -3053,6 +3077,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3689,6 +3716,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4729,9 +4810,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4777,6 +4855,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr ""
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4798,9 +4879,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -5001,6 +5079,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5253,6 +5339,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7035,6 +7125,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7257,9 +7350,6 @@ 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."
@@ -8187,15 +8277,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8224,33 +8314,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8374,6 +8437,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8507,6 +8597,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8516,6 +8612,9 @@ msgstr ""
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8660,6 +8759,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9699,9 +9801,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12838,15 +12937,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -12952,6 +13042,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13201,14 +13294,6 @@ 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 ""
 
@@ -13272,9 +13357,6 @@ msgid ""
 "{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 ""
 
@@ -14506,9 +14588,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14605,10 +14684,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15196,6 +15271,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17233,7 +17312,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23059,6 +23139,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23117,6 +23200,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23198,6 +23284,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23219,9 +23320,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23816,6 +23914,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24227,6 +24328,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24670,6 +24774,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25873,6 +25980,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26053,10 +26163,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26104,9 +26210,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26450,11 +26553,6 @@ msgid ""
 "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 ""
 
@@ -27065,13 +27163,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28368,6 +28466,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28383,77 +28619,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28504,27 +28745,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28665,160 +28885,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28868,17 +29025,6 @@ 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 ""
 
@@ -29315,18 +29461,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35072,26 +35206,6 @@ 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 ""
 
@@ -35260,6 +35374,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/da.po b/i18n/po/da.po
index 2c7cd04..2d8d73f 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: 2017-09-02 22:59+0200\n"
-"PO-Revision-Date: 2017-09-02 10:25+0000\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
+"PO-Revision-Date: 2017-09-26 22:38+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: 2017-09-03 04:39+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:37+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: da_DK\n"
 "X-Poedit-SourceCharset: utf-8\n"
 
@@ -407,6 +407,45 @@ msgstr "Slet"
 msgid "Delete selected objects."
 msgstr "Slet valgte objekter."
 
+msgid "Delete confirmation"
+msgstr "Bekræftelse af sletning"
+
+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 ""
+"Du er ved at slette punkter uden for det område du har downloadet.<br>Dette "
+"kan medføre problemer, fordi andre objekter (som du ikke kan se) måske "
+"bruger dem.<br>Ønsker du virkelig at slette?"
+
+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 ""
+"Du er ved at slette ufuldstændige objekter.<br>Dette vil give problemer, "
+"fordi du ikke ser det virkelige objekt.<br>Vil du virkelig slette?"
+
+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] ""
+"Du er ved at slette {0} relation: {1}<br/>Dette er sjældent nødvendigt og "
+"kan ikke fortrydes særligt nemt efter den er uploaded til serveren.<br/>Vil "
+"du virkelig slette?"
+msgstr[1] ""
+"Du er ved at slette {0} relationer: {1}<br/>Dette er sjældent nødvendigt og "
+"kan ikke fortrydes særligt nemt efter de er uploaded til serveren.<br/>Vil "
+"du virkelig slette?"
+
+msgid "Delete relation?"
+msgstr "Slet relation?"
+
 msgid "Delete Layer"
 msgstr "Slet lag"
 
@@ -1388,34 +1427,14 @@ msgstr " [id: {0}]"
 msgid "Segment {0}: {1}"
 msgstr "Segment {0}: {1}"
 
-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"
-
-msgid ""
-"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
-"middle of the way.)"
-msgstr ""
-"Vejen kan ikke opdeles ved de valgte punkter. (Tip: Vælg punkter i midten af "
-"vejen.)"
-
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
-msgstr ""
-"Et rollebaseret relations-medlemskab blev kopieret til alle nye veje.<br>Du "
-"bør tjekke dette, og korrigere hvor nødvendigt."
+msgid "Search preset"
+msgstr "Søg prædefineret"
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
-msgstr ""
-"Et relations-medlemskab blev kopieret til alle nye veje.<br>Du bør tjekke "
-"dette, og korrigere hvor nødvendigt."
+msgid "Show preset search dialog"
+msgstr "Vis prædefinitions søgedialog"
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] "Del vej {0} i {1} del"
-msgstr[1] "Del vej {0} i {1} dele"
+msgid "Search presets"
+msgstr "Søg i prædefinerede"
 
 msgid "Discourage upload"
 msgstr "Fraråd upload"
@@ -2926,45 +2945,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] "Slet {0} relation"
 msgstr[1] "Slet {0} relationer"
 
-msgid "Delete confirmation"
-msgstr "Bekræftelse af sletning"
-
-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 ""
-"Du er ved at slette punkter uden for det område du har downloadet.<br>Dette "
-"kan medføre problemer, fordi andre objekter (som du ikke kan se) måske "
-"bruger dem.<br>Ønsker du virkelig at slette?"
-
-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 ""
-"Du er ved at slette ufuldstændige objekter.<br>Dette vil give problemer, "
-"fordi du ikke ser det virkelige objekt.<br>Vil du virkelig slette?"
-
-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] ""
-"Du er ved at slette {0} relation: {1}<br/>Dette er sjældent nødvendigt og "
-"kan ikke fortrydes særligt nemt efter den er uploaded til serveren.<br/>Vil "
-"du virkelig slette?"
-msgstr[1] ""
-"Du er ved at slette {0} relationer: {1}<br/>Dette er sjældent nødvendigt og "
-"kan ikke fortrydes særligt nemt efter de er uploaded til serveren.<br/>Vil "
-"du virkelig slette?"
-
-msgid "Delete relation?"
-msgstr "Slet relation?"
-
 msgid "Move {0} node"
 msgid_plural "Move {0} nodes"
 msgstr[0] "Flyt {0} punkt"
@@ -2996,6 +2976,35 @@ msgstr[1] "Valgte {0} objekter"
 msgid "Sequence: {0}"
 msgstr "Sekvens: {0}"
 
+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"
+
+msgid ""
+"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
+"middle of the way.)"
+msgstr ""
+"Vejen kan ikke opdeles ved de valgte punkter. (Tip: Vælg punkter i midten af "
+"vejen.)"
+
+msgid ""
+"A role based relation membership was copied to all new ways.<br>You should "
+"verify this and correct it when necessary."
+msgstr ""
+"Et rollebaseret relations-medlemskab blev kopieret til alle nye veje.<br>Du "
+"bør tjekke dette, og korrigere hvor nødvendigt."
+
+msgid ""
+"A relation membership was copied to all new ways.<br>You should verify this "
+"and correct it when necessary."
+msgstr ""
+"Et relations-medlemskab blev kopieret til alle nye veje.<br>Du bør tjekke "
+"dette, og korrigere hvor nødvendigt."
+
+msgid "Split way {0} into {1} part"
+msgid_plural "Split way {0} into {1} parts"
+msgstr[0] "Del vej {0} i {1} del"
+msgstr[1] "Del vej {0} i {1} dele"
+
 msgid "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] "Transformer {0} punkt"
@@ -3129,6 +3138,18 @@ msgstr "Ulovlig breddegradsværdi \"{0}\""
 msgid "Illegal longitude value ''{0}''"
 msgstr "Ulovlig længdegradsværdi ''{0}''"
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr "Kunne ikke oprette manglende indstillingsmappe: {0}"
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr "<html>Kunne ikke oprette manglende indstillingsmappe: {0}</html>"
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr "Kunne ikke oprette manglende brugerdatamappe: {0}"
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr "<html>Kunne ikke oprette manglende brugerdatamappe: {0}</html>"
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr "Kunne ikke oprette manglende cachemappe: {0}"
 
@@ -3258,6 +3279,9 @@ msgstr "Imperisk"
 msgid "Nautical Mile"
 msgstr "Sømil"
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr "Forventede ikke-tom værdi for parameter \"{0}\". Fik \"{1}\"."
+
 msgid "UNKNOWN"
 msgstr "UKENDT"
 
@@ -3301,6 +3325,9 @@ msgctxt "compass"
 msgid "E"
 msgstr "Ø"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr "Kan ikke fortolkes som koordinatværdi: ''{0}''"
+
 msgid "Date of imagery: {0}"
 msgstr "Dato for billedlag: {0}"
 
@@ -3984,6 +4011,66 @@ msgstr ""
 msgid "Custom Projection"
 msgstr "Tilpasset projektion"
 
+msgid "Error: {0}"
+msgstr "Fejl: {0}"
+
+msgid "JOSM projection command line interface"
+msgstr "JOSM projektions kommandolinje brugerflade"
+
+msgid "Description"
+msgstr "Beskrivelse"
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+"Konverterer koordinater fra et koordinatreferencesystem til et andet."
+
+msgid "Options"
+msgstr "Indstillinger"
+
+msgid "Show this help"
+msgstr "Vis denne hjælp"
+
+msgid "Switch input and output crs"
+msgstr "Skift input og output crs"
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr "Skift rækkefølge af inputkoordinater (øst/nord, længde/bredde)"
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr "Skift rækkefølge af outputkoordinater (øst/nord, længde/bredde)"
+
+msgid "<crs>"
+msgstr "<crs>"
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+"Formatet for input og output-koordinatreferencesystem ligner det i PROJ.4-"
+"softwaren."
+
+msgid "[file]"
+msgstr "[fil]"
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+"Læser inputdata fra en eller flere filer, der er angivet som "
+"positionsargumenter. Når der ikke angives filer eller filnavnet er \"-\", "
+"læses data fra standardindgang."
+
+msgid "Examples"
+msgstr "Eksempler"
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr "Forventede to koordinater, adskilt af mellemrum, fandt {0} i ''{1}''"
+
+msgid "Unable to parse number ''{0}''"
+msgstr "Kan ikke fortolke nummeret ''{0}''"
+
 msgid "GRS80"
 msgstr "GRS80"
 
@@ -5063,9 +5150,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr "Forskydning"
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr "Forventede ikke-tom værdi for parameter \"{0}\". Fik \"{1}\"."
-
 msgid "Outdated Java version"
 msgstr "Forældet Java version"
 
@@ -5117,6 +5201,9 @@ msgstr "Klargør interne grænsedata"
 msgid "Initializing OSM API"
 msgstr "Klargør OSM API"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr "Fjernede laget {0} da det ikke er tilladt af den opsatte API."
+
 msgid "Initializing internal traffic data"
 msgstr "Klargør interne trafikdata"
 
@@ -5138,9 +5225,6 @@ msgstr "brug"
 msgid "options"
 msgstr "valgmuligheder"
 
-msgid "Show this help"
-msgstr "Vis denne hjælp"
-
 msgid "Standard unix geometry argument"
 msgstr "Standard unix geometrisk argument"
 
@@ -5365,6 +5449,14 @@ msgstr ""
 "Det kan skyldes en manglende proxy konfiguration.<br>Vil du ændre dine proxy-"
 "indstillinger nu?"
 
+msgid "You have {0} unread message."
+msgid_plural "You have {0} unread messages."
+msgstr[0] "Du har {0} ulæst besked."
+msgstr[1] "Du har {0} ulæste beskeder."
+
+msgid "Click here to see your inbox."
+msgstr "Klik her for at se din indbakke."
+
 msgctxt "menu"
 msgid "File"
 msgstr "Filer"
@@ -5630,6 +5722,12 @@ msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 "Den aktuelle værdi er ikke et gyldigt tern-indeks for det angivne zoomniveau"
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+"Åbning af fejlrapport mislykkedes. Rapporter manuelt ved hjælp af denne "
+"hjemmeside:"
+
 msgid "You have encountered a bug in JOSM"
 msgstr "Du er stødt på en fejl i JOSM"
 
@@ -7555,11 +7653,14 @@ msgstr "Fjern rettesættet i detaljepanelet fra den lokale cache"
 msgid "Update the changeset from the OSM server"
 msgstr "Opdater rettesættet fra OSM-serveren"
 
+msgid "View changeset"
+msgstr "Vis rettelser"
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
 msgstr ""
-"Markér primitiverne i dette rettesæts indhold i det nuværende datalag"
+"Marker primitiverne i dette rettesæts indhold i det nuværende datalag"
 
 msgid ""
 "<html>None of the objects in the content of changeset {0} is available in "
@@ -7617,7 +7718,7 @@ msgstr ""
 "indhold."
 
 msgid "Select changesets owned by specific users"
-msgstr "Markér rettesæt ejet af specifikke brugere"
+msgstr "Vælg rettesæt ejet af specifikke brugere"
 
 msgid "Select changesets depending on whether they are open or closed"
 msgstr "Vælg rettesæt afhængigt af om de er åbne eller lukkede"
@@ -7811,9 +7912,6 @@ msgstr "URL: "
 msgid "Please enter or paste an URL to retrieve changesets from the OSM API."
 msgstr "Indtast eller indsæt en URL for at hente rettesæt fra OSM API’et."
 
-msgid "Examples"
-msgstr "Eksempler"
-
 msgid ""
 "Note that changeset queries are currently always submitted to ''{0}'', "
 "regardless of the host, port and path of the URL entered below."
@@ -8804,6 +8902,13 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr "Download fra Overpass API"
 
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
+msgstr ""
+"Placer din overpass forespørgsel nedenfor eller generer en ved hjælp af "
+"Overpass Turbo forespørgsels guiden"
+
 msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 "Lav en Overpass forespørgsel ved hjælp af værktøjet Overpass Turbo "
@@ -8812,13 +8917,6 @@ msgstr ""
 msgid "Query Wizard"
 msgstr "Forespørgsels guide"
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
-msgstr ""
-"Placer din overpass forespørgsel nedenfor eller generer en ved hjælp af "
-"Overpass Turbo forespørgsels guiden"
-
 msgid "Your saved queries:"
 msgstr "Dine gemte forespørgsler:"
 
@@ -8847,33 +8945,6 @@ msgstr "Slet valgt uddrag"
 msgid "Edit selected snippet"
 msgstr "Rediger valgt uddrag"
 
-msgid "history"
-msgstr "historik"
-
-msgid "Please select an item first"
-msgstr "Vælg et emne først"
-
-msgid "Edit item"
-msgstr "Rediger emne"
-
-msgid "Add snippet"
-msgstr "Tilføj uddrag"
-
-msgid "Query cannot be empty"
-msgstr "Forespørgslen kan ikke være tom"
-
-msgid "This name can be used for the item"
-msgstr "Dette navn kan bruges til emnet"
-
-msgid "Item with this name already exists"
-msgstr "Emne med dette navn eksisterer allerede"
-
-msgid "The item cannot be created with provided name"
-msgstr "Emnet kan ikke oprettes med det angivne navn"
-
-msgid "The item cannot be created with an empty query"
-msgstr "Emnet kan ikke oprettes med en tom forespørgsel"
-
 msgid "Overpass Turbo Query Wizard"
 msgstr "Overpass Turbo forespørgsels guide"
 
@@ -9012,6 +9083,33 @@ msgstr "Flytbart kort"
 msgid "Tile Numbers"
 msgstr "Tern-nummer"
 
+msgid "history"
+msgstr "historik"
+
+msgid "Please select an item first"
+msgstr "Vælg et emne først"
+
+msgid "Edit item"
+msgstr "Rediger emne"
+
+msgid "Add snippet"
+msgstr "Tilføj uddrag"
+
+msgid "Query cannot be empty"
+msgstr "Forespørgslen kan ikke være tom"
+
+msgid "This name can be used for the item"
+msgstr "Dette navn kan bruges til emnet"
+
+msgid "Item with this name already exists"
+msgstr "Emne med dette navn eksisterer allerede"
+
+msgid "The item cannot be created with provided name"
+msgstr "Emnet kan ikke oprettes med det angivne navn"
+
+msgid "The item cannot be created with an empty query"
+msgstr "Emnet kan ikke oprettes med en tom forespørgsel"
+
 msgid "JOSM Help Browser"
 msgstr "JOSM’s Hjælp-browser"
 
@@ -9164,6 +9262,12 @@ msgstr "Zoom til dette punkt i det nuværende datalag"
 msgid "Open a history browser with the history of this node"
 msgstr "Åbn er historikbrowser med dette punkts historik"
 
+msgid "View changeset in web browser"
+msgstr "Vis rettelser i webbrowser"
+
+msgid "Open {0}"
+msgstr "Åbn {0}"
+
 msgid "Way {0}"
 msgstr "Vej {0}"
 
@@ -9173,6 +9277,9 @@ msgstr "Relation {0}"
 msgid "Object"
 msgstr "Objekt"
 
+msgid "Open Changeset Manager"
+msgstr "Åbn rettesætshåndtering"
+
 msgid "Changeset comment"
 msgstr "Rettesæt kommentar"
 
@@ -9341,6 +9448,9 @@ msgstr "Tjek \"Upload\" for at uploade ændringerne til OSM serveren."
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr "Tjek \"Gem\" for at gemme laget til filen angivet til venstre."
 
+msgid "I would like someone to review my edits."
+msgstr "Jeg vil gerne have nogen til at gennemgå mine redigeringer."
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "Angiv en kort kommentar for de ændringer du uploader:"
 
@@ -10492,9 +10602,6 @@ msgid_plural "{0} tracks"
 msgstr[0] "{0} spor"
 msgstr[1] "{0} spor"
 
-msgid "Description"
-msgstr "Beskrivelse"
-
 msgid "Timespan"
 msgstr "Tidsrum"
 
@@ -13918,15 +14025,6 @@ msgstr "Prædefineret under-element uden forælder"
 msgid "Error parsing {0}: "
 msgstr "Fejl ved fortolkning af {0}: "
 
-msgid "Search preset"
-msgstr "Søg prædefineret"
-
-msgid "Show preset search dialog"
-msgstr "Vis prædefinitions søgedialog"
-
-msgid "Search presets"
-msgstr "Søg i prædefinerede"
-
 msgid "Presets"
 msgstr "Prædefinerede"
 
@@ -14044,6 +14142,9 @@ msgstr "Alle filer(*.*)"
 msgid "Received error page:"
 msgstr "Modtaget fejlside:"
 
+msgid "{0}... [please type its number]"
+msgstr "{0}... [indtast dens nummer]"
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -14337,14 +14438,6 @@ msgstr "Ukendt tilstand {0}."
 msgid "get number of unread messages"
 msgstr "få antallet af ulæste beskeder"
 
-msgid "You have {0} unread message."
-msgid_plural "You have {0} unread messages."
-msgstr[0] "Du har {0} ulæst besked."
-msgstr[1] "Du har {0} ulæste beskeder."
-
-msgid "Click here to see your inbox."
-msgstr "Klik her for at se din indbakke."
-
 msgid "Message notifier"
 msgstr "Besked meddelse"
 
@@ -14413,9 +14506,6 @@ msgstr ""
 "Den understøtter protokol version 0.6, mens serveren siger den understøtter "
 "{0} til {1}."
 
-msgid "Removed layer {0} because it is not allowed by the configured API."
-msgstr "Fjernede laget {0} da det ikke er tilladt af den opsatte API."
-
 msgid "Unexpected format of ID replied by the server. Got ''{0}''."
 msgstr "Uventet ID-format svaret af serveren. Fik \"{0}\"."
 
@@ -15874,9 +15964,6 @@ msgstr ""
 "http://forum.openstreetmap.org/viewtopic.php?id=25677).\n"
 "I øjeblikket har du {1,number,#}MB hukommelse allokeret til JOSM"
 
-msgid "{0}... [please type its number]"
-msgstr "{0}... [indtast dens nummer]"
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -15987,12 +16074,6 @@ msgid "Failed to load XML schema."
 msgstr "Kunne ikke indlæse XML skemaet."
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-"Åbning af fejlrapport mislykkedes. Rapporter manuelt ved hjælp af denne "
-"hjemmeside:"
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -16593,6 +16674,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr "nej"
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr "adskilt"
+
 msgid "Service type"
 msgstr "Servicetype"
 
@@ -18654,9 +18739,11 @@ msgid "Bay"
 msgstr "Bugt"
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
-"En stor mængde vand delvis omsluttet af jord, men med en bred munding."
+"Et vandområde, der for det meste er omgivet af land, men med en "
+"niveauforbindelse til havet eller en sø."
 
 msgid "Shipping"
 msgstr "Vandfart"
@@ -24514,6 +24601,9 @@ msgstr "Waymarked Trails: Horse Riding"
 msgid "Waymarked Trails: Winter Sports"
 msgstr "Waymarked Trails: Winter Sports"
 
+msgid "Wikimedia Map"
+msgstr "Wikimedia kort"
+
 msgid "OSM Inspector: Geometry"
 msgstr "OSM Inspector: Geometry"
 
@@ -24577,6 +24667,9 @@ msgstr "Sentinel-2 images of Enderby Land and Kemp Coast (true color)"
 msgid "IGN topographical map (TMS)"
 msgstr "IGN topographical map (TMS)"
 
+msgid "IGN topographical map (WMTS)"
+msgstr "IGN topographical map (WMTS)"
+
 msgid "IGN topographical map (WMS)"
 msgstr "IGN topographical map (WMS)"
 
@@ -24658,6 +24751,21 @@ msgstr "IGN orthophoto Río Paraná B (WMTS)"
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr "IGN orthophoto Rosario (WMTS)"
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr "IGN orthophoto Salta (WMTS)"
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr "IGN orthophoto Salta 1 (WMTS)"
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr "IGN orthophoto Salta 2 (WMTS)"
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr "IGN orthophoto Salta 3 (WMTS)"
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr "IGN orthophoto Salta 4 (WMTS)"
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr "IGN orthophoto Salto Grande (WMTS)"
 
@@ -24679,9 +24787,6 @@ msgstr "IGN orthophoto Santa Cruz VI (WMTS)"
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr "IGN orthophoto Santa Fe and Paraná (WMTS)"
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr "IGN orthophoto Trelew (WMTS)"
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr "IGN orthophoto Tucumán (WMTS)"
 
@@ -25292,6 +25397,9 @@ msgstr "Berlin aerial photograph 2015"
 msgid "Berlin aerial photograph 2016"
 msgstr "Berlin aerial photograph 2016"
 
+msgid "Berlin aerial photograph 2017"
+msgstr "Berlin aerial photograph 2017"
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr "Deutsche Bahn VzG lines Nov 2013"
 
@@ -25733,6 +25841,9 @@ msgstr "Luxembourg Inspire Water"
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Niger Delta Oct 2012 Landsat"
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr "INEGI Digital Map of Mexico (WMS)"
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 
@@ -26195,6 +26306,9 @@ msgstr "NLSC Open Data WMTS"
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 
+msgid "Aşgabat (high resolution)"
+msgstr "Aşgabat (high resolution)"
+
 msgid "MSR Maps Topo"
 msgstr "MSR Maps Topo"
 
@@ -27598,6 +27712,9 @@ msgstr "relation uden type"
 msgid "{0} relation without {0} tag"
 msgstr "{0} relation uden {0} tag"
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr "vej med {0} er en del af en cykelrute relation"
+
 msgid "religion without denomination"
 msgstr "religion uden trosretning"
 
@@ -27814,12 +27931,6 @@ msgid "Customization of public public transport stops."
 msgstr "Tilpasning af stoppesteder for offentlig transport."
 
 msgid ""
-"Creating and handling address nodes and buildings within Czech Republic."
-msgstr ""
-"Opretter og håndterer adressepunkter og bygninger inden for den tjekiske "
-"republik."
-
-msgid ""
 "Allows to import various file formats into JOSM directly. Currently "
 "supported: TangoGPS, Garmin Trainings Center TCX."
 msgstr ""
@@ -27878,9 +27989,6 @@ msgstr ""
 "Tal med brugere der rediger kortet i nærheden, få besked når nogen kommer "
 "tæt på."
 
-msgid "Allows you to view a GeoJSON file as a layer."
-msgstr "Giver dig mulighed for at se en GeoJSON fil som et lag."
-
 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."
@@ -28325,13 +28433,6 @@ msgstr ""
 "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 "
-"plugin is still under early development and may be buggy."
-msgstr ""
-"Understøtter download af scannede kort-tern fra walking-papers.org. Denne "
-"udvidelse er stadig under tidlig udvikling og kan være fejlbehæftet."
-
 msgid "Easy downloading along a long set of interconnected ways"
 msgstr "Nem download langs et langt sæt af indbyrdes forbundne veje"
 
@@ -28974,15 +29075,15 @@ msgstr "Mapillary objekt lag"
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr "Viser laget der viser de kortobjekter, der er fundet af Mapillary"
 
+msgid "Start Mapillary layer"
+msgstr "Start Mapillary lag"
+
 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"
 
@@ -30427,6 +30528,159 @@ msgstr[1] "Der er {0} bygninger med adressekonflikter"
 msgid "No address nodes inside buildings found"
 msgstr "Ingen adressepunkter fundet inden i bygninger"
 
+msgid "Auto sourcing"
+msgstr "Autokilde"
+
+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ændelse 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 "Ændre den aktuelle projektion"
+
+msgid "Extract commune boundary"
+msgstr "Udtræk kommunegrænser"
+
+msgid "Only on vectorized layers"
+msgstr "Kun ved vektoriserede lag"
+
+msgid "Cancel current grab"
+msgstr "Afbryd aktuel billedtagning"
+
+msgid "Cancel current grab (only vector images)"
+msgstr "Afbryd aktuel billedtagning(kun vektorbilleder)"
+
+msgid "Cadastre grab"
+msgstr "Matrikel billedtagning"
+
+msgid "Download Image from French Cadastre WMS"
+msgstr "Download billede fra fransk matrikel WMS"
+
+msgid "Cadastre: {0}"
+msgstr "Matrikel: {0}"
+
+msgid "Georeference an image"
+msgstr "Tilføj geografiske koordinater til et billede"
+
+msgid "Grab non-georeferenced image"
+msgstr "Tag billede uden geografiske koordinater."
+
+msgid "Georeferencing interrupted"
+msgstr "Tilføjelse af geografiske koordinater afbrudt"
+
+msgid ""
+"This image contains georeference data.\n"
+"Do you want to use them ?"
+msgstr ""
+"Dette billede indeholder geografiske koordinat data\n"
+"Ønsker du at bruge dem?"
+
+msgid "Load layer from cache"
+msgstr "Indlæs fra cache"
+
+msgid "Load location from cache (only if cache is enabled)"
+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"
+
+msgid ""
+"Cannot load cache {0} which is not compatible with current projection zone"
+msgstr ""
+"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 "Placeringen {0} er allerede på skærmen. Cache ikke indlæst."
+
+msgid "(optional)"
+msgstr "(valgfri)"
+
+msgid "Change location"
+msgstr "Skift lokalitet"
+
+msgid "Set a new location for the next request"
+msgstr "Sæt en ny placering til den næste forespørgsel"
+
+msgid "Add a new municipality layer"
+msgstr "Tilføj et nyt kommunelag"
+
+msgid "Commune"
+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 "<html>Afdelingsnummer (valgfrit)</html>"
+
+msgid "Add new layer"
+msgstr "Tilføj nyt lag"
+
+msgid "Open Cadastre Preferences"
+msgstr "Åbn indstillinger for matrikel"
+
+msgid "Refine georeferencing"
+msgstr "Finjustere geografiske koordinater"
+
+msgid "Improve georeferencing (only raster images)"
+msgstr "Forbedre geografiske koordinater (kun rasterbilleder)"
+
+msgid "Reset cookie"
+msgstr "Nulstil cookie"
+
+msgid "Get a new cookie (session timeout)"
+msgstr "Få en ny cookie (session udløbet)"
+
+msgid "Save image as..."
+msgstr "Gem billede som..."
+
+msgid "PNG files (*.png)"
+msgstr "PNG filer (*.png)"
+
+msgid "GeoTiff files (*.tif)"
+msgstr "GeoTiff filer (*.tif)"
+
+msgid "Export image (only raster images)"
+msgstr "Exporter billede (kun 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 "on polygon"
 msgstr "på polygon"
 
@@ -30442,93 +30696,83 @@ msgstr "Næste nummer"
 msgid "Enter addresses"
 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 "Adjust WMS"
+msgstr "Tilpas WMS"
 
-msgid "Select Feuille"
-msgstr "Vælg Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
+msgstr "Justere placeringen af WMS lag (kun gemt for rasterbilleder)"
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
+msgstr "Tilføj \"source=...\" til elementer?"
+
+msgid "Download from Cadastre"
 msgstr ""
-"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} cache fil (.{0})"
+msgid "Objects:"
+msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
-msgstr "Lambert CC9 Zone {0} cache fil (.CC{0})"
+msgid "Select to download buildings in the selected download area."
+msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
-msgstr "Guadeloupe Fort-Marigot cache fil (.UTM1)"
+msgid "address"
+msgstr "adresse"
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
-msgstr "Guadeloupe Ste-Anne cache fil (.UTM2)"
+msgid "Select to download addresses in the selected download area."
+msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
-msgstr "Martinique Fort Desaix cache fil (.UTM3)"
+msgid "symbol"
+msgstr "symbol"
 
-msgid "Reunion RGR92 cache file (.UTM4)"
-msgstr "Reunion RGR92 cache fil (.UTM4)"
+msgid "Select to download symbols in the selected download area."
+msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
-msgstr "MatrikelBilledtagning: ugyldig URL."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "parcel"
+msgstr "grund"
+
+msgid "Select to download cadastral parcels in the selected download area."
 msgstr ""
-"Kan ikke åbne en ny klient session.\n"
-"Vedligeholdelse af server eller midlertidig overbelastet."
+
+msgid "parcel number"
+msgstr "grundnummer"
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
-"By {0} ikke fundet eller ikke tilgængelig\n"
-"eller handling afbrudt"
 
-msgid "Choose from..."
-msgstr "Vælg mellem..."
+msgid "section"
+msgstr "sektion"
 
-msgid "Select commune"
-msgstr "Vælg kommune"
+msgid "Select to download cadastral sections in the selected download area."
+msgstr ""
 
-msgid "Auto sourcing"
-msgstr "Autokilde"
+msgid "locality"
+msgstr "lokalitet"
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
 msgstr ""
-"Aktiver mindst to WMS lag i matriklen-fr udvidelsens konfiguration.\n"
-"Lagene ''Bygning'' og ''Grund'' er tilføjet som standard."
+
+msgid "commune"
+msgstr "kommune"
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
-"Advarsel: kunne ikke sætte dialogfanevalg til altid øverst. Hændelse var: {0}"
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 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 "Ændre den aktuelle projektion"
+msgid "Recipient"
+msgstr "Modtager"
+
+msgid "Diffusion restriction"
+msgstr "Diffusionsbegrænsning"
+
+msgid "Cadastre Edigeo files"
+msgstr "Edigeo matrikel filer"
 
 msgid "Replace original background by JOSM background color."
 msgstr "Erstat den originale baggrund med JOSM’s baggrundsfarver."
@@ -30578,27 +30822,6 @@ msgstr "mellem"
 msgid "low"
 msgstr "lav"
 
-msgid "symbol"
-msgstr "symbol"
-
-msgid "parcel"
-msgstr "grund"
-
-msgid "parcel number"
-msgstr "grundnummer"
-
-msgid "address"
-msgstr "adresse"
-
-msgid "locality"
-msgstr "lokalitet"
-
-msgid "section"
-msgstr "sektion"
-
-msgid "commune"
-msgstr "kommune"
-
 msgid "Enable automatic caching."
 msgstr "Slå automatisk caching til."
 
@@ -30759,8 +30982,65 @@ msgstr "Aktiver dette for at bruge tagget \"add:street\" på punkter."
 msgid "Unexpected file extension. {0}"
 msgstr "Uventet filtype. {0}"
 
-msgid "Add \"source=...\" to elements?"
-msgstr "Tilføj \"source=...\" til elementer?"
+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"
+
+msgid ""
+"Error loading file.\n"
+"Probably an old version of the cache file."
+msgstr ""
+"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} cache fil (.{0})"
+
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgstr "Lambert CC9 Zone {0} cache fil (.CC{0})"
+
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgstr "Guadeloupe Fort-Marigot cache fil (.UTM1)"
+
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgstr "Guadeloupe Ste-Anne cache fil (.UTM2)"
+
+msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgstr "Martinique Fort Desaix cache fil (.UTM3)"
+
+msgid "Reunion RGR92 cache file (.UTM4)"
+msgstr "Reunion RGR92 cache fil (.UTM4)"
+
+msgid "CadastreGrabber: Illegal 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 afbrudt"
+
+msgid "Choose from..."
+msgstr "Vælg mellem..."
+
+msgid "Select commune"
+msgstr "Vælg kommune"
 
 msgid "Downloading {0}"
 msgstr "Downloader {0}"
@@ -30811,124 +31091,6 @@ msgstr ""
 "Brug det andet menupunkt til at tilføje geografiske koordinater til et "
 "\"Grundbillede\""
 
-msgid "Extract commune boundary"
-msgstr "Udtræk kommunegrænser"
-
-msgid "Only on vectorized layers"
-msgstr "Kun ved vektoriserede lag"
-
-msgid "Cancel current grab"
-msgstr "Afbryd aktuel billedtagning"
-
-msgid "Cancel current grab (only vector images)"
-msgstr "Afbryd aktuel billedtagning(kun vektorbilleder)"
-
-msgid "Cadastre grab"
-msgstr "Matrikel billedtagning"
-
-msgid "Download Image from French Cadastre WMS"
-msgstr "Download billede fra fransk matrikel WMS"
-
-msgid "Cadastre: {0}"
-msgstr "Matrikel: {0}"
-
-msgid "Georeference an image"
-msgstr "Tilføj geografiske koordinater til et billede"
-
-msgid "Grab non-georeferenced image"
-msgstr "Tag billede uden geografiske koordinater."
-
-msgid "Georeferencing interrupted"
-msgstr "Tilføjelse af geografiske koordinater afbrudt"
-
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
-msgstr ""
-"Dette billede indeholder geografiske koordinat data\n"
-"Ønsker du at bruge dem?"
-
-msgid "Load layer from cache"
-msgstr "Indlæs fra cache"
-
-msgid "Load location from cache (only if cache is enabled)"
-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"
-
-msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
-msgstr ""
-"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 "Placeringen {0} er allerede på skærmen. Cache ikke indlæst."
-
-msgid "(optional)"
-msgstr "(valgfri)"
-
-msgid "Change location"
-msgstr "Skift lokalitet"
-
-msgid "Set a new location for the next request"
-msgstr "Sæt en ny placering til den næste forespørgsel"
-
-msgid "Add a new municipality layer"
-msgstr "Tilføj et nyt kommunelag"
-
-msgid "Commune"
-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 "<html>Afdelingsnummer (valgfrit)</html>"
-
-msgid "Add new layer"
-msgstr "Tilføj nyt lag"
-
-msgid "Open Cadastre Preferences"
-msgstr "Åbn indstillinger for matrikel"
-
-msgid "Refine georeferencing"
-msgstr "Finjustere geografiske koordinater"
-
-msgid "Improve georeferencing (only raster images)"
-msgstr "Forbedre geografiske koordinater (kun rasterbilleder)"
-
-msgid "Reset cookie"
-msgstr "Nulstil cookie"
-
-msgid "Get a new cookie (session timeout)"
-msgstr "Få en ny cookie (session udløbet)"
-
-msgid "Save image as..."
-msgstr "Gem billede som..."
-
-msgid "PNG files (*.png)"
-msgstr "PNG filer (*.png)"
-
-msgid "GeoTiff files (*.tif)"
-msgstr "GeoTiff filer (*.tif)"
-
-msgid "Export image (only raster images)"
-msgstr "Exporter billede (kun rasterbilleder)"
-
 msgid ""
 "Click first corner for image cropping\n"
 "(two points required)"
@@ -30985,19 +31147,6 @@ 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 "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 "Nulstil forskydning"
 
@@ -31456,21 +31605,6 @@ msgstr ""
 "denne indstilling er der ingen indikation af at noget bliver gjort, og ingen "
 "måde at afbryde overførslen."
 
-msgid "Split area"
-msgstr "Opdel område"
-
-msgid "Splits an area by an untagged way."
-msgstr "Opdeler et område ved en utagget vej."
-
-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 ""
-"Det markerede område kan ikke opdeles fordi det er et medlem af en "
-"relation.\n"
-"Fjern området fra relationen før du opdeler det."
-
 msgid "TangoGPS Files (*.log)"
 msgstr "TangoGPS Filer (*.log)"
 
@@ -37574,28 +37708,6 @@ msgstr "loop"
 msgid "mute"
 msgstr "lyd fra"
 
-msgid "Walking Papers Scanned Map"
-msgstr "Walking Papers scannede kort"
-
-msgid ""
-"Display a map that was previously scanned and uploaded to walking-papers.org"
-msgstr ""
-"Vis et kort der tidligere er scannet og uploadet til walking-papers.org"
-
-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 "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 "Walking Papers lag ({0}) i zoom {1}"
-
 msgid "Way Download"
 msgstr "Vej-download"
 
@@ -37781,6 +37893,27 @@ msgstr ""
 "Tilføjer et \"wikipedia\" tag svarende til denne artikel til de markerede "
 "objekter"
 
+msgid "Download from Wikosm API"
+msgstr "Download fra Wikosm API"
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+"Find uddannelsessteder mindst 2 km og højst 3 km fra centrum af udvælgelsen"
+
+msgid "Show/hide Wikosm snippet list"
+msgstr "Vis/skjul Wikosm uddragsliste"
+
+msgid "help"
+msgstr "hjælp"
+
+msgid "Server: "
+msgstr "Server: "
+
+msgid "Wikidata+OSM server"
+msgstr "Wikidata+OSM server"
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "Den ultimative WMS super-hastigheds Turbo prøvelse II"
 
diff --git a/i18n/po/de.po b/i18n/po/de.po
index e549c7f..e8b281f 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: 2017-09-02 22:59+0200\n"
-"PO-Revision-Date: 2017-08-31 06:26+0000\n"
-"Last-Translator: vsandre <Unknown>\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
+"PO-Revision-Date: 2017-09-27 19:55+0000\n"
+"Last-Translator: holger (lp) <Unknown>\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: 2017-09-03 04:43+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:41+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: de\n"
 "X-Poedit-SearchPath-0: .\n"
 "X-Poedit-Basepath: /home/simon/src/josm.all/i18n\n"
@@ -414,6 +414,45 @@ msgstr "Entfernen"
 msgid "Delete selected objects."
 msgstr "Ausgewählte Objekte löschen."
 
+msgid "Delete confirmation"
+msgstr "Löschbestätigung"
+
+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 ""
+"Sie wollen Punkte außerhalb des heruntergeladenen Bereichs löschen.<br>Das "
+"kann zu Problemen führen, wenn andere Objekte (die Sie nicht sehen) diese "
+"verwenden.<br>Wollen Sie die Punkte wirklich löschen?"
+
+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 ""
+"Sie wollen unvollständige Objekte löschen.<br>Dies verursacht Probleme, da "
+"Sie die realen Objekte nicht sehen können.<b>Wollen Sie wirklich löschen?"
+
+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] ""
+"Es soll {0} Relation gelöscht werden: {1}<br/>Dieser Schritt ist selten "
+"notwendig und kann nur sehr schwer rückgängig gemacht werden, wenn die "
+"Änderung zum Server hochgeladen wurde.<br/>Soll wirklich gelöscht werden?"
+msgstr[1] ""
+"Es sollen {0} Relationen gelöscht werden: {1}<br/>Dieser Schritt ist selten "
+"notwendig und kann nur sehr schwer rückgängig gemacht werden, wenn die "
+"Änderung zum Server hochgeladen wurde.<br/>Soll wirklich gelöscht werden?"
+
+msgid "Delete relation?"
+msgstr "Relation löschen?"
+
 msgid "Delete Layer"
 msgstr "Ebene löschen"
 
@@ -1429,36 +1468,14 @@ msgstr " [Kennung: {0}]"
 msgid "Segment {0}: {1}"
 msgstr "Abschnitt {0}: {1}"
 
-msgid "You must select two or more nodes to split a circular way."
-msgstr ""
-"Sie müssen zwei oder mehr Punkte auswählen, um eine kreisförmige Linie "
-"trennen zu können."
-
-msgid ""
-"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
-"middle of the way.)"
-msgstr ""
-"Dier Linie kann nicht an dieser Stelle geteilt werden. (Tipp: Wählen Sie "
-"Punkte in der Mitte der Linie.)"
-
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
-msgstr ""
-"Eine rollenbasierte Relationsmitgliedschaft wurde in alle neuen Linien "
-"kopiert.<br>Sie sollten dies überprüfen und falls nötig korrigieren."
+msgid "Search preset"
+msgstr "Vorlage suchen"
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
-msgstr ""
-"Alle neuen Linien wurden als Elemente in einer Relation eingefügt.<br>Sie "
-"sollten dies überprüfen und falls nötig korrigieren."
+msgid "Show preset search dialog"
+msgstr "Vorlagensuchdialog anzeigen"
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] "Linie {0} in {1} Teil teilen"
-msgstr[1] "Linie {0} in {1} Teile teilen"
+msgid "Search presets"
+msgstr "Vorlagen suchen"
 
 msgid "Discourage upload"
 msgstr "Hochladen"
@@ -3010,45 +3027,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] "{0} Relation löschen"
 msgstr[1] "{0} Relationen löschen"
 
-msgid "Delete confirmation"
-msgstr "Löschbestätigung"
-
-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 ""
-"Sie wollen Punkte außerhalb des heruntergeladenen Bereichs löschen.<br>Das "
-"kann zu Problemen führen, wenn andere Objekte (die Sie nicht sehen) diese "
-"verwenden.<br>Wollen Sie die Punkte wirklich löschen?"
-
-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 ""
-"Sie wollen unvollständige Objekte löschen.<br>Dies verursacht Probleme, da "
-"Sie die realen Objekte nicht sehen können.<b>Wollen Sie wirklich löschen?"
-
-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] ""
-"Es soll {0} Relation gelöscht werden: {1}<br/>Dieser Schritt ist selten "
-"notwendig und kann nur sehr schwer rückgängig gemacht werden, wenn die "
-"Änderung zum Server hochgeladen wurde.<br/>Soll wirklich gelöscht werden?"
-msgstr[1] ""
-"Es sollen {0} Relationen gelöscht werden: {1}<br/>Dieser Schritt ist selten "
-"notwendig und kann nur sehr schwer rückgängig gemacht werden, wenn die "
-"Änderung zum Server hochgeladen wurde.<br/>Soll wirklich gelöscht werden?"
-
-msgid "Delete relation?"
-msgstr "Relation löschen?"
-
 msgid "Move {0} node"
 msgid_plural "Move {0} nodes"
 msgstr[0] "{0} Punkt bewegen"
@@ -3080,6 +3058,37 @@ msgstr[1] "{0} Objekte ausgewählt"
 msgid "Sequence: {0}"
 msgstr "Sequenz: {0}"
 
+msgid "You must select two or more nodes to split a circular way."
+msgstr ""
+"Sie müssen zwei oder mehr Punkte auswählen, um eine kreisförmige Linie "
+"trennen zu können."
+
+msgid ""
+"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
+"middle of the way.)"
+msgstr ""
+"Dier Linie kann nicht an dieser Stelle geteilt werden. (Tipp: Wählen Sie "
+"Punkte in der Mitte der Linie.)"
+
+msgid ""
+"A role based relation membership was copied to all new ways.<br>You should "
+"verify this and correct it when necessary."
+msgstr ""
+"Eine rollenbasierte Relationsmitgliedschaft wurde in alle neuen Linien "
+"kopiert.<br>Sie sollten dies überprüfen und falls nötig korrigieren."
+
+msgid ""
+"A relation membership was copied to all new ways.<br>You should verify this "
+"and correct it when necessary."
+msgstr ""
+"Alle neuen Linien wurden als Elemente in einer Relation eingefügt.<br>Sie "
+"sollten dies überprüfen und falls nötig korrigieren."
+
+msgid "Split way {0} into {1} part"
+msgid_plural "Split way {0} into {1} parts"
+msgstr[0] "Linie {0} in {1} Teil teilen"
+msgstr[1] "Linie {0} in {1} Teile teilen"
+
 msgid "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] "{0} Punkt umwandeln"
@@ -3213,6 +3222,22 @@ msgstr "Ungültiger Breitenwert ''{0}''"
 msgid "Illegal longitude value ''{0}''"
 msgstr "Ungültiger Längenwert ''{0}''"
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr "Fehlendes Einstellungsverzeichnis konnte nicht erstellt werden: {0}"
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+"<html>Fehlendes Einstellungsverzeichnis konnte nicht erstellt werden: "
+"{0}</html>"
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr "Fehlendes Benutzerdatenverzeichnis konnte nicht erstellt werden: {0}"
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+"<html>Fehlendes Benutzerdatenverzeichnis konnte nicht erstellt werden: "
+"{0}</html>"
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 "Erstellen des fehlenden Zwischenspeicherverzeichnisses fehlgeschlagen: {0}"
@@ -3348,6 +3373,11 @@ msgstr "Britisches System"
 msgid "Nautical Mile"
 msgstr "Seemeile"
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+"Für den Parameter ''{0}'' wird ein nicht-leerer Wert benötigt (versucht "
+"wurde: ''{1}'')"
+
 msgid "UNKNOWN"
 msgstr "UNBEKANNT"
 
@@ -3393,6 +3423,9 @@ msgctxt "compass"
 msgid "E"
 msgstr "O"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr "Parsen als Koordinatenwert nicht möglich: ''{0}''"
+
 msgid "Date of imagery: {0}"
 msgstr "Datum des Hintergrundbildes: {0}"
 
@@ -4100,6 +4133,72 @@ msgstr ""
 msgid "Custom Projection"
 msgstr "Benutzerdefinierte Projektion"
 
+msgid "Error: {0}"
+msgstr "Fehler: {0}"
+
+msgid "JOSM projection command line interface"
+msgstr "Befehlszeilenschnittstelle für JOSM-Projektion"
+
+msgid "Description"
+msgstr "Beschreibung"
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+"Konvertiert Koordinaten von einem Koordinatenreferenzsystem in ein anderes."
+
+msgid "Options"
+msgstr "Optionen"
+
+msgid "Show this help"
+msgstr "Diese Hilfe anzeigen"
+
+msgid "Switch input and output crs"
+msgstr "Ein- und Ausgabekoordinatenreferenzsystem umschalten"
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+"Reihenfolge der Eingabekoordinaten umschalten (Ost/Nord, "
+"Längengrad/Breitengrad)"
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+"Reihenfolge der Ausgabekoordinaten umschalten (Ost/Nord, "
+"Längengrad/Breitengrad)"
+
+msgid "<crs>"
+msgstr "<KRS>"
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+"Das Format für das Ein- und Ausgabekoordinatenreferenzsystem entspricht dem "
+"der Software PROJ.4."
+
+msgid "[file]"
+msgstr "[Datei]"
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+"Liest Eingangsdaten aus einer oder mehreren Dateien als positionelle "
+"Argumente ein. Wenn keine Dateien angegeben sind oder der Dateiname \"-\" "
+"ist, werden Daten aus der Standardeingabe gelesen."
+
+msgid "Examples"
+msgstr "Beispiele"
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+"Erwartete zwei Koordinaten, durch Leerzeichen getrennt, {0} in ''{1}'' "
+"gefunden"
+
+msgid "Unable to parse number ''{0}''"
+msgstr "Nummer ''{0}'' kann nicht geparst werden"
+
 msgid "GRS80"
 msgstr "GRS80"
 
@@ -5196,11 +5295,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr "Versatz"
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-"Für den Parameter ''{0}'' wird ein nicht-leerer Wert benötigt (versucht "
-"wurde: ''{1}'')"
-
 msgid "Outdated Java version"
 msgstr "Veraltete Java-Version"
 
@@ -5252,6 +5346,11 @@ msgstr "Interne Grenzdaten werden initialisiert"
 msgid "Initializing OSM API"
 msgstr "OSM-API wird initialisiert"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+"Ebene {0} entfernt, da diese vom konfigurierenten API-Server nicht erlaubt "
+"wird."
+
 msgid "Initializing internal traffic data"
 msgstr "Interne Verkehrsdaten werden initialisiert"
 
@@ -5273,9 +5372,6 @@ msgstr "Verwendung"
 msgid "options"
 msgstr "Optionen"
 
-msgid "Show this help"
-msgstr "Diese Hilfe anzeigen"
-
 msgid "Standard unix geometry argument"
 msgstr "Standard Unix Geometrie Argument"
 
@@ -5506,6 +5602,14 @@ msgstr ""
 "könnte mit falschen Proxy-Einstellungen zusammenhängen. Möchten Sie die "
 "Proxy-Einstellungen jetzt ändern?"
 
+msgid "You have {0} unread message."
+msgid_plural "You have {0} unread messages."
+msgstr[0] "Sie haben {0} ungelesene Nachricht."
+msgstr[1] "Sie haben {0} ungelesene Nachrichten."
+
+msgid "Click here to see your inbox."
+msgstr "Klicken Sie hier, um Ihren Posteingang zu sehen."
+
 msgctxt "menu"
 msgid "File"
 msgstr "Datei"
@@ -5772,6 +5876,12 @@ msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 "Der aktuelle Wert ist kein gültiger Kachelindex für die angegebene Zoomstufe"
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+"Automatisches Erstellen der Fehlermeldung fehlgeschlagen. Bitte melde den "
+"Fehler manuell mithilfe dieser Seite:"
+
 msgid "You have encountered a bug in JOSM"
 msgstr "Sie sind auf einen Fehler in JOSM gestoßen."
 
@@ -7737,6 +7847,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr "Änderungssatz vom OSM-Server aktualisieren"
 
+msgid "View changeset"
+msgstr "Änderungssatz anzeigen"
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -8000,9 +8113,6 @@ msgid "Please enter or paste an URL to retrieve changesets from the OSM API."
 msgstr ""
 "Bitte eine Adresse angeben, welche eine Änderungssatzanfrage darstellt."
 
-msgid "Examples"
-msgstr "Beispiele"
-
 msgid ""
 "Note that changeset queries are currently always submitted to ''{0}'', "
 "regardless of the host, port and path of the URL entered below."
@@ -8992,7 +9102,7 @@ msgstr "OpenStreetMap-Daten"
 
 msgid "Select to download OSM data in the selected download area."
 msgstr ""
-"Auswählen, um OSM-Datenobjekte im ausgewählten Ladebereich  herunterzuladen."
+"Auswählen, um OSM-Datenobjekte im ausgewählten Ladebereich herunterzuladen."
 
 msgid "Raw GPS data"
 msgstr "GPS-Rohdaten"
@@ -9028,12 +9138,6 @@ msgstr "Bereich korrekt, Größe ist wahrscheinlich akzeptabel für den Server"
 msgid "Download from Overpass API"
 msgstr "Von Overpass API herunterladen"
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
-msgstr "Erstelle eine Overpass-Abfrage mit dem Overpass Turbo Abfrage-Wizard"
-
-msgid "Query Wizard"
-msgstr "Abfrage-Wizard"
-
 msgid ""
 "Place your Overpass query below or generate one using the Overpass Turbo "
 "Query Wizard"
@@ -9041,6 +9145,12 @@ msgstr ""
 "Geben Sie Ihre Overpass-Abfrage unterhalb ein oder erstellen Sie eine durch "
 "Verwendung des  Overpass Turbo Abfrage-Wizards."
 
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgstr "Erstelle eine Overpass-Abfrage mit dem Overpass Turbo Abfrage-Wizard"
+
+msgid "Query Wizard"
+msgstr "Abfrage-Wizard"
+
 msgid "Your saved queries:"
 msgstr "Ihre gespeicherten Abfragen:"
 
@@ -9069,33 +9179,6 @@ msgstr "Ausgewählten Schnipsel entfernen"
 msgid "Edit selected snippet"
 msgstr "Ausgewähltes Schnipsel bearbeiten"
 
-msgid "history"
-msgstr "Chronik"
-
-msgid "Please select an item first"
-msgstr "Bitte wählen Sie zuerst ein Objekt aus"
-
-msgid "Edit item"
-msgstr "Element bearbeiten"
-
-msgid "Add snippet"
-msgstr "Schnipsel hinzufügen"
-
-msgid "Query cannot be empty"
-msgstr "Abfrage darf nicht leer sein"
-
-msgid "This name can be used for the item"
-msgstr "Dieser Name kann für das Element verwendet werden."
-
-msgid "Item with this name already exists"
-msgstr "Element mit diesem Namen existiert bereits"
-
-msgid "The item cannot be created with provided name"
-msgstr "Das Element kann mit dem angegebenen Namen nicht erstellt werden."
-
-msgid "The item cannot be created with an empty query"
-msgstr "Element kann mit einer leeren Abfrage nicht erstellt werden"
-
 msgid "Overpass Turbo Query Wizard"
 msgstr "Overpass Turbo Abfrage-Wizard"
 
@@ -9239,6 +9322,33 @@ msgstr "Interaktive Karte"
 msgid "Tile Numbers"
 msgstr "Kachelnummern"
 
+msgid "history"
+msgstr "Chronik"
+
+msgid "Please select an item first"
+msgstr "Bitte wählen Sie zuerst ein Objekt aus"
+
+msgid "Edit item"
+msgstr "Element bearbeiten"
+
+msgid "Add snippet"
+msgstr "Schnipsel hinzufügen"
+
+msgid "Query cannot be empty"
+msgstr "Abfrage darf nicht leer sein"
+
+msgid "This name can be used for the item"
+msgstr "Dieser Name kann für das Element verwendet werden."
+
+msgid "Item with this name already exists"
+msgstr "Element mit diesem Namen existiert bereits"
+
+msgid "The item cannot be created with provided name"
+msgstr "Das Element kann mit dem angegebenen Namen nicht erstellt werden."
+
+msgid "The item cannot be created with an empty query"
+msgstr "Element kann mit einer leeren Abfrage nicht erstellt werden"
+
 msgid "JOSM Help Browser"
 msgstr "JOSM-Hilfeanzeiger"
 
@@ -9403,6 +9513,12 @@ msgstr "Auf diesen Punkt in der aktuellen Daten-Ebene zommen"
 msgid "Open a history browser with the history of this node"
 msgstr "Browser mit der Chronik dieses Punktes öffnen"
 
+msgid "View changeset in web browser"
+msgstr "Änderungssatz im Webbrowser anzeigen"
+
+msgid "Open {0}"
+msgstr "{0} öffnen"
+
 msgid "Way {0}"
 msgstr "Linie {0}"
 
@@ -9412,6 +9528,9 @@ msgstr "Relation {0}"
 msgid "Object"
 msgstr "Objekt"
 
+msgid "Open Changeset Manager"
+msgstr "Änderungssatzverwaltung öffnen"
+
 msgid "Changeset comment"
 msgstr "Änderungssatzkommentar"
 
@@ -9590,6 +9709,9 @@ msgstr ""
 "Haken Sie \"Speichern\" an, um die Ebene in der auf der linken Seite "
 "angegebenen Datei zu speichern."
 
+msgid "I would like someone to review my edits."
+msgstr "Ich möchte, dass jemand meine Bearbeitungen überprüft."
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 "Geben Sie einen kurzen Kommentar über die von Ihnen hochgeladenen Änderungen "
@@ -10787,9 +10909,6 @@ msgid_plural "{0} tracks"
 msgstr[0] "{0} Spur"
 msgstr[1] "{0} Spuren"
 
-msgid "Description"
-msgstr "Beschreibung"
-
 msgid "Timespan"
 msgstr "Zeitraum"
 
@@ -14324,15 +14443,6 @@ msgstr "Vorlagenelement ohne Elternelement"
 msgid "Error parsing {0}: "
 msgstr "Fehler beim Einlesen von {0}: "
 
-msgid "Search preset"
-msgstr "Vorlage suchen"
-
-msgid "Show preset search dialog"
-msgstr "Vorlagensuchdialog anzeigen"
-
-msgid "Search presets"
-msgstr "Vorlagen suchen"
-
 msgid "Presets"
 msgstr "Vorlagen"
 
@@ -14450,6 +14560,9 @@ msgstr "Alle Dateien (*.*)"
 msgid "Received error page:"
 msgstr "Fehlerseite erhalten:"
 
+msgid "{0}... [please type its number]"
+msgstr "{0} … [Bitte Nummer eingeben]"
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -14769,14 +14882,6 @@ msgstr "Unbekannter Modus {0}."
 msgid "get number of unread messages"
 msgstr "Anzahl der ungelesenen Nachrichten abrufen"
 
-msgid "You have {0} unread message."
-msgid_plural "You have {0} unread messages."
-msgstr[0] "Sie haben {0} ungelesene Nachricht."
-msgstr[1] "Sie haben {0} ungelesene Nachrichten."
-
-msgid "Click here to see your inbox."
-msgstr "Klicken Sie hier, um Ihren Posteingang zu sehen."
-
 msgid "Message notifier"
 msgstr "Benachrichtigung über neue Nachrichten"
 
@@ -14846,11 +14951,6 @@ msgstr ""
 "Es unterstützt die Protokollversion 0.6, während der Server besagt, dass nur "
 "die Versionen {0} bis {1} unterstützt werden."
 
-msgid "Removed layer {0} because it is not allowed by the configured API."
-msgstr ""
-"Ebene {0} entfernt, da diese vom konfigurierenten API-Server nicht erlaubt "
-"wird."
-
 msgid "Unexpected format of ID replied by the server. Got ''{0}''."
 msgstr ""
 "Unerwartetes Format der Kennung vom Server erhalten. \"{0}\" erhalten."
@@ -16382,9 +16482,6 @@ msgstr ""
 "http://forum.openstreetmap.org/viewtopic.php?id=25677).\n"
 "Momentan sind JOSM {1,number,#}MB Speicher zugewiesen."
 
-msgid "{0}... [please type its number]"
-msgstr "{0} … [Bitte Nummer eingeben]"
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -16498,12 +16595,6 @@ msgid "Failed to load XML schema."
 msgstr "Laden des XML-Schemas fehlgeschlagen."
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-"Automatisches Erstellen der Fehlermeldung fehlgeschlagen. Bitte melde den "
-"Fehler manuell mithilfe dieser Seite:"
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -17108,6 +17199,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr "nein"
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr "separat"
+
 msgid "Service type"
 msgstr "Diensttyp"
 
@@ -19178,8 +19273,11 @@ msgid "Bay"
 msgstr "Meeresbucht"
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
-msgstr "Eine offene Wasserfläche, die größtenteils von Land begrenzt wird."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
+msgstr ""
+"Meistens von Land umgebene Wasserfläche mit ebener Verbindung zum Meer oder "
+"zu einem See."
 
 msgid "Shipping"
 msgstr "Schifffahrt"
@@ -25046,6 +25144,9 @@ msgstr "Markierte Pfade: Reiten"
 msgid "Waymarked Trails: Winter Sports"
 msgstr "Markierte Pfade: Wintersportpisten"
 
+msgid "Wikimedia Map"
+msgstr "Wikimedia-Karte"
+
 msgid "OSM Inspector: Geometry"
 msgstr "OSM-Inspektor: Geometrie"
 
@@ -25114,6 +25215,9 @@ msgstr "Sentinel-2 Bilder von Enderbyland und Kemp-Küste (Echtfarben)"
 msgid "IGN topographical map (TMS)"
 msgstr "IGN topografische Karte (TMS)"
 
+msgid "IGN topographical map (WMTS)"
+msgstr "IGN topografische Karte (WMTS)"
+
 msgid "IGN topographical map (WMS)"
 msgstr "IGN topografische Karte (WMS)"
 
@@ -25195,6 +25299,21 @@ msgstr "IGN Orthofoto Río Paraná B (WMTS)"
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr "IGN Orthofoto Rosario (WMTS)"
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr "IGN Orthofoto Salta (WMTS)"
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr "IGN Orthofoto Salta 1 (WMTS)"
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr "IGN Orthofoto Salta 2 (WMTS)"
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr "IGN Orthofoto Salta 3 (WMTS)"
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr "IGN Orthofoto Salta 4 (WMTS)"
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr "IGN Orthofoto Salto Grande (WMTS)"
 
@@ -25216,9 +25335,6 @@ msgstr "IGN Orthofoto Santa Cruz VI (WMTS)"
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr "IGN Orthofoto Santa Fe und Paraná (WMTS)"
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr "IGN Orthofoto Trelew (WMTS)"
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr "IGN Orthofoto Tucumán (WMTS)"
 
@@ -25749,7 +25865,7 @@ msgid "French land registry"
 msgstr "Französisches Grundbuchamt"
 
 msgid "CRAIG - Auvergne 2016 - 25 cm"
-msgstr ""
+msgstr "CRAIG - Auvergne 2016 - 25 cm"
 
 msgid "CRAIG - Auvergne 2013 - 25 cm"
 msgstr "CRAIG - Auvergne 2013 - 25 cm"
@@ -25838,6 +25954,9 @@ msgstr "Berlin Luftbild 2015"
 msgid "Berlin aerial photograph 2016"
 msgstr "Berlin Luftaufnahme 2016"
 
+msgid "Berlin aerial photograph 2017"
+msgstr "Berlin Luftbild 2017"
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr "Deutsche Bahn VzG Linien Nov 2013"
 
@@ -26285,6 +26404,9 @@ msgstr "Luxemburg Inspire Water"
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Nigerdelta Okt 2012 Landsat"
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr "INEGI Digitale Karte von Mexiko (WMS)"
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr "PDOK Luftbilder Beeldmateriaal.nl 25cm"
 
@@ -26759,6 +26881,9 @@ msgstr "NLSC Open Data WMTS"
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr "imagico.de OSM Bilder für die Kartierung: Kilimandscharo 2016"
 
+msgid "Aşgabat (high resolution)"
+msgstr "Aschgabat (hohe Auflösung)"
+
 msgid "MSR Maps Topo"
 msgstr "MSR Maps Topo"
 
@@ -28193,6 +28318,9 @@ msgstr "Relation ohne Typ"
 msgid "{0} relation without {0} tag"
 msgstr "{0} Relation ohne {0} Merkmal"
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr "Weg mit {0} ist Teil einer Fahrradroutenrelation"
+
 msgid "religion without denomination"
 msgstr "Religion ohne Konfession"
 
@@ -28417,12 +28545,6 @@ msgid "Customization of public public transport stops."
 msgstr "Anpassung von Haltestellen öffentlicher Verkehrsmittel."
 
 msgid ""
-"Creating and handling address nodes and buildings within Czech Republic."
-msgstr ""
-"Erstellen und Bearbeiten von Adressinformationen und Gebäuden in der "
-"Tschechischen Republik."
-
-msgid ""
 "Allows to import various file formats into JOSM directly. Currently "
 "supported: TangoGPS, Garmin Trainings Center TCX."
 msgstr ""
@@ -28481,9 +28603,6 @@ msgstr ""
 "Mit in der Nähe arbeitenden Nutzern reden, benachrichtigt werden, wenn "
 "jemand in die Nähe kommt."
 
-msgid "Allows you to view a GeoJSON file as a layer."
-msgstr "Ermöglicht Ihnen das Ansehen einer GeoJSON-Datei als eine Ebene."
-
 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."
@@ -28945,14 +29064,6 @@ msgstr ""
 "Verbindet und synchronisiert ein koordinatenbezogenes Video mit einer GPS-"
 "Spur, um sichtbare Objekte zu identifizieren."
 
-msgid ""
-"Supports downloading tiled, scanned maps from walking-papers.org. This "
-"plugin is still under early development and may be buggy."
-msgstr ""
-"Unterstützt das Herunterladen von gescannten Karten von walking-papers.org. "
-"Diese Erweiterung ist noch in einer frühen Entwicklungsphase und kann "
-"fehlerhaft sein."
-
 msgid "Easy downloading along a long set of interconnected ways"
 msgstr "Leichtes Herunterladen entlang einer langen Reihe verbundener Linien"
 
@@ -29603,15 +29714,15 @@ msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 "Zeigt die Ebene an, welche von Mapillary erkannte Kartenobjekte darstellt"
 
+msgid "Start Mapillary layer"
+msgstr "Mapillary-Ebene starten"
+
 msgid "Mapillary"
 msgstr "Mapillary"
 
 msgid "Create Mapillary layer"
 msgstr "Mapillary-Ebene erstellen"
 
-msgid "Start Mapillary layer"
-msgstr "Mapillary-Ebene starten"
-
 msgid "Download Mapillary images in current view"
 msgstr "Mapillary-Bilder in aktueller Ansicht herunterladen"
 
@@ -31081,6 +31192,165 @@ msgstr[1] "Es gibt {0} Gebäude mit Adresskonflikten"
 msgid "No address nodes inside buildings found"
 msgstr "Keine Adresspunkte im Gebäude gefunden"
 
+msgid "Auto sourcing"
+msgstr "Automatische Quellenangabe"
+
+msgid ""
+"Please enable at least two WMS layers in the cadastre-fr plugin "
+"configuration.\n"
+"Layers ''Building'' and ''Parcel'' added by default."
+msgstr ""
+"Bitte mindestens zwei WMS-Ebenen in den Einstellungen der Erweiterung "
+"cadastre-fr wählen.\n"
+"Die Ebenen ''Building'' (Gebäude) und ''Parcel'' (Grundstück) sind "
+"standardmäßig gewählt."
+
+msgid ""
+"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+msgstr ""
+"Warnung: Dialog konnte nicht in den Vordergrund gebracht werden. "
+"Fehlermeldung ist: {0}"
+
+msgid ""
+"To enable the cadastre WMS plugin, change\n"
+"the current projection to one of the cadastre\n"
+"projections and retry"
+msgstr ""
+"Um die Kataster-WMS-Erweiterung zu aktivieren,\n"
+"muss die derzeitige Projektion in eine von\n"
+"Cadastre unterstützte Projektion geändert werden."
+
+msgid "Change the current projection"
+msgstr "Die aktuelle Projektion ändern"
+
+msgid "Extract commune boundary"
+msgstr "Gemeindegrenze extrahieren"
+
+msgid "Only on vectorized layers"
+msgstr "Nur für vektorisierte Ebenen."
+
+msgid "Cancel current grab"
+msgstr "Aktuellen Ladevorgang abbrechen"
+
+msgid "Cancel current grab (only vector images)"
+msgstr "Derzeitigen Zugriff abbrechen (nur Vektorbilder)"
+
+msgid "Cadastre grab"
+msgstr "Katasterdaten holen"
+
+msgid "Download Image from French Cadastre WMS"
+msgstr "Bild vom französischen Kataster-WMS herunterladen"
+
+msgid "Cadastre: {0}"
+msgstr "Kataster: {0}"
+
+msgid "Georeference an image"
+msgstr "Ein Bild georeferenzieren"
+
+msgid "Grab non-georeferenced image"
+msgstr "Nicht-georeferenziertes Bild holen"
+
+msgid "Georeferencing interrupted"
+msgstr "Georeferenzierung wude unterbrochen"
+
+msgid ""
+"This image contains georeference data.\n"
+"Do you want to use them ?"
+msgstr ""
+"Dieses Bild enthält georeferenzierte Daten.\n"
+"Wollen Sie sie benutzen?"
+
+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 der Zwischenspeicher "
+"aktiviert ist)"
+
+msgid "{0} not allowed with the current projection"
+msgstr "{0} ist in der aktuellen Projektion nicht erlaubt"
+
+msgid ""
+"Cannot load cache {0} which is not compatible with current projection zone"
+msgstr ""
+"Kann den mit der aktuellen Projektionszone inkompatiblen Zwischenspeicher "
+"{0} nicht laden"
+
+msgid ""
+"Selected file {0} is not a cache file from this plugin (invalid extension)"
+msgstr ""
+"Die ausgewählte Datei {0} ist keine Zwischenspeicherdatei von dieser "
+"Erweiterung (ungültige Dateiendung)"
+
+msgid "The location {0} is already on screen. Cache not loaded."
+msgstr "Der Ort {0} wird bereits angezeigt. Zwischenspeicher nicht geladen."
+
+msgid "(optional)"
+msgstr "(optional)"
+
+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 festlegen"
+
+msgid "Add a new municipality layer"
+msgstr "Erzeuge neue Ebene \"Municipality\""
+
+msgid "Commune"
+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>Namen des Ortes eingeben.<br>Benutzen Sie die von www.cadastre.gouv.fr "
+"bekannte Syntax.</html>"
+
+msgid "Departement"
+msgstr "Bezirk"
+
+msgid "<html>Departement number (optional)</html>"
+msgstr "<html>Bezirksnummer (optional)</html>"
+
+msgid "Add new layer"
+msgstr "Eine neue Ebene hinzufügen"
+
+msgid "Open Cadastre Preferences"
+msgstr "Open Cadastre Einstellungen"
+
+msgid "Refine georeferencing"
+msgstr "Georeferenzierung verfeinern"
+
+msgid "Improve georeferencing (only raster images)"
+msgstr "Georeferenzierung verbessern (nur Rasterbilder)"
+
+msgid "Reset cookie"
+msgstr "Cookie zurücksetzen"
+
+msgid "Get a new cookie (session timeout)"
+msgstr "Einen neuen Cookie holen (Sitzung abgelaufen)"
+
+msgid "Save image as..."
+msgstr "Bild speichern als …"
+
+msgid "PNG files (*.png)"
+msgstr "PNG-Bilder (*.png)"
+
+msgid "GeoTiff files (*.tif)"
+msgstr "GeoTiff-Dateien (*.tif)"
+
+msgid "Export image (only raster images)"
+msgstr "Bild exportieren (nur Rasterbilder)"
+
+msgid ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+"Mehr als eine WMS-Ebene.\n"
+"Bitte eine auswählen und erneut versuchen."
+
 msgid "on polygon"
 msgstr "Auf Polygon"
 
@@ -31096,96 +31366,91 @@ msgstr "Nächste Nummer"
 msgid "Enter addresses"
 msgstr "Adressen eingeben"
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
-msgstr ""
-"Bereich »{0}« wurde im Zwischenspeicher gefunden.\n"
-"Soll dieser zuerst benutzt werden?\n"
-"(Nein = Zwischenspeicher wird geleert)"
+msgid "Adjust WMS"
+msgstr "WMS justieren"
 
-msgid "Select Feuille"
-msgstr "Feuille auswählen"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
+msgstr "Position der WMS-Ebene justieren (Speicherung nur für Rasterbilder)"
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
-msgstr ""
-"Fehler beim Laden der Datei.\n"
-"Möglicherweise eine alte Version der Zwischenspeicherdatei."
+msgid "Add \"source=...\" to elements?"
+msgstr "Merkmal \"source= …\" zu Elementen hinzufügen?"
 
-msgid "Lambert Zone {0} cache file (.{0})"
-msgstr "Lambert-Zone {0} Zwischenspeicherdatei (.{0})"
+msgid "Download from Cadastre"
+msgstr "Vom Kataster herunterladen"
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
-msgstr "Lambert-CC9-Zone {0} Zwischenspeicherdatei (.CC{0})"
+msgid "Objects:"
+msgstr "Objekte:"
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
-msgstr "Guadeloupe Fort-Marigot Zwischenspeicherdatei (.UTM1)"
+msgid "Select to download buildings in the selected download area."
+msgstr "Auswählen, um Gebäude im ausgewählten Ladebereich herunterzuladen."
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
-msgstr "Guadeloupe Ste-Anne Zwischenspeicherdatei (.UTM2)"
+msgid "address"
+msgstr "Adresse"
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
-msgstr "Martinique Fort Desaix Zwischenspeicherdatei (.UTM3)"
+msgid "Select to download addresses in the selected download area."
+msgstr "Auswählen, um Adressen im ausgewählten Ladebereich herunterzuladen."
 
-msgid "Reunion RGR92 cache file (.UTM4)"
-msgstr "Reunion RGR92-Zwischenspeicherdatei (.UTM4)"
+msgid "symbol"
+msgstr "Symbol"
 
-msgid "CadastreGrabber: Illegal url."
-msgstr "CadastreGrabber: Ungültige URL."
+msgid "Select to download symbols in the selected download area."
+msgstr "Auswählen, um Symbole im ausgewählten Ladebereich herunterzuladen."
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
 msgstr ""
-"Neue Sitzung konnte nicht geöffnet werden.\n"
-"Der Server befindet sich im Wartungsmodus oder ist kurzzeitig überlastet."
+"Auswählen, um Wasserflächen im ausgewählten Ladebereich herunterzuladen."
+
+msgid "parcel"
+msgstr "Paket"
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+"Auswählen, um Flurstücke im ausgewählten Ladebereich herunterzuladen."
+
+msgid "parcel number"
+msgstr "Paketnummer"
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
-"Ort/Stadt {0} nicht gefunden oder nicht verfügbar\n"
-"oder Aktion abgebrochen"
+"Auswählen, um Flurstücknummern im ausgewählten Ladebereich herunterzuladen."
 
-msgid "Choose from..."
-msgstr "Wähle aus …"
+msgid "section"
+msgstr "Abschnitt"
 
-msgid "Select commune"
-msgstr "Wähle eine Kommune"
+msgid "Select to download cadastral sections in the selected download area."
+msgstr ""
+"Auswählen, um Katasterabschnitte im ausgewählten Ladebereich herunterzuladen."
 
-msgid "Auto sourcing"
-msgstr "Automatische Quellenangabe"
+msgid "locality"
+msgstr "Ortschaft"
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
 msgstr ""
-"Bitte mindestens zwei WMS-Ebenen in den Einstellungen der Erweiterung "
-"cadastre-fr wählen.\n"
-"Die Ebenen ''Building'' (Gebäude) und ''Parcel'' (Grundstück) sind "
-"standardmäßig gewählt."
+"Auswählen, um Ortschaften im ausgewählten Ladebereich herunterzuladen."
+
+msgid "commune"
+msgstr "Gemeinde"
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
-"Warnung: Dialog konnte nicht in den Vordergrund gebracht werden. "
-"Fehlermeldung ist: {0}"
+"Auswählen, um Gemeindegrenze im ausgewählten Ladebereich herunterzuladen."
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
-"Um die Kataster-WMS-Erweiterung zu aktivieren,\n"
-"muss die derzeitige Projektion in eine von\n"
-"Cadastre unterstützte Projektion geändert werden."
+"<html>Es ist nichts aktiviert.<br>Bitte etwas zum Herunterladen "
+"auswählen.</html>"
 
-msgid "Change the current projection"
-msgstr "Die aktuelle Projektion ändern"
+msgid "Recipient"
+msgstr "Empfänger"
+
+msgid "Diffusion restriction"
+msgstr "Verbreitungsbeschränkung"
+
+msgid "Cadastre Edigeo files"
+msgstr "Kataster Edigeo Dateien"
 
 msgid "Replace original background by JOSM background color."
 msgstr "Ursprüngliche Hintergrundfarbe durch JOSM-Hintergrundfarbe ersetzen."
@@ -31236,27 +31501,6 @@ msgstr "mittel"
 msgid "low"
 msgstr "niedrig"
 
-msgid "symbol"
-msgstr "Symbol"
-
-msgid "parcel"
-msgstr "Paket"
-
-msgid "parcel number"
-msgstr "Paketnummer"
-
-msgid "address"
-msgstr "Adresse"
-
-msgid "locality"
-msgstr "Ortschaft"
-
-msgid "section"
-msgstr "Abschnitt"
-
-msgid "commune"
-msgstr "Gemeinde"
-
 msgid "Enable automatic caching."
 msgstr "Automatischen Zwischenspeicher aktivieren."
 
@@ -31418,8 +31662,65 @@ msgstr "Aktivieren, um den Schlüssel \"addr:street\" auf Punkten zu nutzen."
 msgid "Unexpected file extension. {0}"
 msgstr "Unerwartete Dateiendung. {0}"
 
-msgid "Add \"source=...\" to elements?"
-msgstr "Merkmal \"source= …\" zu Elementen hinzufügen?"
+msgid ""
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
+msgstr ""
+"Bereich »{0}« wurde im Zwischenspeicher gefunden.\n"
+"Soll dieser zuerst benutzt werden?\n"
+"(Nein = Zwischenspeicher wird geleert)"
+
+msgid "Select Feuille"
+msgstr "Feuille auswählen"
+
+msgid ""
+"Error loading file.\n"
+"Probably an old version of the cache file."
+msgstr ""
+"Fehler beim Laden der Datei.\n"
+"Möglicherweise eine alte Version der Zwischenspeicherdatei."
+
+msgid "Lambert Zone {0} cache file (.{0})"
+msgstr "Lambert-Zone {0} Zwischenspeicherdatei (.{0})"
+
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgstr "Lambert-CC9-Zone {0} Zwischenspeicherdatei (.CC{0})"
+
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgstr "Guadeloupe Fort-Marigot Zwischenspeicherdatei (.UTM1)"
+
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgstr "Guadeloupe Ste-Anne Zwischenspeicherdatei (.UTM2)"
+
+msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgstr "Martinique Fort Desaix Zwischenspeicherdatei (.UTM3)"
+
+msgid "Reunion RGR92 cache file (.UTM4)"
+msgstr "Reunion RGR92-Zwischenspeicherdatei (.UTM4)"
+
+msgid "CadastreGrabber: Illegal url."
+msgstr "CadastreGrabber: Ungültige URL."
+
+msgid ""
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
+msgstr ""
+"Neue Sitzung konnte nicht geöffnet werden.\n"
+"Der Server befindet sich im Wartungsmodus oder ist kurzzeitig überlastet."
+
+msgid ""
+"Town/city {0} not found or not available\n"
+"or action canceled"
+msgstr ""
+"Ort/Stadt {0} nicht gefunden oder nicht verfügbar\n"
+"oder Aktion abgebrochen"
+
+msgid "Choose from..."
+msgstr "Wähle aus …"
+
+msgid "Select commune"
+msgstr "Wähle eine Kommune"
 
 msgid "Downloading {0}"
 msgstr "{0} wird heruntergeladen"
@@ -31472,127 +31773,6 @@ msgstr ""
 "Bitte verwenden Sie den anderen Menüeintrag, um ein \"Plan-Bild\" zu "
 "georeferenzieren."
 
-msgid "Extract commune boundary"
-msgstr "Gemeindegrenze extrahieren"
-
-msgid "Only on vectorized layers"
-msgstr "Nur für vektorisierte Ebenen."
-
-msgid "Cancel current grab"
-msgstr "Aktuellen Ladevorgang abbrechen"
-
-msgid "Cancel current grab (only vector images)"
-msgstr "Derzeitigen Zugriff abbrechen (nur Vektorbilder)"
-
-msgid "Cadastre grab"
-msgstr "Katasterdaten holen"
-
-msgid "Download Image from French Cadastre WMS"
-msgstr "Bild vom französischen Kataster-WMS herunterladen"
-
-msgid "Cadastre: {0}"
-msgstr "Kataster: {0}"
-
-msgid "Georeference an image"
-msgstr "Ein Bild georeferenzieren"
-
-msgid "Grab non-georeferenced image"
-msgstr "Nicht-georeferenziertes Bild holen"
-
-msgid "Georeferencing interrupted"
-msgstr "Georeferenzierung wude unterbrochen"
-
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
-msgstr ""
-"Dieses Bild enthält georeferenzierte Daten.\n"
-"Wollen Sie sie benutzen?"
-
-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 der Zwischenspeicher "
-"aktiviert ist)"
-
-msgid "{0} not allowed with the current projection"
-msgstr "{0} ist in der aktuellen Projektion nicht erlaubt"
-
-msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
-msgstr ""
-"Kann den mit der aktuellen Projektionszone inkompatiblen Zwischenspeicher "
-"{0} nicht laden"
-
-msgid ""
-"Selected file {0} is not a cache file from this plugin (invalid extension)"
-msgstr ""
-"Die ausgewählte Datei {0} ist keine Zwischenspeicherdatei von dieser "
-"Erweiterung (ungültige Dateiendung)"
-
-msgid "The location {0} is already on screen. Cache not loaded."
-msgstr "Der Ort {0} wird bereits angezeigt. Zwischenspeicher nicht geladen."
-
-msgid "(optional)"
-msgstr "(optional)"
-
-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 festlegen"
-
-msgid "Add a new municipality layer"
-msgstr "Erzeuge neue Ebene \"Municipality\""
-
-msgid "Commune"
-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>Namen des Ortes eingeben.<br>Benutzen Sie die von www.cadastre.gouv.fr "
-"bekannte Syntax.</html>"
-
-msgid "Departement"
-msgstr "Bezirk"
-
-msgid "<html>Departement number (optional)</html>"
-msgstr "<html>Bezirksnummer (optional)</html>"
-
-msgid "Add new layer"
-msgstr "Eine neue Ebene hinzufügen"
-
-msgid "Open Cadastre Preferences"
-msgstr "Open Cadastre Einstellungen"
-
-msgid "Refine georeferencing"
-msgstr "Georeferenzierung verfeinern"
-
-msgid "Improve georeferencing (only raster images)"
-msgstr "Georeferenzierung verbessern (nur Rasterbilder)"
-
-msgid "Reset cookie"
-msgstr "Cookie zurücksetzen"
-
-msgid "Get a new cookie (session timeout)"
-msgstr "Einen neuen Cookie holen (Sitzung abgelaufen)"
-
-msgid "Save image as..."
-msgstr "Bild speichern als …"
-
-msgid "PNG files (*.png)"
-msgstr "PNG-Bilder (*.png)"
-
-msgid "GeoTiff files (*.tif)"
-msgstr "GeoTiff-Dateien (*.tif)"
-
-msgid "Export image (only raster images)"
-msgstr "Bild exportieren (nur Rasterbilder)"
-
 msgid ""
 "Click first corner for image cropping\n"
 "(two points required)"
@@ -31647,19 +31827,6 @@ msgstr "Klicke in die zweite Ecke um das Bild zu beschneiden."
 msgid "Click second Lambert crosspiece for georeferencing"
 msgstr "Klicken Sie auf das zweite Lambert-Kreuzstück zur Georeferenzierung"
 
-msgid "Adjust WMS"
-msgstr "WMS justieren"
-
-msgid "Adjust the position of the WMS layer (saved for raster images only)"
-msgstr "Position der WMS-Ebene justieren (Speicherung nur für Rasterbilder)"
-
-msgid ""
-"More than one WMS layer present\n"
-"Select one of them first, then retry"
-msgstr ""
-"Mehr als eine WMS-Ebene.\n"
-"Bitte eine auswählen und erneut versuchen."
-
 msgid "Reset offset"
 msgstr "Versatz zurücksetzen"
 
@@ -32133,21 +32300,6 @@ msgstr ""
 "angezeigt wird. Wenn diese Option aktiv ist gibt es keinen Hinweis, dass "
 "etwas getan wird, und keine Möglichkeit das Herunterladen abzubrechen."
 
-msgid "Split area"
-msgstr "Fläche aufspalten"
-
-msgid "Splits an area by an untagged way."
-msgstr "Gebiet mittels einer Linie ohne Merkmale aufteilen"
-
-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 ""
-"Das gewählte Gebiet kann nicht geteilt werden, da es Element einer Relation "
-"ist.\n"
-"Entfernen Sie das Gebiet vor dem Aufteilen aus der Relation."
-
 msgid "TangoGPS Files (*.log)"
 msgstr "TangoGPS-Dateien (*.log)"
 
@@ -38412,32 +38564,6 @@ msgstr "Schleife"
 msgid "mute"
 msgstr "Stumm schalten"
 
-msgid "Walking Papers Scanned Map"
-msgstr "Walking Papers gescannte Karte"
-
-msgid ""
-"Display a map that was previously scanned and uploaded to walking-papers.org"
-msgstr ""
-"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 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 Kennung \"{0}\" "
-"nicht lesen"
-
-msgid "Walking Papers: {0}"
-msgstr "Walking Papers: {0}"
-
-msgid "Walking Papers layer ({0}) in zoom {1}"
-msgstr "WalkingPapers-Ebene ({0}) mit Zoom {1}"
-
 msgid "Way Download"
 msgstr "Linien-Herunterladen"
 
@@ -38631,6 +38757,28 @@ msgstr ""
 "''wikipedia''-Merkmal aus dem ausgewählten Artikel in die markierten Objekte "
 "einfügen"
 
+msgid "Download from Wikosm API"
+msgstr "Von Wikosm-API herunterladen"
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+"Bildungseinrichtungen finden, die mindestens 2km und maximal 3km vom "
+"Mittelpunkt der Auswahl entfernt sind"
+
+msgid "Show/hide Wikosm snippet list"
+msgstr "Zeige/Verstecke die Wikosm Schnipsel-Liste"
+
+msgid "help"
+msgstr "Hilfe"
+
+msgid "Server: "
+msgstr "Server: "
+
+msgid "Wikidata+OSM server"
+msgstr "Wikidata+OSM Server"
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "Der Ultimative WMS Höchstgeschwindigkeits-Turbo-Wettkampf II"
 
diff --git a/i18n/po/de_DE.po b/i18n/po/de_DE.po
index 0abd8ca..2db0edb 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+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: 2017-09-03 05:07+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 05:06+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -395,6 +395,34 @@ msgstr "Löschen"
 msgid "Delete selected objects."
 msgstr "Ausgewählte Objekte löschen."
 
+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 "Delete Layer"
 msgstr ""
 
@@ -1301,29 +1329,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2732,34 +2746,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2791,6 +2777,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2910,6 +2919,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3017,6 +3038,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr "UNBEKANNT"
 
@@ -3060,6 +3084,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3696,6 +3723,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4737,9 +4818,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4785,6 +4863,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr ""
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4806,9 +4887,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -5009,6 +5087,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5261,6 +5347,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7043,6 +7133,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7265,9 +7358,6 @@ 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."
@@ -8195,15 +8285,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8232,33 +8322,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8382,6 +8445,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8515,6 +8605,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8524,6 +8620,9 @@ msgstr ""
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8668,6 +8767,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9707,9 +9809,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12846,15 +12945,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -12960,6 +13050,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13209,14 +13302,6 @@ 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 ""
 
@@ -13280,9 +13365,6 @@ msgid ""
 "{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 ""
 
@@ -14514,9 +14596,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14613,10 +14692,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15207,6 +15282,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17244,7 +17323,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23070,6 +23150,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23128,6 +23211,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23209,6 +23295,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23230,9 +23331,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23827,6 +23925,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24238,6 +24339,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24681,6 +24785,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25884,6 +25991,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26064,10 +26174,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26115,9 +26221,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26461,11 +26564,6 @@ msgid ""
 "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 ""
 
@@ -27076,13 +27174,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28379,6 +28477,146 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"<html>Namen des Ortes, Dorfes oder der Stadt eingeben.<br>Benutzen Sie die "
+"von www.cadastre.gouv.fr bekannte Syntax.</html>"
+
+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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28394,79 +28632,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
-"Ort/Stadt {0} nicht gefunden oder nicht verfügbar\n"
-"oder Aktion abgebrochen"
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28517,27 +28758,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28678,162 +28898,99 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
+"Ort/Stadt {0} nicht gefunden oder nicht verfügbar\n"
+"oder Aktion abgebrochen"
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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>Namen des Ortes, Dorfes oder der Stadt eingeben.<br>Benutzen Sie die "
-"von www.cadastre.gouv.fr bekannte Syntax.</html>"
-
-msgid "Departement"
-msgstr ""
-
-msgid "<html>Departement number (optional)</html>"
-msgstr ""
-
-msgid "Add new layer"
-msgstr ""
-
-msgid "Open Cadastre Preferences"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28883,17 +29040,6 @@ 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 ""
 
@@ -29330,18 +29476,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35087,26 +35221,6 @@ 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 ""
 
@@ -35275,6 +35389,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/el.po b/i18n/po/el.po
index 3383e98..652ada6 100644
--- a/i18n/po/el.po
+++ b/i18n/po/el.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
 "PO-Revision-Date: 2016-01-25 09:17+0000\n"
 "Last-Translator: Aggelos Arnaoutis <angelosarn at hotmail.com>\n"
 "Language-Team: Greek <el 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: 2017-09-03 04:45+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:43+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: el\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -398,6 +398,46 @@ msgstr "Διαγραφή"
 msgid "Delete selected objects."
 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 ""
+"Πρόκειτε να διαγράψετε κόμβους εκτός της περιοχής που λάβατε.<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 "
+"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] ""
+"Πρόκειται να διαγράψετε {0} σχέση: {1}<br/>Αυτή η κίνηση απαιτείται σπάνια "
+"και δεν μπορεί ανακτηθεί εύκολα μετά την αποστολή στο διακομιστή.<br/>Θέλετε "
+"πραγματικά να τη διαγράψετε?"
+msgstr[1] ""
+"Πρόκειται να διαγράψετε {0} σχέσεις: {1}<br/>Αυτή η κίνηση απαιτείται σπάνια "
+"και δεν μπορεί ανακτηθεί εύκολα μετά την αποστολή στο διακομιστή.<br/>Θέλετε "
+"πραγματικά να τις διαγράψετε?"
+
+msgid "Delete relation?"
+msgstr "Διαγραφή σχέσης?"
+
 msgid "Delete Layer"
 msgstr ""
 
@@ -1393,33 +1433,15 @@ msgstr " [id: {0}]"
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 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 "Show preset search dialog"
+msgstr "Εμφάνιση διαλόγου αναζήτησης προεπιλογών"
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 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 "Discourage upload"
 msgstr ""
 
@@ -2882,46 +2904,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] "Διαγραφή {0} σχέσης"
 msgstr[1] "Διαγραφή {0} σχέσεων"
 
-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 ""
-"Πρόκειτε να διαγράψετε κόμβους εκτός της περιοχής που λάβατε.<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 "
-"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] ""
-"Πρόκειται να διαγράψετε {0} σχέση: {1}<br/>Αυτή η κίνηση απαιτείται σπάνια "
-"και δεν μπορεί ανακτηθεί εύκολα μετά την αποστολή στο διακομιστή.<br/>Θέλετε "
-"πραγματικά να τη διαγράψετε?"
-msgstr[1] ""
-"Πρόκειται να διαγράψετε {0} σχέσεις: {1}<br/>Αυτή η κίνηση απαιτείται σπάνια "
-"και δεν μπορεί ανακτηθεί εύκολα μετά την αποστολή στο διακομιστή.<br/>Θέλετε "
-"πραγματικά να τις διαγράψετε?"
-
-msgid "Delete relation?"
-msgstr "Διαγραφή σχέσης?"
-
 msgid "Move {0} node"
 msgid_plural "Move {0} nodes"
 msgstr[0] "Μετακίνηση {0} κόμβου"
@@ -2953,6 +2935,33 @@ msgstr[1] "Επιλέχτηκαν {0} αντικείμενα"
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -3078,6 +3087,18 @@ msgstr "Μη αποδεκτή τιμή Γ/Πλάτους \"{0}\""
 msgid "Illegal longitude value ''{0}''"
 msgstr "Μη αποδεκτή τιμή Γ/Μήκους \"{0}\""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3186,6 +3207,9 @@ msgstr "Βρετανικό (Imperial)"
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr "ΆΓΝΩΣΤΟ"
 
@@ -3229,6 +3253,9 @@ msgctxt "compass"
 msgid "E"
 msgstr "Α"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3865,6 +3892,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr "Περιγραφή"
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr "Εμφάνιση αυτής της βοήθειας"
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr "Παραδείγματα"
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr "GRS80"
 
@@ -4927,9 +5008,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr "Μετατόπιση"
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4975,6 +5053,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr "Αρχικοποίηση OSM API"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4996,9 +5077,6 @@ msgstr "χρήση"
 msgid "options"
 msgstr "Επιλογές"
 
-msgid "Show this help"
-msgstr "Εμφάνιση αυτής της βοήθειας"
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -5209,6 +5287,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5463,6 +5549,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7282,6 +7372,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr "Ενημέρωση της ομάδας αλλαγών από τον διακομιστή OSM"
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7504,9 +7597,6 @@ msgstr "URL: "
 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."
@@ -8450,15 +8540,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8487,33 +8577,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr "ιστορία"
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8637,6 +8700,33 @@ msgstr "Ολισθαίνον χάρτης"
 msgid "Tile Numbers"
 msgstr "Αριθμοί πλακιδίων"
 
+msgid "history"
+msgstr "ιστορία"
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8770,6 +8860,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr "Διαδρομή {0}"
 
@@ -8779,6 +8875,9 @@ msgstr "Σχέση {0}"
 msgid "Object"
 msgstr "Αντικείμενο"
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8933,6 +9032,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "Παρέχετε ένα σύντομο σχόλιο για τις αλλαγές που αποστέλλετε:"
 
@@ -10019,9 +10121,6 @@ msgid_plural "{0} tracks"
 msgstr[0] "{0} ίχνος"
 msgstr[1] "{0} ίχνη"
 
-msgid "Description"
-msgstr "Περιγραφή"
-
 msgid "Timespan"
 msgstr ""
 
@@ -13199,15 +13298,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr "Σφάλμα ανάλυσης {0}: "
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr "Εμφάνιση διαλόγου αναζήτησης προεπιλογών"
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr "Προεπιλογές"
 
@@ -13313,6 +13403,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13562,14 +13655,6 @@ 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 ""
 
@@ -13633,9 +13718,6 @@ msgid ""
 "{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 ""
 
@@ -14895,9 +14977,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14994,10 +15073,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15588,6 +15663,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr "όχι"
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr "Τύπος υπηρεσίας"
 
@@ -17625,7 +17704,8 @@ msgid "Bay"
 msgstr "Όρμος"
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23451,6 +23531,9 @@ msgstr "Σηματοδοτημένα μονοπάτια: Ιππασία"
 msgid "Waymarked Trails: Winter Sports"
 msgstr "Σηματοδοτημένα μονοπάτια: Χειμερινά αθλήματα"
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr "Επιθεωρητής OSM: Γεωμετρία"
 
@@ -23509,6 +23592,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23590,6 +23676,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23611,9 +23712,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -24208,6 +24306,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24619,6 +24720,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -25062,6 +25166,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -26265,6 +26372,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26445,10 +26555,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26496,9 +26602,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26842,14 +26945,6 @@ msgid ""
 "objects."
 msgstr ""
 
-msgid ""
-"Supports downloading tiled, scanned maps from walking-papers.org. This "
-"plugin is still under early development and may be buggy."
-msgstr ""
-"Υποστηρίζει τη λήψη tiled, σαρωμένους χάρτες από το walking-papers.org. Αυτό "
-"το πρόσθετο είναι ακόμα σε πειραματικό στάδιο ανάπτυξης και μπορεί να έχει "
-"bugs."
-
 msgid "Easy downloading along a long set of interconnected ways"
 msgstr ""
 
@@ -27462,13 +27557,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28767,6 +28862,146 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 "Αρχεία PNG (*.png)"
+
+msgid "GeoTiff files (*.tif)"
+msgstr ""
+
+msgid "Export image (only raster images)"
+msgstr ""
+
+msgid ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+"Περισσότερα από ένα επίπεδα WMS\n"
+"Επιλέξτε ένα από αυτά πρώτα και μετά ξαναπροσπαθήστε"
+
 msgid "on polygon"
 msgstr ""
 
@@ -28782,77 +29017,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr "Εισαγωγή διευθύνσεων"
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
+msgstr "Ρύθμιση WMS"
+
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Add \"source=...\" to elements?"
+msgstr "Προσθήκη \"source=...\" στα στοιχεία;"
+
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Objects:"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "address"
+msgstr "διεύθυνση"
+
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "symbol"
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download water bodies in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "parcel"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download cadastral parcels in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
-msgstr "Επιλέξτε από..."
+msgid "section"
+msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28904,27 +29144,6 @@ msgstr "μεσαίο"
 msgid "low"
 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 ""
 
@@ -29067,160 +29286,97 @@ msgstr ""
 msgid "Unexpected file extension. {0}"
 msgstr ""
 
-msgid "Add \"source=...\" to elements?"
-msgstr "Προσθήκη \"source=...\" στα στοιχεία;"
-
-msgid "Downloading {0}"
-msgstr "Γίνεται λήψη {0}"
-
-msgid "Contacting WMS Server..."
-msgstr "Επικοινωνία με διακομιστή WMS..."
-
-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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Cancel current grab (only vector images)"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Cadastre grab"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Download Image from French Cadastre WMS"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid "Cadastre: {0}"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "CadastreGrabber: Illegal url."
 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"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid ""
-"Selected file {0} is not a cache file from this plugin (invalid extension)"
-msgstr ""
+msgid "Choose from..."
+msgstr "Επιλέξτε από..."
 
-msgid "The location {0} is already on screen. Cache not loaded."
+msgid "Select commune"
 msgstr ""
 
-msgid "(optional)"
-msgstr "(προαιρετικό)"
-
-msgid "Change location"
-msgstr "Αλλαγή θέσης"
-
-msgid "Set a new location for the next request"
-msgstr "Ρύθμιση νέας θέσης για την επόμενη αίτηση"
+msgid "Downloading {0}"
+msgstr "Γίνεται λήψη {0}"
 
-msgid "Add a new municipality layer"
-msgstr ""
+msgid "Contacting WMS Server..."
+msgstr "Επικοινωνία με διακομιστή WMS..."
 
-msgid "Commune"
-msgstr ""
+msgid "Create buildings"
+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>"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Add new layer"
-msgstr "Προσθήκη νέου επιπέδου"
-
-msgid "Open Cadastre Preferences"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Reset cookie"
-msgstr ""
+msgid "Create boundary"
+msgstr "Δημιουργία ορίου"
 
-msgid "Get a new cookie (session timeout)"
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "Save image as..."
+msgid "Image already loaded"
 msgstr ""
 
-msgid "PNG files (*.png)"
-msgstr "Αρχεία PNG (*.png)"
-
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -29270,19 +29426,6 @@ msgstr ""
 msgid "Click second Lambert crosspiece for georeferencing"
 msgstr ""
 
-msgid "Adjust WMS"
-msgstr "Ρύθμιση WMS"
-
-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 ""
-"Περισσότερα από ένα επίπεδα WMS\n"
-"Επιλέξτε ένα από αυτά πρώτα και μετά ξαναπροσπαθήστε"
-
 msgid "Reset offset"
 msgstr ""
 
@@ -29719,21 +29862,6 @@ msgid ""
 "to cancel the download."
 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 ""
-"Η επιλεγμένη διαδρομή δεν μπορεί να διαιρεθεί, γιατί είναι μέλος κάποιας "
-"σχέσης.\n"
-"Αφαιρέστε την περιοχή από την σχέση πριν τη διαιρέσετε."
-
 msgid "TangoGPS Files (*.log)"
 msgstr ""
 
@@ -35547,26 +35675,6 @@ 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 "Χαρτιά που περπατάνε: {0}"
-
-msgid "Walking Papers layer ({0}) in zoom {1}"
-msgstr ""
-
 msgid "Way Download"
 msgstr "Λήψη Διαδρομής"
 
@@ -35739,6 +35847,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/en_AU.po b/i18n/po/en_AU.po
index 17efd60..ec1c49c 100644
--- a/i18n/po/en_AU.po
+++ b/i18n/po/en_AU.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
 "PO-Revision-Date: 2015-06-08 12:52+0000\n"
 "Last-Translator: Mark Pulley <mrpulley at iinet.net.au>\n"
 "Language-Team: English (Australia) <en_AU 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: 2017-09-03 05:06+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 05:05+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -401,6 +401,45 @@ msgstr "Delete"
 msgid "Delete selected objects."
 msgstr "Delete selected objects."
 
+msgid "Delete confirmation"
+msgstr "Delete confirmation"
+
+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 ""
+"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?"
+
+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 "
+"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] ""
+"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 "Delete relation?"
+
 msgid "Delete Layer"
 msgstr ""
 
@@ -1382,34 +1421,14 @@ msgstr " [id: {0}]"
 msgid "Segment {0}: {1}"
 msgstr ""
 
-msgid "You must select two or more nodes to split a circular way."
-msgstr "You must select two or more nodes to split a circular way."
-
-msgid ""
-"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
-"middle of the way.)"
+msgid "Search preset"
 msgstr ""
-"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
-"middle of the way.)"
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 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."
+msgid "Search presets"
 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] "Split way {0} into {1} part"
-msgstr[1] "Split way {0} into {1} parts"
 
 msgid "Discourage upload"
 msgstr ""
@@ -2906,45 +2925,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] "Delete {0} relation"
 msgstr[1] "Delete {0} relations"
 
-msgid "Delete confirmation"
-msgstr "Delete confirmation"
-
-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 ""
-"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?"
-
-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 "
-"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] ""
-"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 "Delete relation?"
-
 msgid "Move {0} node"
 msgid_plural "Move {0} nodes"
 msgstr[0] "Move {0} node"
@@ -2976,6 +2956,35 @@ msgstr[1] "Selected {0} objects"
 msgid "Sequence: {0}"
 msgstr "Sequence: {0}"
 
+msgid "You must select two or more nodes to split a circular way."
+msgstr "You must select two or more nodes to split a circular way."
+
+msgid ""
+"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
+"middle of the way.)"
+msgstr ""
+"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
+"middle of the way.)"
+
+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] "Split way {0} into {1} part"
+msgstr[1] "Split way {0} into {1} parts"
+
 msgid "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] "Transform {0} node"
@@ -3108,6 +3117,18 @@ msgstr "Illegal latitude value ''{0}''"
 msgid "Illegal longitude value ''{0}''"
 msgstr "Illegal longitude value ''{0}''"
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr "Failed to create missing cache directory: {0}"
 
@@ -3235,6 +3256,9 @@ msgstr "Imperial"
 msgid "Nautical Mile"
 msgstr "Nautical Mile"
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+
 msgid "UNKNOWN"
 msgstr "UNKNOWN"
 
@@ -3278,6 +3302,9 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3942,6 +3969,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr "Custom Projection"
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr "Description"
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr "Show this help"
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr "Examples"
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr "GRS80"
 
@@ -5007,9 +5088,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr "Offset"
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -5055,6 +5133,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr "Initialising OSM API"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -5076,9 +5157,6 @@ msgstr "usage"
 msgid "options"
 msgstr "options"
 
-msgid "Show this help"
-msgstr "Show this help"
-
 msgid "Standard unix geometry argument"
 msgstr "Standard unix geometry argument"
 
@@ -5303,6 +5381,14 @@ msgstr ""
 "missing proxy configuration.<br>Would you like to change your proxy settings "
 "now?"
 
+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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5559,6 +5645,10 @@ msgstr "Please enter a tile index"
 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 ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr "You have encountered a bug in JOSM"
 
@@ -7438,6 +7528,9 @@ msgstr "Remove the changeset in the detail view panel from the local cache"
 msgid "Update the changeset from the OSM server"
 msgstr "Update the changeset from the OSM server"
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7694,9 +7787,6 @@ msgid "Please enter or paste an URL to retrieve changesets from the OSM API."
 msgstr ""
 "Please enter or paste an URL to retrieve changesets from the OSM API."
 
-msgid "Examples"
-msgstr "Examples"
-
 msgid ""
 "Note that changeset queries are currently always submitted to ''{0}'', "
 "regardless of the host, port and path of the URL entered below."
@@ -8677,15 +8767,15 @@ msgstr "Download area ok, size probably acceptable to server"
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8714,33 +8804,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr "history"
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8864,6 +8927,33 @@ msgstr "Slippy map"
 msgid "Tile Numbers"
 msgstr "Tile Numbers"
 
+msgid "history"
+msgstr "history"
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr "JOSM Help Browser"
 
@@ -9014,6 +9104,12 @@ msgstr "Zoom to this node in the current data layer"
 msgid "Open a history browser with the history of this node"
 msgstr "Open a history browser with the history of this node"
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr "Way {0}"
 
@@ -9023,6 +9119,9 @@ msgstr "Relation {0}"
 msgid "Object"
 msgstr "Object"
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr "Changeset comment"
 
@@ -9190,6 +9289,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "Provide a brief comment for the changes you are uploading:"
 
@@ -10327,9 +10429,6 @@ msgid_plural "{0} tracks"
 msgstr[0] "{0} track"
 msgstr[1] "{0} tracks"
 
-msgid "Description"
-msgstr "Description"
-
 msgid "Timespan"
 msgstr "Timespan"
 
@@ -13661,15 +13760,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr "Error parsing {0}: "
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr "Presets"
 
@@ -13777,6 +13867,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -14054,14 +14147,6 @@ msgstr "Unknown mode {0}."
 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 ""
 
@@ -14127,9 +14212,6 @@ msgstr ""
 "It supports protocol version 0.6, while the server says it supports {0} to "
 "{1}."
 
-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 "unexpected format of id replied by the server, got ''{0}''"
 
@@ -15442,9 +15524,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -15543,10 +15622,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -16138,6 +16213,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -18175,7 +18254,8 @@ msgid "Bay"
 msgstr "Bay"
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -24001,6 +24081,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -24059,6 +24142,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -24140,6 +24226,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -24161,9 +24262,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -24758,6 +24856,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -25169,6 +25270,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -25612,6 +25716,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -26815,6 +26922,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26997,11 +27107,6 @@ msgid "Customization of public public transport stops."
 msgstr ""
 
 msgid ""
-"Creating and handling address nodes and buildings within Czech Republic."
-msgstr ""
-"Creating and handling address nodes and buildings within Czech Republic."
-
-msgid ""
 "Allows to import various file formats into JOSM directly. Currently "
 "supported: TangoGPS, Garmin Trainings Center TCX."
 msgstr ""
@@ -27053,9 +27158,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -27418,13 +27520,6 @@ msgid ""
 "objects."
 msgstr ""
 
-msgid ""
-"Supports downloading tiled, scanned maps from walking-papers.org. This "
-"plugin is still under early development and may be buggy."
-msgstr ""
-"Supports downloading tiled, scanned maps from walking-papers.org. This plug-"
-"in is still under early development and may be buggy."
-
 msgid "Easy downloading along a long set of interconnected ways"
 msgstr "Easy downloading along a long set of interconnected ways"
 
@@ -28041,13 +28136,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -29345,6 +29440,156 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+msgstr "Auto sourcing"
+
+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 ""
+"Warning: failed to put option pane dialogue always on top. Exception was: {0}"
+
+msgid ""
+"To enable the cadastre WMS plugin, change\n"
+"the current projection to one of the cadastre\n"
+"projections and retry"
+msgstr ""
+"To enable the cadastre WMS plug-in, change\n"
+"the current projection to one of the cadastre\n"
+"projections and retry"
+
+msgid "Change the current projection"
+msgstr ""
+
+msgid "Extract commune boundary"
+msgstr "Extract commune boundary"
+
+msgid "Only on vectorized layers"
+msgstr "Only on vectorised layers"
+
+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 "Download Image from French Cadastre WMS"
+
+msgid "Cadastre: {0}"
+msgstr "Cadastre: {0}"
+
+msgid "Georeference an image"
+msgstr ""
+
+msgid "Grab non-georeferenced image"
+msgstr "Grab non-georeferenced image"
+
+msgid "Georeferencing interrupted"
+msgstr "Georeferencing interrupted"
+
+msgid ""
+"This image contains georeference data.\n"
+"Do you want to use them ?"
+msgstr ""
+"This image contains georeference data.\n"
+"Do you want to use them ?"
+
+msgid "Load layer from cache"
+msgstr ""
+
+msgid "Load location from cache (only if cache is enabled)"
+msgstr "Load location from cache (only if cache is enabled)"
+
+msgid "{0} not allowed with the current projection"
+msgstr "{0} not allowed with the current projection"
+
+msgid ""
+"Cannot load cache {0} which is not compatible with current projection zone"
+msgstr ""
+"Cannot load cache {0} which is not compatible with current projection zone"
+
+msgid ""
+"Selected file {0} is not a cache file from this plugin (invalid extension)"
+msgstr ""
+"Selected file {0} is not a cache file from this plug-in (invalid extension)"
+
+msgid "The location {0} is already on screen. Cache not loaded."
+msgstr "The location {0} is already on screen. Cache not loaded."
+
+msgid "(optional)"
+msgstr ""
+
+msgid "Change location"
+msgstr "Change location"
+
+msgid "Set a new location for the next request"
+msgstr "Set a new location for the next request"
+
+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 ""
+"<html>Enter the town,village or city name.<br>Use the syntax and punctuation "
+"known by www.cadastre.gouv.fr .</html>"
+
+msgid "Departement"
+msgstr ""
+
+msgid "<html>Departement number (optional)</html>"
+msgstr ""
+
+msgid "Add new layer"
+msgstr "Add new layer"
+
+msgid "Open Cadastre Preferences"
+msgstr ""
+
+msgid "Refine georeferencing"
+msgstr ""
+
+msgid "Improve georeferencing (only raster images)"
+msgstr ""
+
+msgid "Reset cookie"
+msgstr "Reset cookie"
+
+msgid "Get a new cookie (session timeout)"
+msgstr "Get a new cookie (session timeout)"
+
+msgid "Save image as..."
+msgstr ""
+
+msgid "PNG files (*.png)"
+msgstr "PNG files (*.png)"
+
+msgid "GeoTiff files (*.tif)"
+msgstr ""
+
+msgid "Export image (only raster images)"
+msgstr ""
+
+msgid ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+
 msgid "on polygon"
 msgstr ""
 
@@ -29360,90 +29605,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
+msgstr "Adjust WMS"
+
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
 
-msgid "Select Feuille"
-msgstr "Select Feuille"
+msgid "Add \"source=...\" to elements?"
+msgstr "Add \"source=...\" to elements?"
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Download from Cadastre"
 msgstr ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
 
-msgid "Lambert Zone {0} cache file (.{0})"
-msgstr "Lambert Zone {0} cache file (.{0})"
+msgid "Objects:"
+msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
-msgstr "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Select to download buildings in the selected download area."
+msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
-msgstr "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "address"
+msgstr "address"
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
-msgstr "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "Select to download addresses in the selected download area."
+msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
-msgstr "Martinique Fort Desaix cache file (.UTM3)"
+msgid "symbol"
+msgstr "symbol"
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
-msgstr "CadastreGrabber: Illegal url."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "parcel"
+msgstr "parcel"
+
+msgid "Select to download cadastral parcels in the selected download area."
 msgstr ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+
+msgid "parcel number"
+msgstr "parcel number"
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
-"Town/city {0} not found or not available\n"
-"or action cancelled"
 
-msgid "Choose from..."
-msgstr "Choose from..."
+msgid "section"
+msgstr "section"
 
-msgid "Select commune"
-msgstr "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
+msgstr ""
 
-msgid "Auto sourcing"
-msgstr "Auto sourcing"
+msgid "locality"
+msgstr "locality"
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
 msgstr ""
 
+msgid "commune"
+msgstr "commune"
+
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
-"Warning: failed to put option pane dialogue always on top. Exception was: {0}"
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
-"To enable the cadastre WMS plug-in, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -29494,27 +29731,6 @@ msgstr ""
 msgid "low"
 msgstr "low"
 
-msgid "symbol"
-msgstr "symbol"
-
-msgid "parcel"
-msgstr "parcel"
-
-msgid "parcel number"
-msgstr "parcel number"
-
-msgid "address"
-msgstr "address"
-
-msgid "locality"
-msgstr "locality"
-
-msgid "section"
-msgstr "section"
-
-msgid "commune"
-msgstr "commune"
-
 msgid "Enable automatic caching."
 msgstr "Enable automatic caching."
 
@@ -29666,8 +29882,65 @@ msgstr ""
 msgid "Unexpected file extension. {0}"
 msgstr ""
 
-msgid "Add \"source=...\" to elements?"
-msgstr "Add \"source=...\" to elements?"
+msgid ""
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
+msgstr ""
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
+
+msgid "Select Feuille"
+msgstr "Select Feuille"
+
+msgid ""
+"Error loading file.\n"
+"Probably an old version of the cache file."
+msgstr ""
+"Error loading file.\n"
+"Probably an old version of the cache file."
+
+msgid "Lambert Zone {0} cache file (.{0})"
+msgstr "Lambert Zone {0} cache file (.{0})"
+
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgstr "Lambert CC9 Zone {0} cache file (.CC{0})"
+
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgstr "Guadeloupe Fort-Marigot cache file (.UTM1)"
+
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgstr "Guadeloupe Ste-Anne cache file (.UTM2)"
+
+msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgstr "Martinique Fort Desaix cache file (.UTM3)"
+
+msgid "Reunion RGR92 cache file (.UTM4)"
+msgstr ""
+
+msgid "CadastreGrabber: Illegal url."
+msgstr "CadastreGrabber: Illegal url."
+
+msgid ""
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
+msgstr ""
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
+
+msgid ""
+"Town/city {0} not found or not available\n"
+"or action canceled"
+msgstr ""
+"Town/city {0} not found or not available\n"
+"or action cancelled"
+
+msgid "Choose from..."
+msgstr "Choose from..."
+
+msgid "Select commune"
+msgstr "Select commune"
 
 msgid "Downloading {0}"
 msgstr "Downloading {0}"
@@ -29715,123 +29988,6 @@ msgid ""
 "Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
-msgid "Extract commune boundary"
-msgstr "Extract commune boundary"
-
-msgid "Only on vectorized layers"
-msgstr "Only on vectorised layers"
-
-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 "Download Image from French Cadastre WMS"
-
-msgid "Cadastre: {0}"
-msgstr "Cadastre: {0}"
-
-msgid "Georeference an image"
-msgstr ""
-
-msgid "Grab non-georeferenced image"
-msgstr "Grab non-georeferenced image"
-
-msgid "Georeferencing interrupted"
-msgstr "Georeferencing interrupted"
-
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
-msgstr ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
-
-msgid "Load layer from cache"
-msgstr ""
-
-msgid "Load location from cache (only if cache is enabled)"
-msgstr "Load location from cache (only if cache is enabled)"
-
-msgid "{0} not allowed with the current projection"
-msgstr "{0} not allowed with the current projection"
-
-msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
-msgstr ""
-"Cannot load cache {0} which is not compatible with current projection zone"
-
-msgid ""
-"Selected file {0} is not a cache file from this plugin (invalid extension)"
-msgstr ""
-"Selected file {0} is not a cache file from this plug-in (invalid extension)"
-
-msgid "The location {0} is already on screen. Cache not loaded."
-msgstr "The location {0} is already on screen. Cache not loaded."
-
-msgid "(optional)"
-msgstr ""
-
-msgid "Change location"
-msgstr "Change location"
-
-msgid "Set a new location for the next request"
-msgstr "Set a new location for the next request"
-
-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 ""
-"<html>Enter the town,village or city name.<br>Use the syntax and punctuation "
-"known by www.cadastre.gouv.fr .</html>"
-
-msgid "Departement"
-msgstr ""
-
-msgid "<html>Departement number (optional)</html>"
-msgstr ""
-
-msgid "Add new layer"
-msgstr "Add new layer"
-
-msgid "Open Cadastre Preferences"
-msgstr ""
-
-msgid "Refine georeferencing"
-msgstr ""
-
-msgid "Improve georeferencing (only raster images)"
-msgstr ""
-
-msgid "Reset cookie"
-msgstr "Reset cookie"
-
-msgid "Get a new cookie (session timeout)"
-msgstr "Get a new cookie (session timeout)"
-
-msgid "Save image as..."
-msgstr ""
-
-msgid "PNG files (*.png)"
-msgstr "PNG files (*.png)"
-
-msgid "GeoTiff files (*.tif)"
-msgstr ""
-
-msgid "Export image (only raster images)"
-msgstr ""
-
 msgid ""
 "Click first corner for image cropping\n"
 "(two points required)"
@@ -29885,19 +30041,6 @@ msgstr "Click second corner for image cropping"
 msgid "Click second Lambert crosspiece for georeferencing"
 msgstr "Click second Lambert crosspiece for georeferencing"
 
-msgid "Adjust WMS"
-msgstr "Adjust WMS"
-
-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 ""
-"More than one WMS layer present\n"
-"Select one of them first, then retry"
-
 msgid "Reset offset"
 msgstr ""
 
@@ -30336,21 +30479,6 @@ msgid ""
 "to cancel the download."
 msgstr ""
 
-msgid "Split area"
-msgstr "Split area"
-
-msgid "Splits an area by an untagged way."
-msgstr "Splits an area by an untagged way."
-
-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 ""
-"The selected area cannot be splitted, because it is a member of some "
-"relation.\n"
-"Remove the area from the relation before splitting it."
-
 msgid "TangoGPS Files (*.log)"
 msgstr "TangoGPS Files (*.log)"
 
@@ -36120,28 +36248,6 @@ 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 ""
-"Display a map that was previously scanned and uploaded to walking-papers.org"
-
-msgid ""
-"Enter a walking-papers.org URL or ID (the bit after the ?id= in the URL)"
-msgstr ""
-"Enter a walking-papers.org URL or ID (the bit after the ?id= in the URL)"
-
-msgid "Could not read information from walking-papers.org the id \"{0}\""
-msgstr "Could not read information from walking-papers.org the id \"{0}\""
-
-msgid "Walking Papers: {0}"
-msgstr "Walking Papers: {0}"
-
-msgid "Walking Papers layer ({0}) in zoom {1}"
-msgstr "Walking Papers layer ({0}) in zoom {1}"
-
 msgid "Way Download"
 msgstr "Way Download"
 
@@ -36322,6 +36428,26 @@ msgstr ""
 "Adds a ''wikipedia'' tag corresponding to this article to the selected "
 "objects"
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "The Ultimate WMS Super-speed Turbo Challenge II"
 
diff --git a/i18n/po/en_CA.po b/i18n/po/en_CA.po
index cc5db3a..0e9febd 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+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: 2017-09-03 05:08+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 05:06+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -393,6 +393,34 @@ msgstr "Delete"
 msgid "Delete selected objects."
 msgstr "Delete selected objects."
 
+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 "Delete Layer"
 msgstr ""
 
@@ -1299,29 +1327,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2730,34 +2744,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2789,6 +2775,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2908,6 +2917,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3015,6 +3036,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr ""
 
@@ -3058,6 +3082,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3694,6 +3721,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4734,9 +4815,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4782,6 +4860,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr ""
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4803,9 +4884,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -5006,6 +5084,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5258,6 +5344,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7040,6 +7130,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7262,9 +7355,6 @@ 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."
@@ -8192,15 +8282,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8229,33 +8319,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8379,6 +8442,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8512,6 +8602,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8521,6 +8617,9 @@ msgstr ""
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8665,6 +8764,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9704,9 +9806,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12843,15 +12942,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -12957,6 +13047,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13206,14 +13299,6 @@ 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 ""
 
@@ -13277,9 +13362,6 @@ msgid ""
 "{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 ""
 
@@ -14511,9 +14593,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14610,10 +14689,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15201,6 +15276,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17238,7 +17317,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23064,6 +23144,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23122,6 +23205,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23203,6 +23289,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23224,9 +23325,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23821,6 +23919,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24232,6 +24333,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24675,6 +24779,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25878,6 +25985,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26058,10 +26168,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26109,9 +26215,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26455,11 +26558,6 @@ msgid ""
 "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 ""
 
@@ -27070,13 +27168,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28373,6 +28471,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28388,77 +28624,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28509,27 +28750,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28670,160 +28890,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28873,17 +29030,6 @@ 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 ""
 
@@ -29320,18 +29466,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35077,26 +35211,6 @@ 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 ""
 
@@ -35265,6 +35379,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/en_GB.po b/i18n/po/en_GB.po
index 9cb34b0..d4ab580 100644
--- a/i18n/po/en_GB.po
+++ b/i18n/po/en_GB.po
@@ -10,7 +10,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: JOSM\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
 "PO-Revision-Date: 2016-11-01 11:03+0000\n"
 "Last-Translator: Andi Chandler <Unknown>\n"
 "Language-Team: German <josm-dev at openstreetmap.org>\n"
@@ -18,8 +18,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: 2017-09-03 05:05+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 05:04+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: de\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -404,6 +404,45 @@ msgstr "Delete"
 msgid "Delete selected objects."
 msgstr "Delete selected objects."
 
+msgid "Delete confirmation"
+msgstr "Delete confirmation"
+
+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 ""
+"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?"
+
+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 "
+"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] ""
+"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 "Delete relation?"
+
 msgid "Delete Layer"
 msgstr "Delete Layer"
 
@@ -1385,34 +1424,14 @@ msgstr " [id: {0}]"
 msgid "Segment {0}: {1}"
 msgstr "Segment {0}: {1}"
 
-msgid "You must select two or more nodes to split a circular way."
-msgstr "You must select two or more nodes to split a circular way."
-
-msgid ""
-"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
-"middle of the way.)"
-msgstr ""
-"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
-"middle of the way.)"
-
-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 "Search preset"
+msgstr "Search preset"
 
-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 "Show preset search dialog"
+msgstr "Show preset search dialogue"
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] "Split way {0} into {1} part"
-msgstr[1] "Split way {0} into {1} parts"
+msgid "Search presets"
+msgstr "Search presets"
 
 msgid "Discourage upload"
 msgstr ""
@@ -2913,45 +2932,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] "Delete {0} relation"
 msgstr[1] "Delete {0} relations"
 
-msgid "Delete confirmation"
-msgstr "Delete confirmation"
-
-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 ""
-"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?"
-
-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 "
-"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] ""
-"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 "Delete relation?"
-
 msgid "Move {0} node"
 msgid_plural "Move {0} nodes"
 msgstr[0] "Move {0} node"
@@ -2983,6 +2963,35 @@ msgstr[1] "Selected {0} objects"
 msgid "Sequence: {0}"
 msgstr "Sequence: {0}"
 
+msgid "You must select two or more nodes to split a circular way."
+msgstr "You must select two or more nodes to split a circular way."
+
+msgid ""
+"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
+"middle of the way.)"
+msgstr ""
+"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
+"middle of the way.)"
+
+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] "Split way {0} into {1} part"
+msgstr[1] "Split way {0} into {1} parts"
+
 msgid "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] "Transform {0} node"
@@ -3115,6 +3124,18 @@ msgstr "Illegal latitude value ''{0}''"
 msgid "Illegal longitude value ''{0}''"
 msgstr "Illegal longitude value ''{0}''"
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr "Failed to create missing cache directory: {0}"
 
@@ -3242,6 +3263,9 @@ msgstr "Imperial"
 msgid "Nautical Mile"
 msgstr "Nautical Mile"
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+
 msgid "UNKNOWN"
 msgstr "UNKNOWN"
 
@@ -3285,6 +3309,9 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3955,6 +3982,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr "Custom Projection"
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr "Description"
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr "Show this help"
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr "Examples"
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr "GRS80"
 
@@ -5022,9 +5103,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr "Offset"
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-
 msgid "Outdated Java version"
 msgstr "Outdated Java version"
 
@@ -5074,6 +5152,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr "Initialising OSM API"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr "Removed layer {0} because it is not allowed by the configured API."
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -5095,9 +5176,6 @@ msgstr "usage"
 msgid "options"
 msgstr "options"
 
-msgid "Show this help"
-msgstr "Show this help"
-
 msgid "Standard unix geometry argument"
 msgstr "Standard unix geometry argument"
 
@@ -5322,6 +5400,14 @@ msgstr ""
 "missing proxy configuration.<br>Would you like to change your proxy settings "
 "now?"
 
+msgid "You have {0} unread message."
+msgid_plural "You have {0} unread messages."
+msgstr[0] "You have {0} unread message."
+msgstr[1] "You have {0} unread messages."
+
+msgid "Click here to see your inbox."
+msgstr "Click here to see your inbox."
+
 msgctxt "menu"
 msgid "File"
 msgstr "File"
@@ -5583,6 +5669,11 @@ msgstr "Please enter a tile index"
 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 ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+"Opening the bug report failed. Please report manually using this website:"
+
 msgid "You have encountered a bug in JOSM"
 msgstr "You have encountered a bug in JOSM"
 
@@ -7490,6 +7581,9 @@ msgstr "Remove the changeset in the detail view panel from the local cache"
 msgid "Update the changeset from the OSM server"
 msgstr "Update the changeset from the OSM server"
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7746,9 +7840,6 @@ msgid "Please enter or paste an URL to retrieve changesets from the OSM API."
 msgstr ""
 "Please enter or paste an URL to retrieve changesets from the OSM API."
 
-msgid "Examples"
-msgstr "Examples"
-
 msgid ""
 "Note that changeset queries are currently always submitted to ''{0}'', "
 "regardless of the host, port and path of the URL entered below."
@@ -8734,15 +8825,15 @@ msgstr "Download area ok, size probably acceptable to server"
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8771,33 +8862,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr "history"
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8921,6 +8985,33 @@ msgstr "Slippy map"
 msgid "Tile Numbers"
 msgstr "Tile Numbers"
 
+msgid "history"
+msgstr "history"
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr "JOSM Help Browser"
 
@@ -9071,6 +9162,12 @@ msgstr "Zoom to this node in the current data layer"
 msgid "Open a history browser with the history of this node"
 msgstr "Open a history browser with the history of this node"
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr "Way {0}"
 
@@ -9080,6 +9177,9 @@ msgstr "Relation {0}"
 msgid "Object"
 msgstr "Object"
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr "Changeset comment"
 
@@ -9249,6 +9349,9 @@ msgstr "Check \"Upload\" to upload the changes to the OSM server."
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr "Check \"Save\" to save the layer to the file specified on the left."
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "Provide a brief comment for the changes you are uploading:"
 
@@ -10392,9 +10495,6 @@ msgid_plural "{0} tracks"
 msgstr[0] "{0} track"
 msgstr[1] "{0} tracks"
 
-msgid "Description"
-msgstr "Description"
-
 msgid "Timespan"
 msgstr "Timespan"
 
@@ -13795,15 +13895,6 @@ msgstr "Preset sub element without parent"
 msgid "Error parsing {0}: "
 msgstr "Error parsing {0}: "
 
-msgid "Search preset"
-msgstr "Search preset"
-
-msgid "Show preset search dialog"
-msgstr "Show preset search dialogue"
-
-msgid "Search presets"
-msgstr "Search presets"
-
 msgid "Presets"
 msgstr "Presets"
 
@@ -13921,6 +14012,9 @@ msgstr "All files (*.*)"
 msgid "Received error page:"
 msgstr "Received error page:"
 
+msgid "{0}... [please type its number]"
+msgstr "{0}... [please type its number]"
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -14215,14 +14309,6 @@ msgstr "Unknown mode {0}."
 msgid "get number of unread messages"
 msgstr "get number of unread messages"
 
-msgid "You have {0} unread message."
-msgid_plural "You have {0} unread messages."
-msgstr[0] "You have {0} unread message."
-msgstr[1] "You have {0} unread messages."
-
-msgid "Click here to see your inbox."
-msgstr "Click here to see your inbox."
-
 msgid "Message notifier"
 msgstr "Message notifier"
 
@@ -14290,9 +14376,6 @@ msgstr ""
 "It supports protocol version 0.6, while the server says it supports {0} to "
 "{1}."
 
-msgid "Removed layer {0} because it is not allowed by the configured API."
-msgstr "Removed layer {0} because it is not allowed by the configured API."
-
 msgid "Unexpected format of ID replied by the server. Got ''{0}''."
 msgstr "unexpected format of id replied by the server, got ''{0}''"
 
@@ -15735,9 +15818,6 @@ msgstr ""
 "http://forum.openstreetmap.org/viewtopic.php?id=25677).\n"
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 
-msgid "{0}... [please type its number]"
-msgstr "{0}... [please type its number]"
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -15847,11 +15927,6 @@ msgid "Failed to load XML schema."
 msgstr "Failed to load XML schema."
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-"Opening the bug report failed. Please report manually using this website:"
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -16451,6 +16526,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr "no"
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr "Service type"
 
@@ -18512,9 +18591,9 @@ msgid "Bay"
 msgstr "Bay"
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
-"A large body of water partially enclosed by land but with a wide mouth."
 
 msgid "Shipping"
 msgstr "Shipping"
@@ -24366,6 +24445,9 @@ msgstr "Waymarked Trails: Horse Riding"
 msgid "Waymarked Trails: Winter Sports"
 msgstr "Waymarked Trails: Winter Sports"
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr "OSM Inspector: Geometry"
 
@@ -24424,6 +24506,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -24505,6 +24590,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -24526,9 +24626,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -25125,6 +25222,9 @@ msgstr "Berlin aerial photograph 2015"
 msgid "Berlin aerial photograph 2016"
 msgstr "Berlin aerial photograph 2016"
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -25536,6 +25636,9 @@ msgstr "Luxembourg Inspire Water"
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Niger Delta Oct 2012 Landsat"
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -25979,6 +26082,9 @@ msgstr "NLSC Open Data WMTS"
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr "MSR Maps Topo"
 
@@ -27211,6 +27317,9 @@ msgstr "relation without type"
 msgid "{0} relation without {0} tag"
 msgstr "{0} relation without {0} tag"
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr "religion without denomination"
 
@@ -27412,11 +27521,6 @@ msgid "Customization of public public transport stops."
 msgstr ""
 
 msgid ""
-"Creating and handling address nodes and buildings within Czech Republic."
-msgstr ""
-"Creating and handling address nodes and buildings within Czech Republic."
-
-msgid ""
 "Allows to import various file formats into JOSM directly. Currently "
 "supported: TangoGPS, Garmin Trainings Center TCX."
 msgstr ""
@@ -27474,9 +27578,6 @@ msgid ""
 msgstr ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 
-msgid "Allows you to view a GeoJSON file as a layer."
-msgstr "Allows you to view a GeoJSON file as a layer."
-
 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."
@@ -27901,13 +28002,6 @@ msgstr ""
 "georeferenced video against a GPS track, to use it for identify visible "
 "objects."
 
-msgid ""
-"Supports downloading tiled, scanned maps from walking-papers.org. This "
-"plugin is still under early development and may be buggy."
-msgstr ""
-"Supports downloading tiled, scanned maps from walking-papers.org. This plug-"
-"in is still under early development and may be buggy."
-
 msgid "Easy downloading along a long set of interconnected ways"
 msgstr "Easy downloading along a long set of interconnected ways"
 
@@ -28546,15 +28640,15 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
+msgid "Start Mapillary layer"
+msgstr "Start Mapillary layer"
+
 msgid "Mapillary"
 msgstr "Mapillary"
 
 msgid "Create Mapillary layer"
 msgstr "Create Mapillary layer"
 
-msgid "Start Mapillary layer"
-msgstr "Start Mapillary layer"
-
 msgid "Download Mapillary images in current view"
 msgstr "Download Mapillary images in current view"
 
@@ -29960,6 +30054,159 @@ msgstr[1] "There are {0} buildings with address conflicts"
 msgid "No address nodes inside buildings found"
 msgstr "No address nodes inside buildings found"
 
+msgid "Auto sourcing"
+msgstr "Auto sourcing"
+
+msgid ""
+"Please enable at least two WMS layers in the cadastre-fr plugin "
+"configuration.\n"
+"Layers ''Building'' and ''Parcel'' added by default."
+msgstr ""
+"Please enable at least two WMS layers in the cadastre-fr plugin "
+"configuration.\n"
+"Layers ''Building'' and ''Parcel'' added by default."
+
+msgid ""
+"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+msgstr ""
+"Warning: failed to put option pane dialogue always on top. Exception was: {0}"
+
+msgid ""
+"To enable the cadastre WMS plugin, change\n"
+"the current projection to one of the cadastre\n"
+"projections and retry"
+msgstr ""
+"To enable the cadastre WMS plug-in, change\n"
+"the current projection to one of the cadastre\n"
+"projections and retry"
+
+msgid "Change the current projection"
+msgstr "Change the current projection"
+
+msgid "Extract commune boundary"
+msgstr "Extract commune boundary"
+
+msgid "Only on vectorized layers"
+msgstr "Only on vectorised layers"
+
+msgid "Cancel current grab"
+msgstr "Cancel current grab"
+
+msgid "Cancel current grab (only vector images)"
+msgstr "Cancel current grab (only vector images)"
+
+msgid "Cadastre grab"
+msgstr "Cadastre grab"
+
+msgid "Download Image from French Cadastre WMS"
+msgstr "Download Image from French Cadastre WMS"
+
+msgid "Cadastre: {0}"
+msgstr "Cadastre: {0}"
+
+msgid "Georeference an image"
+msgstr "Georeference an image"
+
+msgid "Grab non-georeferenced image"
+msgstr "Grab non-georeferenced image"
+
+msgid "Georeferencing interrupted"
+msgstr "Georeferencing interrupted"
+
+msgid ""
+"This image contains georeference data.\n"
+"Do you want to use them ?"
+msgstr ""
+"This image contains georeference data.\n"
+"Do you want to use them ?"
+
+msgid "Load layer from cache"
+msgstr "Load layer from cache"
+
+msgid "Load location from cache (only if cache is enabled)"
+msgstr "Load location from cache (only if cache is enabled)"
+
+msgid "{0} not allowed with the current projection"
+msgstr "{0} not allowed with the current projection"
+
+msgid ""
+"Cannot load cache {0} which is not compatible with current projection zone"
+msgstr ""
+"Cannot load cache {0} which is not compatible with current projection zone"
+
+msgid ""
+"Selected file {0} is not a cache file from this plugin (invalid extension)"
+msgstr ""
+"Selected file {0} is not a cache file from this plug-in (invalid extension)"
+
+msgid "The location {0} is already on screen. Cache not loaded."
+msgstr "The location {0} is already on screen. Cache not loaded."
+
+msgid "(optional)"
+msgstr "(optional)"
+
+msgid "Change location"
+msgstr "Change location"
+
+msgid "Set a new location for the next request"
+msgstr "Set a new location for the next request"
+
+msgid "Add a new municipality layer"
+msgstr "Add a new municipality layer"
+
+msgid "Commune"
+msgstr "Commune"
+
+msgid ""
+"<html>Enter the town,village or city name.<br>Use the syntax and punctuation "
+"known by www.cadastre.gouv.fr .</html>"
+msgstr ""
+"<html>Enter the town,village or city name.<br>Use the syntax and punctuation "
+"known by www.cadastre.gouv.fr .</html>"
+
+msgid "Departement"
+msgstr "Departement"
+
+msgid "<html>Departement number (optional)</html>"
+msgstr "<html>Departement number (optional)</html>"
+
+msgid "Add new layer"
+msgstr "Add new layer"
+
+msgid "Open Cadastre Preferences"
+msgstr "Open Cadastre Preferences"
+
+msgid "Refine georeferencing"
+msgstr "Refine georeferencing"
+
+msgid "Improve georeferencing (only raster images)"
+msgstr "Improve georeferencing (only raster images)"
+
+msgid "Reset cookie"
+msgstr "Reset cookie"
+
+msgid "Get a new cookie (session timeout)"
+msgstr "Get a new cookie (session timeout)"
+
+msgid "Save image as..."
+msgstr "Save image as..."
+
+msgid "PNG files (*.png)"
+msgstr "PNG files (*.png)"
+
+msgid "GeoTiff files (*.tif)"
+msgstr "GeoTiff files (*.tif)"
+
+msgid "Export image (only raster images)"
+msgstr "Export image (only raster images)"
+
+msgid ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+
 msgid "on polygon"
 msgstr "on polygon"
 
@@ -29975,94 +30222,83 @@ msgstr "Next no"
 msgid "Enter addresses"
 msgstr "Enter addresses"
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
+msgstr "Adjust WMS"
+
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
+msgstr "Adjust the position of the WMS layer (saved for raster images only)"
+
+msgid "Add \"source=...\" to elements?"
+msgstr "Add \"source=...\" to elements?"
+
+msgid "Download from Cadastre"
 msgstr ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
 
-msgid "Select Feuille"
-msgstr "Select Feuille"
+msgid "Objects:"
+msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Select to download buildings in the selected download area."
 msgstr ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
 
-msgid "Lambert Zone {0} cache file (.{0})"
-msgstr "Lambert Zone {0} cache file (.{0})"
+msgid "address"
+msgstr "address"
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
-msgstr "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Select to download addresses in the selected download area."
+msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
-msgstr "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "symbol"
+msgstr "symbol"
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
-msgstr "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "Select to download symbols in the selected download area."
+msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
-msgstr "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
-msgstr "Reunion RGR92 cache file (.UTM4)"
+msgid "parcel"
+msgstr "parcel"
 
-msgid "CadastreGrabber: Illegal url."
-msgstr "CadastreGrabber: Illegal url."
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
+msgstr "parcel number"
 
 msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
 
-msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+msgid "section"
+msgstr "section"
+
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
-"Town/city {0} not found or not available\n"
-"or action cancelled"
 
-msgid "Choose from..."
-msgstr "Choose from..."
+msgid "locality"
+msgstr "locality"
 
-msgid "Select commune"
-msgstr "Select commune"
+msgid "Select to download localities in the selected download area."
+msgstr ""
 
-msgid "Auto sourcing"
-msgstr "Auto sourcing"
+msgid "commune"
+msgstr "commune"
 
 msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+"Select to download municipality boundary in the selected download area."
 msgstr ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
-"Warning: failed to put option pane dialogue always on top. Exception was: {0}"
 
-msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+msgid "Recipient"
 msgstr ""
-"To enable the cadastre WMS plug-in, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
 
-msgid "Change the current projection"
-msgstr "Change the current projection"
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
+msgstr ""
 
 msgid "Replace original background by JOSM background color."
 msgstr "Replace original background by JOSM background colour."
@@ -30112,27 +30348,6 @@ msgstr "medium"
 msgid "low"
 msgstr "low"
 
-msgid "symbol"
-msgstr "symbol"
-
-msgid "parcel"
-msgstr "parcel"
-
-msgid "parcel number"
-msgstr "parcel number"
-
-msgid "address"
-msgstr "address"
-
-msgid "locality"
-msgstr "locality"
-
-msgid "section"
-msgstr "section"
-
-msgid "commune"
-msgstr "commune"
-
 msgid "Enable automatic caching."
 msgstr "Enable automatic caching."
 
@@ -30287,8 +30502,65 @@ msgstr "Enable this to use the tag \"add:street\" on nodes."
 msgid "Unexpected file extension. {0}"
 msgstr "Unexpected file extension. {0}"
 
-msgid "Add \"source=...\" to elements?"
-msgstr "Add \"source=...\" to elements?"
+msgid ""
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
+msgstr ""
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
+
+msgid "Select Feuille"
+msgstr "Select Feuille"
+
+msgid ""
+"Error loading file.\n"
+"Probably an old version of the cache file."
+msgstr ""
+"Error loading file.\n"
+"Probably an old version of the cache file."
+
+msgid "Lambert Zone {0} cache file (.{0})"
+msgstr "Lambert Zone {0} cache file (.{0})"
+
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgstr "Lambert CC9 Zone {0} cache file (.CC{0})"
+
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgstr "Guadeloupe Fort-Marigot cache file (.UTM1)"
+
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgstr "Guadeloupe Ste-Anne cache file (.UTM2)"
+
+msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgstr "Martinique Fort Desaix cache file (.UTM3)"
+
+msgid "Reunion RGR92 cache file (.UTM4)"
+msgstr "Reunion RGR92 cache file (.UTM4)"
+
+msgid "CadastreGrabber: Illegal url."
+msgstr "CadastreGrabber: Illegal url."
+
+msgid ""
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
+msgstr ""
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
+
+msgid ""
+"Town/city {0} not found or not available\n"
+"or action canceled"
+msgstr ""
+"Town/city {0} not found or not available\n"
+"or action cancelled"
+
+msgid "Choose from..."
+msgstr "Choose from..."
+
+msgid "Select commune"
+msgstr "Select commune"
 
 msgid "Downloading {0}"
 msgstr "Downloading {0}"
@@ -30338,123 +30610,6 @@ msgstr ""
 "This commune is not vectorised.\n"
 "Please use the other menu entry to georeference a \"Plan image\""
 
-msgid "Extract commune boundary"
-msgstr "Extract commune boundary"
-
-msgid "Only on vectorized layers"
-msgstr "Only on vectorised layers"
-
-msgid "Cancel current grab"
-msgstr "Cancel current grab"
-
-msgid "Cancel current grab (only vector images)"
-msgstr "Cancel current grab (only vector images)"
-
-msgid "Cadastre grab"
-msgstr "Cadastre grab"
-
-msgid "Download Image from French Cadastre WMS"
-msgstr "Download Image from French Cadastre WMS"
-
-msgid "Cadastre: {0}"
-msgstr "Cadastre: {0}"
-
-msgid "Georeference an image"
-msgstr "Georeference an image"
-
-msgid "Grab non-georeferenced image"
-msgstr "Grab non-georeferenced image"
-
-msgid "Georeferencing interrupted"
-msgstr "Georeferencing interrupted"
-
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
-msgstr ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
-
-msgid "Load layer from cache"
-msgstr "Load layer from cache"
-
-msgid "Load location from cache (only if cache is enabled)"
-msgstr "Load location from cache (only if cache is enabled)"
-
-msgid "{0} not allowed with the current projection"
-msgstr "{0} not allowed with the current projection"
-
-msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
-msgstr ""
-"Cannot load cache {0} which is not compatible with current projection zone"
-
-msgid ""
-"Selected file {0} is not a cache file from this plugin (invalid extension)"
-msgstr ""
-"Selected file {0} is not a cache file from this plug-in (invalid extension)"
-
-msgid "The location {0} is already on screen. Cache not loaded."
-msgstr "The location {0} is already on screen. Cache not loaded."
-
-msgid "(optional)"
-msgstr "(optional)"
-
-msgid "Change location"
-msgstr "Change location"
-
-msgid "Set a new location for the next request"
-msgstr "Set a new location for the next request"
-
-msgid "Add a new municipality layer"
-msgstr "Add a new municipality layer"
-
-msgid "Commune"
-msgstr "Commune"
-
-msgid ""
-"<html>Enter the town,village or city name.<br>Use the syntax and punctuation "
-"known by www.cadastre.gouv.fr .</html>"
-msgstr ""
-"<html>Enter the town,village or city name.<br>Use the syntax and punctuation "
-"known by www.cadastre.gouv.fr .</html>"
-
-msgid "Departement"
-msgstr "Departement"
-
-msgid "<html>Departement number (optional)</html>"
-msgstr "<html>Departement number (optional)</html>"
-
-msgid "Add new layer"
-msgstr "Add new layer"
-
-msgid "Open Cadastre Preferences"
-msgstr "Open Cadastre Preferences"
-
-msgid "Refine georeferencing"
-msgstr "Refine georeferencing"
-
-msgid "Improve georeferencing (only raster images)"
-msgstr "Improve georeferencing (only raster images)"
-
-msgid "Reset cookie"
-msgstr "Reset cookie"
-
-msgid "Get a new cookie (session timeout)"
-msgstr "Get a new cookie (session timeout)"
-
-msgid "Save image as..."
-msgstr "Save image as..."
-
-msgid "PNG files (*.png)"
-msgstr "PNG files (*.png)"
-
-msgid "GeoTiff files (*.tif)"
-msgstr "GeoTiff files (*.tif)"
-
-msgid "Export image (only raster images)"
-msgstr "Export image (only raster images)"
-
 msgid ""
 "Click first corner for image cropping\n"
 "(two points required)"
@@ -30510,19 +30665,6 @@ msgstr "Click second corner for image cropping"
 msgid "Click second Lambert crosspiece for georeferencing"
 msgstr "Click second Lambert crosspiece for georeferencing"
 
-msgid "Adjust WMS"
-msgstr "Adjust WMS"
-
-msgid "Adjust the position of the WMS layer (saved for raster images only)"
-msgstr "Adjust the position of the WMS layer (saved for raster images only)"
-
-msgid ""
-"More than one WMS layer present\n"
-"Select one of them first, then retry"
-msgstr ""
-"More than one WMS layer present\n"
-"Select one of them first, then retry"
-
 msgid "Reset offset"
 msgstr "Reset offset"
 
@@ -30974,21 +31116,6 @@ msgstr ""
 "is selected there is no indication that something is being done, and no way "
 "to cancel the download."
 
-msgid "Split area"
-msgstr "Split area"
-
-msgid "Splits an area by an untagged way."
-msgstr "Splits an area by an untagged way."
-
-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 ""
-"The selected area cannot be splitted, because it is a member of some "
-"relation.\n"
-"Remove the area from the relation before splitting it."
-
 msgid "TangoGPS Files (*.log)"
 msgstr "TangoGPS Files (*.log)"
 
@@ -37070,28 +37197,6 @@ msgstr "loop"
 msgid "mute"
 msgstr "mute"
 
-msgid "Walking Papers Scanned Map"
-msgstr "Walking Papers Scanned Map"
-
-msgid ""
-"Display a map that was previously scanned and uploaded to walking-papers.org"
-msgstr ""
-"Display a map that was previously scanned and uploaded to walking-papers.org"
-
-msgid ""
-"Enter a walking-papers.org URL or ID (the bit after the ?id= in the URL)"
-msgstr ""
-"Enter a walking-papers.org URL or ID (the bit after the ?id= in the URL)"
-
-msgid "Could not read information from walking-papers.org the id \"{0}\""
-msgstr "Could not read information from walking-papers.org the id \"{0}\""
-
-msgid "Walking Papers: {0}"
-msgstr "Walking Papers: {0}"
-
-msgid "Walking Papers layer ({0}) in zoom {1}"
-msgstr "Walking Papers layer ({0}) in zoom {1}"
-
 msgid "Way Download"
 msgstr "Way Download"
 
@@ -37277,6 +37382,26 @@ msgstr ""
 "Adds a ''wikipedia'' tag corresponding to this article to the selected "
 "objects"
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "The Ultimate WMS Super-speed Turbo Challenge II"
 
diff --git a/i18n/po/eo.po b/i18n/po/eo.po
index 3657183..bb5f1a8 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
 "PO-Revision-Date: 2016-09-21 04:23+0000\n"
 "Last-Translator: Yuri Tretyakov <Unknown>\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: 2017-09-03 04:40+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:38+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: eo\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -393,6 +393,34 @@ msgstr "Forigi"
 msgid "Delete selected objects."
 msgstr "Forigi la elektitajn objektojn."
 
+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 "Delete Layer"
 msgstr ""
 
@@ -1299,29 +1327,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2730,34 +2744,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2789,6 +2775,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2908,6 +2917,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3015,6 +3036,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr "NEKONATA"
 
@@ -3058,6 +3082,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3694,6 +3721,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4735,9 +4816,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4783,6 +4861,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr "Pravalorizado de API de OSM"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4804,9 +4885,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -5007,6 +5085,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5259,6 +5345,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7041,6 +7131,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7263,9 +7356,6 @@ 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."
@@ -8193,15 +8283,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8230,33 +8320,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8380,6 +8443,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8513,6 +8603,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8522,6 +8618,9 @@ msgstr ""
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8666,6 +8765,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9709,9 +9811,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12848,15 +12947,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -12962,6 +13052,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13211,14 +13304,6 @@ 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 ""
 
@@ -13282,9 +13367,6 @@ msgid ""
 "{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 ""
 
@@ -14516,9 +14598,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14615,10 +14694,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15206,6 +15281,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17243,7 +17322,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23069,6 +23149,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23127,6 +23210,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23208,6 +23294,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23229,9 +23330,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23826,6 +23924,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24237,6 +24338,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24680,6 +24784,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25883,6 +25990,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26063,10 +26173,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26114,9 +26220,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26460,11 +26563,6 @@ msgid ""
 "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 ""
 
@@ -27075,13 +27173,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28378,6 +28476,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28393,77 +28629,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
+msgstr "adreso"
+
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "symbol"
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download water bodies in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28514,27 +28755,6 @@ msgstr ""
 msgid "low"
 msgstr ""
 
-msgid "symbol"
-msgstr ""
-
-msgid "parcel"
-msgstr ""
-
-msgid "parcel number"
-msgstr ""
-
-msgid "address"
-msgstr "adreso"
-
-msgid "locality"
-msgstr ""
-
-msgid "section"
-msgstr ""
-
-msgid "commune"
-msgstr ""
-
 msgid "Enable automatic caching."
 msgstr ""
 
@@ -28675,160 +28895,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28878,17 +29035,6 @@ 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 ""
 
@@ -29325,18 +29471,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35082,26 +35216,6 @@ 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 ""
 
@@ -35270,6 +35384,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/es.po b/i18n/po/es.po
index 5429b90..fe610ab 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: 2017-09-02 22:59+0200\n"
-"PO-Revision-Date: 2017-08-26 02:00+0000\n"
-"Last-Translator: Omar Vega <ovruni at gnu.org.pe>\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
+"PO-Revision-Date: 2017-09-17 10:56+0000\n"
+"Last-Translator: cdavila <cdavilam at orangecorreo.es>\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: 2017-09-03 05:00+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:59+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: es\n"
 "X-Language: es_ES\n"
 "X-Source-Language: C\n"
@@ -403,6 +403,45 @@ msgstr "Borrar"
 msgid "Delete selected objects."
 msgstr "Eliminar objetos seleccionados."
 
+msgid "Delete confirmation"
+msgstr "Confirmación antes de borrar"
+
+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 ""
+"Está a punto de eliminar nodos fuera del área que se ha descargado.<br>Esto "
+"puede causar problemas ya que otros objetos (que no puede ver) pueden estar "
+"usándolos.<br>¿Esta seguro que quiere borrarlo?"
+
+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 ""
+"Va a eliminar objetos incompletos.<br> Esto causará problemas porque no ve "
+"el objeto real.<br>¿Está seguro de que desea borrarlos?"
+
+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] ""
+"Está a punto de eliminar {0} relación: {1}<br/>Este paso raramente es "
+"necesario y no se puede deshacer de una manera fácil una vez que se ha "
+"subido al servidor.<br/>¿Realmente quiere eliminarla?"
+msgstr[1] ""
+"Está a punto de eliminar {0} relaciones: {1}<br/>Este paso raramente es "
+"necesario y no se puede deshacer de una manera fácil una vez que se ha "
+"subido al servidor.<br/>¿Realmente quiere eliminarlas?"
+
+msgid "Delete relation?"
+msgstr "¿Eliminar relación?"
+
 msgid "Delete Layer"
 msgstr "Eliminar capa"
 
@@ -1417,34 +1456,14 @@ msgstr " [ID: {0}]"
 msgid "Segment {0}: {1}"
 msgstr "Segmento {0}: {1}"
 
-msgid "You must select two or more nodes to split a circular way."
-msgstr "Debe seleccionar dos o más nodos para dividir una vía circular."
-
-msgid ""
-"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
-"middle of the way.)"
-msgstr ""
-"No se pueden dividir la vía por los nodos seleccionados. (Pista: seleccione "
-"nodos de la mitad de la vía)."
-
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
-msgstr ""
-"Un miembro de la relación basada en roles fue copiada a todas las nuevas "
-"vías.<br> Debería verificarlo y corregir en los casos que sea necesario."
+msgid "Search preset"
+msgstr "Buscar predefinido"
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
-msgstr ""
-"Un miembro de la relación fue copiado a todas las nuevas vías.<br> Debería "
-"verificarlo y corregirlo donde sea necesario."
+msgid "Show preset search dialog"
+msgstr "Mostrar diálogo de búsqueda preestablecida"
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] "Divide la vía {0} en {1} parte"
-msgstr[1] "Divide la vía {0} en {1} partes"
+msgid "Search presets"
+msgstr "Buscar predefinidos"
 
 msgid "Discourage upload"
 msgstr "Desalentar subida"
@@ -2980,45 +2999,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] "Eliminar {0} relación"
 msgstr[1] "Eliminar {0} relaciones"
 
-msgid "Delete confirmation"
-msgstr "Confirmación antes de borrar"
-
-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 ""
-"Está a punto de eliminar nodos fuera del área que se ha descargado.<br>Esto "
-"puede causar problemas ya que otros objetos (que no puede ver) pueden estar "
-"usándolos.<br>¿Esta seguro que quiere borrarlo?"
-
-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 ""
-"Va a eliminar objetos incompletos.<br> Esto causará problemas porque no ve "
-"el objeto real.<br>¿Está seguro de que desea borrarlos?"
-
-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] ""
-"Está a punto de eliminar {0} relación: {1}<br/>Este paso raramente es "
-"necesario y no se puede deshacer de una manera fácil una vez que se ha "
-"subido al servidor.<br/>¿Realmente quiere eliminarla?"
-msgstr[1] ""
-"Está a punto de eliminar {0} relaciones: {1}<br/>Este paso raramente es "
-"necesario y no se puede deshacer de una manera fácil una vez que se ha "
-"subido al servidor.<br/>¿Realmente quiere eliminarlas?"
-
-msgid "Delete relation?"
-msgstr "¿Eliminar relación?"
-
 msgid "Move {0} node"
 msgid_plural "Move {0} nodes"
 msgstr[0] "Mover {0} nodo"
@@ -3050,6 +3030,35 @@ msgstr[1] "Seleccionados {0} objetos"
 msgid "Sequence: {0}"
 msgstr "Secuencia: {0}"
 
+msgid "You must select two or more nodes to split a circular way."
+msgstr "Debe seleccionar dos o más nodos para dividir una vía circular."
+
+msgid ""
+"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
+"middle of the way.)"
+msgstr ""
+"No se pueden dividir la vía por los nodos seleccionados. (Pista: seleccione "
+"nodos de la mitad de la vía)."
+
+msgid ""
+"A role based relation membership was copied to all new ways.<br>You should "
+"verify this and correct it when necessary."
+msgstr ""
+"Un miembro de la relación basada en roles fue copiada a todas las nuevas "
+"vías.<br> Debería verificarlo y corregir en los casos que sea necesario."
+
+msgid ""
+"A relation membership was copied to all new ways.<br>You should verify this "
+"and correct it when necessary."
+msgstr ""
+"Un miembro de la relación fue copiado a todas las nuevas vías.<br> Debería "
+"verificarlo y corregirlo donde sea necesario."
+
+msgid "Split way {0} into {1} part"
+msgid_plural "Split way {0} into {1} parts"
+msgstr[0] "Divide la vía {0} en {1} parte"
+msgstr[1] "Divide la vía {0} en {1} partes"
+
 msgid "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] "Transformar {0} nodo"
@@ -3185,6 +3194,18 @@ msgstr "Valor de latitud ilegal \"{0}\""
 msgid "Illegal longitude value ''{0}''"
 msgstr "Valor de longitud ilegal \"{0}\""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr "Error al crear el directorio de caché faltante: {0}"
 
@@ -3321,6 +3342,10 @@ msgstr "Imperial"
 msgid "Nautical Mile"
 msgstr "Milla náutica"
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+"Esperado un valor no-vacío para el parámetro ''{0}'', suministrado ''{1}''"
+
 msgid "UNKNOWN"
 msgstr "DESCONOCIDO"
 
@@ -3366,6 +3391,9 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr "Fecha de la imagen: {0}"
 
@@ -4069,6 +4097,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr "Proyeccion ajustada"
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr "Descripción"
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr "Mostrar esta ayuda"
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr "Ejemplos"
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr "GRS80"
 
@@ -5170,10 +5252,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr "Desplazamiento"
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-"Esperado un valor no-vacío para el parámetro ''{0}'', suministrado ''{1}''"
-
 msgid "Outdated Java version"
 msgstr "Versión desactualizada de Java"
 
@@ -5223,6 +5301,10 @@ msgstr "Inicializando datos internos de límites"
 msgid "Initializing OSM API"
 msgstr "Inicializando API de OSM"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+"Eliminada la capa {0} porque no está permitido por la configuración del API."
+
 msgid "Initializing internal traffic data"
 msgstr "Inicializando datos internos de tráfico"
 
@@ -5244,9 +5326,6 @@ msgstr "uso"
 msgid "options"
 msgstr "opciones"
 
-msgid "Show this help"
-msgstr "Mostrar esta ayuda"
-
 msgid "Standard unix geometry argument"
 msgstr "Argumento de geometría standard de unix"
 
@@ -5480,6 +5559,14 @@ msgstr ""
 "Esto puede ser debido a una configuración de proxy errónea. <br> ¿Desea "
 "cambiar la configuración del proxy ahora?"
 
+msgid "You have {0} unread message."
+msgid_plural "You have {0} unread messages."
+msgstr[0] "Tiene {0} mensaje no leído."
+msgstr[1] "Tiene {0} mensajes no leídos."
+
+msgid "Click here to see your inbox."
+msgstr "Haga clic aquí para ver la bandeja de entrada."
+
 msgctxt "menu"
 msgid "File"
 msgstr "Archivo"
@@ -5751,6 +5838,12 @@ msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 "El valor actual no es un índice de tesela válido para el nivel de zoom dado"
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+"Fallo al abrir el informe de error. Por favor, informe de forma manual "
+"utilizando este sitio web:"
+
 msgid "You have encountered a bug in JOSM"
 msgstr "Ha encontrado un error en JOSM"
 
@@ -7726,6 +7819,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr "Actualizar el conjunto de cambios desde el servidor de OSM"
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7998,9 +8094,6 @@ msgid "Please enter or paste an URL to retrieve changesets from the OSM API."
 msgstr ""
 "Introduzca o pegue una URL para recuperar modificaciones de la API de OSM."
 
-msgid "Examples"
-msgstr "Ejemplos"
-
 msgid ""
 "Note that changeset queries are currently always submitted to ''{0}'', "
 "regardless of the host, port and path of the URL entered below."
@@ -8975,7 +9068,7 @@ msgid "Download referrers (parent relations and ways)"
 msgstr "Descargar referentes (relaciones y vías padre)"
 
 msgid "Download from OSM"
-msgstr ""
+msgstr "Descargar de OSM"
 
 msgid "Data Sources and Types:"
 msgstr "Fuentes y tipos de datos:"
@@ -9023,18 +9116,22 @@ msgstr ""
 "servidor"
 
 msgid "Download from Overpass API"
+msgstr "Descargar de la API de Overpass"
+
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
+"Coloque su consulta de Overpass debajo o genere una usando el Asistente de "
+"consultas de Overpass Turbo"
 
 msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
+"Construir una consulta de Overpass usando la herramienta Asistente de "
+"consultas de Overpass Turbo"
 
 msgid "Query Wizard"
-msgstr ""
-
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
-msgstr ""
+msgstr "Asistente de consultas"
 
 msgid "Your saved queries:"
 msgstr ""
@@ -9043,7 +9140,7 @@ msgid "Show/hide Overpass snippet list"
 msgstr ""
 
 msgid "Overpass query:"
-msgstr ""
+msgstr "Consulta de Overpass"
 
 msgid ""
 "You entered an empty query. Do you want to download all data in this area "
@@ -9062,35 +9159,8 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr "historia"
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
-msgstr ""
+msgstr "Asistente de consultas de Overpass Turbo"
 
 msgid "Build query"
 msgstr "Generar consulta"
@@ -9115,6 +9185,8 @@ msgstr ""
 msgid ""
 "The <i>Query Wizard</i> tool will transform those to a valid overpass query."
 msgstr ""
+"La herramienta <i>Asistente de consultas</i> las transformará en una "
+"consulta válida de Overpass."
 
 msgid "For more detailed description see "
 msgstr ""
@@ -9213,6 +9285,33 @@ msgstr "Mapa deslizante"
 msgid "Tile Numbers"
 msgstr "Números de teselas"
 
+msgid "history"
+msgstr "historia"
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr "Navegador de ayuda de JOSM"
 
@@ -9373,6 +9472,12 @@ msgstr "Zoom a este nodo en la actual capa de datos"
 msgid "Open a history browser with the history of this node"
 msgstr "Abrir un navegador de históricos con el historial de este nodo"
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr "Vía {0}"
 
@@ -9382,6 +9487,9 @@ msgstr "Relación {0}"
 msgid "Object"
 msgstr "Objeto"
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr "Comentar Changeset"
 
@@ -9559,6 +9667,9 @@ msgstr ""
 "Marque \"Guardar\" para guardar la capa en el archivo especificado en la "
 "izquierda."
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "Introduzca un breve comentario sobre los cambios que se van a subir:"
 
@@ -10740,9 +10851,6 @@ msgid_plural "{0} tracks"
 msgstr[0] "{0} traza"
 msgstr[1] "{0} trazas"
 
-msgid "Description"
-msgstr "Descripción"
-
 msgid "Timespan"
 msgstr "Intervalo de tiempo"
 
@@ -14276,15 +14384,6 @@ msgstr "Subelmento preestablecido sin padre"
 msgid "Error parsing {0}: "
 msgstr "Error analizando {0}: "
 
-msgid "Search preset"
-msgstr "Buscar predefinido"
-
-msgid "Show preset search dialog"
-msgstr "Mostrar diálogo de búsqueda preestablecida"
-
-msgid "Search presets"
-msgstr "Buscar predefinidos"
-
 msgid "Presets"
 msgstr "Predefinidos"
 
@@ -14404,6 +14503,9 @@ msgstr "Todos los archivos (*.*)"
 msgid "Received error page:"
 msgstr "Se recibió una página de error"
 
+msgid "{0}... [please type its number]"
+msgstr "{0}... [por favor, teclee su número]"
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -14718,14 +14820,6 @@ msgstr "Modo desconocido {0}."
 msgid "get number of unread messages"
 msgstr "Obtener el número de mensajes no leídos"
 
-msgid "You have {0} unread message."
-msgid_plural "You have {0} unread messages."
-msgstr[0] "Tiene {0} mensaje no leído."
-msgstr[1] "Tiene {0} mensajes no leídos."
-
-msgid "Click here to see your inbox."
-msgstr "Haga clic aquí para ver la bandeja de entrada."
-
 msgid "Message notifier"
 msgstr "Mensaje notificador"
 
@@ -14793,10 +14887,6 @@ msgstr ""
 "Es compatible con la versión 0.6 del protocolo, mientras que el servidor "
 "dice que soporta {0} a {1}."
 
-msgid "Removed layer {0} because it is not allowed by the configured API."
-msgstr ""
-"Eliminada la capa {0} porque no está permitido por la configuración del API."
-
 msgid "Unexpected format of ID replied by the server. Got ''{0}''."
 msgstr ""
 "Formato de ID inesperado respondido por el servidor. Se obtuvo \"{0}\"."
@@ -16306,9 +16396,6 @@ msgstr ""
 "http://forum.openstreetmap.org/viewtopic.php?id = 25677).\n"
 "Actualmente tiene {1,number,#}MB de memoria asignada para JOSM"
 
-msgid "{0}... [please type its number]"
-msgstr "{0}... [por favor, teclee su número]"
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -16422,12 +16509,6 @@ msgid "Failed to load XML schema."
 msgstr "Error al cargar el esquema XML."
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-"Fallo al abrir el informe de error. Por favor, informe de forma manual "
-"utilizando este sitio web:"
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -17032,6 +17113,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr "no"
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr "Tipo de servicio"
 
@@ -19105,10 +19190,9 @@ msgid "Bay"
 msgstr "Bahía"
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
-"Un gran cuerpo de agua parcialmente cerrado por tierra pero con una gran "
-"boca."
 
 msgid "Shipping"
 msgstr "Navegación"
@@ -24979,6 +25063,9 @@ msgstr "Pistas de Waymarked: cabalgata"
 msgid "Waymarked Trails: Winter Sports"
 msgstr "Pistas de Waymarked: deportes de invierno"
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr "OSM Inspector: Geometría"
 
@@ -25046,6 +25133,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -25127,6 +25217,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -25148,9 +25253,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -25767,6 +25869,9 @@ msgstr "Berlin fotografía aérea 2015"
 msgid "Berlin aerial photograph 2016"
 msgstr "Berlín - Fotografías aéreas de 2016"
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr "Líneas de Deutsche Bahn VzG Noviembre 2013"
 
@@ -26213,6 +26318,9 @@ msgstr "Inspire Water Luxemburgo"
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Delta del Níger Oct 2012"
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr "Imágenes aéreas PDOK Beeldmateriaal.nl 25cm"
 
@@ -26687,6 +26795,9 @@ msgstr "NLSC Open Data WMTS"
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr "Imágenes de imagico.de: Monte Kilimanjaro 2016"
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr "MSR Mapas Topográficos"
 
@@ -28120,6 +28231,9 @@ msgstr "relation sin type"
 msgid "{0} relation without {0} tag"
 msgstr "relación {0} sin etiqueta {0}"
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr "religion sin denomination"
 
@@ -28352,10 +28466,6 @@ msgid "Customization of public public transport stops."
 msgstr "Personalización de paradas de transporte público."
 
 msgid ""
-"Creating and handling address nodes and buildings within Czech Republic."
-msgstr "Creación y manipulación de números de policía en la República Checa."
-
-msgid ""
 "Allows to import various file formats into JOSM directly. Currently "
 "supported: TangoGPS, Garmin Trainings Center TCX."
 msgstr ""
@@ -28419,9 +28529,6 @@ msgstr ""
 "Hable con los usuarios más cercanos que estén también editando el mapa. Será "
 "notificado cuando alguien se aproxime a su área de edición."
 
-msgid "Allows you to view a GeoJSON file as a layer."
-msgstr "Permite visualizar un archivo GeoJSON como una capa."
-
 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."
@@ -28887,13 +28994,6 @@ msgstr ""
 "sincroniza un vídeo georreferenciado ajustándolo a su posición en la traza "
 "GPS. Útil para identificar objetos visibles."
 
-msgid ""
-"Supports downloading tiled, scanned maps from walking-papers.org. This "
-"plugin is still under early development and may be buggy."
-msgstr ""
-"Soporta la descarga de teselas, mapas digitalizados de walking-papers.org. "
-"Este componente aún está en un desarrollo temprano y puede ser inestable."
-
 msgid "Easy downloading along a long set of interconnected ways"
 msgstr ""
 "Permite descargar sucesivamente las diferentes vías interconectadas que "
@@ -29549,15 +29649,15 @@ msgstr ""
 "Muestra la capa donde se visualiza los objetos de mapa detectados por "
 "Mapillary"
 
+msgid "Start Mapillary layer"
+msgstr "Iniciar capa de Mapillary"
+
 msgid "Mapillary"
 msgstr "Mapillary"
 
 msgid "Create Mapillary layer"
 msgstr "Crear capa de Mapillary"
 
-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"
 
@@ -31035,6 +31135,162 @@ msgstr[1] "Hay {0} edificios con conflictos de direcciones"
 msgid "No address nodes inside buildings found"
 msgstr "Sin nodos de dirección dentro de los edificios encontrados"
 
+msgid "Auto sourcing"
+msgstr "Digitalización automática"
+
+msgid ""
+"Please enable at least two WMS layers in the cadastre-fr plugin "
+"configuration.\n"
+"Layers ''Building'' and ''Parcel'' added by default."
+msgstr ""
+"Por favor permitir al menos dos capas WMS en la configuración del "
+"complemento catastro-fr.\n"
+"Las capas \"Edificios\" y \"Parcelas\" fueron añadidas por omisión."
+
+msgid ""
+"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+msgstr ""
+"Advertencia: fallo al establecer la opción de diálogo siempre visible. La "
+"excepción fue: {0}"
+
+msgid ""
+"To enable the cadastre WMS plugin, change\n"
+"the current projection to one of the cadastre\n"
+"projections and retry"
+msgstr ""
+"Para habilitar el plugin de catastro WMS, cambie la\n"
+"proyección actual a una de proyección catastral\n"
+"y reintente"
+
+msgid "Change the current projection"
+msgstr "Cambiar la posición actual"
+
+msgid "Extract commune boundary"
+msgstr "Extraer los límites de la comuna"
+
+msgid "Only on vectorized layers"
+msgstr "Únicamente sobre capas vectorizadas"
+
+msgid "Cancel current grab"
+msgstr "Cancelar la sujeción actual"
+
+msgid "Cancel current grab (only vector images)"
+msgstr "Cancelar la sujeción actual (solo imágenes de vectores)"
+
+msgid "Cadastre grab"
+msgstr "Sujetar catastro"
+
+msgid "Download Image from French Cadastre WMS"
+msgstr "Descargando imágenes desde el servidor francés WMS del Catastro"
+
+msgid "Cadastre: {0}"
+msgstr "Catastro: {0}"
+
+msgid "Georeference an image"
+msgstr "Georreferencia una imagen"
+
+msgid "Grab non-georeferenced image"
+msgstr "Obtener imagen no georeferenciada"
+
+msgid "Georeferencing interrupted"
+msgstr "Georeferencia interrumpida"
+
+msgid ""
+"This image contains georeference data.\n"
+"Do you want to use them ?"
+msgstr ""
+"Esta imagen contiene información de georeferencia.\n"
+"Desea usarla?"
+
+msgid "Load layer from cache"
+msgstr "Cargar la capa desde la memoria rápida"
+
+msgid "Load location from cache (only if cache is enabled)"
+msgstr "Cargar localizaciones desde cache (solo si la cache está activada)"
+
+msgid "{0} not allowed with the current projection"
+msgstr "No se permite {0} con la proyección actual"
+
+msgid ""
+"Cannot load cache {0} which is not compatible with current projection zone"
+msgstr ""
+"No se puede cargar el caché {0} que es incompatible con la proyección actual "
+"de la zona"
+
+msgid ""
+"Selected file {0} is not a cache file from this plugin (invalid extension)"
+msgstr ""
+"El archivo seleccionado {0} no es un archivo de caché de este componente "
+"(extensión inválida)"
+
+msgid "The location {0} is already on screen. Cache not loaded."
+msgstr "El lugar {0} ya está en la pantalla. No se carga caché."
+
+msgid "(optional)"
+msgstr "(opcional)"
+
+msgid "Change location"
+msgstr "Cambiar localización"
+
+msgid "Set a new location for the next request"
+msgstr "Establecer una nueva localización para la nueva solicitud"
+
+msgid "Add a new municipality layer"
+msgstr "Adicionar una nueva capa de municipalidad"
+
+msgid "Commune"
+msgstr "Comuna"
+
+msgid ""
+"<html>Enter the town,village or city name.<br>Use the syntax and punctuation "
+"known by www.cadastre.gouv.fr .</html>"
+msgstr ""
+"<html>Introduzca el nombre de la población.<br>Utilice la sintaxis y la "
+"puntuación conocida por www.cadastre.gouv.fr.</html>"
+
+msgid "Departement"
+msgstr "Departamento"
+
+msgid "<html>Departement number (optional)</html>"
+msgstr "<html>Número de Departamento (opcional)</html>"
+
+msgid "Add new layer"
+msgstr "Añadir nueva capa"
+
+msgid "Open Cadastre Preferences"
+msgstr "Abrir las Preferencias de Catastro"
+
+msgid "Refine georeferencing"
+msgstr "Refinar el georreferenciamiento"
+
+msgid "Improve georeferencing (only raster images)"
+msgstr "Mejorar el georreferenciamiento (solo imágenes raster)"
+
+msgid "Reset cookie"
+msgstr "Reinicializar cookie"
+
+msgid "Get a new cookie (session timeout)"
+msgstr "Obtener nueva cookie (sesión caducada)"
+
+msgid "Save image as..."
+msgstr "Guardar imagen como..."
+
+msgid "PNG files (*.png)"
+msgstr "Archivos PNG (*.png)"
+
+msgid "GeoTiff files (*.tif)"
+msgstr "Archivos GeoTiff (*.tif)"
+
+msgid "Export image (only raster images)"
+msgstr "Exportar imagen (solamente imágenes raster)"
+
+msgid ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+"Más de una capa WMS presente\n"
+"Seleccione primero una de ellas y reinténtelo"
+
 msgid "on polygon"
 msgstr "en polígono"
 
@@ -31050,96 +31306,84 @@ msgstr "Siguiente Número"
 msgid "Enter addresses"
 msgstr "Ingresar direcciones"
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
+msgstr "Ajustar WMS"
+
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
-"Se encontró el lugar \"{0}\" en el caché.\n"
-"Invocar primero el caché?\n"
-"(No = nuevo caché)"
+"Ajustar la posición de la capa WMS (guardado para imágenes raster únicamente)"
 
-msgid "Select Feuille"
-msgstr "Seleccionar Feuille"
+msgid "Add \"source=...\" to elements?"
+msgstr "¿Añadir etiqueta sobre la fuente a los elementos (source=...)?"
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Download from Cadastre"
 msgstr ""
-"Error al cargar el archivo.\n"
-"Probablemente esté producido por una versión antigua de la caché del archivo."
 
-msgid "Lambert Zone {0} cache file (.{0})"
-msgstr "Zona Lambert {0} archivo de caché (.{0})"
+msgid "Objects:"
+msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
-msgstr "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Select to download buildings in the selected download area."
+msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
-msgstr "Archivo de caché Guadeloupe Fort-Marigot (.UTM1)"
+msgid "address"
+msgstr "dirección"
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
-msgstr "Archivo de caché Guadeloupe Ste-Anne (.UTM2)"
+msgid "Select to download addresses in the selected download area."
+msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
-msgstr "Archivo de caché Martinique Fort Desaix(.UTM3)"
+msgid "symbol"
+msgstr "símbolo"
 
-msgid "Reunion RGR92 cache file (.UTM4)"
-msgstr "Archivo de caché Reunion RGR92 (.UTM4)"
+msgid "Select to download symbols in the selected download area."
+msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
-msgstr "CadastreGrabber: URL Ilegal."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "parcel"
+msgstr "parcela"
+
+msgid "Select to download cadastral parcels in the selected download area."
 msgstr ""
-"No se puede abrir una nueva sesión de cliente.\n"
-"Servidor en mantenimiento o temporalmente sobrecargado."
+
+msgid "parcel number"
+msgstr "parcela"
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
-"No se encontró o no está disponible\n"
-" el barrio o la ciudad {0}, o se canceló\n"
-"la acción"
 
-msgid "Choose from..."
-msgstr "Elegir desde..."
+msgid "section"
+msgstr "sección"
 
-msgid "Select commune"
-msgstr "Seleccionar comuna"
+msgid "Select to download cadastral sections in the selected download area."
+msgstr ""
 
-msgid "Auto sourcing"
-msgstr "Digitalización automática"
+msgid "locality"
+msgstr "localidad"
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
 msgstr ""
-"Por favor permitir al menos dos capas WMS en la configuración del "
-"complemento catastro-fr.\n"
-"Las capas \"Edificios\" y \"Parcelas\" fueron añadidas por omisión."
+
+msgid "commune"
+msgstr "comuna"
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
-"Advertencia: fallo al establecer la opción de diálogo siempre visible. La "
-"excepción fue: {0}"
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
-"Para habilitar el plugin de catastro WMS, cambie la\n"
-"proyección actual a una de proyección catastral\n"
-"y reintente"
 
-msgid "Change the current projection"
-msgstr "Cambiar la posición actual"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
+msgstr ""
 
 msgid "Replace original background by JOSM background color."
 msgstr ""
@@ -31192,27 +31436,6 @@ msgstr "medio"
 msgid "low"
 msgstr "profundidad"
 
-msgid "symbol"
-msgstr "símbolo"
-
-msgid "parcel"
-msgstr "parcela"
-
-msgid "parcel number"
-msgstr "parcela"
-
-msgid "address"
-msgstr "dirección"
-
-msgid "locality"
-msgstr "localidad"
-
-msgid "section"
-msgstr "sección"
-
-msgid "commune"
-msgstr "comuna"
-
 msgid "Enable automatic caching."
 msgstr "Activar caché automático"
 
@@ -31376,8 +31599,66 @@ msgstr "Habilitar para emplear la etiqueta \"add:street\" en los nodos."
 msgid "Unexpected file extension. {0}"
 msgstr "Extensión de archivo inesperada. {0}"
 
-msgid "Add \"source=...\" to elements?"
-msgstr "¿Añadir etiqueta sobre la fuente a los elementos (source=...)?"
+msgid ""
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
+msgstr ""
+"Se encontró el lugar \"{0}\" en el caché.\n"
+"Invocar primero el caché?\n"
+"(No = nuevo caché)"
+
+msgid "Select Feuille"
+msgstr "Seleccionar Feuille"
+
+msgid ""
+"Error loading file.\n"
+"Probably an old version of the cache file."
+msgstr ""
+"Error al cargar el archivo.\n"
+"Probablemente esté producido por una versión antigua de la caché del archivo."
+
+msgid "Lambert Zone {0} cache file (.{0})"
+msgstr "Zona Lambert {0} archivo de caché (.{0})"
+
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgstr "Lambert CC9 Zone {0} cache file (.CC{0})"
+
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgstr "Archivo de caché Guadeloupe Fort-Marigot (.UTM1)"
+
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgstr "Archivo de caché Guadeloupe Ste-Anne (.UTM2)"
+
+msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgstr "Archivo de caché Martinique Fort Desaix(.UTM3)"
+
+msgid "Reunion RGR92 cache file (.UTM4)"
+msgstr "Archivo de caché Reunion RGR92 (.UTM4)"
+
+msgid "CadastreGrabber: Illegal url."
+msgstr "CadastreGrabber: URL Ilegal."
+
+msgid ""
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
+msgstr ""
+"No se puede abrir una nueva sesión de cliente.\n"
+"Servidor en mantenimiento o temporalmente sobrecargado."
+
+msgid ""
+"Town/city {0} not found or not available\n"
+"or action canceled"
+msgstr ""
+"No se encontró o no está disponible\n"
+" el barrio o la ciudad {0}, o se canceló\n"
+"la acción"
+
+msgid "Choose from..."
+msgstr "Elegir desde..."
+
+msgid "Select commune"
+msgstr "Seleccionar comuna"
 
 msgid "Downloading {0}"
 msgstr "Descargando {0}"
@@ -31429,125 +31710,6 @@ msgstr ""
 "Por favor use la otra entrada del menú para georeferenciar una \"Imagen de "
 "Plan\""
 
-msgid "Extract commune boundary"
-msgstr "Extraer los límites de la comuna"
-
-msgid "Only on vectorized layers"
-msgstr "Únicamente sobre capas vectorizadas"
-
-msgid "Cancel current grab"
-msgstr "Cancelar la sujeción actual"
-
-msgid "Cancel current grab (only vector images)"
-msgstr "Cancelar la sujeción actual (solo imágenes de vectores)"
-
-msgid "Cadastre grab"
-msgstr "Sujetar catastro"
-
-msgid "Download Image from French Cadastre WMS"
-msgstr "Descargando imágenes desde el servidor francés WMS del Catastro"
-
-msgid "Cadastre: {0}"
-msgstr "Catastro: {0}"
-
-msgid "Georeference an image"
-msgstr "Georreferencia una imagen"
-
-msgid "Grab non-georeferenced image"
-msgstr "Obtener imagen no georeferenciada"
-
-msgid "Georeferencing interrupted"
-msgstr "Georeferencia interrumpida"
-
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
-msgstr ""
-"Esta imagen contiene información de georeferencia.\n"
-"Desea usarla?"
-
-msgid "Load layer from cache"
-msgstr "Cargar la capa desde la memoria rápida"
-
-msgid "Load location from cache (only if cache is enabled)"
-msgstr "Cargar localizaciones desde cache (solo si la cache está activada)"
-
-msgid "{0} not allowed with the current projection"
-msgstr "No se permite {0} con la proyección actual"
-
-msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
-msgstr ""
-"No se puede cargar el caché {0} que es incompatible con la proyección actual "
-"de la zona"
-
-msgid ""
-"Selected file {0} is not a cache file from this plugin (invalid extension)"
-msgstr ""
-"El archivo seleccionado {0} no es un archivo de caché de este componente "
-"(extensión inválida)"
-
-msgid "The location {0} is already on screen. Cache not loaded."
-msgstr "El lugar {0} ya está en la pantalla. No se carga caché."
-
-msgid "(optional)"
-msgstr "(opcional)"
-
-msgid "Change location"
-msgstr "Cambiar localización"
-
-msgid "Set a new location for the next request"
-msgstr "Establecer una nueva localización para la nueva solicitud"
-
-msgid "Add a new municipality layer"
-msgstr "Adicionar una nueva capa de municipalidad"
-
-msgid "Commune"
-msgstr "Comuna"
-
-msgid ""
-"<html>Enter the town,village or city name.<br>Use the syntax and punctuation "
-"known by www.cadastre.gouv.fr .</html>"
-msgstr ""
-"<html>Introduzca el nombre de la población.<br>Utilice la sintaxis y la "
-"puntuación conocida por www.cadastre.gouv.fr.</html>"
-
-msgid "Departement"
-msgstr "Departamento"
-
-msgid "<html>Departement number (optional)</html>"
-msgstr "<html>Número de Departamento (opcional)</html>"
-
-msgid "Add new layer"
-msgstr "Añadir nueva capa"
-
-msgid "Open Cadastre Preferences"
-msgstr "Abrir las Preferencias de Catastro"
-
-msgid "Refine georeferencing"
-msgstr "Refinar el georreferenciamiento"
-
-msgid "Improve georeferencing (only raster images)"
-msgstr "Mejorar el georreferenciamiento (solo imágenes raster)"
-
-msgid "Reset cookie"
-msgstr "Reinicializar cookie"
-
-msgid "Get a new cookie (session timeout)"
-msgstr "Obtener nueva cookie (sesión caducada)"
-
-msgid "Save image as..."
-msgstr "Guardar imagen como..."
-
-msgid "PNG files (*.png)"
-msgstr "Archivos PNG (*.png)"
-
-msgid "GeoTiff files (*.tif)"
-msgstr "Archivos GeoTiff (*.tif)"
-
-msgid "Export image (only raster images)"
-msgstr "Exportar imagen (solamente imágenes raster)"
-
 msgid ""
 "Click first corner for image cropping\n"
 "(two points required)"
@@ -31601,20 +31763,6 @@ msgstr "Seleccione la segunda esquina para esquilar(crop)"
 msgid "Click second Lambert crosspiece for georeferencing"
 msgstr "Haga click en la segunda Pieza cruzada Lambert para Georeferenciar"
 
-msgid "Adjust WMS"
-msgstr "Ajustar WMS"
-
-msgid "Adjust the position of the WMS layer (saved for raster images only)"
-msgstr ""
-"Ajustar la posición de la capa WMS (guardado para imágenes raster únicamente)"
-
-msgid ""
-"More than one WMS layer present\n"
-"Select one of them first, then retry"
-msgstr ""
-"Más de una capa WMS presente\n"
-"Seleccione primero una de ellas y reinténtelo"
-
 msgid "Reset offset"
 msgstr "Reiniciar rectificación"
 
@@ -32082,21 +32230,6 @@ msgstr ""
 "opción está seleccionada no habrá ninguna indicación de que algo se ha "
 "concluido, y no hay forma de cancelar la descarga."
 
-msgid "Split area"
-msgstr "Dividir área"
-
-msgid "Splits an area by an untagged way."
-msgstr "Dividir una área mediante una vía sin etiquetar"
-
-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 ""
-"El área seleccionada no puede dividirse porque es miembro de alguna "
-"relación.\n"
-"Elimine el área de la relación antes de dividirlo."
-
 msgid "TangoGPS Files (*.log)"
 msgstr "Archivos TangoGPS (*.log)"
 
@@ -32128,7 +32261,7 @@ msgid "Please select 1 or more ways to download along"
 msgstr "Por favor seleccione una o más vías para descargar"
 
 msgid "Download from OSM along selected ways"
-msgstr "Descargar desde OSME a lo largo de las vías seleccionadas"
+msgstr "Descargar de OSM a lo largo de las vías seleccionadas"
 
 msgid "{0} intermediate nodes to download."
 msgstr "{0} nodos intermedios para descargar."
@@ -38370,29 +38503,6 @@ msgstr "ciclo"
 msgid "mute"
 msgstr "silenciar"
 
-msgid "Walking Papers Scanned Map"
-msgstr "Mapas Escaneados de Walking Papers"
-
-msgid ""
-"Display a map that was previously scanned and uploaded to walking-papers.org"
-msgstr ""
-"Mostrar un mapa que previamente fue escaneado y subido a walking-papers.org"
-
-msgid ""
-"Enter a walking-papers.org URL or ID (the bit after the ?id= in the URL)"
-msgstr ""
-"Introduce una URL de walking-papers.org o un ID (justo después de ?id= en la "
-"URL)"
-
-msgid "Could not read information from walking-papers.org the id \"{0}\""
-msgstr "No se pudo leer la información de walking-papers.org el id \"{0}\""
-
-msgid "Walking Papers: {0}"
-msgstr "Walking Papers: {0}"
-
-msgid "Walking Papers layer ({0}) in zoom {1}"
-msgstr "Capa Walking Papers ({0}) en zoom {1}"
-
 msgid "Way Download"
 msgstr "Descargar vía"
 
@@ -38587,6 +38697,26 @@ msgstr ""
 "Añade una etiqueta ''wikipedia'' correspondiente a este artículo para los "
 "objetos seleccionados"
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "El Ultimate WMS Super-Velocidad Turbo Desafío II"
 
diff --git a/i18n/po/et.po b/i18n/po/et.po
index 287ca7c..bda5333 100644
--- a/i18n/po/et.po
+++ b/i18n/po/et.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
 "PO-Revision-Date: 2017-02-23 08:40+0000\n"
 "Last-Translator: Margus Värton <margus at dakar.ee>\n"
 "Language-Team: Estonian <et 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: 2017-09-03 04:41+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:39+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: et\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -396,6 +396,45 @@ msgstr "Kustuta"
 msgid "Delete selected objects."
 msgstr "Kustuta valitud objektid."
 
+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 ""
+"Oled kustutamas objekte, mis on väljaspool allalaaditud ala.<br>See võib "
+"põhjustada probleeme, sest teised objektid (mida sa ei näe) võivad neid "
+"kasutada.<br>Kas soovid tõesti kustutada?"
+
+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 ""
+"Hakkad kustutama lõpetamata objekte.<br>See põhjustab probleeme, sest sa ei "
+"näe tegelikku objekti.<br>Kas soovid tõesti kustutada?"
+
+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] ""
+"Oled kustutamas {0} relatsiooni: {1}<br/>See toiming on harva vajalik ja "
+"seda ei saa kergesti tagasi võtta peale serverisse üleslaadimist.<br/>Kas "
+"oled kindel, et soovid kustutada?"
+msgstr[1] ""
+"Oled kustutamas {0} relatsiooni: {1}<br/>See toiming on harva vajalik ja "
+"seda ei saa kergesti tagasi võtta peale serverisse üleslaadimist.<br/>Kas "
+"oled kindel, et soovid kustutada?"
+
+msgid "Delete relation?"
+msgstr "Kas kustutada relatsioon?"
+
 msgid "Delete Layer"
 msgstr "Kustuta kiht"
 
@@ -1335,32 +1374,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-msgid "You must select two or more nodes to split a circular way."
-msgstr ""
-"Ringikujulise joone poolitamiseks on vaja valida vähemalt kaks sõlme."
-
-msgid ""
-"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
-"middle of the way.)"
-msgstr ""
-"Joont ei saa valitud sõlmede kohalt poolitada (Vali sõlmed, mis asuvad tee "
-"keskel)."
+msgid "Search preset"
+msgstr "Otsi eelseadetest"
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2800,45 +2822,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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 ""
-"Oled kustutamas objekte, mis on väljaspool allalaaditud ala.<br>See võib "
-"põhjustada probleeme, sest teised objektid (mida sa ei näe) võivad neid "
-"kasutada.<br>Kas soovid tõesti kustutada?"
-
-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 ""
-"Hakkad kustutama lõpetamata objekte.<br>See põhjustab probleeme, sest sa ei "
-"näe tegelikku objekti.<br>Kas soovid tõesti kustutada?"
-
-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] ""
-"Oled kustutamas {0} relatsiooni: {1}<br/>See toiming on harva vajalik ja "
-"seda ei saa kergesti tagasi võtta peale serverisse üleslaadimist.<br/>Kas "
-"oled kindel, et soovid kustutada?"
-msgstr[1] ""
-"Oled kustutamas {0} relatsiooni: {1}<br/>See toiming on harva vajalik ja "
-"seda ei saa kergesti tagasi võtta peale serverisse üleslaadimist.<br/>Kas "
-"oled kindel, et soovid kustutada?"
-
-msgid "Delete relation?"
-msgstr "Kas kustutada relatsioon?"
-
 msgid "Move {0} node"
 msgid_plural "Move {0} nodes"
 msgstr[0] "Liiguta {0} sõlme"
@@ -2870,6 +2853,32 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr "Jada: {0}"
 
+msgid "You must select two or more nodes to split a circular way."
+msgstr ""
+"Ringikujulise joone poolitamiseks on vaja valida vähemalt kaks sõlme."
+
+msgid ""
+"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
+"middle of the way.)"
+msgstr ""
+"Joont ei saa valitud sõlmede kohalt poolitada (Vali sõlmed, mis asuvad tee "
+"keskel)."
+
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2989,6 +2998,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3096,6 +3117,9 @@ msgstr "Briti mõõdustik"
 msgid "Nautical Mile"
 msgstr "Meremiilid"
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr "TUNDMATU"
 
@@ -3139,6 +3163,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3775,6 +3802,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4817,9 +4898,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr "Aegunud Java versioon"
 
@@ -4869,6 +4947,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr "Lähtestan OSM API"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4890,9 +4971,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -5093,6 +5171,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5345,6 +5431,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7137,6 +7227,9 @@ msgstr "Eemalda muutuskogum lokaalsest vahemälust üksikasjade vaate paneelis"
 msgid "Update the changeset from the OSM server"
 msgstr "Uuenda muutuskogum OSM serverist"
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7369,9 +7462,6 @@ 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."
@@ -8314,15 +8404,15 @@ msgstr "Allalaetav ala paras, suurus serverile tõenäoliselt sobiv"
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8351,33 +8441,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr "ajalugu"
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8501,6 +8564,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr "Pildi numbrid"
 
+msgid "history"
+msgstr "ajalugu"
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr "JOSM abiinfo lehitseja"
 
@@ -8634,6 +8724,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8643,6 +8739,9 @@ msgstr ""
 msgid "Object"
 msgstr "Objekt"
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8790,6 +8889,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "Kommenteeri lühidalt üleslaaditavaid muudatusi."
 
@@ -9859,9 +9961,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr "Ajavahemik"
 
@@ -13041,15 +13140,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr "Viga sõelumisel {0}: "
 
-msgid "Search preset"
-msgstr "Otsi eelseadetest"
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr "Eelseaded"
 
@@ -13155,6 +13245,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13408,14 +13501,6 @@ 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 ""
 
@@ -13479,9 +13564,6 @@ msgid ""
 "{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 ""
 
@@ -14736,9 +14818,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14845,10 +14924,6 @@ msgid "Failed to load XML schema."
 msgstr "XML-skeemi laadimine ebaõnnestus."
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15438,6 +15513,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr "puudub"
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17475,7 +17554,8 @@ msgid "Bay"
 msgstr "Laht"
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23301,6 +23381,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23359,6 +23442,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23440,6 +23526,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23461,9 +23562,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -24058,6 +24156,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24469,6 +24570,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24912,6 +25016,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -26115,6 +26222,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26295,10 +26405,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26348,9 +26454,6 @@ msgstr ""
 "Vestle kasutajatega, kes kaarti läheduses muudavad, teavitus, kui keegi "
 "tuleb lähedale."
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26701,11 +26804,6 @@ msgid ""
 "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 ""
 
@@ -27316,13 +27414,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28629,6 +28727,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 "Lisa uus kiht"
+
+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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28644,77 +28880,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
+msgstr "aadress"
+
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "symbol"
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download water bodies in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28765,27 +29006,6 @@ msgstr ""
 msgid "low"
 msgstr "madal"
 
-msgid "symbol"
-msgstr ""
-
-msgid "parcel"
-msgstr ""
-
-msgid "parcel number"
-msgstr ""
-
-msgid "address"
-msgstr "aadress"
-
-msgid "locality"
-msgstr ""
-
-msgid "section"
-msgstr ""
-
-msgid "commune"
-msgstr ""
-
 msgid "Enable automatic caching."
 msgstr ""
 
@@ -28927,160 +29147,97 @@ msgstr ""
 msgid "Unexpected file extension. {0}"
 msgstr ""
 
-msgid "Add \"source=...\" to elements?"
-msgstr ""
-
-msgid "Downloading {0}"
-msgstr "Laadin alla {0}"
-
-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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
-msgstr ""
+msgid "Downloading {0}"
+msgstr "Laadin alla {0}"
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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 "Lisa uus kiht"
-
-msgid "Open Cadastre Preferences"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -29130,17 +29287,6 @@ 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 ""
 
@@ -29577,18 +29723,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35352,26 +35486,6 @@ msgstr "kordus"
 msgid "mute"
 msgstr "vaigista"
 
-msgid "Walking Papers Scanned Map"
-msgstr ""
-
-msgid ""
-"Display a map that was previously scanned and uploaded to walking-papers.org"
-msgstr "Kuva eelnevalt skaneeritud ja walking-papers.org laaditud kaart"
-
-msgid ""
-"Enter a walking-papers.org URL or ID (the bit after the ?id= in the URL)"
-msgstr "Sisesta walking-papers.org URL või ID (URLis ?id= järel olev osa)"
-
-msgid "Could not read information from walking-papers.org the id \"{0}\""
-msgstr ""
-
-msgid "Walking Papers: {0}"
-msgstr "Walking Papers: {0}"
-
-msgid "Walking Papers layer ({0}) in zoom {1}"
-msgstr ""
-
 msgid "Way Download"
 msgstr "Tee allalaadimine"
 
@@ -35543,6 +35657,26 @@ msgid ""
 msgstr ""
 "Lisab sildi sellele artiklile vastava \"wikipedia\" sildi valitud objektidele"
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "The Ultimate WMS Super-speed Turbo Challenge II"
 
diff --git a/i18n/po/eu.po b/i18n/po/eu.po
index f8368f8..37d720a 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+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: 2017-09-03 04:36+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:34+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: eu\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -395,6 +395,39 @@ msgstr "Ezabatu"
 msgid "Delete selected objects."
 msgstr "Aukeratutako objektuak ezabatu."
 
+msgid "Delete confirmation"
+msgstr "Konfirmazioa ezabatu"
+
+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 ""
+"Jaitsi duzun ingurunetik kanpo nodoak ezabatzeko zorian zaude.<br>Honek "
+"gatazkak sor ditzake beste objektu batzuk (ikusten ez dituzunak) erabil "
+"ditzaketelako.<br>Ezabatzea nahi al dituzu?"
+
+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 ""
+"Osatu gabeko objektuak ezabatzera zoaz.<br>Horrek arazoak sortuko ditu ez "
+"duzulako objektua bistan.<br>Seguru ezabatu nahi dituzula?"
+
+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 "Delete Layer"
 msgstr ""
 
@@ -1342,32 +1375,15 @@ msgstr " [id-a: {0}]"
 msgid "Segment {0}: {1}"
 msgstr ""
 
-msgid "You must select two or more nodes to split a circular way."
-msgstr ""
-"Bide biribil bat bereizteko bi nodo, gutxienez, aukeratu behar dituzu."
-
-msgid ""
-"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
-"middle of the way.)"
+msgid "Search preset"
 msgstr ""
-"Bidea ezin da aukeratutako adabegietan banatu. (Aholkua: Bide erdiko "
-"adabegiak aukeratu)."
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2821,39 +2837,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] "Ezabatu {0} erlazioa"
 msgstr[1] "Ezabatu {0} erlazioak"
 
-msgid "Delete confirmation"
-msgstr "Konfirmazioa ezabatu"
-
-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 ""
-"Jaitsi duzun ingurunetik kanpo nodoak ezabatzeko zorian zaude.<br>Honek "
-"gatazkak sor ditzake beste objektu batzuk (ikusten ez dituzunak) erabil "
-"ditzaketelako.<br>Ezabatzea nahi al dituzu?"
-
-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 ""
-"Osatu gabeko objektuak ezabatzera zoaz.<br>Horrek arazoak sortuko ditu ez "
-"duzulako objektua bistan.<br>Seguru ezabatu nahi dituzula?"
-
-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] "Mugitu {0} nodoa"
@@ -2885,6 +2868,32 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+msgid "You must select two or more nodes to split a circular way."
+msgstr ""
+"Bide biribil bat bereizteko bi nodo, gutxienez, aukeratu behar dituzu."
+
+msgid ""
+"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
+"middle of the way.)"
+msgstr ""
+"Bidea ezin da aukeratutako adabegietan banatu. (Aholkua: Bide erdiko "
+"adabegiak aukeratu)."
+
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -3004,6 +3013,18 @@ msgstr "Latitudearen ''{0}'' balio ilegalak"
 msgid "Illegal longitude value ''{0}''"
 msgstr "Longitudearen ''{0}'' balio ilegalak"
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3119,6 +3140,10 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+"Balio ez-hutsa espero genuen, \"{0}\" parametroan, \"{1}\" jaso dugu."
+
 msgid "UNKNOWN"
 msgstr "EZEZAGUNA"
 
@@ -3162,6 +3187,9 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3820,6 +3848,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr "Erakutsi laguntza hau"
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr "Adibideak"
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4879,10 +4961,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-"Balio ez-hutsa espero genuen, \"{0}\" parametroan, \"{1}\" jaso dugu."
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4928,6 +5006,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr "OSM API hasieratzen"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4949,9 +5030,6 @@ msgstr "erabilera"
 msgid "options"
 msgstr "aukerak"
 
-msgid "Show this help"
-msgstr "Erakutsi laguntza hau"
-
 msgid "Standard unix geometry argument"
 msgstr "Unixeko geometria argumento estandarra"
 
@@ -5161,6 +5239,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5417,6 +5503,10 @@ msgstr "Mesedez, sartu koadroaren indizea"
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr "Oraingo balioa ez da koadro helbide zuzena zoom maila honetarako"
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7224,6 +7314,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7446,9 +7539,6 @@ msgstr "URL-a: "
 msgid "Please enter or paste an URL to retrieve changesets from the OSM API."
 msgstr ""
 
-msgid "Examples"
-msgstr "Adibideak"
-
 msgid ""
 "Note that changeset queries are currently always submitted to ''{0}'', "
 "regardless of the host, port and path of the URL entered below."
@@ -8376,15 +8466,15 @@ msgstr "Deskargatzeko azalera egokia, ziurrenez zerbitzariak onartuko du"
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8413,33 +8503,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr "historia"
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8563,6 +8626,33 @@ msgstr "Mapa irristakorra"
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr "historia"
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8696,6 +8786,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8705,6 +8801,9 @@ msgstr ""
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8849,6 +8948,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "Egin iruzkin labur bat igotzen ari zaren aldaketentzako:"
 
@@ -9889,9 +9991,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -13030,15 +13129,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr "Aurrezarpenak"
 
@@ -13144,6 +13234,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13393,14 +13486,6 @@ 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 ""
 
@@ -13464,9 +13549,6 @@ msgid ""
 "{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 ""
 
@@ -14698,9 +14780,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14797,10 +14876,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15393,6 +15468,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17430,7 +17509,8 @@ msgid "Bay"
 msgstr "Badia"
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23256,6 +23336,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23314,6 +23397,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23395,6 +23481,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23416,9 +23517,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -24013,6 +24111,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24424,6 +24525,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24867,6 +24971,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -26070,6 +26177,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26251,10 +26361,6 @@ msgid "Customization of public public transport stops."
 msgstr ""
 
 msgid ""
-"Creating and handling address nodes and buildings within Czech Republic."
-msgstr "Sortu eta kudeatu helbide-nodoak eta eraikinak Txekiar Errepublikan"
-
-msgid ""
 "Allows to import various file formats into JOSM directly. Currently "
 "supported: TangoGPS, Garmin Trainings Center TCX."
 msgstr ""
@@ -26306,9 +26412,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26682,14 +26785,6 @@ msgstr ""
 "erreferentziatutako bideo batekin linkatu eta sinkronizatzen du, horren "
 "bidez ikusgai diren objektu batzuk identifikatzeko"
 
-msgid ""
-"Supports downloading tiled, scanned maps from walking-papers.org. This "
-"plugin is still under early development and may be buggy."
-msgstr ""
-"\"Tile\"-en deskarga eta walking-papers.org-en digitalizatutako mapak "
-"onartzen ditu. Gehigarri hau lehen-garapenetan dago eta erroreak izan "
-"ditzake."
-
 msgid "Easy downloading along a long set of interconnected ways"
 msgstr "Elkar-konektaturiko bide luzeen deskarga erraza"
 
@@ -27302,13 +27397,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28605,6 +28700,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28620,77 +28853,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28741,27 +28979,6 @@ msgstr ""
 msgid "low"
 msgstr "baxua"
 
-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 ""
 
@@ -28902,160 +29119,97 @@ 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 "Eraikinak sortu"
-
 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
-msgstr ""
+msgid "Create buildings"
+msgstr "Eraikinak sortu"
 
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -29105,17 +29259,6 @@ 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 ""
 
@@ -29552,18 +29695,6 @@ msgid ""
 "to cancel the download."
 msgstr ""
 
-msgid "Split area"
-msgstr "Azalera banandu"
-
-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 ""
 
@@ -35314,29 +35445,6 @@ msgstr "begizta"
 msgid "mute"
 msgstr ""
 
-msgid "Walking Papers Scanned Map"
-msgstr ""
-
-msgid ""
-"Display a map that was previously scanned and uploaded to walking-papers.org"
-msgstr "Lehenago eskaneatu eta walking-papers.org-ra igo den mapa erakutsi"
-
-msgid ""
-"Enter a walking-papers.org URL or ID (the bit after the ?id= in the URL)"
-msgstr ""
-"Sartu walking-papers.org-ko URL edota ID bat (URLan ageri dena ?id= horren "
-"ostean)"
-
-msgid "Could not read information from walking-papers.org the id \"{0}\""
-msgstr ""
-"Ezin izan da walking-papers.org-ko \"{0}\" ID-aren informazioa irakurri"
-
-msgid "Walking Papers: {0}"
-msgstr "Walking Papers: {0}"
-
-msgid "Walking Papers layer ({0}) in zoom {1}"
-msgstr "Walking Papers ({0}) geruza {1} zoom-mailan"
-
 msgid "Way Download"
 msgstr "Jaitsi bidea"
 
@@ -35510,6 +35618,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/fa.po b/i18n/po/fa.po
index 353eb67..53fb899 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+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: 2017-09-03 04:56+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:54+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: fa\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -393,6 +393,34 @@ msgstr "حذف"
 msgid "Delete selected objects."
 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 "Delete Layer"
 msgstr ""
 
@@ -1358,29 +1386,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2789,34 +2803,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2848,6 +2834,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2967,6 +2976,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3074,6 +3095,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr ""
 
@@ -3117,6 +3141,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3751,6 +3778,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4792,9 +4873,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4840,6 +4918,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr "مقدار دهی اولیه API OSM"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4861,9 +4942,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -5064,6 +5142,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5316,6 +5402,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7102,6 +7192,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7324,9 +7417,6 @@ 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."
@@ -8254,15 +8344,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8291,33 +8381,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8441,6 +8504,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8574,6 +8664,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8583,6 +8679,9 @@ msgstr ""
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8727,6 +8826,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9771,9 +9873,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12910,15 +13009,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -13024,6 +13114,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13273,14 +13366,6 @@ 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 ""
 
@@ -13344,9 +13429,6 @@ msgid ""
 "{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 ""
 
@@ -14578,9 +14660,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14677,10 +14756,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15268,6 +15343,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17305,7 +17384,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23131,6 +23211,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23189,6 +23272,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23270,6 +23356,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23291,9 +23392,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23888,6 +23986,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24299,6 +24400,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24742,6 +24846,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25945,6 +26052,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26125,10 +26235,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26176,9 +26282,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26522,11 +26625,6 @@ msgid ""
 "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 ""
 
@@ -27137,13 +27235,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28440,6 +28538,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28455,77 +28691,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28576,27 +28817,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28737,160 +28957,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28940,17 +29097,6 @@ 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 ""
 
@@ -29387,18 +29533,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35144,26 +35278,6 @@ 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 ""
 
@@ -35332,6 +35446,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/fi.po b/i18n/po/fi.po
index 54d7bf2..c291c12 100644
--- a/i18n/po/fi.po
+++ b/i18n/po/fi.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
 "PO-Revision-Date: 2016-01-19 17:11+0000\n"
 "Last-Translator: Lauri Kytömaa <Unknown>\n"
 "Language-Team: Finnish <fi 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: 2017-09-03 04:42+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:40+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: fi\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -402,6 +402,45 @@ msgstr "Poista"
 msgid "Delete selected objects."
 msgstr "Poista valitut objektit."
 
+msgid "Delete confirmation"
+msgstr "Poiston vahvistus"
+
+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 ""
+"Olet aikeissa poistaa pisteitä ladatun alueen ulkopuolelta.<br>Tämä voi "
+"johtaa ongelmiin, koska objektit, joita et näe voivat käyttää "
+"niitä.<br>Oletko varma, että haluat poistaa ne?"
+
+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 ""
+"Olet aikeissa poistaa keskeneräisiä kohteita.<br>Tämä aiheuttaa ongelmia "
+"koska et näe todellista kohdetta.<br>Haluatko aivan varmasti poistaa?"
+
+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] ""
+"Olet poistamassa {0} relaation: {1}<br/>Tällainen poisto on harvoin tarpeen, "
+"eikä sitä ole helppoa peruuttaa jos poisto ehditään lähettää "
+"palvelimelle.<br/>Haluatko varmasti poistaa?"
+msgstr[1] ""
+"Olet poistamassa {0} relaatiota: {1}<br/>Näin laaja poisto on harvoin "
+"tarpeen, eikä sitä ole helppoa peruuttaa jos poisto ehditään lähettää "
+"palvelimelle.<br/>Haluatko varmasti poistaa?"
+
+msgid "Delete relation?"
+msgstr "Poista relaatio?"
+
 msgid "Delete Layer"
 msgstr ""
 
@@ -1391,36 +1430,14 @@ msgstr " [id: {0}]"
 msgid "Segment {0}: {1}"
 msgstr "Polun osa {0}: {1}"
 
-msgid "You must select two or more nodes to split a circular way."
-msgstr "Vähintään kaksi pistettä tulee valita ympyräpolun katkaisemiseksi."
-
-msgid ""
-"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
-"middle of the way.)"
-msgstr ""
-"Polkua ei voida katkaista valittujen pisteiden kohdalta. (Vihje: Valitse "
-"pisteitä, jotka eivät ole polun päissä.)"
+msgid "Search preset"
+msgstr "Etsi vaihtoehdoista"
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
-msgstr ""
-"Polun jäsenyydelle jossain relaatiossa oli määritelty rooli, joka kopioitiin "
-"kaikille uusille pätkille.<br>Ole hyvä ja tarkista että rooli on oikein "
-"kaikille osille, ja korjaa tarvittaessa."
+msgid "Show preset search dialog"
+msgstr "Etsi sopivaa esivalintaa nimistä ja kuvauksista"
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
-"Kaikki katkaistun polun osat saivat alkuperäisen polun "
-"relaatiojäsenyydet.<br>Tarkista, että jäsenyydet ovat oikein, ja korjaa "
-"tarvittaessa."
-
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] "Jaa polku {0} {1}:een osaan"
-msgstr[1] "Jaa polku {0} {1} osaan"
 
 msgid "Discourage upload"
 msgstr ""
@@ -2923,45 +2940,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] "Poistetaan {0} relaatio"
 msgstr[1] "Poistetaan {0} relaatiota"
 
-msgid "Delete confirmation"
-msgstr "Poiston vahvistus"
-
-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 ""
-"Olet aikeissa poistaa pisteitä ladatun alueen ulkopuolelta.<br>Tämä voi "
-"johtaa ongelmiin, koska objektit, joita et näe voivat käyttää "
-"niitä.<br>Oletko varma, että haluat poistaa ne?"
-
-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 ""
-"Olet aikeissa poistaa keskeneräisiä kohteita.<br>Tämä aiheuttaa ongelmia "
-"koska et näe todellista kohdetta.<br>Haluatko aivan varmasti poistaa?"
-
-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] ""
-"Olet poistamassa {0} relaation: {1}<br/>Tällainen poisto on harvoin tarpeen, "
-"eikä sitä ole helppoa peruuttaa jos poisto ehditään lähettää "
-"palvelimelle.<br/>Haluatko varmasti poistaa?"
-msgstr[1] ""
-"Olet poistamassa {0} relaatiota: {1}<br/>Näin laaja poisto on harvoin "
-"tarpeen, eikä sitä ole helppoa peruuttaa jos poisto ehditään lähettää "
-"palvelimelle.<br/>Haluatko varmasti poistaa?"
-
-msgid "Delete relation?"
-msgstr "Poista relaatio?"
-
 msgid "Move {0} node"
 msgid_plural "Move {0} nodes"
 msgstr[0] "Siirrä {0} piste"
@@ -2993,6 +2971,37 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr "Monivaiheinen toiminto: {0}"
 
+msgid "You must select two or more nodes to split a circular way."
+msgstr "Vähintään kaksi pistettä tulee valita ympyräpolun katkaisemiseksi."
+
+msgid ""
+"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
+"middle of the way.)"
+msgstr ""
+"Polkua ei voida katkaista valittujen pisteiden kohdalta. (Vihje: Valitse "
+"pisteitä, jotka eivät ole polun päissä.)"
+
+msgid ""
+"A role based relation membership was copied to all new ways.<br>You should "
+"verify this and correct it when necessary."
+msgstr ""
+"Polun jäsenyydelle jossain relaatiossa oli määritelty rooli, joka kopioitiin "
+"kaikille uusille pätkille.<br>Ole hyvä ja tarkista että rooli on oikein "
+"kaikille osille, ja korjaa tarvittaessa."
+
+msgid ""
+"A relation membership was copied to all new ways.<br>You should verify this "
+"and correct it when necessary."
+msgstr ""
+"Kaikki katkaistun polun osat saivat alkuperäisen polun "
+"relaatiojäsenyydet.<br>Tarkista, että jäsenyydet ovat oikein, ja korjaa "
+"tarvittaessa."
+
+msgid "Split way {0} into {1} part"
+msgid_plural "Split way {0} into {1} parts"
+msgstr[0] "Jaa polku {0} {1}:een osaan"
+msgstr[1] "Jaa polku {0} {1} osaan"
+
 msgid "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] "Muunna {0}-solmu"
@@ -3117,6 +3126,18 @@ msgstr "Virheellinen leveyspiiri ''{0}''"
 msgid "Illegal longitude value ''{0}''"
 msgstr "Virheellinen pituuspiiri ''{0}''"
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3234,6 +3255,9 @@ msgstr "Imperiaalinen"
 msgid "Nautical Mile"
 msgstr "Merimaili"
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr "Parametrille {0} odotettiin epätyhjää arvoa, mutta saatiin ”{1}”"
+
 msgid "UNKNOWN"
 msgstr "TUNTEMATON"
 
@@ -3279,6 +3303,9 @@ msgctxt "compass"
 msgid "E"
 msgstr "I"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3942,6 +3969,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr "Käyttäjän määrittelemä"
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr "Kuvaus"
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr "Näytä tämä ohje"
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr "Esimerkkejä"
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr "GRS80"
 
@@ -5023,9 +5104,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr "Siirros"
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr "Parametrille {0} odotettiin epätyhjää arvoa, mutta saatiin ”{1}”"
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -5073,6 +5151,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr "Valmistellaan OSM API -yhteys"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -5094,9 +5175,6 @@ msgstr "käyttö"
 msgid "options"
 msgstr "valinnat"
 
-msgid "Show this help"
-msgstr "Näytä tämä ohje"
-
 msgid "Standard unix geometry argument"
 msgstr "UNIX-standardin mukainen geometria"
 
@@ -5308,6 +5386,14 @@ msgstr ""
 "välityspalvelinasetuksista.<br>Haluatko muuttaa välityspalvelimen asetuksia "
 "nyt?"
 
+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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr "Tiedosto"
@@ -5565,6 +5651,10 @@ msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 "Kyseinen arvo ei ole minkään ruudun indeksi annetulla suurennostasolla"
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr "JOSMissa on tapahtunut virhe"
 
@@ -7425,6 +7515,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr "Päivitä muutoskokoelma OSM-palvelimelta"
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7675,9 +7768,6 @@ msgstr "URL: "
 msgid "Please enter or paste an URL to retrieve changesets from the OSM API."
 msgstr "Syötä tai liitä URL-osoite jolla haluat hakea muutoskokoelmia."
 
-msgid "Examples"
-msgstr "Esimerkkejä"
-
 msgid ""
 "Note that changeset queries are currently always submitted to ''{0}'', "
 "regardless of the host, port and path of the URL entered below."
@@ -8666,15 +8756,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8703,33 +8793,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr "historia"
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8853,6 +8916,33 @@ msgstr "Selailtava kartta"
 msgid "Tile Numbers"
 msgstr "Karttaruutujen numerot"
 
+msgid "history"
+msgstr "historia"
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr "JOSMin Ohjesivut"
 
@@ -9010,6 +9100,12 @@ msgstr "Näytä piste aktiivisella datatasolla"
 msgid "Open a history browser with the history of this node"
 msgstr "Avaa oma historiaselain tälle pisteelle"
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr "Polku {0}"
 
@@ -9019,6 +9115,9 @@ msgstr "Relaatio {0}"
 msgid "Object"
 msgstr "Objekti"
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr "Muutoskokoelman kommentti oli"
 
@@ -9187,6 +9286,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "Anna lyhyt kuvaus lähetettävistä muutoksista:"
 
@@ -10339,9 +10441,6 @@ msgid_plural "{0} tracks"
 msgstr[0] "{0} jälki"
 msgstr[1] "{0} jälkeä"
 
-msgid "Description"
-msgstr "Kuvaus"
-
 msgid "Timespan"
 msgstr "Aikaväli"
 
@@ -13598,15 +13697,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr "Virhe käsiteltäessä {0}: "
 
-msgid "Search preset"
-msgstr "Etsi vaihtoehdoista"
-
-msgid "Show preset search dialog"
-msgstr "Etsi sopivaa esivalintaa nimistä ja kuvauksista"
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr "Esivalinnat"
 
@@ -13717,6 +13807,9 @@ msgstr "Kaikki tiedostot (*.*)"
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13987,14 +14080,6 @@ 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 ""
 
@@ -14060,9 +14145,6 @@ msgid ""
 "{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 ""
 
@@ -15358,9 +15440,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -15465,10 +15544,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -16060,6 +16135,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -18099,7 +18178,8 @@ msgid "Bay"
 msgstr "Lahti"
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23926,6 +24006,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23984,6 +24067,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -24065,6 +24151,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -24086,9 +24187,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -24683,6 +24781,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -25094,6 +25195,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -25537,6 +25641,9 @@ msgstr "NLSC Open Data WMTS"
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -26752,6 +26859,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26936,10 +27046,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26991,9 +27097,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -27365,11 +27468,6 @@ msgid ""
 "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 ""
 "Lataa helposti lisää tietoja toisiinsa kytkettyä polkujonoa pitkin, polun "
@@ -27994,15 +28092,15 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
+msgid "Start Mapillary layer"
+msgstr ""
+
 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."
 
@@ -29303,6 +29401,151 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 ""
+"Käyttääksesi cadastre WMS -liitännäistä, vaihda\n"
+"karttaprojektio joksikin cadastren projektioista\n"
+"ja yritä uudelleen"
+
+msgid "Change the current projection"
+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 "{0} ei ole sallittu nykyisellä karttaprojektiolla"
+
+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 ""
+"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 ""
+
+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 ""
+"<html>Kirjoita kaupungin tai kylän nimi.<br>Käytä sivuston "
+"www.cadastre.gouv.fr tuntemaa kirjoitusasua.</html>"
+
+msgid "Departement"
+msgstr ""
+
+msgid "<html>Departement number (optional)</html>"
+msgstr ""
+
+msgid "Add new layer"
+msgstr "Lisää uusi taso"
+
+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 "PNG-tiedostot (*.png)"
+
+msgid "GeoTiff files (*.tif)"
+msgstr "GeoTiff-tiedostot (*.tif)"
+
+msgid "Export image (only raster images)"
+msgstr ""
+
+msgid ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -29318,84 +29561,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
-"Virhe ladattaessa tiedostoa.\n"
-"Luultavasti välimuistitiedoston versio on vanha."
 
-msgid "Lambert Zone {0} cache file (.{0})"
-msgstr "Lambert vyöhyke {0} välimuistitiedosto (.{0})"
+msgid "Download from Cadastre"
+msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
-msgstr "Lambert CC9 vyöhyke {0} välimuistitiedosto (.{0})"
+msgid "Objects:"
+msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
+msgstr "osoite"
+
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "symbol"
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download water bodies in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
-"Kaupunkia {0} ei löytynyt\n"
-"tai toiminto peruutettiin"
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
-"Käyttääksesi cadastre WMS -liitännäistä, vaihda\n"
-"karttaprojektio joksikin cadastren projektioista\n"
-"ja yritä uudelleen"
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -29447,27 +29688,6 @@ msgstr ""
 msgid "low"
 msgstr ""
 
-msgid "symbol"
-msgstr ""
-
-msgid "parcel"
-msgstr ""
-
-msgid "parcel number"
-msgstr ""
-
-msgid "address"
-msgstr "osoite"
-
-msgid "locality"
-msgstr ""
-
-msgid "section"
-msgstr ""
-
-msgid "commune"
-msgstr ""
-
 msgid "Enable automatic caching."
 msgstr ""
 
@@ -29608,164 +29828,101 @@ msgstr ""
 msgid "Unexpected file extension. {0}"
 msgstr "Odottamaton tiedostopääte. {0}"
 
-msgid "Add \"source=...\" to elements?"
-msgstr ""
-
-msgid "Downloading {0}"
-msgstr ""
-
-msgid "Contacting WMS Server..."
-msgstr "Yhdistetään WMS-palvelimeen..."
-
-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 "Yhdistetään Cadastre WMS-palvelimeen..."
-
-msgid "Image already loaded"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
+"Virhe ladattaessa tiedostoa.\n"
+"Luultavasti välimuistitiedoston versio on vanha."
 
-msgid "Cadastre: {0}"
-msgstr ""
+msgid "Lambert Zone {0} cache file (.{0})"
+msgstr "Lambert vyöhyke {0} välimuistitiedosto (.{0})"
 
-msgid "Georeference an image"
-msgstr ""
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgstr "Lambert CC9 vyöhyke {0} välimuistitiedosto (.{0})"
 
-msgid "Grab non-georeferenced image"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
-msgstr "{0} ei ole sallittu nykyisellä karttaprojektiolla"
-
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
+"Kaupunkia {0} ei löytynyt\n"
+"tai toiminto peruutettiin"
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
-msgstr ""
+msgid "Contacting WMS Server..."
+msgstr "Yhdistetään WMS-palvelimeen..."
 
-msgid "Commune"
+msgid "Create buildings"
 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>Kirjoita kaupungin tai kylän nimi.<br>Käytä sivuston "
-"www.cadastre.gouv.fr tuntemaa kirjoitusasua.</html>"
-
-msgid "Departement"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "<html>Departement number (optional)</html>"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Add new layer"
-msgstr "Lisää uusi taso"
-
-msgid "Open Cadastre Preferences"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Reset cookie"
-msgstr ""
+msgid "Contacting cadastre WMS ..."
+msgstr "Yhdistetään Cadastre WMS-palvelimeen..."
 
-msgid "Get a new cookie (session timeout)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "Save image as..."
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "PNG files (*.png)"
-msgstr "PNG-tiedostot (*.png)"
-
-msgid "GeoTiff files (*.tif)"
-msgstr "GeoTiff-tiedostot (*.tif)"
-
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -29815,17 +29972,6 @@ 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 ""
 
@@ -30262,18 +30408,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -36119,26 +36253,6 @@ 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 "Lataa polun päästä"
 
@@ -36325,6 +36439,26 @@ msgstr ""
 "Lisää valittua artikkelia vastaava wikipedia -tagi valittuihin "
 "karttakohteisiin"
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/fil.po b/i18n/po/fil.po
index acbdb03..425a23a 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+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: 2017-09-03 05:08+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 05:07+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: fil\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -387,6 +387,34 @@ msgstr ""
 msgid "Delete selected objects."
 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 "Delete Layer"
 msgstr ""
 
@@ -1293,29 +1321,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2724,34 +2738,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2783,6 +2769,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2902,6 +2911,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3009,6 +3030,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr ""
 
@@ -3052,6 +3076,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3688,6 +3715,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4728,9 +4809,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4776,6 +4854,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr ""
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4797,9 +4878,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -5000,6 +5078,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5252,6 +5338,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7034,6 +7124,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7256,9 +7349,6 @@ 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."
@@ -8186,15 +8276,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8223,33 +8313,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8373,6 +8436,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8506,6 +8596,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8515,6 +8611,9 @@ msgstr ""
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8659,6 +8758,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9698,9 +9800,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12837,15 +12936,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -12951,6 +13041,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13200,14 +13293,6 @@ 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 ""
 
@@ -13271,9 +13356,6 @@ msgid ""
 "{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 ""
 
@@ -14505,9 +14587,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14604,10 +14683,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15195,6 +15270,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17232,7 +17311,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23058,6 +23138,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23116,6 +23199,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23197,6 +23283,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23218,9 +23319,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23815,6 +23913,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24226,6 +24327,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24669,6 +24773,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25872,6 +25979,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26052,10 +26162,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26103,9 +26209,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26449,11 +26552,6 @@ msgid ""
 "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 ""
 
@@ -27064,13 +27162,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28367,6 +28465,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28382,77 +28618,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28503,27 +28744,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28664,160 +28884,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28867,17 +29024,6 @@ 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 ""
 
@@ -29314,18 +29460,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35071,26 +35205,6 @@ 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 ""
 
@@ -35259,6 +35373,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/fo.po b/i18n/po/fo.po
index 00f60a4..20a4a24 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+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: 2017-09-03 04:41+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:39+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
 msgstr "{0}: valmøguleiki ''{1}'' er tvítýddur"
@@ -386,6 +386,34 @@ msgstr ""
 msgid "Delete selected objects."
 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 "Delete Layer"
 msgstr ""
 
@@ -1292,29 +1320,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2723,34 +2737,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2782,6 +2768,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2901,6 +2910,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3008,6 +3029,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr ""
 
@@ -3051,6 +3075,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3687,6 +3714,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4727,9 +4808,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4775,6 +4853,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr ""
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4796,9 +4877,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -4999,6 +5077,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5251,6 +5337,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7033,6 +7123,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7255,9 +7348,6 @@ 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."
@@ -8185,15 +8275,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8222,33 +8312,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8372,6 +8435,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8505,6 +8595,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8514,6 +8610,9 @@ msgstr ""
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8658,6 +8757,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9697,9 +9799,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12836,15 +12935,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -12950,6 +13040,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13199,14 +13292,6 @@ 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 ""
 
@@ -13270,9 +13355,6 @@ msgid ""
 "{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 ""
 
@@ -14504,9 +14586,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14603,10 +14682,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15194,6 +15269,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17231,7 +17310,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23057,6 +23137,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23115,6 +23198,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23196,6 +23282,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23217,9 +23318,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23814,6 +23912,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24225,6 +24326,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24668,6 +24772,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25871,6 +25978,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26051,10 +26161,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26102,9 +26208,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26448,11 +26551,6 @@ msgid ""
 "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 ""
 
@@ -27063,13 +27161,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28366,6 +28464,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28381,77 +28617,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28502,27 +28743,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28663,160 +28883,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28866,17 +29023,6 @@ 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 ""
 
@@ -29313,18 +29459,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35070,26 +35204,6 @@ 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 ""
 
@@ -35258,6 +35372,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/fr.po b/i18n/po/fr.po
index 7157987..1a0e2e3 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: 2017-09-02 22:59+0200\n"
-"PO-Revision-Date: 2017-07-29 15:39+0000\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
+"PO-Revision-Date: 2017-09-22 10:40+0000\n"
 "Last-Translator: Dirk Stöcker <launchpad at dstoecker.de>\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: 2017-09-03 04:42+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:40+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: fr\n"
 "X-Poedit-Bookmarks: -1,-1,-1,2669,-1,-1,-1,-1,-1,-1\n"
 
@@ -411,6 +411,46 @@ msgstr "Supprimer"
 msgid "Delete selected objects."
 msgstr "Supprimer la sélection."
 
+msgid "Delete confirmation"
+msgstr "Confirmer la suppression"
+
+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 ""
+"Vous êtes sur le point de supprimer des nœuds situés en dehors de la zone "
+"téléchargée.<br>Cela peut poser problème car des objets que vous ne voyez "
+"pas, pourraient les utiliser.<br>Voulez-vous vraiment les supprimer ?"
+
+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 ""
+"Vous êtes sur le point de supprimer des objets incomplets.<br>Cela peut "
+"poser des problèmes car vous ne voyez pas l’objet réel.<br>Voulez-vous "
+"vraiment les supprimer ?"
+
+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] ""
+"Vous êtes sur le point de supprimer {0} relation: {1}<br/>Cette opération "
+"est rarement nécessaire et ne peut pas être facilement annulée après avoir "
+"été envoyée vers le serveur.<br/>Souhaitez-vous vraiment la supprimer ?"
+msgstr[1] ""
+"Vous êtes sur le point de supprimer {0} relations: {1}<br/>Cette opération "
+"est rarement nécessaire et ne peut pas être facilement annulée après avoir "
+"été envoyée vers le serveur.<br/>Souhaitez-vous vraiment les supprimer ?"
+
+msgid "Delete relation?"
+msgstr "Supprimer la relation ?"
+
 msgid "Delete Layer"
 msgstr "Supprimer le calque"
 
@@ -1414,35 +1454,14 @@ msgstr " [identifiant : {0}]"
 msgid "Segment {0}: {1}"
 msgstr "Segment {0} : {1}"
 
-msgid "You must select two or more nodes to split a circular way."
-msgstr ""
-"Vous devez sélectionner deux nœuds ou plus pour couper un chemin fermé."
-
-msgid ""
-"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
-"middle of the way.)"
-msgstr ""
-"Le chemin ne peut pas être coupé aux nœuds sélectionnés. (Astuce : "
-"sélectionnez des nœuds au milieu du chemin.)"
-
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
-msgstr ""
-"L''appartenance par rôle à une relation, a été copiée à tous les nouveaux "
-"chemins.<br>Vous devriez vérifier et corriger cela si nécessaire."
+msgid "Search preset"
+msgstr "Rechercher par attribut"
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
-msgstr ""
-"L''appartenance à une relation, a été copiée à tous les nouveaux "
-"chemins.<br>Vous devriez vérifier et corriger cela si nécessaire."
+msgid "Show preset search dialog"
+msgstr "Afficher la fenêtre de recherche par attribut"
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] "Scinder le chemin {0} en {1} partie"
-msgstr[1] "Scinder le chemin {0} en {1} parties"
+msgid "Search presets"
+msgstr "Préreglages de recherche"
 
 msgid "Discourage upload"
 msgstr "Dissuader l’envoi"
@@ -2971,46 +2990,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] "Supprimer {0} relation"
 msgstr[1] "Supprimer {0} relations"
 
-msgid "Delete confirmation"
-msgstr "Confirmer la suppression"
-
-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 ""
-"Vous êtes sur le point de supprimer des nœuds situés en dehors de la zone "
-"téléchargée.<br>Cela peut poser problème car des objets que vous ne voyez "
-"pas, pourraient les utiliser.<br>Voulez-vous vraiment les supprimer ?"
-
-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 ""
-"Vous êtes sur le point de supprimer des objets incomplets.<br>Cela peut "
-"poser des problèmes car vous ne voyez pas l’objet réel.<br>Voulez-vous "
-"vraiment les supprimer ?"
-
-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] ""
-"Vous êtes sur le point de supprimer {0} relation: {1}<br/>Cette opération "
-"est rarement nécessaire et ne peut pas être facilement annulée après avoir "
-"été envoyée vers le serveur.<br/>Souhaitez-vous vraiment la supprimer ?"
-msgstr[1] ""
-"Vous êtes sur le point de supprimer {0} relations: {1}<br/>Cette opération "
-"est rarement nécessaire et ne peut pas être facilement annulée après avoir "
-"été envoyée vers le serveur.<br/>Souhaitez-vous vraiment les supprimer ?"
-
-msgid "Delete relation?"
-msgstr "Supprimer la relation ?"
-
 msgid "Move {0} node"
 msgid_plural "Move {0} nodes"
 msgstr[0] "Déplacer {0} nœud"
@@ -3042,6 +3021,36 @@ msgstr[1] "Objets {0} sélectionnés"
 msgid "Sequence: {0}"
 msgstr "Séquence: {0}"
 
+msgid "You must select two or more nodes to split a circular way."
+msgstr ""
+"Vous devez sélectionner deux nœuds ou plus pour couper un chemin fermé."
+
+msgid ""
+"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
+"middle of the way.)"
+msgstr ""
+"Le chemin ne peut pas être coupé aux nœuds sélectionnés. (Astuce : "
+"sélectionnez des nœuds au milieu du chemin.)"
+
+msgid ""
+"A role based relation membership was copied to all new ways.<br>You should "
+"verify this and correct it when necessary."
+msgstr ""
+"L''appartenance par rôle à une relation, a été copiée à tous les nouveaux "
+"chemins.<br>Vous devriez vérifier et corriger cela si nécessaire."
+
+msgid ""
+"A relation membership was copied to all new ways.<br>You should verify this "
+"and correct it when necessary."
+msgstr ""
+"L''appartenance à une relation, a été copiée à tous les nouveaux "
+"chemins.<br>Vous devriez vérifier et corriger cela si nécessaire."
+
+msgid "Split way {0} into {1} part"
+msgid_plural "Split way {0} into {1} parts"
+msgstr[0] "Scinder le chemin {0} en {1} partie"
+msgstr[1] "Scinder le chemin {0} en {1} parties"
+
 msgid "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] "Transformer {0} nœud"
@@ -3177,6 +3186,18 @@ msgstr "Valeur de latitude ''{0}'' erronée"
 msgid "Illegal longitude value ''{0}''"
 msgstr "Valeur de longitude ''{0}'' erronée"
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr "Impossible de créer le dossier de cache manquant: {0}"
 
@@ -3311,6 +3332,11 @@ msgstr "Impérial"
 msgid "Nautical Mile"
 msgstr "Mile nautique"
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+"Une valeur non vide est attendue pour le paramètre ''{0}''. Actuellement "
+"elle est ''{1}''"
+
 msgid "UNKNOWN"
 msgstr "inconnue"
 
@@ -3356,6 +3382,9 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr "Date des images: {0}"
 
@@ -4056,6 +4085,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr "Projection personnalisée"
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr "Description"
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr "Afficher cette aide"
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr "Exemples :"
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr "GRS80"
 
@@ -5151,11 +5234,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr "Décalage"
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-"Une valeur non vide est attendue pour le paramètre ''{0}''. Actuellement "
-"elle est ''{1}''"
-
 msgid "Outdated Java version"
 msgstr "Version de Java obsolète"
 
@@ -5207,6 +5285,9 @@ msgstr "Initialisation des données du périmètre"
 msgid "Initializing OSM API"
 msgstr "Initialisation de l’API OSM"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr "Le calque {0} a été retiré car il n’est pas autorisé par l’API."
+
 msgid "Initializing internal traffic data"
 msgstr "Initialisation des données de trafic internes"
 
@@ -5228,9 +5309,6 @@ msgstr "usage"
 msgid "options"
 msgstr "options"
 
-msgid "Show this help"
-msgstr "Afficher cette aide"
-
 msgid "Standard unix geometry argument"
 msgstr "Argument de géométrie standard UNIX"
 
@@ -5464,6 +5542,14 @@ msgstr ""
 "configuration manquante du proxy.<br>Voulez-vous changer les paramètres du "
 "proxy maintenant ?"
 
+msgid "You have {0} unread message."
+msgid_plural "You have {0} unread messages."
+msgstr[0] "Vous avez {0} message non lu."
+msgstr[1] "Vous avez {0} messages non lus."
+
+msgid "Click here to see your inbox."
+msgstr "Cliquez ici pour ouvrir votre boite de réception."
+
 msgctxt "menu"
 msgid "File"
 msgstr "Fichier"
@@ -5729,6 +5815,12 @@ msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 "La valeur actuelle n’est pas l’index d’une tuile valide pour le zoom donné"
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+"L''ouverture du rapport de bug a échoué. Veuillez rapporter manuellement "
+"l''erreur à l''adresse :"
+
 msgid "You have encountered a bug in JOSM"
 msgstr "Vous avez rencontré une erreur dans JOSM"
 
@@ -7675,6 +7767,9 @@ msgstr "Retirer le groupe de modifications du gestionnaire"
 msgid "Update the changeset from the OSM server"
 msgstr "Mettre à jour le groupe de modifications"
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7935,9 +8030,6 @@ msgstr ""
 "Veuillez entrer une adresse web pour télécharger les groupes de "
 "modifications."
 
-msgid "Examples"
-msgstr "Exemples :"
-
 msgid ""
 "Note that changeset queries are currently always submitted to ''{0}'', "
 "regardless of the host, port and path of the URL entered below."
@@ -8899,7 +8991,7 @@ msgid "Download referrers (parent relations and ways)"
 msgstr "Télécharger les référents (relations parentes et chemins)"
 
 msgid "Download from OSM"
-msgstr ""
+msgstr "Télécharger depuis OSM"
 
 msgid "Data Sources and Types:"
 msgstr "Sources et types :"
@@ -8944,21 +9036,25 @@ msgid "Download area ok, size probably acceptable to server"
 msgstr "La zone de téléchargement est bonne et sera acceptée par le serveur."
 
 msgid "Download from Overpass API"
+msgstr "Télécharger depuis l’API Overpass"
+
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
+"Entrez votre requête Overpass ci-dessous ou générez-en une en utilisant "
+"l’assistant de requête d’Overpass Turbo"
 
 msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
+"Construire une requête Overpass en utilisant l’assistant de requête "
+"d’Overpass Turbo"
 
 msgid "Query Wizard"
-msgstr ""
-
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
-msgstr ""
+msgstr "Assistant de requête"
 
 msgid "Your saved queries:"
-msgstr ""
+msgstr "Vos requêtes sauvegardées :"
 
 msgid "Show/hide Overpass snippet list"
 msgstr ""
@@ -8983,33 +9079,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr "histoire"
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -9134,6 +9203,33 @@ msgstr "Carte glissante"
 msgid "Tile Numbers"
 msgstr "Numéros de tuiles"
 
+msgid "history"
+msgstr "histoire"
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr "Aide de JOSM"
 
@@ -9292,6 +9388,12 @@ msgstr "Zoomer sur ce nœud dans le calque"
 msgid "Open a history browser with the history of this node"
 msgstr "Ouvrir un navigateur avec l’historique de ce nœud"
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr "Chemin {0}"
 
@@ -9301,6 +9403,9 @@ msgstr "Relation {0}"
 msgid "Object"
 msgstr "Objet"
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr "Commentaire de groupe de modifications"
 
@@ -9476,6 +9581,9 @@ msgstr ""
 "Cocher \"Enregistrer\" pour sauvegarder le calque dans le fichier spécifié à "
 "gauche."
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "Ajoutez un commentaire :"
 
@@ -10681,9 +10789,6 @@ msgid_plural "{0} tracks"
 msgstr[0] "{0} trace"
 msgstr[1] "{0} traces"
 
-msgid "Description"
-msgstr "Description"
-
 msgid "Timespan"
 msgstr "Durée"
 
@@ -12582,7 +12687,7 @@ msgid "Local files"
 msgstr "Les fichiers locaux"
 
 msgid "Force lines if no segments imported"
-msgstr "Forcer les lignes si aucun segment n’’a été importé"
+msgstr "Forcer les lignes si aucun segment n’a été importé"
 
 msgid "Draw large GPS points"
 msgstr "Dessiner des points GPS larges"
@@ -12659,7 +12764,7 @@ msgid "Dynamic color range based on data limits"
 msgstr "Ajuster avec les limites des données"
 
 msgid "Smooth GPX graphics (antialiasing)"
-msgstr "LIsser les graphiques GPX (anti-crènelage)"
+msgstr "Lisser les graphiques GPX (anticrénelage)"
 
 msgid "Draw with Opacity (alpha blending) "
 msgstr "Dessiner avec l''opacité (mélange alpha) "
@@ -13044,8 +13149,8 @@ msgstr "Fournisseurs disponibles :"
 
 msgid "New default entries can be added in the <a href=\"{0}\">Wiki</a>."
 msgstr ""
-"De nouvelles entrées par défaut peuvent être ajoutées dans <a href=\"{0}\"> "
-"Wiki </a>."
+"De nouvelles entrées par défaut peuvent être ajoutées dans le <a "
+"href=\"{0}\">Wiki </a>."
 
 msgid "Selected entries:"
 msgstr "Fournisseurs actifs :"
@@ -14168,15 +14273,6 @@ msgstr "Sous élément prédéfini sans parent"
 msgid "Error parsing {0}: "
 msgstr "Erreur d’analyse de {0} : "
 
-msgid "Search preset"
-msgstr "Rechercher par attribut"
-
-msgid "Show preset search dialog"
-msgstr "Afficher la fenêtre de recherche par attribut"
-
-msgid "Search presets"
-msgstr "Préreglages de recherche"
-
 msgid "Presets"
 msgstr "Attributs"
 
@@ -14296,6 +14392,9 @@ msgstr "Tous les fichiers (*.*)"
 msgid "Received error page:"
 msgstr "Page d''erreur reçue :"
 
+msgid "{0}... [please type its number]"
+msgstr "{0}... [veuillez saisir son nombre]"
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -14616,14 +14715,6 @@ msgstr "Mode {0} inconnu."
 msgid "get number of unread messages"
 msgstr "obtient le nombre des messages non lus"
 
-msgid "You have {0} unread message."
-msgid_plural "You have {0} unread messages."
-msgstr[0] "Vous avez {0} message non lu."
-msgstr[1] "Vous avez {0} messages non lus."
-
-msgid "Click here to see your inbox."
-msgstr "Cliquez ici pour ouvrir votre boite de réception."
-
 msgid "Message notifier"
 msgstr "Notification d’un message"
 
@@ -14692,9 +14783,6 @@ msgstr ""
 "Il supporte la version 0.6 du protocole alors que le serveur supporte les "
 "versions {0} à {1}."
 
-msgid "Removed layer {0} because it is not allowed by the configured API."
-msgstr "Le calque {0} a été retiré car il n’est pas autorisé par l’API."
-
 msgid "Unexpected format of ID replied by the server. Got ''{0}''."
 msgstr ""
 "Le format de l’identifiant renvoyé par le serveur est inattendu. "
@@ -16227,9 +16315,6 @@ msgstr ""
 "http://forum.openstreetmap.org/viewtopic.php?id=25677).\n"
 "Actuellement, {1,number,#}Mo de mémoire sont alloués à JOSM."
 
-msgid "{0}... [please type its number]"
-msgstr "{0}... [veuillez saisir son nombre]"
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -16344,12 +16429,6 @@ msgid "Failed to load XML schema."
 msgstr "Impossible de charger le schéma XML."
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-"L''ouverture du rapport de bug a échoué. Veuillez rapporter manuellement "
-"l''erreur à l''adresse :"
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -16954,6 +17033,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr "non"
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr "Type de service"
 
@@ -19018,10 +19101,9 @@ msgid "Bay"
 msgstr "Baie"
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
-"Un grand plan d''eau partiellement entouré par la terre, qui possède "
-"cependant une grande ouverture."
 
 msgid "Shipping"
 msgstr "Navigation"
@@ -24883,6 +24965,9 @@ msgstr "Waymarked Trails : À cheval"
 msgid "Waymarked Trails: Winter Sports"
 msgstr "Waymarked Trails: Sports d’hiver"
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr "OSM Inspector : Géométrie"
 
@@ -24949,6 +25034,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -25030,6 +25118,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -25051,9 +25154,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -25662,6 +25762,9 @@ msgstr "Imagerie aérienne Berlin 2015"
 msgid "Berlin aerial photograph 2016"
 msgstr "Berlin Photographie aérienne 2016"
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -26075,6 +26178,9 @@ msgstr "Luxembourg Inspire Eau"
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Delta du Niger Oct 2012 Landsat"
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -26518,6 +26624,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -27756,6 +27865,9 @@ msgstr "relation sans type"
 msgid "{0} relation without {0} tag"
 msgstr "{0} relation sans {0} attribut"
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr "religion sans dénomination"
 
@@ -27976,11 +28088,6 @@ msgid "Customization of public public transport stops."
 msgstr "Personnalisation des arrêts des transports publics."
 
 msgid ""
-"Creating and handling address nodes and buildings within Czech Republic."
-msgstr ""
-"Crée et gère les adresses des nœuds et bâtiments en République Tchèque."
-
-msgid ""
 "Allows to import various file formats into JOSM directly. Currently "
 "supported: TangoGPS, Garmin Trainings Center TCX."
 msgstr ""
@@ -28037,9 +28144,6 @@ msgstr ""
 "Discuter avec les utilisateurs qui éditent la carte à proximité, être "
 "notifié quand quelqu’un se rapproche."
 
-msgid "Allows you to view a GeoJSON file as a layer."
-msgstr "Permet de visualiser une fichier GeoJSON dans un calque."
-
 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."
@@ -28497,14 +28601,6 @@ msgstr ""
 "Lie et synchronise une vidéo géoréférencée avec une trace GPS, à utiliser "
 "pour identifier les objets visibles. (Greffon en cours de développement !)"
 
-msgid ""
-"Supports downloading tiled, scanned maps from walking-papers.org. This "
-"plugin is still under early development and may be buggy."
-msgstr ""
-"Permet le téléchargement de cartes scannées et tuilées depuis walking-"
-"papers.org. Ce greffon est encore en développement et peut contenir des "
-"erreurs."
-
 msgid "Easy downloading along a long set of interconnected ways"
 msgstr ""
 "Facilite le téléchargement le long de plusieurs chemins interconnectés"
@@ -29162,15 +29258,15 @@ msgstr "Calque d''objets Mapillary"
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr "Affiche le calque montrant les objets détectés par Mapillary"
 
+msgid "Start Mapillary layer"
+msgstr "Commencer un calque Mapillary"
+
 msgid "Mapillary"
 msgstr "Mapillary"
 
 msgid "Create Mapillary layer"
 msgstr "Créer un calque Mapillary"
 
-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"
 
@@ -30619,6 +30715,160 @@ 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"
 
+msgid "Auto sourcing"
+msgstr "Enregistrer la source automatiquement"
+
+msgid ""
+"Please enable at least two WMS layers in the cadastre-fr plugin "
+"configuration.\n"
+"Layers ''Building'' and ''Parcel'' added by default."
+msgstr ""
+"Veuillez activer au moins  deux calques WMS dans la configuration du greffon "
+"cadastre-fr.\n"
+"Les calques ''bâtiment'' et ''parcelle'' ont été ajoutés par défaut."
+
+msgid ""
+"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+msgstr ""
+"Attention : l’affichage des options au premier plan a échoué. Exception : {0}"
+
+msgid ""
+"To enable the cadastre WMS plugin, change\n"
+"the current projection to one of the cadastre\n"
+"projections and retry"
+msgstr ""
+"Pour activer le téléchargement du cadastre, utilisez une projection "
+"cadastrale et réessayez"
+
+msgid "Change the current projection"
+msgstr "Changer la projection courante"
+
+msgid "Extract commune boundary"
+msgstr "Extraire les limites de commune"
+
+msgid "Only on vectorized layers"
+msgstr "Seulement sur les calques vectorisés"
+
+msgid "Cancel current grab"
+msgstr "Annuler le téléchargement"
+
+msgid "Cancel current grab (only vector images)"
+msgstr "Annuler le téléchargement (images vectorielles seulement)"
+
+msgid "Cadastre grab"
+msgstr "Télécharger le cadastre"
+
+msgid "Download Image from French Cadastre WMS"
+msgstr "Télécharger depuis le serveur du cadastre français"
+
+msgid "Cadastre: {0}"
+msgstr "Cadastre : {0}"
+
+msgid "Georeference an image"
+msgstr "Géoréférencer une image"
+
+msgid "Grab non-georeferenced image"
+msgstr "Télécharger une image non-géoréférencée"
+
+msgid "Georeferencing interrupted"
+msgstr "Géoréférencement interrompu."
+
+msgid ""
+"This image contains georeference data.\n"
+"Do you want to use them ?"
+msgstr ""
+"Cette image contient des données géographiques.\n"
+"Voulez-vous les utiliser ?"
+
+msgid "Load layer from cache"
+msgstr "Charger le calque depuis le cache"
+
+msgid "Load location from cache (only if cache is enabled)"
+msgstr "Télécharger le calque depuis le cache"
+
+msgid "{0} not allowed with the current projection"
+msgstr "{0} n’est pas permis dans cette projection"
+
+msgid ""
+"Cannot load cache {0} which is not compatible with current projection zone"
+msgstr ""
+"Impossible de charger le calque {0} qui n’est pas compatible avec la zone de "
+"projection actuelle."
+
+msgid ""
+"Selected file {0} is not a cache file from this plugin (invalid extension)"
+msgstr ""
+"Le fichier sélectionné {0} n’est pas un fichier de cache associé à ce "
+"greffon (extension invalide)"
+
+msgid "The location {0} is already on screen. Cache not loaded."
+msgstr "La commune {0} est déjà affichée. Le chargement est interrompu."
+
+msgid "(optional)"
+msgstr "(facultatif)"
+
+msgid "Change location"
+msgstr "Changer de lieu"
+
+msgid "Set a new location for the next request"
+msgstr "Définir un nouveau lieu pour la prochaine requête"
+
+msgid "Add a new municipality layer"
+msgstr "Ajouter un nouveau calque cadastral."
+
+msgid "Commune"
+msgstr "Commune :"
+
+msgid ""
+"<html>Enter the town,village or city name.<br>Use the syntax and punctuation "
+"known by www.cadastre.gouv.fr .</html>"
+msgstr ""
+"<html>Entrer le nom de la ville ou du village.<br>Utiliser la syntaxe et la "
+"ponctuation de www.cadastre.gouv.fr .</html>"
+
+msgid "Departement"
+msgstr "Département :"
+
+msgid "<html>Departement number (optional)</html>"
+msgstr "<html> Numéro de département (facultatif)</html>"
+
+msgid "Add new layer"
+msgstr "Ajouter un nouveau calque"
+
+msgid "Open Cadastre Preferences"
+msgstr "Préfèrences pour l’utilisation du cadastre"
+
+msgid "Refine georeferencing"
+msgstr "redéfinir le géoréférencement"
+
+msgid "Improve georeferencing (only raster images)"
+msgstr "Améliorer le géoréférencement (seulement les images matricielles)"
+
+msgid "Reset cookie"
+msgstr "Réinitialiser le cookie"
+
+msgid "Get a new cookie (session timeout)"
+msgstr "Obtenir un nouveau cookie (session expirée)"
+
+msgid "Save image as..."
+msgstr "Sauvegarder l’image sous..."
+
+msgid "PNG files (*.png)"
+msgstr "Fichiers PNG (*.png)"
+
+msgid "GeoTiff files (*.tif)"
+msgstr "Fichiers GeoTiff (*.tif)"
+
+msgid "Export image (only raster images)"
+msgstr "Export de l’image (seulement imagerie raster)"
+
+msgid ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+"Plusieurs calques sont présents.\n"
+"Sélectionnez-en un dans la liste, puis réessayez."
+
 msgid "on polygon"
 msgstr "sur le polygone"
 
@@ -30634,91 +30884,85 @@ msgstr "Numéro suivant :"
 msgid "Enter addresses"
 msgstr "Saisir les adresses"
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
+msgstr "Ajuster WMS"
+
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
-"La commune {0} est déjà enregistrée.\n"
-"Voulez-vous charger le calque depuis le cache ?\n"
-"(Non = nouveau téléchargement)"
+"Ajuster la position du calque WMS (enregistrée seulement pour les images "
+"raster)"
 
-msgid "Select Feuille"
-msgstr "Sélectionner un calque cadastral"
+msgid "Add \"source=...\" to elements?"
+msgstr "Voulez-vous ajouter une source aux objets ?"
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Download from Cadastre"
 msgstr ""
-"Erreur de chargement du fichier.\n"
-"Probablement causée par une ancienne version du fichier de cache."
 
-msgid "Lambert Zone {0} cache file (.{0})"
-msgstr "Fichier de cache Zone Lambert {0} (.{0})"
+msgid "Objects:"
+msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
-msgstr "Fichier de cache Zone Lambert {0} (.CC{0})"
+msgid "Select to download buildings in the selected download area."
+msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
-msgstr "Fichier de cache Guadeloupe Fort Marigot (.UTM1)"
+msgid "address"
+msgstr "adresse"
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
-msgstr "Fichier de cache Guadeloupe Sainte-Anne (.UTM2)"
+msgid "Select to download addresses in the selected download area."
+msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
-msgstr "Fichier de cache Martinique Fort Desaix (.UTM3)"
+msgid "symbol"
+msgstr "symbole"
 
-msgid "Reunion RGR92 cache file (.UTM4)"
-msgstr "Réunion RGR92 en fichier cache (.UTM4)"
+msgid "Select to download symbols in the selected download area."
+msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
-msgstr "CadastreGrabber : l’adresse web est erronée."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "parcel"
+msgstr "parcelle"
+
+msgid "Select to download cadastral parcels in the selected download area."
 msgstr ""
-"Impossible d’ouvrir une nouvelle session.\n"
-"Le serveur est en maintenance ou saturé."
+
+msgid "parcel number"
+msgstr "Numéro de parcelle"
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
-msgstr "{0} n’a pas été trouvé ou n’est pas disponible."
+"Select to download cadastral parcel numbers in the selected download area."
+msgstr ""
 
-msgid "Choose from..."
-msgstr "Choisir"
+msgid "section"
+msgstr "section"
 
-msgid "Select commune"
-msgstr "Sélectionner la commune"
+msgid "Select to download cadastral sections in the selected download area."
+msgstr ""
 
-msgid "Auto sourcing"
-msgstr "Enregistrer la source automatiquement"
+msgid "locality"
+msgstr "lieu-dit"
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
 msgstr ""
-"Veuillez activer au moins  deux calques WMS dans la configuration du greffon "
-"cadastre-fr.\n"
-"Les calques ''bâtiment'' et ''parcelle'' ont été ajoutés par défaut."
+
+msgid "commune"
+msgstr "commune"
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
-"Attention : l’affichage des options au premier plan a échoué. Exception : {0}"
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
-"Pour activer le téléchargement du cadastre, utilisez une projection "
-"cadastrale et réessayez"
 
-msgid "Change the current projection"
-msgstr "Changer la projection courante"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
+msgstr ""
 
 msgid "Replace original background by JOSM background color."
 msgstr "Remplacer la couleur de fond par celle de JOSM"
@@ -30770,27 +31014,6 @@ msgstr "Moyenne"
 msgid "low"
 msgstr "Faible"
 
-msgid "symbol"
-msgstr "symbole"
-
-msgid "parcel"
-msgstr "parcelle"
-
-msgid "parcel number"
-msgstr "Numéro de parcelle"
-
-msgid "address"
-msgstr "adresse"
-
-msgid "locality"
-msgstr "lieu-dit"
-
-msgid "section"
-msgstr "section"
-
-msgid "commune"
-msgstr "commune"
-
 msgid "Enable automatic caching."
 msgstr "Enregistrer automatiquement le calque"
 
@@ -30953,8 +31176,63 @@ msgstr "Utiliser l’attribut \"add:street\" sur les nœuds."
 msgid "Unexpected file extension. {0}"
 msgstr "Extension de fichier inattendue. {0}"
 
-msgid "Add \"source=...\" to elements?"
-msgstr "Voulez-vous ajouter une source aux objets ?"
+msgid ""
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
+msgstr ""
+"La commune {0} est déjà enregistrée.\n"
+"Voulez-vous charger le calque depuis le cache ?\n"
+"(Non = nouveau téléchargement)"
+
+msgid "Select Feuille"
+msgstr "Sélectionner un calque cadastral"
+
+msgid ""
+"Error loading file.\n"
+"Probably an old version of the cache file."
+msgstr ""
+"Erreur de chargement du fichier.\n"
+"Probablement causée par une ancienne version du fichier de cache."
+
+msgid "Lambert Zone {0} cache file (.{0})"
+msgstr "Fichier de cache Zone Lambert {0} (.{0})"
+
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgstr "Fichier de cache Zone Lambert {0} (.CC{0})"
+
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgstr "Fichier de cache Guadeloupe Fort Marigot (.UTM1)"
+
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgstr "Fichier de cache Guadeloupe Sainte-Anne (.UTM2)"
+
+msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgstr "Fichier de cache Martinique Fort Desaix (.UTM3)"
+
+msgid "Reunion RGR92 cache file (.UTM4)"
+msgstr "Réunion RGR92 en fichier cache (.UTM4)"
+
+msgid "CadastreGrabber: Illegal url."
+msgstr "CadastreGrabber : l’adresse web est erronée."
+
+msgid ""
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
+msgstr ""
+"Impossible d’ouvrir une nouvelle session.\n"
+"Le serveur est en maintenance ou saturé."
+
+msgid ""
+"Town/city {0} not found or not available\n"
+"or action canceled"
+msgstr "{0} n’a pas été trouvé ou n’est pas disponible."
+
+msgid "Choose from..."
+msgstr "Choisir"
+
+msgid "Select commune"
+msgstr "Sélectionner la commune"
 
 msgid "Downloading {0}"
 msgstr "Téléchargement du cadastre de {0}"
@@ -31005,125 +31283,6 @@ msgstr ""
 "Cette commune n’est pas vectorisée.\n"
 "Utilisez un autre outil pour géoréférencer l’image."
 
-msgid "Extract commune boundary"
-msgstr "Extraire les limites de commune"
-
-msgid "Only on vectorized layers"
-msgstr "Seulement sur les calques vectorisés"
-
-msgid "Cancel current grab"
-msgstr "Annuler le téléchargement"
-
-msgid "Cancel current grab (only vector images)"
-msgstr "Annuler le téléchargement (images vectorielles seulement)"
-
-msgid "Cadastre grab"
-msgstr "Télécharger le cadastre"
-
-msgid "Download Image from French Cadastre WMS"
-msgstr "Télécharger depuis le serveur du cadastre français"
-
-msgid "Cadastre: {0}"
-msgstr "Cadastre : {0}"
-
-msgid "Georeference an image"
-msgstr "Géoréférencer une image"
-
-msgid "Grab non-georeferenced image"
-msgstr "Télécharger une image non-géoréférencée"
-
-msgid "Georeferencing interrupted"
-msgstr "Géoréférencement interrompu."
-
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
-msgstr ""
-"Cette image contient des données géographiques.\n"
-"Voulez-vous les utiliser ?"
-
-msgid "Load layer from cache"
-msgstr "Charger le calque depuis le cache"
-
-msgid "Load location from cache (only if cache is enabled)"
-msgstr "Télécharger le calque depuis le cache"
-
-msgid "{0} not allowed with the current projection"
-msgstr "{0} n’est pas permis dans cette projection"
-
-msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
-msgstr ""
-"Impossible de charger le calque {0} qui n’est pas compatible avec la zone de "
-"projection actuelle."
-
-msgid ""
-"Selected file {0} is not a cache file from this plugin (invalid extension)"
-msgstr ""
-"Le fichier sélectionné {0} n’est pas un fichier de cache associé à ce "
-"greffon (extension invalide)"
-
-msgid "The location {0} is already on screen. Cache not loaded."
-msgstr "La commune {0} est déjà affichée. Le chargement est interrompu."
-
-msgid "(optional)"
-msgstr "(facultatif)"
-
-msgid "Change location"
-msgstr "Changer de lieu"
-
-msgid "Set a new location for the next request"
-msgstr "Définir un nouveau lieu pour la prochaine requête"
-
-msgid "Add a new municipality layer"
-msgstr "Ajouter un nouveau calque cadastral."
-
-msgid "Commune"
-msgstr "Commune :"
-
-msgid ""
-"<html>Enter the town,village or city name.<br>Use the syntax and punctuation "
-"known by www.cadastre.gouv.fr .</html>"
-msgstr ""
-"<html>Entrer le nom de la ville ou du village.<br>Utiliser la syntaxe et la "
-"ponctuation de www.cadastre.gouv.fr .</html>"
-
-msgid "Departement"
-msgstr "Département :"
-
-msgid "<html>Departement number (optional)</html>"
-msgstr "<html> Numéro de département (facultatif)</html>"
-
-msgid "Add new layer"
-msgstr "Ajouter un nouveau calque"
-
-msgid "Open Cadastre Preferences"
-msgstr "Préfèrences pour l’utilisation du cadastre"
-
-msgid "Refine georeferencing"
-msgstr "redéfinir le géoréférencement"
-
-msgid "Improve georeferencing (only raster images)"
-msgstr "Améliorer le géoréférencement (seulement les images matricielles)"
-
-msgid "Reset cookie"
-msgstr "Réinitialiser le cookie"
-
-msgid "Get a new cookie (session timeout)"
-msgstr "Obtenir un nouveau cookie (session expirée)"
-
-msgid "Save image as..."
-msgstr "Sauvegarder l’image sous..."
-
-msgid "PNG files (*.png)"
-msgstr "Fichiers PNG (*.png)"
-
-msgid "GeoTiff files (*.tif)"
-msgstr "Fichiers GeoTiff (*.tif)"
-
-msgid "Export image (only raster images)"
-msgstr "Export de l’image (seulement imagerie raster)"
-
 msgid ""
 "Click first corner for image cropping\n"
 "(two points required)"
@@ -31179,21 +31338,6 @@ msgstr "Cliquez sur le second coin pour le recadrage."
 msgid "Click second Lambert crosspiece for georeferencing"
 msgstr "Cliquer sur la seconde croix Lambert pour géoréférencer."
 
-msgid "Adjust WMS"
-msgstr "Ajuster WMS"
-
-msgid "Adjust the position of the WMS layer (saved for raster images only)"
-msgstr ""
-"Ajuster la position du calque WMS (enregistrée seulement pour les images "
-"raster)"
-
-msgid ""
-"More than one WMS layer present\n"
-"Select one of them first, then retry"
-msgstr ""
-"Plusieurs calques sont présents.\n"
-"Sélectionnez-en un dans la liste, puis réessayez."
-
 msgid "Reset offset"
 msgstr "Réinitialiser le décalage"
 
@@ -31651,20 +31795,6 @@ msgstr ""
 "actions en cours ne sera affichée et il n''y aura aucun moyen d''annuler le "
 "téléchargement."
 
-msgid "Split area"
-msgstr "Couper la zone"
-
-msgid "Splits an area by an untagged way."
-msgstr "Coupe une zone à l’aide d’un chemin sans attribut."
-
-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 ""
-"La zone ne peut pas être coupée car elle est membre d’une relation.\n"
-"Retirer la zone de la relation avant de la couper."
-
 msgid "TangoGPS Files (*.log)"
 msgstr "Fichiers TangoGPS (*.log)"
 
@@ -37947,31 +38077,6 @@ msgstr "en boucle"
 msgid "mute"
 msgstr "muet"
 
-msgid "Walking Papers Scanned Map"
-msgstr "Carte des Walking Papers scannés"
-
-msgid ""
-"Display a map that was previously scanned and uploaded to walking-papers.org"
-msgstr ""
-"Afficher une carte précédemment scannée et envoyée sur walking-papers.org"
-
-msgid ""
-"Enter a walking-papers.org URL or ID (the bit after the ?id= in the URL)"
-msgstr ""
-"Entrer une adresse web walking-papers.org ou un identifiant (la valeur après "
-"le ?id= dans l’adresse web)"
-
-msgid "Could not read information from walking-papers.org the id \"{0}\""
-msgstr ""
-"Impossible de lire les informations depuis walking-papers.org pour "
-"l’identifiant ’’{0}’’"
-
-msgid "Walking Papers: {0}"
-msgstr "Walking Papers : {0}"
-
-msgid "Walking Papers layer ({0}) in zoom {1}"
-msgstr "Calque Walking Papers ({0}) au zoom {1}"
-
 msgid "Way Download"
 msgstr "Téléchargement du chemin"
 
@@ -38165,6 +38270,26 @@ msgstr ""
 "Ajoute un tag \"wikipedia\" correspondant à cet article sur les objets "
 "sélectionnés"
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "L’’Ultimate WMS Super-speed Turbo Challenge II"
 
diff --git a/i18n/po/ga.po b/i18n/po/ga.po
index d9af445..fda69fe 100644
--- a/i18n/po/ga.po
+++ b/i18n/po/ga.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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+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"
@@ -15,8 +15,8 @@ msgstr ""
 "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: 2017-09-03 04:44+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:42+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
 msgstr ""
@@ -386,6 +386,34 @@ msgstr ""
 msgid "Delete selected objects."
 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 "Delete Layer"
 msgstr ""
 
@@ -1292,29 +1320,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2723,34 +2737,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2782,6 +2768,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2901,6 +2910,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3008,6 +3029,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr ""
 
@@ -3051,6 +3075,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3687,6 +3714,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4727,9 +4808,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4775,6 +4853,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr ""
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4796,9 +4877,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -4999,6 +5077,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5251,6 +5337,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7033,6 +7123,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7255,9 +7348,6 @@ 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."
@@ -8185,15 +8275,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8222,33 +8312,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8372,6 +8435,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8505,6 +8595,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8514,6 +8610,9 @@ msgstr ""
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8658,6 +8757,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9697,9 +9799,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12836,15 +12935,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -12950,6 +13040,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13199,14 +13292,6 @@ 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 ""
 
@@ -13270,9 +13355,6 @@ msgid ""
 "{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 ""
 
@@ -14504,9 +14586,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14603,10 +14682,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15194,6 +15269,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17231,7 +17310,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23057,6 +23137,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23115,6 +23198,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23196,6 +23282,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23217,9 +23318,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23814,6 +23912,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24225,6 +24326,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24668,6 +24772,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25871,6 +25978,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26051,10 +26161,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26102,9 +26208,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26448,11 +26551,6 @@ msgid ""
 "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 ""
 
@@ -27063,13 +27161,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28366,6 +28464,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28381,77 +28617,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28502,27 +28743,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28663,160 +28883,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28866,17 +29023,6 @@ 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 ""
 
@@ -29313,18 +29459,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35070,26 +35204,6 @@ 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 ""
 
@@ -35258,6 +35372,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/gl.po b/i18n/po/gl.po
index 0d892a8..3babf9e 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
 "PO-Revision-Date: 2016-01-01 15:11+0000\n"
 "Last-Translator: Marcos Lans <Unknown>\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: 2017-09-03 04:44+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:42+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: gl\n"
 "X-Poedit-Language: Galician\n"
 
@@ -405,6 +405,37 @@ msgstr "Eliminar"
 msgid "Delete selected objects."
 msgstr "Eliminar os obxectos seleccionados."
 
+msgid "Delete confirmation"
+msgstr "Eliminar confirmació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 ""
+"Está a piques de eliminar os nodos que se atopan fora da área que "
+"descargou.<br>Isto pode causar problemas porque outros obxectos (que non ve) "
+"poden estar usándoos.<br>Quere eliminalos realmente?"
+
+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 "Delete Layer"
 msgstr ""
 
@@ -1411,34 +1442,14 @@ msgstr " [id: {0}]"
 msgid "Segment {0}: {1}"
 msgstr ""
 
-msgid "You must select two or more nodes to split a circular way."
-msgstr "Debes escoller dous ou máis nodos para separar unha vía circular."
-
-msgid ""
-"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
-"middle of the way.)"
+msgid "Search preset"
 msgstr ""
-"A vía non pode ser separada nos nodos seleccionads. (Consello: Selecciona "
-"nodos no medio da vía.)"
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
-"Todas as vías novas pasaron a formar parte dunha relación baseada en "
-"roles.<br> Verifique os cambios e corríxaos se é necesario."
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
-"Todas as vías novas pasaron a formar parte dunha relación.<br> Verifique os "
-"cambios e corríxaos se é necesario."
-
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] "Separar a vía {0} en {1}."
-msgstr[1] "Separar a vía {0} en {1}."
 
 msgid "Discourage upload"
 msgstr ""
@@ -2886,37 +2897,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] "Eliminar {0} relación"
 msgstr[1] "Eliminar {0} relacións"
 
-msgid "Delete confirmation"
-msgstr "Eliminar confirmació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 ""
-"Está a piques de eliminar os nodos que se atopan fora da área que "
-"descargou.<br>Isto pode causar problemas porque outros obxectos (que non ve) "
-"poden estar usándoos.<br>Quere eliminalos realmente?"
-
-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] "Mover {0} nodo"
@@ -2948,6 +2928,35 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+msgid "You must select two or more nodes to split a circular way."
+msgstr "Debes escoller dous ou máis nodos para separar unha vía circular."
+
+msgid ""
+"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
+"middle of the way.)"
+msgstr ""
+"A vía non pode ser separada nos nodos seleccionads. (Consello: Selecciona "
+"nodos no medio da vía.)"
+
+msgid ""
+"A role based relation membership was copied to all new ways.<br>You should "
+"verify this and correct it when necessary."
+msgstr ""
+"Todas as vías novas pasaron a formar parte dunha relación baseada en "
+"roles.<br> Verifique os cambios e corríxaos se é necesario."
+
+msgid ""
+"A relation membership was copied to all new ways.<br>You should verify this "
+"and correct it when necessary."
+msgstr ""
+"Todas as vías novas pasaron a formar parte dunha relación.<br> Verifique os "
+"cambios e corríxaos se é necesario."
+
+msgid "Split way {0} into {1} part"
+msgid_plural "Split way {0} into {1} parts"
+msgstr[0] "Separar a vía {0} en {1}."
+msgstr[1] "Separar a vía {0} en {1}."
+
 msgid "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -3069,6 +3078,18 @@ msgstr "Valor incorrecto de latitude «{0}»"
 msgid "Illegal longitude value ''{0}''"
 msgstr "Valor incorrecto de lonxitude «{0}»"
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3185,6 +3206,10 @@ msgstr "Imperial"
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+"Esperábase un valor non baleiro para o parámetro «{0}» obtívose «{1}»"
+
 msgid "UNKNOWN"
 msgstr "DESCOÑECIDO"
 
@@ -3228,6 +3253,9 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3888,6 +3916,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr "Descrición"
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr "Amosar esta axuda"
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr "Exemplos"
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4935,10 +5017,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-"Esperábase un valor non baleiro para o parámetro «{0}» obtívose «{1}»"
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4984,6 +5062,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr "Inicializando API de OSM"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -5005,9 +5086,6 @@ msgstr "uso"
 msgid "options"
 msgstr "opcións"
 
-msgid "Show this help"
-msgstr "Amosar esta axuda"
-
 msgid "Standard unix geometry argument"
 msgstr "Argumento de xeometría estándar de Unix"
 
@@ -5216,6 +5294,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5473,6 +5559,10 @@ msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 "El valor actual non é un índice de tesela válido para o nivel de zoom dado"
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr "Atopou un fallo en JOSM"
 
@@ -7324,6 +7414,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr "Actualizar o conxunto de cambios do servidor OSM"
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7569,9 +7662,6 @@ msgstr "URL: "
 msgid "Please enter or paste an URL to retrieve changesets from the OSM API."
 msgstr ""
 
-msgid "Examples"
-msgstr "Exemplos"
-
 msgid ""
 "Note that changeset queries are currently always submitted to ''{0}'', "
 "regardless of the host, port and path of the URL entered below."
@@ -8521,15 +8611,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8558,33 +8648,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr "historial"
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8708,6 +8771,33 @@ msgstr "Mapa esbaradío"
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr "historial"
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr "Navegador de axuda de JOSM"
 
@@ -8852,6 +8942,12 @@ msgstr "Zoom a este nodo na capa de datos actual"
 msgid "Open a history browser with the history of this node"
 msgstr "Abrir un novo navegador de historial ca historia deste nodo"
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr "Vía {0}"
 
@@ -8861,6 +8957,9 @@ msgstr "Relación {0}"
 msgid "Object"
 msgstr "Obxecto"
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -9018,6 +9117,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "Proporciona un breve comentario para os cambios que vas a subir:"
 
@@ -10074,9 +10176,6 @@ msgid_plural "{0} tracks"
 msgstr[0] "{0} camiño"
 msgstr[1] "{0} camiños"
 
-msgid "Description"
-msgstr "Descrición"
-
 msgid "Timespan"
 msgstr ""
 
@@ -13284,15 +13383,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr "Erro analizando {0}: "
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr "Axustes prestablecidos"
 
@@ -13400,6 +13490,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13665,14 +13758,6 @@ 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 ""
 
@@ -13736,9 +13821,6 @@ msgid ""
 "{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 ""
 
@@ -15025,9 +15107,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -15124,10 +15203,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15717,6 +15792,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17755,7 +17834,8 @@ msgid "Bay"
 msgstr "Bahía"
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23581,6 +23661,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23639,6 +23722,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23720,6 +23806,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23741,9 +23842,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -24338,6 +24436,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24749,6 +24850,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -25192,6 +25296,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -26395,6 +26502,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26575,10 +26685,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26628,9 +26734,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26999,13 +27102,6 @@ msgid ""
 "objects."
 msgstr ""
 
-msgid ""
-"Supports downloading tiled, scanned maps from walking-papers.org. This "
-"plugin is still under early development and may be buggy."
-msgstr ""
-"Admite descargar, mapas escaneados desde walking-papers.org . Este "
-"complemento aínda está baixo desenvolvemento e pode ter fallos."
-
 msgid "Easy downloading along a long set of interconnected ways"
 msgstr ""
 "Descarga doadamente ao longo de un longo conxunto de vías interconectadas"
@@ -27619,13 +27715,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28923,6 +29019,146 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 ""
+"Atencion: fallou o poñer o diálogo de panel de opción sempre enriba. A "
+"Excepción foi: {0}"
+
+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 "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 "Catastro: {0}"
+
+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 "{0} non está permitido na proxección actual"
+
+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 "(opcional)"
+
+msgid "Change location"
+msgstr "Cambiar o lugar"
+
+msgid "Set a new location for the next request"
+msgstr ""
+
+msgid "Add a new municipality layer"
+msgstr ""
+
+msgid "Commune"
+msgstr "de"
+
+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 "Engadir unha nova capa"
+
+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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr "nun polígono"
 
@@ -28938,85 +29174,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
-msgstr ""
+msgid "Adjust WMS"
+msgstr "Axustar WMS"
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
-msgstr ""
-"Erro cargando o ficheiro.\n"
-"Probablemente unha versión antiga da caché do ficheiro."
+msgid "Add \"source=...\" to elements?"
+msgstr "Engadir «source=…» aos elementos?"
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
-msgstr "Guadeloupe Ste-Anne ficheiro cache  (.UTM2)"
+msgid "address"
+msgstr "enderezo"
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
-msgstr "Martinique Fort Desaix ficheiro cache  (.UTM3)"
+msgid "Select to download addresses in the selected download area."
+msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
-msgstr "Reunion RGR92 ficheiro cache  (.UTM4)"
+msgid "symbol"
+msgstr "símbolo"
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
 msgstr ""
-"Non se pode abrir unha nova conexión de cliente.\n"
-"O servidor esta baixo mantemento ou temporalmente sobrecargado."
+
+msgid "parcel"
+msgstr "parcela"
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
+msgstr "numero de parcela"
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
-"Cidade/Vila {0} non atopada ou non dispoñíbel\n"
-"ou acción cancelada"
 
-msgid "Choose from..."
-msgstr "Escoller de…"
+msgid "section"
+msgstr "sección"
 
-msgid "Select commune"
-msgstr "Escoller común"
+msgid "Select to download cadastral sections in the selected download area."
+msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
+msgstr "localidade"
+
+msgid "Select to download localities in the selected download area."
 msgstr ""
 
+msgid "commune"
+msgstr "común"
+
 msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
-"Atencion: fallou o poñer o diálogo de panel de opción sempre enriba. A "
-"Excepción foi: {0}"
 
-msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+msgid "Recipient"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -29067,27 +29300,6 @@ msgstr ""
 msgid "low"
 msgstr "baixa"
 
-msgid "symbol"
-msgstr "símbolo"
-
-msgid "parcel"
-msgstr "parcela"
-
-msgid "parcel number"
-msgstr "numero de parcela"
-
-msgid "address"
-msgstr "enderezo"
-
-msgid "locality"
-msgstr "localidade"
-
-msgid "section"
-msgstr "sección"
-
-msgid "commune"
-msgstr "común"
-
 msgid "Enable automatic caching."
 msgstr "Activar caché automática."
 
@@ -29232,160 +29444,103 @@ msgstr ""
 msgid "Unexpected file extension. {0}"
 msgstr ""
 
-msgid "Add \"source=...\" to elements?"
-msgstr "Engadir «source=…» aos elementos?"
-
-msgid "Downloading {0}"
-msgstr "A obter {0}"
-
-msgid "Contacting WMS Server..."
-msgstr ""
-
-msgid "Create buildings"
-msgstr "Crear edificios"
-
 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
+"Erro cargando o ficheiro.\n"
+"Probablemente unha versión antiga da caché do ficheiro."
 
-msgid "Download Image from French Cadastre WMS"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Cadastre: {0}"
-msgstr "Catastro: {0}"
-
-msgid "Georeference an image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid "Georeferencing interrupted"
-msgstr ""
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgstr "Guadeloupe Ste-Anne ficheiro cache  (.UTM2)"
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
-msgstr ""
+msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgstr "Martinique Fort Desaix ficheiro cache  (.UTM3)"
 
-msgid "Load layer from cache"
-msgstr ""
+msgid "Reunion RGR92 cache file (.UTM4)"
+msgstr "Reunion RGR92 ficheiro cache  (.UTM4)"
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
-msgstr "{0} non está permitido na proxección actual"
-
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 msgstr ""
+"Non se pode abrir unha nova conexión de cliente.\n"
+"O servidor esta baixo mantemento ou temporalmente sobrecargado."
 
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
+"Cidade/Vila {0} non atopada ou non dispoñíbel\n"
+"ou acción cancelada"
 
-msgid "(optional)"
-msgstr "(opcional)"
+msgid "Choose from..."
+msgstr "Escoller de…"
 
-msgid "Change location"
-msgstr "Cambiar o lugar"
+msgid "Select commune"
+msgstr "Escoller común"
 
-msgid "Set a new location for the next request"
-msgstr ""
+msgid "Downloading {0}"
+msgstr "A obter {0}"
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
-msgstr "de"
+msgid "Create buildings"
+msgstr "Crear edificios"
 
 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 "Engadir unha nova capa"
-
-msgid "Open Cadastre Preferences"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -29435,17 +29590,6 @@ msgstr ""
 msgid "Click second Lambert crosspiece for georeferencing"
 msgstr ""
 
-msgid "Adjust WMS"
-msgstr "Axustar WMS"
-
-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 ""
 
@@ -29884,18 +30028,6 @@ msgid ""
 "to cancel the download."
 msgstr ""
 
-msgid "Split area"
-msgstr "Dividir área"
-
-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 "Ficheiros TangoGPS (*.log)"
 
@@ -35669,27 +35801,6 @@ msgstr "bucle"
 msgid "mute"
 msgstr "mutar"
 
-msgid "Walking Papers Scanned Map"
-msgstr ""
-
-msgid ""
-"Display a map that was previously scanned and uploaded to walking-papers.org"
-msgstr ""
-"Amosar un mapa que foi previamente escaneado e subido a walking-papers.org"
-
-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 "Non se puido ler a información de walking-papers.org co id «{0}»"
-
-msgid "Walking Papers: {0}"
-msgstr "Walking Papers: {0}"
-
-msgid "Walking Papers layer ({0}) in zoom {1}"
-msgstr "Capa Walking Papers  ({0}) in zoom {1}"
-
 msgid "Way Download"
 msgstr ""
 
@@ -35858,6 +35969,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/he.po b/i18n/po/he.po
index 394180f..b1e1e31 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
 "PO-Revision-Date: 2017-06-04 17:31+0000\n"
 "Last-Translator: SwiftFast <Unknown>\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: 2017-09-03 04:45+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:43+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: he\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -390,6 +390,36 @@ msgstr "מחק"
 msgid "Delete selected objects."
 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 ""
+"אתה עומד למחוק נקודות מחוץ לשטח שהורדת.<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 ""
+
+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 "Delete Layer"
 msgstr "מחיקת שכבה"
 
@@ -1299,28 +1329,14 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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."
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
+msgid "Search presets"
+msgstr ""
 
 msgid "Discourage upload"
 msgstr ""
@@ -2734,36 +2750,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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 ""
-"אתה עומד למחוק נקודות מחוץ לשטח שהורדת.<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 ""
-
-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] ""
@@ -2795,6 +2781,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2914,6 +2923,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3021,6 +3042,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr "לא ידוע"
 
@@ -3064,6 +3088,9 @@ msgctxt "compass"
 msgid "E"
 msgstr "מזרח"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3703,6 +3730,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr "תיאור"
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr "הצג עזרה זו"
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4747,9 +4828,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4795,6 +4873,9 @@ msgstr "מאתחל נתונים פנימיים עבור גבולות"
 msgid "Initializing OSM API"
 msgstr "מאתחל OSM API"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr "מאתחל נתוני תעבורה פנימיים"
 
@@ -4816,9 +4897,6 @@ msgstr "שימוש"
 msgid "options"
 msgstr "אפשרויות"
 
-msgid "Show this help"
-msgstr "הצג עזרה זו"
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -5019,6 +5097,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5271,6 +5357,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7062,6 +7152,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7284,9 +7377,6 @@ 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."
@@ -8215,15 +8305,15 @@ msgstr "הורדת איזור בסדר; כנראה שתתקבל ע\"י השרת"
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8252,33 +8342,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr "היסטוריה"
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8402,6 +8465,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr "מספרי משטחים"
 
+msgid "history"
+msgstr "היסטוריה"
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8535,6 +8625,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8544,6 +8640,9 @@ msgstr ""
 msgid "Object"
 msgstr "פריט"
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8688,6 +8787,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "ספק הערה קצרה לשינויים שאתה מעלה:"
 
@@ -9729,9 +9831,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr "תיאור"
-
 msgid "Timespan"
 msgstr ""
 
@@ -12878,15 +12977,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr "שגיאה בניתוח {0}: "
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -12992,6 +13082,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13241,14 +13334,6 @@ 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 ""
 
@@ -13312,9 +13397,6 @@ msgid ""
 "{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 ""
 
@@ -14546,9 +14628,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14645,10 +14724,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15238,6 +15313,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17275,7 +17354,8 @@ msgid "Bay"
 msgstr "מפרץ"
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23101,6 +23181,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23159,6 +23242,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23240,6 +23326,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23261,9 +23362,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23858,6 +23956,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24269,6 +24370,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24712,6 +24816,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25915,6 +26022,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26095,10 +26205,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26146,9 +26252,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26492,11 +26595,6 @@ msgid ""
 "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 ""
 
@@ -27107,13 +27205,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28410,6 +28508,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28425,77 +28661,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
+msgstr "התאם WMS"
+
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "address"
+msgstr "כתובת"
+
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "symbol"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "Select to download water bodies in the selected download area."
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "parcel"
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
-msgstr "בחר מ..."
+msgid "section"
+msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28546,27 +28787,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28707,160 +28927,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Cancel current grab (only vector images)"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Cadastre grab"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Download Image from French Cadastre WMS"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid "Cadastre: {0}"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "CadastreGrabber: Illegal url."
 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"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid ""
-"Selected file {0} is not a cache file from this plugin (invalid extension)"
-msgstr ""
+msgid "Choose from..."
+msgstr "בחר מ..."
 
-msgid "The location {0} is already on screen. Cache not loaded."
+msgid "Select commune"
 msgstr ""
 
-msgid "(optional)"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Change location"
-msgstr "שנה מיקום"
-
-msgid "Set a new location for the next request"
-msgstr "קבע מיקום חדש לבקשה הבאה"
-
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28910,17 +29067,6 @@ msgstr ""
 msgid "Click second Lambert crosspiece for georeferencing"
 msgstr ""
 
-msgid "Adjust WMS"
-msgstr "התאם WMS"
-
-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 ""
 
@@ -29357,18 +29503,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35118,26 +35252,6 @@ 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 ""
 
@@ -35306,6 +35420,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/hi.po b/i18n/po/hi.po
index 7b4a236..99d0e70 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+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: 2017-09-03 04:46+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:44+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: hi\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -387,6 +387,34 @@ msgstr "मिटाएँ"
 msgid "Delete selected objects."
 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 "Delete Layer"
 msgstr ""
 
@@ -1293,29 +1321,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2724,34 +2738,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2783,6 +2769,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2902,6 +2911,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3009,6 +3030,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr "अज्ञात"
 
@@ -3052,6 +3076,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3688,6 +3715,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4728,9 +4809,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4776,6 +4854,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr ""
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4797,9 +4878,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -5000,6 +5078,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5252,6 +5338,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7034,6 +7124,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7256,9 +7349,6 @@ 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."
@@ -8186,15 +8276,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8223,33 +8313,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8373,6 +8436,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8506,6 +8596,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8515,6 +8611,9 @@ msgstr ""
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8659,6 +8758,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9698,9 +9800,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12837,15 +12936,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -12951,6 +13041,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13200,14 +13293,6 @@ 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 ""
 
@@ -13271,9 +13356,6 @@ msgid ""
 "{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 ""
 
@@ -14505,9 +14587,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14604,10 +14683,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15195,6 +15270,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17232,7 +17311,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23058,6 +23138,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23116,6 +23199,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23197,6 +23283,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23218,9 +23319,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23815,6 +23913,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24226,6 +24327,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24669,6 +24773,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25872,6 +25979,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26052,10 +26162,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26103,9 +26209,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26449,11 +26552,6 @@ msgid ""
 "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 ""
 
@@ -27064,13 +27162,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28367,6 +28465,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28382,77 +28618,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28503,27 +28744,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28664,160 +28884,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28867,17 +29024,6 @@ 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 ""
 
@@ -29314,18 +29460,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35071,26 +35205,6 @@ 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 ""
 
@@ -35259,6 +35373,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/hr.po b/i18n/po/hr.po
index c388199..094818e 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
 "PO-Revision-Date: 2016-01-04 15:56+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: 2017-09-03 04:59+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:57+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: hr\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -394,6 +394,37 @@ msgstr "Obriši"
 msgid "Delete selected objects."
 msgstr "Obriši izabrane objekte."
 
+msgid "Delete confirmation"
+msgstr "Potvrda brisanja"
+
+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 ""
+"Želiš li izbrisati točke koje su izvan područja kojeg si preuzeo.<br>To može "
+"izazvati probleme zato jer ih ostali objekti (koje ne vidiš) mogu "
+"koristiti.<br>Želiš li stvarno obrisati?"
+
+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 "Izbrisati relaciju?"
+
 msgid "Delete Layer"
 msgstr ""
 
@@ -1356,31 +1387,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-msgid "You must select two or more nodes to split a circular way."
-msgstr "Morate izabrati dvije ili više točaka da bi razdvojili kružni put."
-
-msgid ""
-"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
-"middle of the way.)"
+msgid "Search preset"
 msgstr ""
-"Put se ne može razdvojiti na izabranim točkama. (Uputa: Izabreite točke na "
-"sredini puta)"
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2818,37 +2833,6 @@ msgstr[0] "Izbriši {0} relaciju"
 msgstr[1] "Izbriši {0} relacije"
 msgstr[2] "Izbriši {0} relacija"
 
-msgid "Delete confirmation"
-msgstr "Potvrda brisanja"
-
-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 ""
-"Želiš li izbrisati točke koje su izvan područja kojeg si preuzeo.<br>To može "
-"izazvati probleme zato jer ih ostali objekti (koje ne vidiš) mogu "
-"koristiti.<br>Želiš li stvarno obrisati?"
-
-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 "Izbrisati relaciju?"
-
 msgid "Move {0} node"
 msgid_plural "Move {0} nodes"
 msgstr[0] "Pomakni {0} točku"
@@ -2883,6 +2867,31 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr "Sekvenca: {0}"
 
+msgid "You must select two or more nodes to split a circular way."
+msgstr "Morate izabrati dvije ili više točaka da bi razdvojili kružni put."
+
+msgid ""
+"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
+"middle of the way.)"
+msgstr ""
+"Put se ne može razdvojiti na izabranim točkama. (Uputa: Izabreite točke na "
+"sredini puta)"
+
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] "Transformiraj {0} točku"
@@ -3006,6 +3015,18 @@ msgstr "Nedozvoljena vrijednost zemljopisne širine ''{0}''"
 msgid "Illegal longitude value ''{0}''"
 msgstr "Nedozvoljena vrijednost zemljopisne dužine ''{0}''"
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3113,6 +3134,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr "NEPOZNATO"
 
@@ -3156,6 +3180,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3795,6 +3822,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr "Primjeri"
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4837,9 +4918,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4885,6 +4963,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr "Inicijaliziram OSM API"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4906,9 +4987,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -5109,6 +5187,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5361,6 +5447,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7153,6 +7243,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7375,9 +7468,6 @@ msgstr "URL: "
 msgid "Please enter or paste an URL to retrieve changesets from the OSM API."
 msgstr ""
 
-msgid "Examples"
-msgstr "Primjeri"
-
 msgid ""
 "Note that changeset queries are currently always submitted to ''{0}'', "
 "regardless of the host, port and path of the URL entered below."
@@ -8308,15 +8398,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8345,33 +8435,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8495,6 +8558,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8628,6 +8718,12 @@ msgstr "Zumiraj na ovu točku u trenutnom sloju"
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr "Put {0}"
 
@@ -8637,6 +8733,9 @@ msgstr "Relacija {0}"
 msgid "Object"
 msgstr "Objekt"
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8793,6 +8892,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "Dajte kratak komentar za promjene koje uploadirate:"
 
@@ -9843,9 +9945,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12987,15 +13086,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -13101,6 +13191,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13350,14 +13443,6 @@ 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 ""
 
@@ -13421,9 +13506,6 @@ msgid ""
 "{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 ""
 
@@ -14655,9 +14737,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14754,10 +14833,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15345,6 +15420,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17382,7 +17461,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23208,6 +23288,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23266,6 +23349,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23347,6 +23433,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23368,9 +23469,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23965,6 +24063,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24376,6 +24477,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24819,6 +24923,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -26022,6 +26129,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26202,10 +26312,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26253,9 +26359,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26599,11 +26702,6 @@ msgid ""
 "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 ""
 
@@ -27214,13 +27312,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28517,6 +28615,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 "Dodaj novi sloj"
+
+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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28532,77 +28768,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28653,27 +28894,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28814,160 +29034,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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 "Dodaj novi sloj"
-
-msgid "Open Cadastre Preferences"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -29017,17 +29174,6 @@ 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 ""
 
@@ -29464,18 +29610,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35227,26 +35361,6 @@ 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 ""
 
@@ -35415,6 +35529,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/ht.po b/i18n/po/ht.po
index c461493..77a5c5f 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+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: 2017-09-03 04:45+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:43+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -387,6 +387,34 @@ msgstr ""
 msgid "Delete selected objects."
 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 "Delete Layer"
 msgstr ""
 
@@ -1293,29 +1321,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2724,34 +2738,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2783,6 +2769,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2902,6 +2911,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3009,6 +3030,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr ""
 
@@ -3052,6 +3076,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3688,6 +3715,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4728,9 +4809,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4776,6 +4854,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr ""
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4797,9 +4878,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -5000,6 +5078,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5252,6 +5338,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7034,6 +7124,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7256,9 +7349,6 @@ 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."
@@ -8186,15 +8276,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8223,33 +8313,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8373,6 +8436,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8506,6 +8596,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8515,6 +8611,9 @@ msgstr ""
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8659,6 +8758,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9698,9 +9800,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12837,15 +12936,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -12951,6 +13041,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13200,14 +13293,6 @@ 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 ""
 
@@ -13271,9 +13356,6 @@ msgid ""
 "{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 ""
 
@@ -14505,9 +14587,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14604,10 +14683,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15195,6 +15270,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17232,7 +17311,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23058,6 +23138,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23116,6 +23199,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23197,6 +23283,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23218,9 +23319,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23815,6 +23913,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24226,6 +24327,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24669,6 +24773,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25872,6 +25979,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26052,10 +26162,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26103,9 +26209,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26449,11 +26552,6 @@ msgid ""
 "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 ""
 
@@ -27064,13 +27162,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28367,6 +28465,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28382,77 +28618,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28503,27 +28744,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28664,160 +28884,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28867,17 +29024,6 @@ 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 ""
 
@@ -29314,18 +29460,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35071,26 +35205,6 @@ 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 ""
 
@@ -35259,6 +35373,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/hu.po b/i18n/po/hu.po
index f7ac9c0..5f97ee0 100644
--- a/i18n/po/hu.po
+++ b/i18n/po/hu.po
@@ -8,35 +8,35 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-02 22:59+0200\n"
-"PO-Revision-Date: 2017-08-27 07:48+0000\n"
-"Last-Translator: Botos Yeti <Unknown>\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
+"PO-Revision-Date: 2017-09-30 19:17+0000\n"
+"Last-Translator: Gábor Babos <Unknown>\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: 2017-09-03 04:46+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-10-01 04:31+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: hu\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
-msgstr "{0}: „{1}” kapcsoló nem egyértelmű"
+msgstr "{0}: \"{1}\" kapcsoló nem egyértelmű"
 
 msgid "{0}: option ''--{1}'' does not allow an argument"
-msgstr "{0}: „--{1}” kapcsoló nem használ paramétert"
+msgstr "{0}: \"--{1}\" kapcsoló nem használ paramétert"
 
 msgid "{0}: option ''{1}{2}'' does not allow an argument"
-msgstr "{0}: „--{1}{2}” kapcsoló nem használ paramétert"
+msgstr "{0}: \"--{1}{2}\" kapcsoló nem használ paramétert"
 
 msgid "{0}: option ''{1}'' requires an argument"
-msgstr "{0}: „{1}” kapcsoló paramétert igényel"
+msgstr "{0}: \"{1}\" kapcsoló paramétert igényel"
 
 msgid "{0}: unrecognized option ''--{1}''"
-msgstr "{0}: nem felismerhető „--{1}” kapcsoló"
+msgstr "{0}: nem felismerhető \"--{1}\" kapcsoló"
 
 msgid "{0}: unrecognized option ''{1}{2}''"
-msgstr "{0}: nem felismerhető „--{1}{2}” kapcsoló"
+msgstr "{0}: nem felismerhető \"--{1}{2}\" kapcsoló"
 
 msgid "{0}: illegal option -- {1}"
 msgstr "{0}: szabálytalan --{1} kapcsoló"
@@ -48,14 +48,14 @@ msgid "{0}: option requires an argument -- {1}"
 msgstr "{0}: a kapcsoló paramétert igényel -- {1}"
 
 msgid "Invalid value {0} for parameter ''has_arg''"
-msgstr "Érvénytelen {0} érték a „has_arg” paraméterhez"
+msgstr "Érvénytelen {0} érték a \"has_arg\" paraméterhez"
 
 msgid "Background Terms of Use"
 msgstr "Háttérképek felhasználási feltételei"
 
 msgid "Opening link not supported on current platform (''{0}'')"
 msgstr ""
-"A hivatkozás megnyitása nem támogatott az aktuális („{0}”) platformon"
+"A hivatkozás megnyitása nem támogatott az aktuális (\"{0}\") platformon"
 
 msgid "Failed to save default preferences."
 msgstr "Nem sikerült elmenteni az alapértelmezett beállításokat."
@@ -406,6 +406,43 @@ msgstr "Törlés"
 msgid "Delete selected objects."
 msgstr "Kijelölt objektumok törlése."
 
+msgid "Delete confirmation"
+msgstr "Törlés megerősítése"
+
+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 ""
+"Olyan pontokat próbáltál törölni, amik kívül esnek a letöltött "
+"területen.<br>Ez gondot okozhat, mert más objektumok (amiket nem látsz) is "
+"használhatják.<br>Biztosan törlöd?"
+
+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 ""
+"Félkész objektumokat próbáltál törölni.<br>Ez gondot okozhat, mert nem látod "
+"a valódi objektumot.<br>Biztosan törlöd?"
+
+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] ""
+"{0} kapcsolat törlésére készülsz: {1}<br/>Ez a lépés ritkán szükséges és a "
+"szerverre való feltöltés után nem visszavonható.<br/>Biztosan törlöd?"
+msgstr[1] ""
+"{0} kapcsolat törlésére készülsz: {1}<br/>Ez a lépés ritkán szükséges és a "
+"szerverre való feltöltés után nem visszavonható.<br/>Biztosan törlöd?"
+
+msgid "Delete relation?"
+msgstr "Törlöd a kapcsolatot?"
+
 msgid "Delete Layer"
 msgstr "Réteg törlése"
 
@@ -440,7 +477,7 @@ msgid "Download data"
 msgstr "Adatok letöltése"
 
 msgid "Download map data from a server of your choice"
-msgstr ""
+msgstr "Adatok letöltése az általad kiválasztott kiszolgálóról"
 
 msgid ""
 "<html>This action will require {0} individual<br>download requests. Do you "
@@ -1408,34 +1445,14 @@ msgstr " [id: {0}]"
 msgid "Segment {0}: {1}"
 msgstr "Szakasz {0}: {1}"
 
-msgid "You must select two or more nodes to split a circular way."
-msgstr "Körvonalat csak kettő vagy több pont kijelölésével lehet felosztani."
-
-msgid ""
-"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
-"middle of the way.)"
-msgstr ""
-"A vonal nem osztható fel a kijelölt pontoknál. (Tipp: Jelölj ki pontokat a "
-"vonalon belül.)"
-
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
-msgstr ""
-"Egy szerep alapú kapcsolattagság át lett másolva az újonnan létrejött "
-"vonalakra.<br>Érdemes ellenőrizned, és javítanod, ha szükséges."
+msgid "Search preset"
+msgstr "Címkekészlet keresése"
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
-msgstr ""
-"Egy kapcsolattagság át lett másolva az újonnan létrejött "
-"vonalakra.<br>Érdemes ellenőrizned, és javítanod, ha szükséges."
+msgid "Show preset search dialog"
+msgstr "Készletkereső ablak megnyitása"
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] "{0} vonal elvágása {1} részre"
-msgstr[1] "{0} vonal elvágása {1} részre"
+msgid "Search presets"
+msgstr "Készlet keresése"
 
 msgid "Discourage upload"
 msgstr ""
@@ -1866,7 +1883,7 @@ msgid "Downloading Notes"
 msgstr "Jegyzetek letöltése"
 
 msgid "Notes"
-msgstr "Jegyzetek"
+msgstr "Megjegyzések"
 
 msgid "{0} note has been downloaded."
 msgid_plural "{0} notes have been downloaded."
@@ -2507,7 +2524,7 @@ msgid "Additional settings"
 msgstr "További beállítások"
 
 msgid "Search syntax"
-msgstr ""
+msgstr "Kereső szintaxis"
 
 msgid "Invalid search expression"
 msgstr "Érvénytelen keresőkifejezés"
@@ -2915,7 +2932,7 @@ msgstr "''{0}'' kicserélése erre: ''{1}''"
 msgid "object"
 msgid_plural "objects"
 msgstr[0] "objektum"
-msgstr[1] "objektum"
+msgstr[1] "objektumok"
 
 msgid "Change relation member role for {0} {1}"
 msgstr "Kapcsolattag szerepváltoztatás {0} {1}"
@@ -2955,43 +2972,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] "{0} kapcsolat törlése"
 msgstr[1] "{0} kapcsolat törlése"
 
-msgid "Delete confirmation"
-msgstr "Törlés megerősítése"
-
-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 ""
-"Olyan pontokat próbáltál törölni, amik kívül esnek a letöltött "
-"területen.<br>Ez gondot okozhat, mert más objektumok (amiket nem látsz) is "
-"használhatják.<br>Biztosan törlöd?"
-
-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 ""
-"Félkész objektumokat próbáltál törölni.<br>Ez gondot okozhat, mert nem látod "
-"a valódi objektumot.<br>Biztosan törlöd?"
-
-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] ""
-"{0} kapcsolat törlésére készülsz: {1}<br/>Ez a lépés ritkán szükséges és a "
-"szerverre való feltöltés után nem visszavonható.<br/>Biztosan törlöd?"
-msgstr[1] ""
-"{0} kapcsolat törlésére készülsz: {1}<br/>Ez a lépés ritkán szükséges és a "
-"szerverre való feltöltés után nem visszavonható.<br/>Biztosan törlöd?"
-
-msgid "Delete relation?"
-msgstr "Törlöd a kapcsolatot?"
-
 msgid "Move {0} node"
 msgid_plural "Move {0} nodes"
 msgstr[0] "{0} pont mozgatása"
@@ -3023,6 +3003,35 @@ msgstr[1] "{0} objektum kijelölve"
 msgid "Sequence: {0}"
 msgstr "Sorrend: {0}"
 
+msgid "You must select two or more nodes to split a circular way."
+msgstr "Körvonalat csak kettő vagy több pont kijelölésével lehet felosztani."
+
+msgid ""
+"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
+"middle of the way.)"
+msgstr ""
+"A vonal nem osztható fel a kijelölt pontoknál. (Tipp: Jelölj ki pontokat a "
+"vonalon belül.)"
+
+msgid ""
+"A role based relation membership was copied to all new ways.<br>You should "
+"verify this and correct it when necessary."
+msgstr ""
+"Egy szerep alapú kapcsolattagság át lett másolva az újonnan létrejött "
+"vonalakra.<br>Érdemes ellenőrizned, és javítanod, ha szükséges."
+
+msgid ""
+"A relation membership was copied to all new ways.<br>You should verify this "
+"and correct it when necessary."
+msgstr ""
+"Egy kapcsolattagság át lett másolva az újonnan létrejött "
+"vonalakra.<br>Érdemes ellenőrizned, és javítanod, ha szükséges."
+
+msgid "Split way {0} into {1} part"
+msgid_plural "Split way {0} into {1} parts"
+msgstr[0] "{0} vonal elvágása {1} részre"
+msgstr[1] "{0} vonal elvágása {1} részre"
+
 msgid "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] "{0} pont átalakítása"
@@ -3155,6 +3164,18 @@ msgstr "Rossz széleségi érték: ''{0}''"
 msgid "Illegal longitude value ''{0}''"
 msgstr "Rossz hosszúsági érték: ''{0}''"
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr "Nem sikerült létrehozni a hiányző cache könyvtárat: {0}"
 
@@ -3183,15 +3204,15 @@ msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
 msgstr ""
-"Nem sikerült előkészíteni a beállításokat. A beállítások könyvtára „{0}” nem "
-"könyvtár."
+"Nem sikerült előkészíteni a beállításokat. A beállítások könyvtára \"{0}\" "
+"nem könyvtár."
 
 msgid ""
 "<html>Failed to initialize preferences.<br>Preference directory ''{0}'' is "
 "not a directory.</html>"
 msgstr ""
 "<html>Nem sikerült előkészíteni a beállításokat. A beállítások könyvtára "
-"„{0}” nem könyvtár.</html>"
+"\"{0}\" nem könyvtár.</html>"
 
 msgid ""
 "Failed to initialize preferences. Failed to create missing preference "
@@ -3285,6 +3306,9 @@ msgstr "Angolszász"
 msgid "Nautical Mile"
 msgstr "Tengeri mérföld"
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr "''{0}'' paraméter nem üres értéket vár, de ezt kapta: ''{1}''"
+
 msgid "UNKNOWN"
 msgstr "ISMERETLEN"
 
@@ -3328,6 +3352,9 @@ msgctxt "compass"
 msgid "E"
 msgstr "K"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr "Légifelvétel dátuma: {0}"
 
@@ -3345,10 +3372,10 @@ msgid "Update default entries"
 msgstr "Alapértelmezett bejegyzések frissítése"
 
 msgid "Update imagery ''{0}''"
-msgstr "„{0}” légifelvétel frissítése"
+msgstr "\"{0}\" légifelvétel frissítése"
 
 msgid "Drop old imagery ''{0}''"
-msgstr "„{0}” régi légifelvétel elvetése"
+msgstr "\"{0}\" régi légifelvétel elvetése"
 
 msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr "''{0}'' vetület nem található, ''{1}'' könyvjelző nem használható"
@@ -3503,7 +3530,7 @@ msgid "railway"
 msgstr "vasút"
 
 msgid "waterway"
-msgstr "vízi út"
+msgstr "vízfolyás"
 
 msgid "landuse"
 msgstr "területfunkció"
@@ -3657,7 +3684,7 @@ msgstr ""
 "{1}"
 
 msgid "Cannot parse timestamp ''{0}''"
-msgstr "„{0}” időbélyeg elemzése sikertelen"
+msgstr "\"{0}\" időbélyeg elemzése sikertelen"
 
 msgid "Expecting {0} after {1}"
 msgstr "{0} várt ez után: {1}"
@@ -3807,7 +3834,7 @@ msgid "areatext"
 msgstr "területszöveg"
 
 msgid "Expected element ''{0}'', but got ''{1}''"
-msgstr "Várt elem: „{0}”, kapott érték: „{1}”"
+msgstr "Várt elem: \"{0}\", kapott érték: \"{1}\""
 
 msgid "value expected"
 msgstr "várt érték"
@@ -4006,6 +4033,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr "egyéni vetület"
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr "Leírás"
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr "Ezen súgó megjelenítése"
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr "Példák"
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr "GRS80"
 
@@ -4043,10 +4124,10 @@ msgid "Oblique Mercator"
 msgstr "Ferdetengelyű Mercator"
 
 msgid "Unsuitable parameters ''{0}'' and ''{1}'' for two point method."
-msgstr "„{0}” és „{1}” alkalmatlan paraméterek a kétpontos módszerhez."
+msgstr "\"{0}\" és \"{1}\" alkalmatlan paraméterek a kétpontos módszerhez."
 
 msgid "Illegal value for parameter ''{0}'': {1}"
-msgstr "„{0}” paraméter értéke érvénytelen: {1}"
+msgstr "\"{0}\" paraméter értéke érvénytelen: {1}"
 
 msgid "error in initialization"
 msgstr "hiba az inicializáció során"
@@ -4055,7 +4136,7 @@ msgid "Polar Stereographic"
 msgstr "Poláris sztereografikus"
 
 msgid "Polar Stereographic: Parameter ''{0}'' must be 90 or -90."
-msgstr "Poláris sztereografikus: „{0}” paraméter 90 vagy -90 kell legyen."
+msgstr "Poláris sztereografikus: \"{0}\" paraméter 90 vagy -90 kell legyen."
 
 msgid "Sinusoidal"
 msgstr "Szinuszos"
@@ -4191,7 +4272,7 @@ msgid "Tests for the correct usage of ''*:conditional'' tags."
 msgstr "Tesztek a ''*:conditional'' címkék helyes használatára."
 
 msgid "Does not match pattern ''restriction value @ condition''"
-msgstr "„korlátozás érték @ feltétel” mintaellenőrzés mellőzése"
+msgstr "\"korlátozás érték @ feltétel\" mintaellenőrzés mellőzése"
 
 msgid "{0} is not a valid restriction value"
 msgstr "{0} nem egy érvényes korlátozás érték"
@@ -4578,7 +4659,7 @@ msgid "Public Transport Route"
 msgstr "Tömegközlekedési útvonal"
 
 msgid "Route relation contains a ''{0}'' role"
-msgstr "Az útvonal kapcsolatnak „{0}” szerepű tagja van"
+msgstr "Az útvonal kapcsolatnak \"{0}\" szerepű tagja van"
 
 msgid "Route relation contains a gap"
 msgstr "Az útvonal kapcsolatban szakadás van"
@@ -4610,33 +4691,33 @@ msgstr "Üres kapcsolat"
 msgid ""
 "Role of relation member does not match expression ''{0}'' in template {1}"
 msgstr ""
-"A kapcsolat tag szerepe nem illeszkedik a(z) „{0}” kifejezésre a(z) {1} "
+"A kapcsolat tag szerepe nem illeszkedik a(z) \"{0}\" kifejezésre a(z) {1} "
 "sablonban"
 
 msgid ""
 "Type ''{0}'' of relation member with role ''{1}'' does not match accepted "
 "types ''{2}'' in template {3}"
 msgstr ""
-"A(z)  „{1}” szerepű kapcsolat tag „{0}” típusa nem felel meg az elfogadott "
-"típusoknak: „{2}” a(z) {3} sablonban"
+"A(z)  \"{1}\" szerepű kapcsolat tag \"{0}\" típusa nem felel meg az "
+"elfogadott típusoknak: \"{2}\" a(z) {3} sablonban"
 
 msgid "<empty>"
 msgstr "<üres>"
 
 msgid "Role ''{0}'' unknown in templates ''{1}''"
-msgstr "„{0}” szerep ismeretlen a(z) „{1}” sablonban"
+msgstr "\"{0}\" szerep ismeretlen a(z) \"{1}\" sablonban"
 
 msgid "Empty role type found when expecting one of ''{0}''"
-msgstr "Üres szerep, miközben ezek egyike kéne legyen: „{0}”"
+msgstr "Üres szerep, miközben ezek egyike kéne legyen: \"{0}\""
 
 msgid "Role ''{0}'' missing"
-msgstr "„{0}” szerep hiányzik"
+msgstr "\"{0}\" szerep hiányzik"
 
 msgid "Number of ''{0}'' roles too low ({1})"
-msgstr "„{0}” szerepek száma túl alacsony ({1})"
+msgstr "\"{0}\" szerepek száma túl alacsony ({1})"
 
 msgid "Number of ''{0}'' roles too high ({1})"
-msgstr "„{0}” szerepek száma túl magas ({1})"
+msgstr "\"{0}\" szerepek száma túl magas ({1})"
 
 msgid "Self-intersecting ways"
 msgstr "Önmagukat metsző vonalak"
@@ -4792,7 +4873,7 @@ msgid "Turnrestrictions"
 msgstr "Kanyarodási tilalmak"
 
 msgid "This test checks if turnrestrictions are valid."
-msgstr "Ez a teszt a kanyarodási korlátozások érvényességét ellenőrzi."
+msgstr "Ez a teszt a bekanyarodási korlátozások érvényességét ellenőrzi."
 
 msgid "Unknown role"
 msgstr "Ismeretlen szerep"
@@ -4819,7 +4900,7 @@ msgid "No \"to\" way found"
 msgstr "Nem található \"to\" vonal"
 
 msgid "\"from\" way equals \"to\" way"
-msgstr "a „from” vonal megegyezik a „to” vonallal"
+msgstr "a \"from\" vonal megegyezik a \"to\" vonallal"
 
 msgid "No \"via\" node or way found"
 msgstr "Nem található \"via\" pont"
@@ -4828,7 +4909,7 @@ msgid "The \"from\" way does not start or end at a \"via\" node."
 msgstr "A \"from\" szakasz nem \"via\" pontban kezdődik vagy végződik."
 
 msgid "Superfluous turnrestriction as \"to\" way is oneway"
-msgstr "Fölösleges kanyarodási korlátozás, a ''to'' vonal egyirányú"
+msgstr "Fölösleges bekanyarodási korlátozás, a ''to'' vonal egyirányú"
 
 msgid "The \"to\" way does not start or end at a \"via\" node."
 msgstr "A \"to\" szakasz nem \"via\" pontban kezdődik vagy végződik."
@@ -4997,14 +5078,14 @@ msgid "Do not show again (remembers choice)"
 msgstr "Ne mutasd újra (emlékezz a választásomra)"
 
 msgid "Ignoring malformed URL: \"{0}\""
-msgstr "Rosszul formázott URL mellőzése: „{0}”"
+msgstr "Rosszul formázott URL mellőzése: \"{0}\""
 
 msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "Rosszul formázott fájl-URL kihagyása: „{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"
+"A \"downloadgps\" paraméter nem fogad el fájlneveket vagy fájl URL-eket"
 
 msgid "Precondition violation"
 msgstr "Nem teljesített előfeltétel"
@@ -5091,9 +5172,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr "Eltolás"
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr "''{0}'' paraméter nem üres értéket vár, de ezt kapta: ''{1}''"
-
 msgid "Outdated Java version"
 msgstr "Elavult JAVA verzió"
 
@@ -5121,12 +5199,14 @@ msgid ""
 "You may face critical Java bugs; we highly recommend you to update to Java "
 "{0}."
 msgstr ""
+"Kritikus Java hibákkal találkozhatsz; erősen ajánljuk, hogy frissíts Java "
+"{0} verzióra."
 
 msgid "Would you like to update now ?"
 msgstr "Szeretnél most frissíteni?"
 
 msgid "Starting file watcher"
-msgstr ""
+msgstr "Fájlfigyelő indítása"
 
 msgid "Executing platform startup hook"
 msgstr "Platform indítása"
@@ -5143,6 +5223,10 @@ msgstr "Belső határvonal adatok előkészítése"
 msgid "Initializing OSM API"
 msgstr "OSM API előkészítése"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+"A(z) {0} réteg el lett távolítva, mert a beállított API nem engedélyezte."
+
 msgid "Initializing internal traffic data"
 msgstr "Belső forgalmi adatok előkészítése"
 
@@ -5164,9 +5248,6 @@ msgstr "használat"
 msgid "options"
 msgstr "beállítások"
 
-msgid "Show this help"
-msgstr "Ezen súgó megjelenítése"
-
 msgid "Standard unix geometry argument"
 msgstr "Szabványos unix geometriájú argumentum"
 
@@ -5286,7 +5367,7 @@ msgstr ""
 "Győződj meg róla, hogy betöltesz adatokat, ha a --selection-t használod."
 
 msgid "Log level is at {0} ({1}, {2})"
-msgstr ""
+msgstr "Naplózási szint: {0} ({1}, {2})"
 
 msgid "Plugin loading skipped"
 msgstr "Bővítmény betöltése átugorva"
@@ -5393,6 +5474,14 @@ 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?"
 
+msgid "You have {0} unread message."
+msgid_plural "You have {0} unread messages."
+msgstr[0] "{0} olvasatlan üzeneted van."
+msgstr[1] "{0} olvasatlan üzeneted van."
+
+msgid "Click here to see your inbox."
+msgstr "A beérkezett üzenetek megtekintéséhez kattints ide."
+
 msgctxt "menu"
 msgid "File"
 msgstr "Fájl"
@@ -5423,7 +5512,7 @@ msgstr "Kijelölés"
 
 msgctxt "menu"
 msgid "Presets"
-msgstr "Címkék"
+msgstr "Előbeállítások"
 
 msgid "More..."
 msgstr "Továbbiak…"
@@ -5657,6 +5746,12 @@ msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 "A jelenlegi érték nem érvényes szelet index a megadott nagyítási szinten"
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+"Nem sikerült hibajelentést nyitni. Kérlek, jelentsd a hibát manuálisan az "
+"alábbi weboldalon:"
+
 msgid "You have encountered a bug in JOSM"
 msgstr "Egy hibával találkoztál a JOSM-ban"
 
@@ -6614,7 +6709,7 @@ msgid "Resolve to my versions"
 msgstr "Megoldás az én verziómra"
 
 msgid "Resolves all unresolved conflicts to ''my'' version"
-msgstr "Beállítja az összes megoldatlan ütközést az „én” verziómra"
+msgstr "Beállítja az összes megoldatlan ütközést az \"én\" verziómra"
 
 msgid "Resolve to their versions"
 msgstr ""
@@ -7481,7 +7576,7 @@ msgid "ID"
 msgstr "Azon"
 
 msgid "Open"
-msgstr "Megnyit"
+msgstr "Megnyitás"
 
 msgid "User"
 msgstr "Felhasználó"
@@ -7580,6 +7675,9 @@ msgstr "A módosításcsomag eltávolítása a nézet panel helyi gyorsítótár
 msgid "Update the changeset from the OSM server"
 msgstr "Módosításcsomag frissítése az OSM szerverről"
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7844,9 +7942,6 @@ msgstr ""
 "Adj meg, vagy illessz be egy URL-t a módosításcsomag OSM API-ból történő "
 "lekérdezéséhez."
 
-msgid "Examples"
-msgstr "Példák"
-
 msgid ""
 "Note that changeset queries are currently always submitted to ''{0}'', "
 "regardless of the host, port and path of the URL entered below."
@@ -8130,7 +8225,7 @@ msgstr[1] "Megváltoztatod az értékeket?"
 msgid "This will change {0} object."
 msgid_plural "This will change up to {0} objects."
 msgstr[0] "Ez {0} objektumot változtat meg."
-msgstr[1] "Ez {0} objektumot változtat meg."
+msgstr[1] "Ez akár {0} objektumot is megváltoztathat."
 
 msgid "An empty value deletes the tag."
 msgstr "Üres érték törli a címkét."
@@ -8152,7 +8247,7 @@ msgstr "Hozzáadod az értéket?"
 msgid "This will change up to {0} object."
 msgid_plural "This will change up to {0} objects."
 msgstr[0] "Ez {0} objektumot változtat meg."
-msgstr[1] "Ez {0} objektumot változtat meg."
+msgstr[1] "Ez akár {0} objektumot is megváltoztathat."
 
 msgid "Please select a key"
 msgstr "Válassz egy kulcsot"
@@ -8218,10 +8313,10 @@ msgid "The key ''{0}'' is already used"
 msgstr "''{0}'' kulcs már használatban van"
 
 msgid "Ignore key ''{0}''"
-msgstr "„{0}” kulcs mellőzése"
+msgstr "\"{0}\" kulcs mellőzése"
 
 msgid "Ignore tag ''{0}''"
-msgstr "„{0}” címke mellőzése"
+msgstr "\"{0}\" címke mellőzése"
 
 msgid "Edit ignore list"
 msgstr "Mellőzési lista szerkesztése"
@@ -8381,7 +8476,7 @@ msgid "Download referring relations"
 msgstr "Kapcsolódó kapcsolatok letöltése"
 
 msgid "There were {0} conflicts during import."
-msgstr "{0} ütközés volt az importálás során."
+msgstr "{0} ütközés történt az importálás során."
 
 msgid "including immediate children of parent relations"
 msgstr "Beleértve a szülő-kapcsolat közvetlen gyerekét"
@@ -8664,7 +8759,7 @@ msgid "Wrong number of arguments for bookmark"
 msgstr "Hibás argumentumszámú könyvjelző"
 
 msgid "Home location"
-msgstr ""
+msgstr "Otthon"
 
 msgid "Error reading bookmark entry: %s"
 msgstr "Nem sikerült olvasni a könyvjelző bejegyzést: %s"
@@ -8705,7 +8800,7 @@ msgid "Rename the currently selected bookmark"
 msgstr "A kijelölt könyvjelző átnevezése"
 
 msgid "Download bookmarks for my {0} last changesets"
-msgstr ""
+msgstr "Utolsó {0} módosításcsomagom könyvjelzőinek letöltése"
 
 msgid "min lat"
 msgstr "min. szél."
@@ -8805,7 +8900,7 @@ msgid "Download referrers (parent relations and ways)"
 msgstr "Hivatkozók (szülő kapcsolatok és utak) letöltése"
 
 msgid "Download from OSM"
-msgstr ""
+msgstr "Letöltés OSM-ről"
 
 msgid "Data Sources and Types:"
 msgstr "Adatforrások és típusok:"
@@ -8849,86 +8944,63 @@ msgid "Download area ok, size probably acceptable to server"
 msgstr "Letöltési terület mérete rendben, a szerver számára elfogadható"
 
 msgid "Download from Overpass API"
-msgstr ""
-
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
-msgstr ""
-
-msgid "Query Wizard"
-msgstr ""
+msgstr "Letöltés Overpass API-n keresztül"
 
 msgid ""
 "Place your Overpass query below or generate one using the Overpass Turbo "
 "Query Wizard"
 msgstr ""
+"Helyezd ide az Overpass lekérdezésedet vagy generálj egyet az Overpass Turbo "
+"Lekérdezés Varázslóval"
+
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgstr "Overpass lekérdezés készítése Overpass Turbo Lekérdezés Varázslóval"
+
+msgid "Query Wizard"
+msgstr "Lekérdezés Varázsló"
 
 msgid "Your saved queries:"
-msgstr ""
+msgstr "Az elmentett lekérdezéseid:"
 
 msgid "Show/hide Overpass snippet list"
-msgstr ""
+msgstr "Overpass töredékek lista megjelenítése/elrejtése"
 
 msgid "Overpass query:"
-msgstr ""
+msgstr "Overpass lekérdezés:"
 
 msgid ""
 "You entered an empty query. Do you want to download all data in this area "
 "instead?"
 msgstr ""
+"Üres lekérdezést adtál meg. Szeretnéd inkább a terület összes adatát "
+"letölteni?"
 
 msgid "Download all data?"
-msgstr ""
+msgstr "Letöltöd az összes adatot?"
 
 msgid "Add new snippet"
-msgstr ""
+msgstr "Új töredék hozzáadása"
 
 msgid "Delete selected snippet"
-msgstr ""
+msgstr "A kijelölt töredék törlése"
 
 msgid "Edit selected snippet"
-msgstr ""
-
-msgid "history"
-msgstr "történelem"
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
+msgstr "A kijelölt töredék szerkesztése"
 
 msgid "Overpass Turbo Query Wizard"
-msgstr ""
+msgstr "Overpass Turbo Lekérdezés Varázsló"
 
 msgid "Build query"
 msgstr "Lekérdezés készítése"
 
 msgid "Build query and execute"
-msgstr ""
+msgstr "Lekérdezés készítés és futtatás"
 
 msgid "Search :"
-msgstr ""
+msgstr "Keresés :"
 
 msgid "The Overpass wizard could not parse the following query:"
-msgstr ""
+msgstr "Az Overpass varázsló nem tudta értelmezni az alábbi lekérdezést:"
 
 msgid "Parse error"
 msgstr "Adatfeldolgozási hiba"
@@ -8937,58 +9009,76 @@ msgid ""
 "Allows you to interact with <i>Overpass API</i> by writing declarative, "
 "human-readable terms."
 msgstr ""
+"Lehetővé teszi az <i>Overpass API</i> használatát emberek számára olvasható "
+"kijelentések, kifejezések írásával."
 
 msgid ""
 "The <i>Query Wizard</i> tool will transform those to a valid overpass query."
 msgstr ""
+"Az <i>Query Varázsló</i> fogja ezeket lefordítani érvényes overpass "
+"lekérdezésekké."
 
 msgid "For more detailed description see "
-msgstr ""
+msgstr "Részletesebb leírásért lásd az "
 
 msgid "<a href=\"{0}\">OSM Wiki</a>."
-msgstr ""
+msgstr "<a href=\"{0}\">OSM Wiki</a>-t."
 
 msgid "Hints"
-msgstr ""
+msgstr "Tippek"
 
 msgid "Download objects of a certain type."
-msgstr ""
+msgstr "Bizonyos típusú objektumok letöltése (pont, kapcsolat, vonal)."
 
 msgid "Download object by specifying a specific location. For example,"
-msgstr ""
+msgstr "Objektumok letöltése egy terület megadásával. Például,"
 
 msgid "{0} all objects having {1} as attribute are downloaded."
-msgstr ""
+msgstr "{0} minden {1} tulajdonságú objektum le lesz töltve."
 
 msgid ""
 "{0} all object with the corresponding key/value pair located around Berlin. "
 "Note, the default value for radius is set to 1000m, but it can be changed in "
 "the generated query."
 msgstr ""
+"{0} az összes objektum Berlin környékén, ami a megadott címkével "
+"rendelkezik. Megjegyzés: a keresési sugár alapértelmezetten 1000 méter, de a "
+"generált lekérdezésben változtatható."
 
 msgid ""
 "{0} all objects within the current selection that have {1} as attribute."
 msgstr ""
+"{0} az összes objektum a kijelölt területen belül, ami {1} címkével "
+"rendelkezik."
 
 msgid ""
 "Instead of <i>location</i> any valid place name can be used like address, "
 "city, etc."
 msgstr ""
+"<i>location</i> helyett bármilyen valós hely megadható, mint például lakcím, "
+"város, stb."
 
 msgid ""
 "<span>Download objects that have some concrete key/value pair, only the key "
 "with any contents for the value, the value matching some regular expression. "
 "\"Not equal\" operators are supported as well.</span>"
 msgstr ""
+"<span>Objektumok letöltése, amik egy bizonyos kulcs/érték párral "
+"rendelkeznek; rendelkeznek egy bármilyen értékű kulccsal; az értékük "
+"megfelel egy reguláris kifejezésnek. A \"nem egyenlő\" operátor is "
+"támogatott.</span>"
 
 msgid "<i>expression1 {0} expression2</i>"
-msgstr ""
+msgstr "<i>kifejezés1 {0} kifejezés2</i>"
 
 msgid ""
 "Basic logical operators can be used to create more sophisticated queries. "
 "Instead of \"or\" - \"|\", \"||\" can be used, and instead of \"and\" - "
 "\"&\", \"&&\"."
 msgstr ""
+"Egyszerű logikai műveletekkel sokkal kifinomultabb lekérdezések is "
+"készíthetőek. \"or\" helyett \"|\", \"||\" is használható, valamint \"and\" "
+"helyett \"&\" vagy \"&&\" is elfogadott."
 
 msgid "Class Type"
 msgstr "Kategória típus"
@@ -9021,7 +9111,7 @@ msgid "Querying name server ..."
 msgstr "Névszerver lekérdezése…"
 
 msgid "Error occured with query ''{0}'': ''{1}''"
-msgstr "Hiba történt a(z) „{0}” lekérdezés közben: „{1}”"
+msgstr "Hiba történt a(z) \"{0}\" lekérdezés közben: \"{1}\""
 
 msgid "Name server returned invalid data. Please try again."
 msgstr "A névszerver érvénytelen adatot adott vissza. Kérlek próbáld újra."
@@ -9038,6 +9128,33 @@ msgstr "Térkép"
 msgid "Tile Numbers"
 msgstr "Szelet számok"
 
+msgid "history"
+msgstr "történelem"
+
+msgid "Please select an item first"
+msgstr "Előbb kérlek válassz egy elemet"
+
+msgid "Edit item"
+msgstr "Elem szerkesztése"
+
+msgid "Add snippet"
+msgstr "Töredék hozzáadása"
+
+msgid "Query cannot be empty"
+msgstr "A lekérdezés nem lehet üres"
+
+msgid "This name can be used for the item"
+msgstr "Ez a név használható az elemhez"
+
+msgid "Item with this name already exists"
+msgstr "Már létezik elem ilyen néven"
+
+msgid "The item cannot be created with provided name"
+msgstr "Az elem nem hozható létre ilyen néven"
+
+msgid "The item cannot be created with an empty query"
+msgstr "Az elem nem hozható létre üres lekérdezéssel"
+
 msgid "JOSM Help Browser"
 msgstr "JOSM Súgó Böngésző"
 
@@ -9198,6 +9315,12 @@ msgstr "Közelítés a pontra az aktuális adatrétegen"
 msgid "Open a history browser with the history of this node"
 msgstr "Előzményböngésző megnyitása a pont előzményeivel"
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr "{0} vonal"
 
@@ -9207,6 +9330,9 @@ msgstr "{0} kapcsolat"
 msgid "Object"
 msgstr "Objektum"
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr "Módosításcsomag megjegyzése"
 
@@ -9378,11 +9504,14 @@ msgstr ""
 
 msgid "Check \"Upload\" to upload the changes to the OSM server."
 msgstr ""
-"A „Feltöltést” választva feltölti a változtatásokat az OSM szerverre."
+"A \"Feltöltést\" választva feltölti a változtatásokat az OSM szerverre."
 
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
-"A „Mentést” választva elmenti a réteget a bal oldalon megadott fájlba."
+"A \"Mentést\" választva elmenti a réteget a bal oldalon megadott fájlba."
+
+msgid "I would like someone to review my edits."
+msgstr ""
 
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "Adj egy rövid magyarázatot a feltöltendő változtatásokhoz:"
@@ -9721,7 +9850,7 @@ msgid_plural ""
 "changes.<br>Layers with non-writable files:</html>"
 msgstr[0] ""
 "<html>Szükséges lenne a(z) {0} réteg mentése, de a társított fájl<br>nem "
-"írható.<br>Válassz egy másik fájlt a rétegnek, vagy vesd el a "
+"írható.<br>Vagy jelölj ki egy másik fájlt a rétegnek, vagy vesd el a "
 "változtatásokat.<br>Nem írható fájlú réteg:</html>"
 msgstr[1] ""
 "<html>Szükséges lenne a(z) {0} rétegek mentése, de a társított fájlok<br>nem "
@@ -10384,7 +10513,7 @@ msgid "Open OSM file"
 msgstr "OSM fájl megnyitása"
 
 msgid "Validation Error Files"
-msgstr ""
+msgstr "Hibakeresési hiba fájlok"
 
 msgid "WMS Files (*.wms)"
 msgstr "WMS fájlok (*.wms)"
@@ -10488,7 +10617,7 @@ msgid ""
 "Aerial imagery \"{0}\" might be misaligned. Please check its offset using "
 "GPS tracks!"
 msgstr ""
-"A(z) „{0}” légifelvétel el lehet tolódva. Kérlek, ellenőrizd az elcsúszást "
+"A(z) \"{0}\" légifelvétel el lehet tolódva. Kérlek, ellenőrizd az elcsúszást "
 "GPS-nyomvonalak segítségével!"
 
 msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
@@ -10550,9 +10679,6 @@ msgid_plural "{0} tracks"
 msgstr[0] "{0} nyomvonal"
 msgstr[1] "{0} nyomvonal"
 
-msgid "Description"
-msgstr "Leírás"
-
 msgid "Timespan"
 msgstr "Időtartam"
 
@@ -10634,7 +10760,7 @@ msgid "Changes need uploading?"
 msgstr "A változtatásokat fel kell tölteni?"
 
 msgid "Save Note file"
-msgstr ""
+msgstr "Jegyzet fájl mentése"
 
 msgid "outside downloaded area"
 msgstr "letöltött területen kívül"
@@ -10712,7 +10838,7 @@ msgid "No validation errors"
 msgstr "Nincs ellenőrzési hiba"
 
 msgid "Save Validation errors file"
-msgstr ""
+msgstr "Hibakeresési hiba fájl mentése"
 
 msgid "Set WMS Bookmark"
 msgstr "WMS könyvjelző beállítása"
@@ -10764,7 +10890,7 @@ msgid ""
 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>"
+"fényképről, írd be, és jelöld ki az időzónát.<hr></html>"
 
 msgid "Photo time (from exif):"
 msgstr "Fénykép ideje (exif adatokból):"
@@ -11098,10 +11224,10 @@ msgid "Customize track drawing"
 msgstr "Nyomvonalrajzolás személyre szabása"
 
 msgid "From"
-msgstr "Ettől"
+msgstr "Innen:"
 
 msgid "To"
-msgstr "Eddig"
+msgstr "Eddig:"
 
 msgid "No timestamp"
 msgstr "Időbélyeg nélküli"
@@ -12311,7 +12437,7 @@ msgid "Use auto filters"
 msgstr "Auto szűrők használata"
 
 msgid "Rule"
-msgstr ""
+msgstr "Szabály"
 
 msgid "Highlight target ways and nodes"
 msgstr "Cél pontok és vonalak kiemelése"
@@ -12323,7 +12449,7 @@ msgid "Smooth map graphics (antialiasing)"
 msgstr "Élsimított térképgrafika (antialias)"
 
 msgid "Smooth map graphics in wireframe mode (antialiasing)"
-msgstr "Élsimított térképgrafika drótváz módban (antialias)"
+msgstr "Élsimított térképgrafika vázrajzmódban (antialias)"
 
 msgid "Draw only outlines of areas"
 msgstr "Területeknél csak körvonal rajzolása"
@@ -12359,7 +12485,7 @@ msgid ""
 "Apply antialiasing to the map view in wireframe mode resulting in a smoother "
 "appearance."
 msgstr ""
-"Anitalias alkalmazása a térképnézeten drótváz módban simább megjelenítést "
+"A térképen vázrajzmódban az antialias alkalmazása simább megjelenítést "
 "eredményez."
 
 msgid "Hightlight target nodes and ways while drawing or selecting"
@@ -13430,7 +13556,7 @@ msgid "Default projection"
 msgstr "Alapértelmezett vetület"
 
 msgid "Default projection has been set to ''{0}''"
-msgstr "„{0}” lett az alapértelmezett vetület"
+msgstr "\"{0}\" lett az alapértelmezett vetület"
 
 msgid "Display coordinates as"
 msgstr "Koordináták megjelenítése mint"
@@ -13632,7 +13758,7 @@ msgstr "Egyszerű hitelesítés használata"
 msgid ""
 "Select to use HTTP basic authentication with your OSM username and password"
 msgstr ""
-"Válaszd az OSM felhasználóneved és jelszavad „HTTP egyszerű hitelesítésel” "
+"Válaszd az OSM felhasználóneved és jelszavad \"HTTP egyszerű hitelesítésel\" "
 "történő küldéséhez"
 
 msgid "Use OAuth"
@@ -13645,8 +13771,8 @@ msgid ""
 "Unsupported value in preference ''{0}'', got ''{1}''. Using authentication "
 "method ''Basic Authentication''."
 msgstr ""
-"Nem támogatott érték a(z) ''{0}'' beállításban, kapott: ''{1}''. „Egyszerű "
-"hitelesítés” lesz használva."
+"Nem támogatott érték a(z) ''{0}'' beállításban, kapott: ''{1}''. \"Egyszerű "
+"hitelesítés\" lesz használva."
 
 msgid "OSM username:"
 msgstr "OSM felhasználónév:"
@@ -14012,17 +14138,8 @@ msgstr "al-elem beállítása szülő nélkül"
 msgid "Error parsing {0}: "
 msgstr "Értelmezési hiba {0}: "
 
-msgid "Search preset"
-msgstr "Címkekészlet keresése"
-
-msgid "Show preset search dialog"
-msgstr "Készletkereső ablak megnyitása"
-
-msgid "Search presets"
-msgstr "Készlet keresése"
-
 msgid "Presets"
-msgstr "Címkék"
+msgstr "Előbeállítások"
 
 msgid "Search for objects by preset..."
 msgstr "Objektum keresése címke alapján…"
@@ -14139,6 +14256,9 @@ msgstr "Minden fájl (*.*)"
 msgid "Received error page:"
 msgstr "Visszakapott hibaoldal:"
 
+msgid "{0}... [please type its number]"
+msgstr "{0}… [kérlek, gépeld be a számát]"
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -14234,7 +14354,7 @@ msgid ""
 "partial: different selected objects have different values for ''{0}'', do "
 "not change"
 msgstr ""
-"részleges: a különböző kijelölt objektumok „{0}” értéke eltér, ne módosítsd"
+"részleges: a különböző kijelölt objektumok \"{0}\" értéke eltér, ne módosítsd"
 
 msgid "unset: do not set this property on the selected objects"
 msgstr ""
@@ -14452,14 +14572,6 @@ msgstr "Ismeretlen mód {0}."
 msgid "get number of unread messages"
 msgstr "olvasatlan üzenetek számának lekérdezése"
 
-msgid "You have {0} unread message."
-msgid_plural "You have {0} unread messages."
-msgstr[0] "{0} olvasatlan üzeneted van."
-msgstr[1] "{0} olvasatlan üzeneted van."
-
-msgid "Click here to see your inbox."
-msgstr "A beérkezett üzenetek megtekintéséhez kattints ide."
-
 msgid "Message notifier"
 msgstr "Üzenet értesítő"
 
@@ -14530,10 +14642,6 @@ msgstr ""
 "Csak 0.6-os protokoll verzió támogatott itt, amíg a szerver azt mondja, hogy "
 "{0} és {1} közötti szükséges."
 
-msgid "Removed layer {0} because it is not allowed by the configured API."
-msgstr ""
-"A(z) {0} réteg el lett távolítva, mert a beállított API nem engedélyezte."
-
 msgid "Unexpected format of ID replied by the server. Got ''{0}''."
 msgstr "Nem várt formátumú ID-t válaszolt a szerver. ''{0}'' jött."
 
@@ -14670,11 +14778,15 @@ msgid ""
 "Missing mandatory attributes on element ''bounds''. Got "
 "minlon=''{0}'',minlat=''{1}'',maxlon=''{2}'',maxlat=''{3}'', origin=''{4}''."
 msgstr ""
+"Kötelező attribútum hiányzik a \"bounds\" elemről. Kapott "
+"minlon=''{0}'',minlat=''{1}'',maxlon=''{2}'',maxlat=''{3}'', origin=''{4}''."
 
 msgid ""
 "Illegal value for attributes ''lat'', ''lon'' on node with ID {0}. Got "
 "''{1}'', ''{2}''."
 msgstr ""
+"Érvénytelen \"lat\", \"lon\" attribútumérték az alábbi ponton: {0}. Kapott: "
+"\"{1}\", \"{2}\"."
 
 msgid "Deleted way {0} contains nodes"
 msgstr "A törölt {0} vonal tartalmaz pontokat"
@@ -14829,7 +14941,7 @@ msgid "Reading user info ..."
 msgstr "Felhasználói adatok olvasása…"
 
 msgid "Reading user preferences ..."
-msgstr ""
+msgstr "Felhasználói beállítások olvasása…"
 
 msgid "Starting to upload with one request per primitive ..."
 msgstr "Elemenként egy kérés felküldésének megkezdése…"
@@ -15129,7 +15241,8 @@ msgstr ""
 msgid ""
 "Version ''{0}'' of meta data for note layer is not supported. Expected: 0.1"
 msgstr ""
-"A jegyzet réteg metaadatainak „{0}” verziója nem támogatott. Várt verzió: 0.1"
+"A jegyzet réteg metaadatainak \"{0}\" verziója nem támogatott. Várt verzió: "
+"0.1"
 
 msgid ""
 "Version ''{0}'' of meta data for osm data layer is not supported. Expected: "
@@ -16001,9 +16114,6 @@ msgstr ""
 "http://forum.openstreetmap.org/viewtopic.php?id=25677).\n"
 "Jelenleg {1,number,#}MB memória van a JOSM számára kiszotva"
 
-msgid "{0}... [please type its number]"
-msgstr "{0}… [kérlek, gépeld be a számát]"
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -16122,12 +16232,6 @@ msgid "Failed to load XML schema."
 msgstr "Nem sikerült betölteni az XML sémát."
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-"Nem sikerült hibajelentést nyitni. Kérlek, jelentsd a hibát manuálisan az "
-"alábbi weboldalon:"
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -16728,6 +16832,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr "nincs"
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr "Szolgáltatás típusa"
 
@@ -17433,7 +17541,7 @@ msgstr "beltéri"
 
 msgctxt "power"
 msgid "underground"
-msgstr "földalatti"
+msgstr "föld alatti"
 
 msgctxt "power"
 msgid "platform"
@@ -17758,7 +17866,7 @@ msgid "Service way type"
 msgstr "Szervízút típusa"
 
 msgid "alley"
-msgstr "hátsó „szolgalmi” út"
+msgstr "hátsó \"szolgalmi\" út"
 
 msgid "driveway"
 msgstr "kocsifelhajtó"
@@ -17776,7 +17884,7 @@ msgid "Parking Aisle"
 msgstr "Parkolóút"
 
 msgid "Escape"
-msgstr "Fékezősáv („majomfogó”)"
+msgstr "Fékezősáv (\"majomfogó\")"
 
 msgid ""
 "Emergency lane beside long descending slopes for trucks and other vehicles "
@@ -18495,7 +18603,7 @@ msgid "split_rail"
 msgstr "hasított gerenda"
 
 msgid "wire"
-msgstr "sodrony"
+msgstr "táblás kerítés"
 
 msgid "Guard Rail"
 msgstr "Szalagkorlát"
@@ -18535,7 +18643,7 @@ msgid "Gate"
 msgstr "Kapu"
 
 msgid "Lift Gate"
-msgstr "Emelkdeő sorompó"
+msgstr "Emelkedő sorompó"
 
 msgid "Swing Gate"
 msgstr "Elforduló sorompó"
@@ -18555,7 +18663,7 @@ msgid "Bump Gate"
 msgstr "Lökőkapu"
 
 msgid "Kissing Gate"
-msgstr "U vagy V „zsilipkapu” (kissing gate)"
+msgstr "U vagy V \"zsilipkapu\" (kissing gate)"
 
 msgid "Chain"
 msgstr "Lánc"
@@ -18790,9 +18898,9 @@ msgid "Bay"
 msgstr "Öböl"
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
-"Szárazfölddel körülvett nagyobb víztömeg, széles kijárattal a nyílt víz felé."
 
 msgid "Shipping"
 msgstr "Hajózás"
@@ -19044,7 +19152,7 @@ msgstr "Akadály"
 
 msgctxt "crossing:barrier"
 msgid "yes"
-msgstr "sorompó"
+msgstr "igen"
 
 msgctxt "crossing:barrier"
 msgid "no"
@@ -19441,7 +19549,7 @@ msgid "Free bicycle pump"
 msgstr "Ingyenes kerékpárpumpa"
 
 msgid "Tools for do-it-yourself repair (may be a bike co-operative)"
-msgstr "Szerszámok „csináld magad” szereléshez"
+msgstr "Szerszámok \"csináld magad\" szereléshez"
 
 msgid "Bicycles are washed (for a fee)"
 msgstr "Kerékpármosás (díj ellenében)"
@@ -19704,7 +19812,7 @@ msgid "Number of apartments"
 msgstr "Apartmanok száma"
 
 msgid "Chalet"
-msgstr "Alpesi faház"
+msgstr "Nyaralóház"
 
 msgid "Hostel"
 msgstr "Ifjúsági szálló"
@@ -20382,7 +20490,7 @@ msgstr "fali"
 
 msgctxt "pipeline"
 msgid "pond"
-msgstr "tó"
+msgstr "tavacska"
 
 msgid "Diameter (in mm)"
 msgstr "Átmérő (mm)"
@@ -20470,7 +20578,7 @@ msgid "Group Home"
 msgstr "Lakóotthon"
 
 msgid "For"
-msgstr "Célcsoport"
+msgstr "Célcsoport:"
 
 msgid "Assisted Living"
 msgstr "Bentlakásos otthon"
@@ -23796,11 +23904,11 @@ msgstr "Iparterület"
 
 msgctxt "industrial"
 msgid "bakery"
-msgstr ""
+msgstr "pékség"
 
 msgctxt "industrial"
 msgid "brewery"
-msgstr ""
+msgstr "sörfőzde"
 
 msgctxt "industrial"
 msgid "brickyard"
@@ -23816,7 +23924,7 @@ msgstr ""
 
 msgctxt "industrial"
 msgid "factory"
-msgstr ""
+msgstr "gyár"
 
 msgctxt "industrial"
 msgid "grinding_mill"
@@ -23836,7 +23944,7 @@ msgstr ""
 
 msgctxt "industrial"
 msgid "oil"
-msgstr ""
+msgstr "kőolajipar"
 
 msgctxt "industrial"
 msgid "port"
@@ -23864,7 +23972,7 @@ msgstr ""
 
 msgctxt "industrial"
 msgid "warehouse"
-msgstr ""
+msgstr "raktár"
 
 msgid "Garages"
 msgstr "Garázsok"
@@ -24159,7 +24267,7 @@ msgid "Image"
 msgstr "Kép"
 
 msgid "Contact (Schema with ''contact:*'' Prefix)"
-msgstr "Kapcsolat („contact:*” előtagú séma)"
+msgstr "Kapcsolat (\"contact:*\" előtagú séma)"
 
 msgctxt "description=*"
 msgid "A short text with additional information."
@@ -24653,6 +24761,9 @@ msgstr "Waymarked Trails: lovaglás"
 msgid "Waymarked Trails: Winter Sports"
 msgstr "Vonalpontos útvonalak: téli sportok"
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr "OSM Inspector: geometria"
 
@@ -24715,6 +24826,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -24796,6 +24910,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -24817,9 +24946,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -25417,6 +25543,9 @@ msgstr "Berlin légifotó 2015"
 msgid "Berlin aerial photograph 2016"
 msgstr "Berlin légifotó 2016"
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -25442,7 +25571,7 @@ msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr "Maps4BW (LGL-BW, www.lgl-bw.de)"
 
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
-msgstr "Metropole Ruhr: Luftbilder (10 cm)"
+msgstr "Metropole Ruhr: légifelvételek (10 cm)"
 
 msgid ""
 "imagico.de OSM images for mapping: Northern German west coast tidalflats"
@@ -25838,6 +25967,9 @@ msgstr "Luxembourg Inspire vizek"
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Niger Delta Oct 2012 Landsat"
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -26287,6 +26419,9 @@ msgstr "NLSC Open Data WMTS"
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr "imagico.de OSM képek térképezéshez:  Kilimandzsáró 2016"
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr "MSR Topográfiai Térképek"
 
@@ -27297,7 +27432,7 @@ msgstr ""
 "{0} nem ajánlott. Használd a Vonal megfordítását az Eszközök menüből."
 
 msgid "{0}"
-msgstr ""
+msgstr "{0}"
 
 msgid "key with uncommon character"
 msgstr "kulcs ritka karakterrel"
@@ -27468,7 +27603,7 @@ msgid "{0} with multiple values"
 msgstr "{0}, töbszörös értékekkel"
 
 msgid "empty value in semicolon-separated ''{0}''"
-msgstr "üres érték a pontosvesszővel elválasztott „{0}” címkében"
+msgstr "üres érték a pontosvesszővel elválasztott \"{0}\" címkében"
 
 msgid "numerical key"
 msgstr "numerikus kulcs"
@@ -27537,6 +27672,9 @@ msgstr "típus nélküli kapcsolat"
 msgid "{0} relation without {0} tag"
 msgstr "{0} kapcsolat {0} cimke nélkül"
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr "felekezet nélküli vallás"
 
@@ -27636,7 +27774,7 @@ msgid "Display street labels (at high zoom)"
 msgstr "Utca feliratok megjelenítése (magas nagyításnál)"
 
 msgid "Use alternative turn restriction icon set"
-msgstr "Alternatív kanyarodási korlátozás ikonkészlet használata"
+msgstr "Alternatív bekanyarodási korlátozás ikonkészlet használata"
 
 msgid "Display fill colour of areas with place=*"
 msgstr "place=* címkéjű felületek kitöltése színnel"
@@ -27718,7 +27856,7 @@ msgid ""
 "white background with matching colors for better visibility in bright "
 "sunlight. See dialog in display preferences."
 msgstr ""
-"Lehetővé teszi a felhasználó számára, hogy különböző szín sémákat hozzon "
+"Lehetővé teszi a felhasználó számára, hogy különböző színsémákat hozzon "
 "létre és váltson közöttük. A színeket csak meg kell változtatni és új sémát "
 "készíteni. Arra is használható, hogy fehér háttérre és illeszkedő színekre "
 "váltva jobb láthatóságot érjünk el napfényben. Nézd a dialógust a kijelző "
@@ -27751,11 +27889,6 @@ msgid "Customization of public public transport stops."
 msgstr "Az összes tömegközlekedési megálló testreszabása"
 
 msgid ""
-"Creating and handling address nodes and buildings within Czech Republic."
-msgstr ""
-"Lakcím pontok és épületek létrehozása és kezelése a Cseh Köztársaságban."
-
-msgid ""
 "Allows to import various file formats into JOSM directly. Currently "
 "supported: TangoGPS, Garmin Trainings Center TCX."
 msgstr ""
@@ -27816,9 +27949,6 @@ msgstr ""
 "Társalgás a közelben térképet szerkesztő felhasználókkal, értesítés amikor "
 "valaki közelebb jön."
 
-msgid "Allows you to view a GeoJSON file as a layer."
-msgstr "Lehetővé teszi GeoJSON fájlok megtekintését rétegként."
-
 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."
@@ -28245,14 +28375,14 @@ msgstr "Szerkesztőfelület utak kanyarodósávjainak beállításához"
 msgid ""
 "Provides a straightforward GUI for adding, editing and deleting turn lanes."
 msgstr ""
-"Egyszerű kezelőfelületet nyújt kanyarodó sávok hozzáadásához, "
+"Egyszerű kezelőfelületet nyújt bekanyarodó sávok hozzáadásához, "
 "szerkesztéséhez és törléséhez."
 
 msgid ""
 "The turnrestrictions plugin allows to enter maintain information about turn "
 "restrictions in the OpenStreetMap database."
 msgstr ""
-"A turnrestrictions bővítmény lehetővé teszi kanyarodási korlátozások "
+"A turnrestrictions bővítmény lehetővé teszi bekanyarodási korlátozások "
 "létrehozását, azok adatainak megadását."
 
 msgid "Allows undeleting object from OSM database"
@@ -28271,14 +28401,6 @@ msgstr ""
 "szinkronizál egy georeferált videót egy GPS-nyomvonallal, így használható "
 "objektumok vizuális azonosításához."
 
-msgid ""
-"Supports downloading tiled, scanned maps from walking-papers.org. This "
-"plugin is still under early development and may be buggy."
-msgstr ""
-"Felcsempézett, szkennelt térképek letöltését támogatja a walking-papers.org-"
-"ról. Ez a bővímény még a korai fejlesztési fázisban tart és esetleges "
-"hibákat tartalmazhat."
-
 msgid "Easy downloading along a long set of interconnected ways"
 msgstr ""
 "Egyszerű letöltés egy hosszú, egymáshoz csatlakozó vonalsorozat mentén"
@@ -28921,15 +29043,15 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
+msgid "Start Mapillary layer"
+msgstr "Mapillary réteg indítása"
+
 msgid "Mapillary"
 msgstr "Mapillary"
 
 msgid "Create Mapillary layer"
 msgstr "Mapillary réteg készítése"
 
-msgid "Start Mapillary layer"
-msgstr "Mapillary réteg indítása"
-
 msgid "Download Mapillary images in current view"
 msgstr "Mapillary képek letöltése a jelenlegi nézeten"
 
@@ -29067,7 +29189,7 @@ msgid "Pedestrian crossing"
 msgstr "Gyalogosátkelő"
 
 msgid "No turn"
-msgstr "Kanyarodni tilos"
+msgstr "Bekanyarodni tilos"
 
 msgid "Years"
 msgstr "Év"
@@ -29178,7 +29300,7 @@ msgid "Download mode"
 msgstr "Letöltési mód"
 
 msgid "You are logged in as ''{0}''."
-msgstr "Be vagy jelentkezve „{0}” néven."
+msgstr "Be vagy jelentkezve \"{0}\" néven."
 
 msgid "You are currently not logged in."
 msgstr "Jelenleg nem vagy bejelentkezve."
@@ -29694,7 +29816,7 @@ msgid ""
 "Aligning would result nodes ''outside the world''.\n"
 "Alignment not possible.\n"
 msgstr ""
-"Az igazítás a „világon kívüli” pontokat eredményezne.\n"
+"Az igazítás a \"világon kívüli\" pontokat eredményezne.\n"
 "Az igazítás nem lehetséges.\n"
 
 msgid ""
@@ -29812,7 +29934,7 @@ msgid ""
 "...or it rather should be called <br>\n"
 "<span style=\"font-size: large;\">AlignWayS(egments)</span> Plugin..."
 msgstr ""
-"Üdvözöllek az </span><br>\n"
+"Üdvözlünk az </span><br>\n"
 "<span style=\"font-size: xx-large;\">AlignWay<span style=\"color: rgb(204, "
 "85, 0);\">S</span> Bővítmény<br>\n"
 "</span><span style=\"font-size: medium;\"><br>\n"
@@ -30243,6 +30365,146 @@ msgstr[1] "{0} épület címe ellentmondásos"
 msgid "No address nodes inside buildings found"
 msgstr "Az épületeken belül nem található lakcím pont"
 
+msgid "Auto sourcing"
+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 "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 "Kép letöltése a Francia Kataszteri WMS-ből"
+
+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 "Réteg betöltése gyorsítótárból"
+
+msgid "Load location from cache (only if cache is enabled)"
+msgstr "Hely betöltése gyorsítótárból (csak ha a gyorsítótár engedélyezett)"
+
+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 ""
+"A kijelölt {0} fájl nem ennek a beépülő modulnak a gyorsítófájlja "
+"(érvénytelen kiterjesztés)"
+
+msgid "The location {0} is already on screen. Cache not loaded."
+msgstr "A {0} hely már a képernyőn van. Nincs gyorsítótár betöltés."
+
+msgid "(optional)"
+msgstr "(opcionális)"
+
+msgid "Change location"
+msgstr "Hely váltása"
+
+msgid "Set a new location for the next request"
+msgstr ""
+
+msgid "Add a new municipality layer"
+msgstr ""
+
+msgid "Commune"
+msgstr "Közösség"
+
+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 "Süti visszaállítása"
+
+msgid "Get a new cookie (session timeout)"
+msgstr ""
+
+msgid "Save image as..."
+msgstr "Kép mentése másként…"
+
+msgid "PNG files (*.png)"
+msgstr "PNG fájlok (*.png)"
+
+msgid "GeoTiff files (*.tif)"
+msgstr "GeoTiff fájlok (*.tif)"
+
+msgid "Export image (only raster images)"
+msgstr "Kép kiírása (csak raszteres képek)"
+
+msgid ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr "poligonon"
 
@@ -30258,86 +30520,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr "Lakcímek megadása"
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
-"A(z) \"{0}\" hely megtalálható a gyorsítótárban.\n"
-"Előbb a gyorsítótár betöltése?\n"
-"(Nem = új gyorsítótár)"
 
-msgid "Select Feuille"
-msgstr "Feuille kijelölése"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
+msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
-"Hiba történt a fájl betöltése közben.\n"
-"Valószínűleg a gyorsítótár fájl egy korábbi verziója."
 
-msgid "Lambert Zone {0} cache file (.{0})"
-msgstr "Lambert {0}. zóna cache fájl (.{0})"
+msgid "Download from Cadastre"
+msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
-msgstr "Lambert CC9 {0}. zóna cache fájl (.{0})"
+msgid "Objects:"
+msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
-msgstr "Guadeloupe Fort-Marigot cache fájl (.UTM1)"
+msgid "Select to download buildings in the selected download area."
+msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
-msgstr "Guadeloupe Ste-Anne cache fjál (.UTM2)"
+msgid "address"
+msgstr "lakcím"
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
-msgstr "Martinique Fort Desaix cache fájl (.UTM3)"
+msgid "Select to download addresses in the selected download area."
+msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
-msgstr "Reunion RGR92 cache fájl (.UTM4)"
+msgid "symbol"
+msgstr "szimbólum"
 
-msgid "CadastreGrabber: Illegal url."
-msgstr "CadastreGrabber: illegális url."
+msgid "Select to download symbols in the selected download area."
+msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
 msgstr ""
-"Nem nyitható új kliens munkamenet.\n"
-"A kiszolgálón karbantartást végeznek, vagy átmenetileg túlterhelt."
+
+msgid "parcel"
+msgstr "parcella"
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
+msgstr "parcella szám"
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
-"{0} település nem található, vagy nem elérhető\n"
-"vagy a művelet megszakadt"
 
-msgid "Choose from..."
-msgstr "Válasszon a következőkből:"
+msgid "section"
+msgstr "szakasz"
 
-msgid "Select commune"
-msgstr "Commune kijelölése"
+msgid "Select to download cadastral sections in the selected download area."
+msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
+msgstr "helyszín"
+
+msgid "Select to download localities in the selected download area."
 msgstr ""
 
+msgid "commune"
+msgstr "közösség"
+
 msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+msgid "Recipient"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -30388,27 +30646,6 @@ msgstr "közepes"
 msgid "low"
 msgstr "alacsony"
 
-msgid "symbol"
-msgstr "szimbólum"
-
-msgid "parcel"
-msgstr "parcella"
-
-msgid "parcel number"
-msgstr "parcella szám"
-
-msgid "address"
-msgstr "lakcím"
-
-msgid "locality"
-msgstr "helyszín"
-
-msgid "section"
-msgstr "szakasz"
-
-msgid "commune"
-msgstr "közösség"
-
 msgid "Enable automatic caching."
 msgstr ""
 
@@ -30549,163 +30786,107 @@ 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 "Épületek létrehozása"
-
 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
+"A(z) \"{0}\" hely megtalálható a gyorsítótárban.\n"
+"Előbb a gyorsítótár betöltése?\n"
+"(Nem = új gyorsítótár)"
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
-msgstr ""
+msgid "Select Feuille"
+msgstr "Feuille kijelölése"
 
 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 "Kép letöltése a Francia Kataszteri WMS-ből"
-
-msgid "Cadastre: {0}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
+"Hiba történt a fájl betöltése közben.\n"
+"Valószínűleg a gyorsítótár fájl egy korábbi verziója."
 
-msgid "Georeference an image"
-msgstr ""
+msgid "Lambert Zone {0} cache file (.{0})"
+msgstr "Lambert {0}. zóna cache fájl (.{0})"
 
-msgid "Grab non-georeferenced image"
-msgstr ""
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgstr "Lambert CC9 {0}. zóna cache fájl (.{0})"
 
-msgid "Georeferencing interrupted"
-msgstr ""
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgstr "Guadeloupe Fort-Marigot cache fájl (.UTM1)"
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
-msgstr ""
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgstr "Guadeloupe Ste-Anne cache fjál (.UTM2)"
 
-msgid "Load layer from cache"
-msgstr "Réteg betöltése gyorsítótárból"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgstr "Martinique Fort Desaix cache fájl (.UTM3)"
 
-msgid "Load location from cache (only if cache is enabled)"
-msgstr "Hely betöltése gyorsítótárból (csak ha a gyorsítótár engedélyezett)"
+msgid "Reunion RGR92 cache file (.UTM4)"
+msgstr "Reunion RGR92 cache fájl (.UTM4)"
 
-msgid "{0} not allowed with the current projection"
-msgstr ""
+msgid "CadastreGrabber: Illegal url."
+msgstr "CadastreGrabber: illegális url."
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 msgstr ""
+"Nem nyitható új kliens munkamenet.\n"
+"A kiszolgálón karbantartást végeznek, vagy átmenetileg túlterhelt."
 
 msgid ""
-"Selected file {0} is not a cache file from this plugin (invalid extension)"
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
-"A kijelölt {0} fájl nem ennek a beépülő modulnak a gyorsítófájlja "
-"(érvénytelen kiterjesztés)"
-
-msgid "The location {0} is already on screen. Cache not loaded."
-msgstr "A {0} hely már a képernyőn van. Nincs gyorsítótár betöltés."
+"{0} település nem található, vagy nem elérhető\n"
+"vagy a művelet megszakadt"
 
-msgid "(optional)"
-msgstr "(opcionális)"
+msgid "Choose from..."
+msgstr "Válasszon a következőkből:"
 
-msgid "Change location"
-msgstr "Hely váltása"
+msgid "Select commune"
+msgstr "Commune kijelölése"
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
-msgstr "Közösség"
+msgid "Create buildings"
+msgstr "Épületek létrehozása"
 
 msgid ""
-"<html>Enter the town,village or city name.<br>Use the syntax and punctuation "
-"known by www.cadastre.gouv.fr .</html>"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Departement"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "<html>Departement number (optional)</html>"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Add new layer"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Open Cadastre Preferences"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "Reset cookie"
-msgstr "Süti visszaállítása"
-
-msgid "Get a new cookie (session timeout)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Save image as..."
-msgstr "Kép mentése másként…"
-
-msgid "PNG files (*.png)"
-msgstr "PNG fájlok (*.png)"
-
-msgid "GeoTiff files (*.tif)"
-msgstr "GeoTiff fájlok (*.tif)"
-
-msgid "Export image (only raster images)"
-msgstr "Kép kiírása (csak raszteres képek)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
+msgstr ""
 
 msgid ""
 "Click first corner for image cropping\n"
@@ -30754,17 +30935,6 @@ 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 "Eltolás nullázás"
 
@@ -31209,18 +31379,6 @@ msgid ""
 "to cancel the download."
 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 "TangoGPS Fájlok (*.log)"
 
@@ -32447,7 +32605,7 @@ msgid ""
 msgstr ""
 
 msgid "Direction index ''{0}'' not found"
-msgstr "Irány index „{0}” nem található"
+msgstr "Irány index \"{0}\" nem található"
 
 msgid "The starting location was not within the bbox"
 msgstr "A kezdőpozíció nem a határoló dobozon belül volt"
@@ -32786,7 +32944,7 @@ msgid "Create Michigan left turn restriction"
 msgstr ""
 
 msgid "Unable to find via nodes. Please check your selection"
-msgstr "Nem találhatók „via” pontok. Ellenőrizd a kijelölést"
+msgstr "Nem találhatók \"via\" pontok. Ellenőrizd a kijelölést"
 
 msgid "About Plugin"
 msgstr "A bővítményről"
@@ -33145,7 +33303,7 @@ 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 ""
-"A JOSM nem talált pontos matematikai transzformációt „{0}” és WGS84 "
+"A JOSM nem talált pontos matematikai transzformációt \"{0}\" és WGS84 "
 "között.<br /><br />Szeretnél kipróbálni egy <i>elnéző</i> módszert, ami "
 "pontatlan transzformációt végez (<b>akár 1 km-es hibával</b>) ?<br/><br/>Ha "
 "igen, <b>NE töltsd fel</b> az adatokat OSM-re !"
@@ -33239,15 +33397,15 @@ msgid ""
 "Warning: Cannot download module ''{0}''. Its download link is not known. "
 "Skipping download."
 msgstr ""
-"Figyelmeztetés: „{0}” modult nem lehet letölteni. A letöltési linkje "
+"Figyelmeztetés: \"{0}\" modult nem lehet letölteni. A letöltési linkje "
 "ismeretlen. Letöltés kihagyása."
 
 msgid ""
 "Warning: Cannot download module ''{0}''. Its download link ''{1}'' is not a "
 "valid URL. Skipping download."
 msgstr ""
-"Figyelmeztetés: „{0}” modult nem lehet letölteni. „{1}” letöltési link egy "
-"érvénytelen URL. Letöltés kihagyása."
+"Figyelmeztetés: \"{0}\" modult nem lehet letölteni. \"{1}\" letöltési link "
+"egy érvénytelen URL. Letöltés kihagyása."
 
 msgid "Downloading Module {0}..."
 msgstr "{0} modul letöltése…"
@@ -33282,13 +33440,13 @@ msgid "Could not load module {0}. Delete from preferences?"
 msgstr "{0} modul nem tölthető be. Törlöd a beállításokból?"
 
 msgid "loading module ''{0}'' (version {1})"
-msgstr "„{0}” modul betöltése (verzió {1})"
+msgstr "\"{0}\" modul betöltése (verzió {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} modult nem lehetett betölteni, mert<br/>a fő osztálya „{1}” nem "
+"<html>{0} modult nem lehetett betölteni, mert<br/>a fő osztálya \"{1}\" nem "
 "található.<br/>Törlöd a beállításokból?</html>"
 
 msgid "Loading modules ..."
@@ -33298,7 +33456,7 @@ msgid "Checking module preconditions..."
 msgstr "Modul előfeltételeinek ellenőrzése…"
 
 msgid "Loading module ''{0}''..."
-msgstr "„{0}” modul betöltése…"
+msgstr "\"{0}\" modul betöltése…"
 
 msgid "JOSM could not find information about the following module:"
 msgid_plural "JOSM could not find information about the following modules:"
@@ -33325,22 +33483,22 @@ msgid "Disable module"
 msgstr "Modul letiltása"
 
 msgid "Click to delete the module ''{0}''"
-msgstr "„{0}” modul letiltásához kattints ide"
+msgstr "\"{0}\" modul letiltásához kattints ide"
 
 msgid "Keep module"
 msgstr "Modul megtartása"
 
 msgid "Click to keep the module ''{0}''"
-msgstr "„{0}” modul megtartásához kattints ide"
+msgstr "\"{0}\" modul megtartásához kattints ide"
 
 msgid "Warning: failed to delete outdated module ''{0}''."
-msgstr "Figyelmeztetés: nem sikerült törölni ezt az elavult modult: „{0}”"
+msgstr "Figyelmeztetés: nem sikerült törölni ezt az elavult modult: \"{0}\""
 
 msgid ""
 "Warning: failed to install already downloaded module ''{0}''. Skipping "
 "installation. JOSM is still going to load the old module version."
 msgstr ""
-"Figyelmeztetés: nem sikerült telepíteni a már letöltött „{0}” modult. "
+"Figyelmeztetés: nem sikerült telepíteni a már letöltött \"{0}\" modult. "
 "Telepítés kihagyása. A JOSM továbbra is a modul régi verzióját fogja "
 "betölteni."
 
@@ -33348,8 +33506,8 @@ msgid ""
 "Warning: failed to install module ''{0}'' from temporary download file "
 "''{1}''. Renaming failed."
 msgstr ""
-"Figyelmeztetés: nem sikerült telepíteni a(z) „{0}” modult ebből az "
-"ideiglenesen letöltött fájlból: „{1}”. Átnevezés sikertelen."
+"Figyelmeztetés: nem sikerült telepíteni a(z) \"{0}\" modult ebből az "
+"ideiglenesen letöltött fájlból: \"{1}\". Átnevezés sikertelen."
 
 msgid ""
 "Do not ask again and remember my decision (go to Preferences->Modules to "
@@ -33359,17 +33517,18 @@ msgstr ""
 "Beállítások -> Modulok alatt)"
 
 msgid "The module file ''{0}'' does not include a Manifest."
-msgstr "„{0}” modulfájl nem tartalmaz Manifest metaadatokat."
+msgstr "\"{0}\" modulfájl nem tartalmaz Manifest metaadatokat."
 
 msgid "Invalid URL ''{0}'' in module {1}"
-msgstr "Érvénytelen URL „{0}” {1} modulban"
+msgstr "Érvénytelen URL \"{0}\" {1} modulban"
 
 msgid "<b>Module provided by an external source:</b> {0}"
 msgstr "<b>Külső forrásból szolgáltatott modul:</b> {0}"
 
 msgid "Failed to create module information from manifest for module ''{0}''"
 msgstr ""
-"Nem sikerült elkészíteni a modulinformációkat „{0}” modul manifest fájljából"
+"Nem sikerült elkészíteni a modulinformációkat \"{0}\" modul manifest "
+"fájljából"
 
 msgid "Illegal entry in module list."
 msgstr "Érvénytelen bejegyzés a modul listában."
@@ -33383,7 +33542,7 @@ msgstr "Modul webhely gyorsítótár fájl feldolgozása…"
 msgid ""
 "Warning: Failed to scan file ''{0}'' for module information. Skipping."
 msgstr ""
-"Figyelmeztetés: Nem sikerült beolvasni „{0}” fájl a modulinformációkért. "
+"Figyelmeztetés: Nem sikerült beolvasni \"{0}\" fájl a modulinformációkért. "
 "Kihagyás."
 
 msgid "Processing module site cache icon files..."
@@ -33396,30 +33555,30 @@ msgid "Download module list..."
 msgstr "Modullista letöltése…"
 
 msgid "Downloading module list from ''{0}''"
-msgstr "Modul lista letöltése innen: „{0}”"
+msgstr "Modul lista letöltése innen: \"{0}\""
 
 msgid ""
 "Warning: failed to create module directory ''{0}''. Cannot cache module list "
 "from module site ''{1}''."
 msgstr ""
-"Figyelmeztetés: nem sikerült létrehozni a modul könyvtárat: „{0}”. A modul "
-"lista nem gyorsítótárazható a modul webhelyről: „{1}”."
+"Figyelmeztetés: nem sikerült létrehozni a modul könyvtárat: \"{0}\". A modul "
+"lista nem gyorsítótárazható a modul webhelyről: \"{1}\"."
 
 msgid "Writing module list to local cache ''{0}''"
-msgstr "Modul lista írása a helyi gyorsítótárba: „{0}”"
+msgstr "Modul lista írása a helyi gyorsítótárba: \"{0}\""
 
 msgid "Parsing module list from site ''{0}''"
-msgstr "Modullista elemzése „{0}” webhelyről"
+msgstr "Modullista elemzése \"{0}\" webhelyről"
 
 msgid ""
 "Failed to parse module list document from site ''{0}''. Skipping site. "
 "Exception was: {1}"
 msgstr ""
-"Nem sikerült elemezni a(z) „{0}” webhelyről származó modullistát. Webhely "
+"Nem sikerült elemezni a(z) \"{0}\" webhelyről származó modullistát. Webhely "
 "kihagyása. Kivétel: {1}"
 
 msgid "Processing module list from site ''{0}''"
-msgstr "Modullista feldolgozása „{0}” webhelyről"
+msgstr "Modullista feldolgozása \"{0}\" webhelyről"
 
 msgid "Open Visible..."
 msgstr "Látható megnyitása…"
@@ -33434,7 +33593,7 @@ msgid "Unknown file extension: {0}"
 msgstr "Ismeretlen fájlkiterjesztés: {0}"
 
 msgid "Parsing file \"{0}\" failed"
-msgstr "„{0}” fájl elemzése sikertelen"
+msgstr "\"{0}\" fájl elemzése sikertelen"
 
 msgid "Osmarender"
 msgstr "Osmarender"
@@ -33993,7 +34152,7 @@ msgid "The clipboard data is not an image"
 msgstr "A vágólapon nem kép van"
 
 msgid "Warning: failed to handle zip file ''{0}''. Exception was: {1}"
-msgstr "Figyelem: „{0}” zip fájl nem kezelhető. Kivétel: {1}"
+msgstr "Figyelem: \"{0}\" zip fájl nem kezelhető. Kivétel: {1}"
 
 msgid "A calibration file associated to the picture file was found: {0}\n"
 msgstr "A képfájlhoz kalibrációs fájl tartozik: {0}\n"
@@ -34062,7 +34221,7 @@ msgid "A polygon coordinate line must contain exactly 2 numbers"
 msgstr "Egy poligon koordináta sor pontosan 2 számot kell tartalmazzon"
 
 msgid "Unable to parse {0} as a number"
-msgstr "„{0}” nem értelmezhető számként"
+msgstr "\"{0}\" nem értelmezhető számként"
 
 msgid "Invalid coordinates were found: {0}, {1}"
 msgstr "Érvénytelen koordináták: {0}, {1}"
@@ -34701,13 +34860,13 @@ msgid "Multipolygon from rings"
 msgstr "Multipoligon gyűrűkből"
 
 msgid "Node without ''house'' role found"
-msgstr "„house” szerep nélküli pontot találtam"
+msgstr "\"house\" szerep nélküli pontot találtam"
 
 msgid "Way without ''house'' or ''street'' role found"
-msgstr "„house” vagy „street” szerep nélküli vonalat találtam"
+msgstr "\"house\" vagy \"street\" szerep nélküli vonalat találtam"
 
 msgid "Relation without ''house'' role found"
-msgstr "„house” szerep nélküli kapcsolatot találtam"
+msgstr "\"house\" szerep nélküli kapcsolatot találtam"
 
 msgid "Relation does not have name"
 msgstr "A kapcsolatnak nincs neve"
@@ -34719,19 +34878,19 @@ msgid "fix associatedStreet relation"
 msgstr "associatedStreet kapcsolat javítása"
 
 msgid "Relation without ''subarea'' role found"
-msgstr "„subarea” szerep nélküli kapcsolatot találtam"
+msgstr "\"subarea\" szerep nélküli kapcsolatot találtam"
 
 msgid "Node without ''label'' or ''admin_centre'' role found"
-msgstr "„lable” vagy „admin_centre” szerep nélküli pontot találtam"
+msgstr "\"lable\" vagy \"admin_centre\" szerep nélküli pontot találtam"
 
 msgid "Way without ''inner'' or ''outer'' role found"
-msgstr "„inner” vagy „outer” szerep nélküli vonalat találtam"
+msgstr "\"inner\" vagy \"outer\" szerep nélküli vonalat találtam"
 
 msgid "Node without ''stop'' or ''platform'' role found"
-msgstr "„stop” vagy „platform” szerep nélküli pontot találtam"
+msgstr "\"stop\" vagy \"platform\" szerep nélküli pontot találtam"
 
 msgid "Way platform without ''platform'' role found"
-msgstr "„platform” szerep nélküli platform vonalat találtam"
+msgstr "\"platform\" szerep nélküli platform vonalat találtam"
 
 msgid "Revert changeset fully"
 msgstr "Módosításcsomag teljes visszaállítása"
@@ -34809,14 +34968,14 @@ msgid ""
 "Warning: unsupported start element ''{0}'' in changeset content at position "
 "({1},{2}). Skipping."
 msgstr ""
-"Figyelmeztetés: nem támogatott „{0}” kezdőelem a módosításcsomag tartalmában "
-"az alábbi helyen ({1},{2}). Kihagyás."
+"Figyelmeztetés: nem támogatott \"{0}\" kezdőelem a módosításcsomag "
+"tartalmában az alábbi helyen ({1},{2}). Kihagyás."
 
 msgid ""
 "Warning: unsupported end element ''{0}'' in changeset content at position "
 "({1},{2}). Skipping."
 msgstr ""
-"Figyelmeztetés: nem támogatott „{0}” lezáróelem a módosításcsomag "
+"Figyelmeztetés: nem támogatott \"{0}\" lezáróelem a módosításcsomag "
 "tartalmában az alábbi helyen ({1},{2}). Kihagyás."
 
 msgid "Create Roundabout"
@@ -34874,7 +35033,7 @@ msgid "Could not read tagging preset source: ''{0}''"
 msgstr "Nem olvasható címkézési készlet forrás: ''{0}''"
 
 msgid "Error parsing tagging preset from ''{0}'':\n"
-msgstr "Nem sikerült értelmezni a címkekészletet innen: „{0}”:\n"
+msgstr "Nem sikerült értelmezni a címkekészletet innen: \"{0}\":\n"
 
 msgid "Sign {0}"
 msgstr "Aláírás {0}"
@@ -36083,21 +36242,21 @@ msgid "Create/Edit turn restriction..."
 msgstr "Kanyarodási korlátozás készítése/szerkesztése…"
 
 msgid "Create or edit a turn restriction."
-msgstr "Létrehoz vagy szerkeszt egy kanyarodási korlátozást."
+msgstr "Bekanyarodási korlátozás létrehozása vagy szerkesztése"
 
 msgid ""
 "In the following table you can edit the <strong>raw tags</strong> of the OSM "
 "relation representing this turn restriction."
 msgstr ""
-"Az alábbi táblázatban szerkeszteni tudod az OSM kapcsolat kanyarodási "
-"korlátozást reprezentáló  <strong>nyers címkéit</strong>."
+"Az alábbi táblázatban szerkeszteni tudod az OSM kapcsolat bekanyarodási "
+"korlátozást megjelenítő <strong>nyers címkéit</strong>."
 
 msgid ""
 "In the following table you can edit the <strong>raw members</strong> of the "
 "OSM relation representing this turn restriction."
 msgstr ""
-"Az alábbi táblázatban szerkeszteni tudod az OSM kapcsolat kanyarodási "
-"korlátozást reprezentáló  <strong>nyers tagjait</strong>."
+"Az alábbi táblázatban szerkeszteni tudod az OSM kapcsolat bekanyarodási "
+"korlátozást megjelenítő <strong>nyers tagjait</strong>."
 
 msgid "Type:"
 msgstr "Típus:"
@@ -36137,27 +36296,27 @@ msgid "Move the selected relation members up by one position"
 msgstr "A kijelölt kapcsolattagokat egy hellyel följebb mozgatja"
 
 msgid "Edit basic attributes of a turn restriction"
-msgstr "A kanyarodási korlátozás alapvető tulajdonságainak szerkesztése"
+msgstr "A bekanyarodási korlátozás alapvető tulajdonságainak szerkesztése"
 
 msgid "Edit the raw tags and members of this turn restriction"
-msgstr "A kanyarodási korlátozás nyers címkéinek és tagjainak szerkesztése"
+msgstr "A bekanyarodási korlátozás nyers címkéinek és tagjainak szerkesztése"
 
 msgid "Errors/Warnings"
 msgstr "Hibák/Figyelmeztetések"
 
 msgid "Show errors and warnings related to this turn restriction"
 msgstr ""
-"A kanyarodási korlátozáshoz kapcsolódó hibák és figyelmeztetések "
+"A bekanyarodási korlátozáshoz kapcsolódó hibák és figyelmeztetések "
 "megjelenítése"
 
 msgid "Create a new turn restriction in layer ''{0}''"
-msgstr "Új kanyarodási korlátozás létrehozása ''{0}'' rétegen"
+msgstr "Új bekanyarodási korlátozás létrehozása ''{0}'' rétegen"
 
 msgid "Edit a new turn restriction in layer ''{0}''"
-msgstr "Új kanyarodási korlátozás szerkesztése ''{0}'' rétegen"
+msgstr "Új bekanyarodási korlátozás szerkesztése ''{0}'' rétegen"
 
 msgid "Edit turn restriction ''{0}'' in layer ''{1}''"
-msgstr "''{0}'' kanyarodási korlátozás szerkesztése ''{1}'' rétegen"
+msgstr "''{0}'' bekanyarodási korlátozás szerkesztése ''{1}'' rétegen"
 
 msgid ""
 "There is still an unresolved error or warning identified for this turn "
@@ -36166,10 +36325,10 @@ 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] ""
-"Egy megoldatlan hiba vagy figyelmeztetés található a kanyarodási "
+"Egy megoldatlan hiba vagy figyelmeztetés található a bekanyarodási "
 "korlátozásban. Javasoljuk, hogy előbb oldd meg ezt a problémát."
 msgstr[1] ""
-"{0} hiba vagy figyelmeztetés található a kanyarodási korlátozásban. "
+"{0} hiba vagy figyelmeztetés található a bekanyarodási korlátozásban. "
 "Javasoljuk, hogy előbb oldd meg ezeket a problémákat."
 
 msgid "Do you want to save anyway?"
@@ -36197,17 +36356,17 @@ msgid_plural ""
 "This turn restriction refers to {0} objects which were deleted outside of "
 "this turn restriction editor:"
 msgstr[0] ""
-"A kanyarodási korlátozás olyan objektumra hivatkozik, ami törölve lett a "
+"A bekanyarodási korlátozás olyan objektumra hivatkozik, ami törölve lett a "
 "szerkesztőn kívül:"
 msgstr[1] ""
-"A kanyarodási korlátozás {0} olyan objektumra hivatkozik, amik törölve "
+"A bekanyarodási korlátozás {0} olyan objektumra hivatkozik, amik törölve "
 "lettek a szerkesztőn kívül:"
 
 msgid ""
 "Updates to this turn restriction can''t be saved unless deleted members are "
 "removed.<br>How to you want to proceed?"
 msgstr ""
-"A kanyarodási korlátozás módosításai nem menthetőek a törölt tagok "
+"A bekanyarodási korlátozás módosításai nem menthetőek a törölt tagok "
 "eltávolítása nélkül.<br>Hogyan szeretnéd folytatni?"
 
 msgid "Remove deleted members and save"
@@ -36217,21 +36376,22 @@ msgid "Cancel and return to editor"
 msgstr "Mégsem, visszatérés a szerkesztőbe"
 
 msgid "Deleted members in turn restriction"
-msgstr "Törölt tagok a kanyarodási korlátozásban"
+msgstr "Törölt tagok a bekanyarodási korlátozásban"
 
 msgid "Create a conflict and close this turn restriction editor"
-msgstr "Ütközés létrehozása és a kanyarodási korlátozás szerkesztő bezárása"
+msgstr "Ütközés létrehozása és a bekanyarodásikorlátozás-szerkesztő bezárása"
 
 msgid "Return to the turn restriction editor and resume editing"
 msgstr ""
-"Visszatérés a kanyarodási korlátozás szerkesztőbe és a szerkesztés folytatása"
+"Visszatérés a bekanyarodási korlátozás szerkesztőbe és a szerkesztés "
+"folytatása"
 
 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>Ez a kanyarodási korlátozás meg lett változtatva a szerkesztőn "
+"<html>Ez a bekanyarodási korlátozás meg lett változtatva a szerkesztőn "
 "kívül.<br>Nem fogod tudni alkalmazni a változtatásaidat és folytatni a "
 "szerkesztést.<br><br>Szeretnél létrehozni egy ütközést és bezárni a "
 "szerkesztőt?</html>"
@@ -36246,7 +36406,7 @@ msgid "Select this turn restriction"
 msgstr "Kanyarodási korlátozás kijelölése"
 
 msgid "Activate the layer this turn restriction belongs to and zoom to it"
-msgstr "A kanyarodási korlátozás rétegének aktiválása és ráközelítés"
+msgstr "A bekanyarodási korlátozás rétegének aktiválása és ráközelítés"
 
 msgid "{0} warning"
 msgid_plural "{0} warnings"
@@ -36268,7 +36428,7 @@ msgid "multiple objects with role ''{0}''"
 msgstr "több objektum ''{0}'' szereppel"
 
 msgid "Delete from turn restriction"
-msgstr "Törlés a kanyarodási korlátozásból"
+msgstr "Törlés a bekanyarodási korlátozásból"
 
 msgid "Accept the currently selected way"
 msgstr "Jelenleg kijelölt vonal elfogadása"
@@ -36277,24 +36437,24 @@ msgid "Paste from the clipboard"
 msgstr "Beillesztés vágólapról"
 
 msgid "Create new turn restriction"
-msgstr "Új kanyarodási korlátozás létrehozása"
+msgstr "Új bekanyarodási korlátozás létrehozása"
 
 msgid "Launch the turn restriction editor to create a new turn restriction"
 msgstr ""
-"Kanyarodási korlátozás szerkesztő elindítása új kanyarodási korlátozás "
+"Bekanyarodási korlátozás szerkesztő elindítása új kanyarodási korlátozás "
 "létrehozásához"
 
 msgid "No Right Turn"
-msgstr "Tilos jobbra kanyarodni"
+msgstr "Jobbra bekanyarodni tilos"
 
 msgid "No Left Turn"
-msgstr "Tilos balra kanyarodni"
+msgstr "Balra bekanyarodni tilos"
 
 msgid "No U-Turn"
-msgstr "Tilos megfordulni"
+msgstr "Megfordulni tilos"
 
 msgid "No Straight On"
-msgstr "Tilos egyenesen haladni"
+msgstr "Egyenesen továbbhaladni tilos"
 
 msgid "Only Right Turn"
 msgstr "Csak jobbra kanyarodás"
@@ -36309,7 +36469,7 @@ msgid "Warning: failed to load icon for turn restriction type ''{0}''"
 msgstr "Figyelmeztetés: nem sikerült betölteni a ''{0}'' korlátozás ikonját"
 
 msgid "please select a turn restriction type"
-msgstr "kérlek válassz egy kanyarodási korlátozás típust"
+msgstr "kérlek válassz egy bekanyarodásikorlátozás-típust"
 
 msgid ""
 "Select the vehicle types this turn restriction is <strong>not</strong> "
@@ -36387,42 +36547,43 @@ msgid ""
 "data set.</html>"
 msgstr ""
 "<html>Jelöld be, hogy csak a pillanatnyilag kijelölt objektumokhoz tartozó "
-"kanyarodási korlátozások jelenjenek meg a listában.<br>Ha nincs bejelölve, "
+"bekanyarodási korlátozások jelenjenek meg a listában.<br>Ha nincs bejelölve, "
 "az adathalmaz összes kanyarodási korlátozása megjelenik.</html>"
 
 msgid "Turn Restrictions"
 msgstr "Kanyarodási korlátozások"
 
 msgid "Display and manage turn restrictions in the current data set"
-msgstr "Az adathalmaz kanyarodási korlátozásainak megjelenítése és kezelése"
+msgstr ""
+"Az adathalmaz bekanyarodási korlátozásainak megjelenítése és kezelése"
 
 msgid "Open an editor for the selected turn restriction"
-msgstr "Szerkesztő megnyitása a kijelölt kanyarodási korlátozással"
+msgstr "Szerkesztő megnyitása a kijelölt bekanyarodási korlátozással"
 
 msgid "Delete the selected turn restriction"
-msgstr "A kijelölt kanyarodási korlátozás törlése"
+msgstr "A kijelölt bekanyarodási korlátozás törlése"
 
 msgid "Create a new turn restriction"
-msgstr "Új kanyarodási korlátozás létrehozása"
+msgstr "Új bekanyarodási korlátozás létrehozása"
 
 msgid "Set the current JOSM selection to the selected turn restrictions"
 msgstr ""
-"Az aktuális JOSM kijelölés beállítása kijelölt kanyarodási korlátozásként"
+"Az aktuális JOSM kijelölés beállítása kijelölt bekanyarodási korlátozásként"
 
 msgid "Select in current data layer"
 msgstr "Kijelölés a jelenlegi adatrétegen"
 
 msgid "Zoom to the currently selected turn restrictions"
-msgstr "Közelítés a kijelölt kanyarodási korlátozásokra"
+msgstr "Közelítés a kijelölt bekanyarodási korlátozásokra"
 
 msgid "An OSM plugin for editing turn restrictions."
-msgstr "Egy OSM bővítmény kanyarodási korlátozások szerkesztéséhez."
+msgstr "Egy OSM bővítmény bekanyarodási korlátozások szerkesztéséhez."
 
 msgid ""
 "Development of the turn restriction plugin was sponsored by <a "
 "href=\"http://www.skobbler.de\">skobbler GmbH</a>."
 msgstr ""
-"A kanyarodási korlátozás bővítmény fejlesztését szponzorálta a <a "
+"A bekanyarodási korlátozás bővítmény fejlesztését szponzorálta a <a "
 "href=\"http://www.skobbler.de\">skobbler GmbH</a>."
 
 msgid "Configure the preferences for the turnrestrictions plugin"
@@ -36436,7 +36597,7 @@ msgid ""
 "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 ""
-"Az Alap Szerkesztő opcionálisan meg tudja jeleníteni a kanyarodási "
+"Az Alap Szerkesztő opcionálisan meg tudja jeleníteni a bekanyarodási "
 "korlátozás via-objektumait. Ha engedélyezed, az Alap Szerkesztőben is "
 "szerkeszthetőek lesznek, ha letiltod, akkor csak a Speciális Szerkesztőben."
 
@@ -36444,10 +36605,10 @@ msgid "Display and edit list of via-objects in the Basic Editor"
 msgstr "Via-objektumok megjelenítése az Alap Szerkesztőben"
 
 msgid "Road signs - Set A"
-msgstr "Jelzőtáblák - „A” készlet"
+msgstr "Jelzőtáblák - \"A\" készlet"
 
 msgid "Road signs - Set B"
-msgstr "Jelzőtáblák - „B” készlet"
+msgstr "Jelzőtáblák - \"B\" készlet"
 
 msgid "Please select the set of road sign icons to be used in the plugin."
 msgstr ""
@@ -36466,7 +36627,7 @@ msgid ""
 "turn restriction, the way with role <tt>from</tt> should be different from "
 "the way with role <tt>to</tt>, though."
 msgstr ""
-"Ez a kanyarodási korlátozás a(z) <span class=\"object-name\">{0}</span> "
+"Ez a bekanyarodási korlátozás a(z) <span class=\"object-name\">{0}</span> "
 "vonalat használja <tt>from</tt> <strong>és</strong> <tt>to</tt> szereppel. "
 "Egy kanyarodási korlátozásban a <tt>from</tt> szerepű vonal különböző kell "
 "legyen a <tt>to</tt> szerepű vonaltól."
@@ -36497,13 +36658,14 @@ msgid ""
 "the tag key <tt>restriction</tt>. It is recommended to use standard values "
 "only. Please select one in the Basic editor."
 msgstr ""
-"Ez a kanyarodási korlátozás egy nem szabványos <tt>{0}</tt> korlátozást "
+"Ez a bekanyarodási korlátozás egy nem szabványos <tt>{0}</tt> korlátozást "
 "tartalmaz a <tt>restriction</tt> kulcsban. Ajánlott, hogy szabványos "
 "értékeket használj. Kérlek válassz egyet az Alap Szerkesztőben."
 
 msgid "Go to Basic Editor and manually choose a turn restriction type"
 msgstr ""
-"Menj az Alap Szerkesztőbe és válassz kanyarodási korlátozás típust manuálisan"
+"Menj az Alap Szerkesztőbe és válassz bekanyarodásikorlátozás-típust "
+"manuálisan"
 
 msgid ""
 "The <strong>from</strong>-way <span class=\"object-name\">{0}</span> and the "
@@ -36535,17 +36697,17 @@ msgid ""
 "A turn restriction must declare the type of restriction. Please select a "
 "type in the Basic Editor."
 msgstr ""
-"Egy kanyarodási korlátozásnak tartalmaznia kell a korlátozás típusát. Kérlek "
+"A bekanyarodási korlátozásnak tartalmaznia kell a korlátozás típusát. Kérlek "
 "válassz egy típust az Alap Szerkesztőben."
 
 msgid "A way with role <tt>from</tt> is required in a turn restriction."
 msgstr ""
-"Egy <tt>from</tt> szerepű vonal kötelezően kell legyen egy kanyarodási "
+"Egy <tt>from</tt> szerepű vonal kötelezően kell legyen egy bekanyarodási "
 "korlátozásban."
 
 msgid "A way with role <tt>to</tt> is required in a turn restriction."
 msgstr ""
-"Egy <tt>to</tt> szerepű vonal kötelezően kell legyen egy kanyarodási "
+"Egy <tt>to</tt> szerepű vonal kötelezően kell legyen egy bekanyarodási "
 "korlátozásban."
 
 msgid "Please go to the Basic editor and manually choose a way."
@@ -36564,14 +36726,14 @@ msgid ""
 "The two ways participating in the turn restriction <strong>aren''t "
 "connected.</strong>"
 msgstr ""
-"A kanyarodási korlátozásban szereplő két vonal <strong>nincsen "
+"A bekanyarodási korlátozásban szereplő két vonal <strong>nincsen "
 "összekötve.</strong>"
 
 msgid ""
 "Make sure you add one or more via objects (nodes or ways) to the turn "
 "restriction."
 msgstr ""
-"Győződj meg róla, hogy hozzáadtál a kanyarodási korlátozáshoz via-"
+"Győződj meg róla, hogy hozzáadtál a bekanyarodási korlátozáshoz via-"
 "objektumokat (pontokat vagy vonalakat)."
 
 msgid "Go to the Advanced Editor and add via objects"
@@ -36581,17 +36743,17 @@ 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 ""
-"A kanyarodási korlátozás pontosan egy <tt>from</tt> szerepű vonalat kell "
-"tartalmazzon. Ennek a kanyarodási korlátozásnak {0} ilyen vonala van. Kérlek "
-"távolíts el közülük {1}-t."
+"A bekanyarodási korlátozás pontosan egy <tt>from</tt> szerepű vonalat kell "
+"tartalmazzon. Ennek a bekanyarodási korlátozásnak {0} ilyen vonala van. "
+"Kérlek távolíts el közülük {1}-t."
 
 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 ""
-"A kanyarodási korlátozás pontosan egy <tt>to</tt> szerepű vonalat kell "
-"tartalmazzon. Ennek a kanyarodási korlátozásnak {0} ilyen vonala van. Kérlek "
-"távolíts el közülük {1}-t."
+"A bekanyarodási korlátozás pontosan egy <tt>to</tt> szerepű vonalat kell "
+"tartalmazzon. Ennek a bekanyarodási korlátozásnak {0} ilyen vonala van. "
+"Kérlek távolíts el közülük {1}-t."
 
 msgid "Go to the Advanced Editor and remove the members"
 msgstr "Menj a Speciális Szerkesztőbe és távolítsd el a tagokat"
@@ -36647,21 +36809,21 @@ msgid ""
 "This turn restriction uses the node <span class=\"object-name\">{0}</span> "
 "as member with role <tt>{1}</tt>."
 msgstr ""
-"A kanyarodási korlátozásnak a(z) <span class=\"object-name\">{0}</span> pont "
-"tagja <tt>{1}</tt> szereppel."
+"A bekanyarodási korlátozásnak a(z) <span class=\"object-name\">{0}</span> "
+"pont tagja <tt>{1}</tt> szereppel."
 
 msgid ""
 "This turn restriction uses the relation <span class=\"object-"
 "name\">{0}</span> as member with role <tt>{1}</tt>."
 msgstr ""
-"A kanyarodási korlátozásnak a(z) <span class=\"object-name\">{0}</span> "
+"A bekanyarodási korlátozásnak a(z) <span class=\"object-name\">{0}</span> "
 "kapcsolat tagja <tt>{1}</tt> szereppel."
 
 msgid "A way is required instead."
 msgstr "Helyette egy vonal szükséges."
 
 msgid "Delete the member from the turn restriction"
-msgstr "Tag törlése a kanyarodási korlátozásból"
+msgstr "Tag törlése a bekanyarodási korlátozásból"
 
 msgid "Change to the Basic Editor and select a way"
 msgstr "Váltás az Alap Szerkesztőre és vonal kijelölése"
@@ -37280,32 +37442,6 @@ msgstr "ismétlés"
 msgid "mute"
 msgstr "némítás"
 
-msgid "Walking Papers Scanned Map"
-msgstr "Walking Papers szkennelt térkép"
-
-msgid ""
-"Display a map that was previously scanned and uploaded to walking-papers.org"
-msgstr ""
-"Szkennelt és a walking-papers.org weboldalra feltöltött térképeket jelenít "
-"meg"
-
-msgid ""
-"Enter a walking-papers.org URL or ID (the bit after the ?id= in the URL)"
-msgstr ""
-"Írd be a walking-papers.org URL-t vagy ID-t (a \"?id=\" utáni rész az URL-"
-"ben)"
-
-msgid "Could not read information from walking-papers.org the id \"{0}\""
-msgstr ""
-"Nem sikerült az információk beszerzése a walking-papers.org-ról (id: "
-"\"{0}\")."
-
-msgid "Walking Papers: {0}"
-msgstr "Walking Papers: {0}"
-
-msgid "Walking Papers layer ({0}) in zoom {1}"
-msgstr "Walking Papers réteg ({0}) nagyítás: {1}"
-
 msgid "Way Download"
 msgstr "Út letöltése"
 
@@ -37362,7 +37498,7 @@ msgid "Fetch Wikidata IDs"
 msgstr "Wikidata ID-k lekérése"
 
 msgid "Fetch Wikidata IDs using the ''wikipedia'' tag"
-msgstr "Wikidata ID-k lekérése a „wikipedia” címke használatával"
+msgstr "Wikidata ID-k lekérése a \"wikipedia\" címke használatával"
 
 msgid "Fetching Wikidata IDs"
 msgstr "Wikidata ID-k lekérése"
@@ -37375,11 +37511,11 @@ msgstr "Nem található Wikidata ID ehhez: {0}"
 
 msgid "Fetching {0} Wikidata ID for language ''{1}''"
 msgid_plural "Fetching {0} Wikidata IDs for language ''{1}''"
-msgstr[0] "{0} Wikidata ID lekérése a „{1}” nyelvhez"
-msgstr[1] "{0} Wikidata ID lekérése a „{1}” nyelvhez"
+msgstr[0] "{0} Wikidata ID lekérése a \"{1}\" nyelvhez"
+msgstr[1] "{0} Wikidata ID lekérése a \"{1}\" nyelvhez"
 
 msgid "Add Wikidata for language ''{0}''"
-msgstr "Wikidata hozzáadása „{0}” nyelvhez"
+msgstr "Wikidata hozzáadása \"{0}\" nyelvhez"
 
 msgid "Add names from Wikipedia"
 msgstr "Nevek hozzáadása a Wikipedia-ról"
@@ -37481,6 +37617,26 @@ msgid ""
 msgstr ""
 "Egy, az objektumok cimkéjével megegyező ''wikipedia'' szócikket ad hozzá"
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "Az - Ultimate WMS Super-speed Turbo Challenge II -"
 
diff --git a/i18n/po/hy.po b/i18n/po/hy.po
index 37dc6fb..5e98f8c 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+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: 2017-09-03 04:34+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:32+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: hy\n"
 
 msgid "Cancel"
@@ -387,6 +387,34 @@ msgstr ""
 msgid "Delete selected objects."
 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 "Delete Layer"
 msgstr ""
 
@@ -1293,29 +1321,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2724,34 +2738,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2783,6 +2769,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2902,6 +2911,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3009,6 +3030,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr ""
 
@@ -3052,6 +3076,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3688,6 +3715,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4728,9 +4809,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4776,6 +4854,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr ""
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4797,9 +4878,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -5000,6 +5078,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5252,6 +5338,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7034,6 +7124,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7256,9 +7349,6 @@ 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."
@@ -8186,15 +8276,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8223,33 +8313,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8373,6 +8436,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8506,6 +8596,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8515,6 +8611,9 @@ msgstr ""
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8659,6 +8758,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9698,9 +9800,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12837,15 +12936,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -12951,6 +13041,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13200,14 +13293,6 @@ 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 ""
 
@@ -13271,9 +13356,6 @@ msgid ""
 "{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 ""
 
@@ -14505,9 +14587,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14604,10 +14683,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15195,6 +15270,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17232,7 +17311,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23058,6 +23138,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23116,6 +23199,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23197,6 +23283,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23218,9 +23319,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23815,6 +23913,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24226,6 +24327,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24669,6 +24773,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25872,6 +25979,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26052,10 +26162,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26103,9 +26209,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26449,11 +26552,6 @@ msgid ""
 "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 ""
 
@@ -27064,13 +27162,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28367,6 +28465,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28382,77 +28618,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28503,27 +28744,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28664,160 +28884,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28867,17 +29024,6 @@ 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 ""
 
@@ -29314,18 +29460,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35071,26 +35205,6 @@ 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 ""
 
@@ -35259,6 +35373,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/ia.po b/i18n/po/ia.po
index d9c40b9..bf805c2 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+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: 2017-09-03 04:47+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:45+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: ia\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -387,6 +387,34 @@ msgstr ""
 msgid "Delete selected objects."
 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 "Delete Layer"
 msgstr ""
 
@@ -1293,29 +1321,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2724,34 +2738,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2783,6 +2769,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2902,6 +2911,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3009,6 +3030,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr ""
 
@@ -3052,6 +3076,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3688,6 +3715,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4728,9 +4809,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4776,6 +4854,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr ""
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4797,9 +4878,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -5000,6 +5078,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5252,6 +5338,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7034,6 +7124,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7256,9 +7349,6 @@ 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."
@@ -8186,15 +8276,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8223,33 +8313,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8373,6 +8436,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8506,6 +8596,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8515,6 +8611,9 @@ msgstr ""
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8659,6 +8758,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9698,9 +9800,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12837,15 +12936,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -12951,6 +13041,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13200,14 +13293,6 @@ 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 ""
 
@@ -13271,9 +13356,6 @@ msgid ""
 "{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 ""
 
@@ -14505,9 +14587,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14604,10 +14683,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15195,6 +15270,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17232,7 +17311,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23058,6 +23138,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23116,6 +23199,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23197,6 +23283,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23218,9 +23319,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23815,6 +23913,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24226,6 +24327,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24669,6 +24773,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25872,6 +25979,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26052,10 +26162,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26103,9 +26209,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26449,11 +26552,6 @@ msgid ""
 "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 ""
 
@@ -27064,13 +27162,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28367,6 +28465,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28382,77 +28618,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28503,27 +28744,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28664,160 +28884,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28867,17 +29024,6 @@ 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 ""
 
@@ -29314,18 +29460,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35071,26 +35205,6 @@ 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 ""
 
@@ -35259,6 +35373,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/id.po b/i18n/po/id.po
index 30d88d6..9b2edf6 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
 "PO-Revision-Date: 2016-03-10 03:36+0000\n"
 "Last-Translator: Ezagren <ezagren 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: 2017-09-03 04:48+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:46+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: id\n"
 "X-Language: id_ID\n"
 
@@ -397,6 +397,42 @@ msgstr "Hapus"
 msgid "Delete selected objects."
 msgstr "Hapus objek terpilih."
 
+msgid "Delete confirmation"
+msgstr "Konfirmasi penghapusan"
+
+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 ""
+"Anda akan menghapus node yang berada diluar area yang telah Anda "
+"download.<br>Hal ini dapat menimbulkan masalah karena objek lainnya (yang "
+"tidak Anda lihat) mungkin menggunakannya.<br>Anda tetap ingin menghapusnya?"
+
+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 ""
+"Anda akan menghapus objek yang belum selesai.<br>Hal ini akan menyebabkan "
+"masalah karena Anda tidak melihat objek aslinya.<br>Anda tetap ingin "
+"menghapusnya?"
+
+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] ""
+"Anda ingin menghapus {0} relasi: {1}<br/>Langkah ini jarang digunakan dan "
+"tidak dapat dibatalkan jika anda sudah upload ke server.<br/>Apakah anda "
+"yakin ingin menghapus?"
+
+msgid "Delete relation?"
+msgstr "Hapus relasi?"
+
 msgid "Delete Layer"
 msgstr ""
 
@@ -1379,31 +1415,14 @@ msgstr " [id: {0}]"
 msgid "Segment {0}: {1}"
 msgstr ""
 
-msgid "You must select two or more nodes to split a circular way."
-msgstr ""
-"Anda harus memilih satu atau lebih node untuk membagi jalur bundaran."
-
-msgid ""
-"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
-"middle of the way.)"
-msgstr ""
-"Jalur tidak dapat dibagi pada notes yang dipilih. (Petunjuk: Pilih node di "
-"tengah-tengah jalan.)"
-
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
-msgstr ""
+msgid "Search preset"
+msgstr "Cari Preset"
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
-msgstr ""
+msgid "Show preset search dialog"
+msgstr "Tampilkan dialog pencarian preset"
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
+msgid "Search presets"
+msgstr "Cari preset"
 
 msgid "Discourage upload"
 msgstr ""
@@ -2891,42 +2910,6 @@ msgid "Delete {0} relation"
 msgid_plural "Delete {0} relations"
 msgstr[0] "Hapus {0} relasi"
 
-msgid "Delete confirmation"
-msgstr "Konfirmasi penghapusan"
-
-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 ""
-"Anda akan menghapus node yang berada diluar area yang telah Anda "
-"download.<br>Hal ini dapat menimbulkan masalah karena objek lainnya (yang "
-"tidak Anda lihat) mungkin menggunakannya.<br>Anda tetap ingin menghapusnya?"
-
-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 ""
-"Anda akan menghapus objek yang belum selesai.<br>Hal ini akan menyebabkan "
-"masalah karena Anda tidak melihat objek aslinya.<br>Anda tetap ingin "
-"menghapusnya?"
-
-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] ""
-"Anda ingin menghapus {0} relasi: {1}<br/>Langkah ini jarang digunakan dan "
-"tidak dapat dibatalkan jika anda sudah upload ke server.<br/>Apakah anda "
-"yakin ingin menghapus?"
-
-msgid "Delete relation?"
-msgstr "Hapus relasi?"
-
 msgid "Move {0} node"
 msgid_plural "Move {0} nodes"
 msgstr[0] "Pindahkan {0} node"
@@ -2954,6 +2937,32 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr "Urutan: {0}"
 
+msgid "You must select two or more nodes to split a circular way."
+msgstr ""
+"Anda harus memilih satu atau lebih node untuk membagi jalur bundaran."
+
+msgid ""
+"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
+"middle of the way.)"
+msgstr ""
+"Jalur tidak dapat dibagi pada notes yang dipilih. (Petunjuk: Pilih node di "
+"tengah-tengah jalan.)"
+
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] "Mengubah {0} node/titik"
@@ -3078,6 +3087,18 @@ msgstr "Nilai lintang tidak sah ''{0}''"
 msgid "Illegal longitude value ''{0}''"
 msgstr "Nilai bujur tidak sah \"{0}\""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3196,6 +3217,11 @@ msgstr "Imperial"
 msgid "Nautical Mile"
 msgstr "Jarak lautan"
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+"Mengharapkan mendapatkan value yang tidak kosong untuk parameter \"{0}\", "
+"mendapatkan \"{1}\""
+
 msgid "UNKNOWN"
 msgstr "TIDAK DIKENAL"
 
@@ -3239,6 +3265,9 @@ msgctxt "compass"
 msgid "E"
 msgstr "T"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3910,6 +3939,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr "Proyeksi pilihan anda sendiri"
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr "Deskripsi"
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr "Tampilkan pesan bantuan ini"
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr "Contoh"
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr "GRS80"
 
@@ -4976,11 +5059,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr "Offset"
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-"Mengharapkan mendapatkan value yang tidak kosong untuk parameter \"{0}\", "
-"mendapatkan \"{1}\""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -5026,6 +5104,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr "Menginisialisasi OSM API"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr "Layer {0} dihapus karena tidak diikuti oleh konfigurasi API."
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -5047,9 +5128,6 @@ msgstr "penggunaan"
 msgid "options"
 msgstr "Pilihan"
 
-msgid "Show this help"
-msgstr "Tampilkan pesan bantuan ini"
-
 msgid "Standard unix geometry argument"
 msgstr "Argumen unix geometri standar"
 
@@ -5259,6 +5337,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5516,6 +5602,10 @@ msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 "Nilai saat ini tidak valid pada indeks peta untuk tingkat zoom yang diberikan"
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr "Anda mengalami bug di JOSM"
 
@@ -7354,6 +7444,9 @@ msgstr "Hapus set perubahan pada detail tampilan panel dari lokal cache"
 msgid "Update the changeset from the OSM server"
 msgstr "Perbarui changset dalam detil tampilan panel dari cache lokal"
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7610,9 +7703,6 @@ msgid "Please enter or paste an URL to retrieve changesets from the OSM API."
 msgstr ""
 "silakan masukan atau sisipkan URL untuk mengambil set perubahan dari OSM API."
 
-msgid "Examples"
-msgstr "Contoh"
-
 msgid ""
 "Note that changeset queries are currently always submitted to ''{0}'', "
 "regardless of the host, port and path of the URL entered below."
@@ -8590,15 +8680,15 @@ msgstr "Download sudah ok, ukuran mungkin akan diterima oleh server"
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8627,33 +8717,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr "Sejarah"
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8777,6 +8840,33 @@ msgstr "Pencarian peta secara cepat"
 msgid "Tile Numbers"
 msgstr "Nomor indeks"
 
+msgid "history"
+msgstr "Sejarah"
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr "JOSM membutuhkan pencarian"
 
@@ -8937,6 +9027,12 @@ msgstr "memperbesar node/titik saat ini pada data layer"
 msgid "Open a history browser with the history of this node"
 msgstr "membuka riwayat pencarian dengan riwayat dari node/titik"
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr "way/garis {0}"
 
@@ -8946,6 +9042,9 @@ msgstr "Relasi {0}"
 msgid "Object"
 msgstr "Objek"
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -9113,6 +9212,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "Berikan komentar singkat untuk perubahan yang Anda unggah:"
 
@@ -10231,9 +10333,6 @@ msgid "{0} track"
 msgid_plural "{0} tracks"
 msgstr[0] "{0} jalur"
 
-msgid "Description"
-msgstr "Deskripsi"
-
 msgid "Timespan"
 msgstr "Timespan"
 
@@ -13624,15 +13723,6 @@ msgstr "Preset sub elemen tanpa induk"
 msgid "Error parsing {0}: "
 msgstr "Kesalahan mengurai {0}: "
 
-msgid "Search preset"
-msgstr "Cari Preset"
-
-msgid "Show preset search dialog"
-msgstr "Tampilkan dialog pencarian preset"
-
-msgid "Search presets"
-msgstr "Cari preset"
-
 msgid "Presets"
 msgstr "Presets"
 
@@ -13750,6 +13840,9 @@ msgstr "Semua file (*.*)"
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr "{0}... [Harap ketik nomornya]"
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -14034,14 +14127,6 @@ msgstr "Mode tidak diketahui {0}."
 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 ""
 
@@ -14107,9 +14192,6 @@ msgid ""
 msgstr ""
 "Versi 0.6 mendukung protokol, ketika server berkata mendukung {0} sampai {1}."
 
-msgid "Removed layer {0} because it is not allowed by the configured API."
-msgstr "Layer {0} dihapus karena tidak diikuti oleh konfigurasi API."
-
 msgid "Unexpected format of ID replied by the server. Got ''{0}''."
 msgstr ""
 "format yang tidak diduga dari ID yang bibalas oleh server. Mendapatkan "
@@ -15484,9 +15566,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr "{0}... [Harap ketik nomornya]"
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -15585,10 +15664,6 @@ msgid "Failed to load XML schema."
 msgstr "Gagal memuat skema XML."
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -16188,6 +16263,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -18234,7 +18313,8 @@ msgid "Bay"
 msgstr "Teluk"
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -24062,6 +24142,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -24120,6 +24203,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -24201,6 +24287,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -24222,9 +24323,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -24819,6 +24917,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -25230,6 +25331,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -25673,6 +25777,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -26876,6 +26983,9 @@ msgstr "relasi tanpa tipe"
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr "agama tanpa golongan agama"
 
@@ -27068,10 +27178,6 @@ msgid "Customization of public public transport stops."
 msgstr ""
 
 msgid ""
-"Creating and handling address nodes and buildings within Czech Republic."
-msgstr "Membuat dan penanganantitik alamat dan bangunan di Republik Ceko."
-
-msgid ""
 "Allows to import various file formats into JOSM directly. Currently "
 "supported: TangoGPS, Garmin Trainings Center TCX."
 msgstr ""
@@ -27126,9 +27232,6 @@ msgstr ""
 "Bicara dengan pengguna mengedit peta di sekitarnya, diberitahu ketika "
 "seseorang datang mendekat."
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -27532,13 +27635,6 @@ msgstr ""
 "georeferensi terhadap jalur GPS, menggunakannya untuk mengidentifikasi objek "
 "yang terlihat."
 
-msgid ""
-"Supports downloading tiled, scanned maps from walking-papers.org. This "
-"plugin is still under early development and may be buggy."
-msgstr ""
-"Mendukung untuk mengunduh indeks, peta hasil scan dari walking-papers.org. "
-"Plugin ini masih dalam tahap awal pembangunan dan mungkin buggy."
-
 msgid "Easy downloading along a long set of interconnected ways"
 msgstr ""
 "Mudah mengunduh selama pengaturan panjang garis yang saling berhubungan"
@@ -28174,13 +28270,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -29563,6 +29659,162 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+msgstr "Otomatis mencari"
+
+msgid ""
+"Please enable at least two WMS layers in the cadastre-fr plugin "
+"configuration.\n"
+"Layers ''Building'' and ''Parcel'' added by default."
+msgstr ""
+"Diharapkan untuk mengaktifkan setidaknya dua WMS layer di pengaturan plugin "
+"cadastre-fr.\n"
+"Layer \"Building/Bangunan\" dan \"Parcel\" sudah ditambahkan sejak awal."
+
+msgid ""
+"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+msgstr ""
+"Peringatan: Gagal menempatkan dialog opsi pane yang selalu di atas. "
+"Pengecualia: {0}"
+
+msgid ""
+"To enable the cadastre WMS plugin, change\n"
+"the current projection to one of the cadastre\n"
+"projections and retry"
+msgstr ""
+"tersedia kadaster plugin WMS, ubah \n"
+"proyeksi saat ini ke satu dari kadaster\n"
+"proyeksi dan coba lagi"
+
+msgid "Change the current projection"
+msgstr "Ubah proyeksi saat ini"
+
+msgid "Extract commune boundary"
+msgstr "ekstrak batas kota"
+
+msgid "Only on vectorized layers"
+msgstr "Hanya pada layer vektor"
+
+msgid "Cancel current grab"
+msgstr "Batalkan pengambilan saat ini"
+
+msgid "Cancel current grab (only vector images)"
+msgstr "Batalkan pengambilan saat ini (hanya gambar vektor)"
+
+msgid "Cadastre grab"
+msgstr "klip kadaster"
+
+msgid "Download Image from French Cadastre WMS"
+msgstr "mengunduh gambar dari WMS kadaster Prancis"
+
+msgid "Cadastre: {0}"
+msgstr "Kadaster: {0}"
+
+msgid "Georeference an image"
+msgstr "Georefensi gambar"
+
+msgid "Grab non-georeferenced image"
+msgstr "Ambil gambar yang tidak digeoreferensi"
+
+msgid "Georeferencing interrupted"
+msgstr "georeferensi terganggu"
+
+msgid ""
+"This image contains georeference data.\n"
+"Do you want to use them ?"
+msgstr ""
+"Gambar ini mengandung data yang telah tergeoreferensi.\n"
+"Apakah Anda ingin menggunakannya?"
+
+msgid "Load layer from cache"
+msgstr "Memuat layer dari cache"
+
+msgid "Load location from cache (only if cache is enabled)"
+msgstr "Memuat lokasi dari cache (jika cache aktif)"
+
+msgid "{0} not allowed with the current projection"
+msgstr "{0} tidak diizinkan menggunakan proyeksi saat ini"
+
+msgid ""
+"Cannot load cache {0} which is not compatible with current projection zone"
+msgstr ""
+"Tidak dapak memuat cache {0} yang tidak kompatibel dengan zona proyeksi saat "
+"ini"
+
+msgid ""
+"Selected file {0} is not a cache file from this plugin (invalid extension)"
+msgstr ""
+"Berkas yang dipilih {0} bukan berkas cache dari plugin ini (ekstensi tidak "
+"valid)"
+
+msgid "The location {0} is already on screen. Cache not loaded."
+msgstr "Lokasi {0} siap pada layar. tidak memuat memori sementara."
+
+msgid "(optional)"
+msgstr "Pilihan"
+
+msgid "Change location"
+msgstr "Ubah Lokasi"
+
+msgid "Set a new location for the next request"
+msgstr "Atur lokasi baru untuk permintaan selanjutnya"
+
+msgid "Add a new municipality layer"
+msgstr "Tambahkan layer kotamadya"
+
+msgid "Commune"
+msgstr "kelompok"
+
+msgid ""
+"<html>Enter the town,village or city name.<br>Use the syntax and punctuation "
+"known by www.cadastre.gouv.fr .</html>"
+msgstr ""
+"<html>Masukkan kota atau nama desa.<br>Gunakan syntax dan tanda yang "
+"diketaui oleh www.cadastre.gov.fr.</html>"
+
+msgid "Departement"
+msgstr "Departemen"
+
+msgid "<html>Departement number (optional)</html>"
+msgstr "<html>Nomor departemen (optional)</html>"
+
+msgid "Add new layer"
+msgstr "Tambah layer baru"
+
+msgid "Open Cadastre Preferences"
+msgstr "Buka pengaturan kadaster"
+
+msgid "Refine georeferencing"
+msgstr "Persempit georeferensi"
+
+msgid "Improve georeferencing (only raster images)"
+msgstr "Mengubah georeference (hanya gambar raster)"
+
+msgid "Reset cookie"
+msgstr "Atur ulang cookie"
+
+msgid "Get a new cookie (session timeout)"
+msgstr "Dapatkan cookie baru (sesi habis)"
+
+msgid "Save image as..."
+msgstr "Simpan gambar sebagai..."
+
+msgid "PNG files (*.png)"
+msgstr "PNG files (*.png)"
+
+msgid "GeoTiff files (*.tif)"
+msgstr "Fle GeoTiff (*.tif)"
+
+msgid "Export image (only raster images)"
+msgstr "Ekspor gambar (hanya gambar raster)"
+
+msgid ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+"Lebih dari satu layer WSM sekarang\n"
+"Pilih salah satu lalu coba kembali"
+
 msgid "on polygon"
 msgstr "di dalam poligon"
 
@@ -29578,93 +29830,83 @@ msgstr "Selanjutnya tidak"
 msgid "Enter addresses"
 msgstr "Masukkan alamat"
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
+msgstr "Mengatur WMS"
+
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
+msgstr "mengatur posisi layer WMS (hanya menyimpan gambar raster)"
+
+msgid "Add \"source=...\" to elements?"
+msgstr "Tambahkan \"sumber=...\" ke elemen?"
+
+msgid "Download from Cadastre"
 msgstr ""
-"Lokasi \"{0}\" ditemukan di memori sementara.\n"
-"muat memori sementara ?\n"
-"(No = new cache)"
 
-msgid "Select Feuille"
-msgstr "Pilih Feuille"
+msgid "Objects:"
+msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Select to download buildings in the selected download area."
 msgstr ""
-"Kesalahan membuat file.\n"
-"Kemungkinan versi lama dari file memori sementara."
 
-msgid "Lambert Zone {0} cache file (.{0})"
-msgstr "Lambert Zone {0} cache file (.{0})"
+msgid "address"
+msgstr "alamat"
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
-msgstr "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Select to download addresses in the selected download area."
+msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
-msgstr "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "symbol"
+msgstr "simbol"
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
-msgstr "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "Select to download symbols in the selected download area."
+msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
-msgstr "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
-msgstr "Reunion RGR92 cache file (.UTM4)"
+msgid "parcel"
+msgstr "paket"
 
-msgid "CadastreGrabber: Illegal url."
-msgstr "CadastreGrabber: Illegal url."
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
+msgstr "nomor paket"
 
 msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
-"Tidak bisa membuka sesi klien baru.\n"
-"Server sedang dalam perbaikan atau melebihi kapasitas untuk sementara."
 
-msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
-msgstr "Kota {0} tidak ditemukan atau tidak tersedia"
+msgid "section"
+msgstr "bagian"
 
-msgid "Choose from..."
-msgstr "Pilih dari..."
+msgid "Select to download cadastral sections in the selected download area."
+msgstr ""
 
-msgid "Select commune"
-msgstr "Pilih kota"
+msgid "locality"
+msgstr "lokalitas"
 
-msgid "Auto sourcing"
-msgstr "Otomatis mencari"
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
+msgstr "Kelompok"
 
 msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+"Select to download municipality boundary in the selected download area."
 msgstr ""
-"Diharapkan untuk mengaktifkan setidaknya dua WMS layer di pengaturan plugin "
-"cadastre-fr.\n"
-"Layer \"Building/Bangunan\" dan \"Parcel\" sudah ditambahkan sejak awal."
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
-"Peringatan: Gagal menempatkan dialog opsi pane yang selalu di atas. "
-"Pengecualia: {0}"
 
-msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+msgid "Recipient"
 msgstr ""
-"tersedia kadaster plugin WMS, ubah \n"
-"proyeksi saat ini ke satu dari kadaster\n"
-"proyeksi dan coba lagi"
 
-msgid "Change the current projection"
-msgstr "Ubah proyeksi saat ini"
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
+msgstr ""
 
 msgid "Replace original background by JOSM background color."
 msgstr "Mengganti latar belakang asli dengan warna latar belakang JOSM"
@@ -29715,27 +29957,6 @@ msgstr "sedang"
 msgid "low"
 msgstr "rendah"
 
-msgid "symbol"
-msgstr "simbol"
-
-msgid "parcel"
-msgstr "paket"
-
-msgid "parcel number"
-msgstr "nomor paket"
-
-msgid "address"
-msgstr "alamat"
-
-msgid "locality"
-msgstr "lokalitas"
-
-msgid "section"
-msgstr "bagian"
-
-msgid "commune"
-msgstr "Kelompok"
-
 msgid "Enable automatic caching."
 msgstr "Nonaktifkan cahcing otomatis"
 
@@ -29884,8 +30105,63 @@ msgstr "Perbolehkan untuk menambahkan tag \"add:street\" pada node/titik."
 msgid "Unexpected file extension. {0}"
 msgstr ""
 
-msgid "Add \"source=...\" to elements?"
-msgstr "Tambahkan \"sumber=...\" ke elemen?"
+msgid ""
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
+msgstr ""
+"Lokasi \"{0}\" ditemukan di memori sementara.\n"
+"muat memori sementara ?\n"
+"(No = new cache)"
+
+msgid "Select Feuille"
+msgstr "Pilih Feuille"
+
+msgid ""
+"Error loading file.\n"
+"Probably an old version of the cache file."
+msgstr ""
+"Kesalahan membuat file.\n"
+"Kemungkinan versi lama dari file memori sementara."
+
+msgid "Lambert Zone {0} cache file (.{0})"
+msgstr "Lambert Zone {0} cache file (.{0})"
+
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgstr "Lambert CC9 Zone {0} cache file (.CC{0})"
+
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgstr "Guadeloupe Fort-Marigot cache file (.UTM1)"
+
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgstr "Guadeloupe Ste-Anne cache file (.UTM2)"
+
+msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgstr "Martinique Fort Desaix cache file (.UTM3)"
+
+msgid "Reunion RGR92 cache file (.UTM4)"
+msgstr "Reunion RGR92 cache file (.UTM4)"
+
+msgid "CadastreGrabber: Illegal url."
+msgstr "CadastreGrabber: Illegal url."
+
+msgid ""
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
+msgstr ""
+"Tidak bisa membuka sesi klien baru.\n"
+"Server sedang dalam perbaikan atau melebihi kapasitas untuk sementara."
+
+msgid ""
+"Town/city {0} not found or not available\n"
+"or action canceled"
+msgstr "Kota {0} tidak ditemukan atau tidak tersedia"
+
+msgid "Choose from..."
+msgstr "Pilih dari..."
+
+msgid "Select commune"
+msgstr "Pilih kota"
 
 msgid "Downloading {0}"
 msgstr "Mendownload {0}"
@@ -29934,125 +30210,6 @@ msgstr ""
 "Kota ini belom tervektorisasi.\n"
 "Tolong gunakan menu input untuk georeferensikan \"Plan Image."
 
-msgid "Extract commune boundary"
-msgstr "ekstrak batas kota"
-
-msgid "Only on vectorized layers"
-msgstr "Hanya pada layer vektor"
-
-msgid "Cancel current grab"
-msgstr "Batalkan pengambilan saat ini"
-
-msgid "Cancel current grab (only vector images)"
-msgstr "Batalkan pengambilan saat ini (hanya gambar vektor)"
-
-msgid "Cadastre grab"
-msgstr "klip kadaster"
-
-msgid "Download Image from French Cadastre WMS"
-msgstr "mengunduh gambar dari WMS kadaster Prancis"
-
-msgid "Cadastre: {0}"
-msgstr "Kadaster: {0}"
-
-msgid "Georeference an image"
-msgstr "Georefensi gambar"
-
-msgid "Grab non-georeferenced image"
-msgstr "Ambil gambar yang tidak digeoreferensi"
-
-msgid "Georeferencing interrupted"
-msgstr "georeferensi terganggu"
-
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
-msgstr ""
-"Gambar ini mengandung data yang telah tergeoreferensi.\n"
-"Apakah Anda ingin menggunakannya?"
-
-msgid "Load layer from cache"
-msgstr "Memuat layer dari cache"
-
-msgid "Load location from cache (only if cache is enabled)"
-msgstr "Memuat lokasi dari cache (jika cache aktif)"
-
-msgid "{0} not allowed with the current projection"
-msgstr "{0} tidak diizinkan menggunakan proyeksi saat ini"
-
-msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
-msgstr ""
-"Tidak dapak memuat cache {0} yang tidak kompatibel dengan zona proyeksi saat "
-"ini"
-
-msgid ""
-"Selected file {0} is not a cache file from this plugin (invalid extension)"
-msgstr ""
-"Berkas yang dipilih {0} bukan berkas cache dari plugin ini (ekstensi tidak "
-"valid)"
-
-msgid "The location {0} is already on screen. Cache not loaded."
-msgstr "Lokasi {0} siap pada layar. tidak memuat memori sementara."
-
-msgid "(optional)"
-msgstr "Pilihan"
-
-msgid "Change location"
-msgstr "Ubah Lokasi"
-
-msgid "Set a new location for the next request"
-msgstr "Atur lokasi baru untuk permintaan selanjutnya"
-
-msgid "Add a new municipality layer"
-msgstr "Tambahkan layer kotamadya"
-
-msgid "Commune"
-msgstr "kelompok"
-
-msgid ""
-"<html>Enter the town,village or city name.<br>Use the syntax and punctuation "
-"known by www.cadastre.gouv.fr .</html>"
-msgstr ""
-"<html>Masukkan kota atau nama desa.<br>Gunakan syntax dan tanda yang "
-"diketaui oleh www.cadastre.gov.fr.</html>"
-
-msgid "Departement"
-msgstr "Departemen"
-
-msgid "<html>Departement number (optional)</html>"
-msgstr "<html>Nomor departemen (optional)</html>"
-
-msgid "Add new layer"
-msgstr "Tambah layer baru"
-
-msgid "Open Cadastre Preferences"
-msgstr "Buka pengaturan kadaster"
-
-msgid "Refine georeferencing"
-msgstr "Persempit georeferensi"
-
-msgid "Improve georeferencing (only raster images)"
-msgstr "Mengubah georeference (hanya gambar raster)"
-
-msgid "Reset cookie"
-msgstr "Atur ulang cookie"
-
-msgid "Get a new cookie (session timeout)"
-msgstr "Dapatkan cookie baru (sesi habis)"
-
-msgid "Save image as..."
-msgstr "Simpan gambar sebagai..."
-
-msgid "PNG files (*.png)"
-msgstr "PNG files (*.png)"
-
-msgid "GeoTiff files (*.tif)"
-msgstr "Fle GeoTiff (*.tif)"
-
-msgid "Export image (only raster images)"
-msgstr "Ekspor gambar (hanya gambar raster)"
-
 msgid ""
 "Click first corner for image cropping\n"
 "(two points required)"
@@ -30108,19 +30265,6 @@ msgstr "Klik sudut kedua untuk pemotongan gambar"
 msgid "Click second Lambert crosspiece for georeferencing"
 msgstr "Klik titik perpotongan kedua untuk georeferensi"
 
-msgid "Adjust WMS"
-msgstr "Mengatur WMS"
-
-msgid "Adjust the position of the WMS layer (saved for raster images only)"
-msgstr "mengatur posisi layer WMS (hanya menyimpan gambar raster)"
-
-msgid ""
-"More than one WMS layer present\n"
-"Select one of them first, then retry"
-msgstr ""
-"Lebih dari satu layer WSM sekarang\n"
-"Pilih salah satu lalu coba kembali"
-
 msgid "Reset offset"
 msgstr "Atur ulang offset"
 
@@ -30562,21 +30706,6 @@ msgid ""
 "to cancel the download."
 msgstr ""
 
-msgid "Split area"
-msgstr "Area terpisah"
-
-msgid "Splits an area by an untagged way."
-msgstr "Pemisahan area dengan jalan tidak ditandai."
-
-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 ""
-"Area yang dipilih tidak dapat dipisahkan, karena itu anggota dari suatu "
-"relasi\n"
-"Hapus area dari relasi terlebih dahulu sebelum dipisahkan"
-
 msgid "TangoGPS Files (*.log)"
 msgstr "file TangoGPS (*.log)"
 
@@ -36694,29 +36823,6 @@ msgstr "putaran"
 msgid "mute"
 msgstr "tanpa suara"
 
-msgid "Walking Papers Scanned Map"
-msgstr ""
-
-msgid ""
-"Display a map that was previously scanned and uploaded to walking-papers.org"
-msgstr ""
-"Tunjukkan peta yang sebelumnya telah di scan dan di upload ke walking-"
-"papers.org"
-
-msgid ""
-"Enter a walking-papers.org URL or ID (the bit after the ?id= in the URL)"
-msgstr ""
-"Masukkan URL atau ID (bagian setelah ?id= di dalam URL) walking-papers.org"
-
-msgid "Could not read information from walking-papers.org the id \"{0}\""
-msgstr "Tidak dapat membaca informasi id \"{0}\" dari walking-papers.org"
-
-msgid "Walking Papers: {0}"
-msgstr "Walking Papers: {0}"
-
-msgid "Walking Papers layer ({0}) in zoom {1}"
-msgstr "Walking Papers layer ({0}) dalam perbesaran {1}"
-
 msgid "Way Download"
 msgstr "Mengunduh way/garis"
 
@@ -36909,6 +37015,26 @@ msgstr ""
 "Menambahkan tag \"wikipedia\" terkait dengan artikel ini kepada objek yang "
 "dipilih"
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "The Ultimate WMS Super-speed Turbo Challenge II"
 
diff --git a/i18n/po/is.po b/i18n/po/is.po
index 9ce5ec6..c0f79c0 100644
--- a/i18n/po/is.po
+++ b/i18n/po/is.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
 "PO-Revision-Date: 2015-11-06 00:32+0000\n"
 "Last-Translator: Stefán Örvar Sigmundsson <stefan.orvar.sigmundsson at emi.is>\n"
 "Language-Team: Icelandic <is 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: 2017-09-03 04:47+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:45+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: is\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -390,6 +390,37 @@ msgstr "Eyða"
 msgid "Delete selected objects."
 msgstr "Eyða völdum hlutum."
 
+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 ""
+"Þú ert að fara eyða hnútum utan þess svæðis sem þú hefur sótt.<br>Þetta "
+"getur valdið vandamálum því aðrir hlutir (sem þú sérð ekki) gætu verið að "
+"nota þá.<br>Ertu viss um að þú viljir eyða þeim?"
+
+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 "Delete Layer"
 msgstr ""
 
@@ -1307,29 +1338,15 @@ msgstr " [id: {0}]"
 msgid "Segment {0}: {1}"
 msgstr ""
 
-msgid "You must select two or more nodes to split a circular way."
-msgstr "Þú verður að velja tvo eða fleiri hnúta til að skipta hringlaga veg."
-
-msgid ""
-"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
-"middle of the way.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2738,37 +2755,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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 ""
-"Þú ert að fara eyða hnútum utan þess svæðis sem þú hefur sótt.<br>Þetta "
-"getur valdið vandamálum því aðrir hlutir (sem þú sérð ekki) gætu verið að "
-"nota þá.<br>Ertu viss um að þú viljir eyða þeim?"
-
-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] "Færði {0} hnút"
@@ -2800,6 +2786,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+msgid "You must select two or more nodes to split a circular way."
+msgstr "Þú verður að velja tvo eða fleiri hnúta til að skipta hringlaga veg."
+
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2919,6 +2928,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3026,6 +3047,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr "ÓÞEKKT"
 
@@ -3069,6 +3093,9 @@ msgctxt "compass"
 msgid "E"
 msgstr "A"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3707,6 +3734,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr "Lýsing"
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4747,9 +4828,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4795,6 +4873,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr ""
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4816,9 +4897,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -5021,6 +5099,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5273,6 +5359,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7057,6 +7147,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7281,9 +7374,6 @@ 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."
@@ -8214,15 +8304,15 @@ msgstr "Stærð svæðis er í lagi, sennilega ásættanleg fyrir miðlara"
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8251,33 +8341,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr "sagnfræði"
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8401,6 +8464,33 @@ msgstr "Gagnvirkt kort"
 msgid "Tile Numbers"
 msgstr "Reitnúmer"
 
+msgid "history"
+msgstr "sagnfræði"
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8534,6 +8624,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8543,6 +8639,9 @@ msgstr ""
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8687,6 +8786,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "Breytingarágrip (stutt lýsing á breytingunum sem þú gerðir)"
 
@@ -9733,9 +9835,6 @@ msgid_plural "{0} tracks"
 msgstr[0] "{0} ferill"
 msgstr[1] "{0} ferlar"
 
-msgid "Description"
-msgstr "Lýsing"
-
 msgid "Timespan"
 msgstr "Tímaspan"
 
@@ -12882,15 +12981,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr "Forstillingar"
 
@@ -12996,6 +13086,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13247,14 +13340,6 @@ 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 ""
 
@@ -13318,9 +13403,6 @@ msgid ""
 "{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 ""
 
@@ -14556,9 +14638,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14655,10 +14734,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15246,6 +15321,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17283,7 +17362,8 @@ msgid "Bay"
 msgstr "Flói"
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23109,6 +23189,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23167,6 +23250,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23248,6 +23334,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23269,9 +23370,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23866,6 +23964,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24277,6 +24378,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24720,6 +24824,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25923,6 +26030,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26103,10 +26213,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26154,9 +26260,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26501,11 +26604,6 @@ msgid ""
 "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 ""
 
@@ -27116,13 +27214,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28419,6 +28517,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 "Sæki mynd frá \"French Cadastre WMS\""
+
+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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28434,77 +28670,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28555,27 +28796,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28716,160 +28936,97 @@ msgstr ""
 msgid "Unexpected file extension. {0}"
 msgstr ""
 
-msgid "Add \"source=...\" to elements?"
-msgstr ""
-
-msgid "Downloading {0}"
-msgstr "Sæki {0}"
-
-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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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 "Sæki mynd frá \"French Cadastre WMS\""
-
-msgid "Cadastre: {0}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
-msgstr ""
+msgid "Downloading {0}"
+msgstr "Sæki {0}"
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28919,17 +29076,6 @@ 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 ""
 
@@ -29366,18 +29512,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35123,26 +35257,6 @@ 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 "Sækja veg"
 
@@ -35311,6 +35425,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/it.po b/i18n/po/it.po
index 093e277..00c3dc3 100644
--- a/i18n/po/it.po
+++ b/i18n/po/it.po
@@ -4,22 +4,22 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm 20081003\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-02 22:59+0200\n"
-"PO-Revision-Date: 2017-07-22 14:52+0000\n"
-"Last-Translator: Gábor Babos <Unknown>\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
+"PO-Revision-Date: 2017-09-30 12:55+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: 2017-09-03 04:48+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-10-01 04:32+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: it\n"
 "X-Language: it_IT\n"
 "X-Source-Language: en\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
-msgstr "{0}: opzione ''{1}'' è ambigua"
+msgstr "{0}: l''opzione ''{1}'' è ambigua"
 
 msgid "{0}: option ''--{1}'' does not allow an argument"
 msgstr "{0}: l''opzione ''--{1}'' non consente un argomento"
@@ -406,6 +406,45 @@ msgstr "Cancella"
 msgid "Delete selected objects."
 msgstr "Cancella gli oggetti selezionati."
 
+msgid "Delete confirmation"
+msgstr "Conferma di cancellazione"
+
+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 ""
+"Stai per cancellare dei nodi fuori dall''area scaricata.<br>Questo potrebbe "
+"causare dei problemi poiché i nodi potrebbero far parte di altri oggetti "
+"(che non puoi vedere).<br>Vuoi veramente cancellarli?"
+
+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 ""
+"State per cancellare degli oggetti incompleti <br>Questo può causare "
+"problemi perché non vedete l’oggetto reale. <br>Volete veramente cancellare?"
+
+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] ""
+"Si sta per eliminare {0} relazione: {1}<br/>Quest''azione spesso non è "
+"necessaria e non può essere annullata facilmente dopo aver caricato su "
+"server.<br/>Si desidera veramente eliminare?"
+msgstr[1] ""
+"Si stanno per eliminare {0} relazioni: {1}<br/>Quest''azione spesso non è "
+"necessaria e non può essere annullata facilmente dopo aver caricato su "
+"server.<br/>Si desidera veramente eliminare?"
+
+msgid "Delete relation?"
+msgstr "Eliminare la relazione?"
+
 msgid "Delete Layer"
 msgstr "Elimina livello"
 
@@ -440,7 +479,7 @@ msgid "Download data"
 msgstr "Scarica dati"
 
 msgid "Download map data from a server of your choice"
-msgstr ""
+msgstr "Scarica i dati cartografici da un server a tua scelta"
 
 msgid ""
 "<html>This action will require {0} individual<br>download requests. Do you "
@@ -456,7 +495,7 @@ msgid "Download in current view"
 msgstr "Scarica la vista corrente"
 
 msgid "Download map data from the OSM server in current view"
-msgstr "Scarica i dati della vista corrente dal server OSM"
+msgstr "Scarica i dati cartografici della vista corrente dal server OSM"
 
 msgid "Download object..."
 msgstr "Scarica oggetto..."
@@ -476,7 +515,7 @@ msgid "Duplicate"
 msgstr "Duplica"
 
 msgid "Duplicate selection."
-msgstr "Duplica la selezione"
+msgstr "Duplica la selezione."
 
 msgid "Exit"
 msgstr "Esci"
@@ -614,12 +653,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] ""
-"Il percorso selezionato ha dei nodi esterni alla zona dei dati scaricati"
+"Il percorso selezionato ha dei nodi all''esterno dell''area dati scaricata."
 msgstr[1] ""
-"I percorsi selezionati hanno dei nodi esterni alla zona dei dati scaricati"
+"I percorsi selezionati hanno dei nodi all''esterno dell''area dati scaricata."
 
 msgid "This can lead to nodes being deleted accidentally."
-msgstr "Ciò potrebbe portare alla cancellazione accidentale di nodi"
+msgstr "Ciò potrebbe portare alla cancellazione accidentale di nodi."
 
 msgid "Are you really sure to continue?"
 msgstr "Sei realmente sicuro di proseguire?"
@@ -726,7 +765,7 @@ msgstr "Vai alla posizione"
 msgid "Opens a dialog that allows to jump to a specific location"
 msgstr ""
 "Apre una finestra di dialogo che consente di saltare ad un indirizzo "
-"specifico."
+"specifico"
 
 msgid "Jump to Position"
 msgstr "Salta alla posizione"
@@ -1109,7 +1148,7 @@ msgid "Paste Tags"
 msgstr "Incolla le etichette"
 
 msgid "Apply tags of contents of paste buffer to all selected items."
-msgstr "Applica le etichette memorizzate a tutti gli elementi selezionati"
+msgstr "Applica le etichette memorizzate a tutti gli elementi selezionati."
 
 msgid "Preferences..."
 msgstr "Preferenze..."
@@ -1199,7 +1238,7 @@ msgid "Reverse way"
 msgstr "Inverti percorso"
 
 msgid "Reverse the direction of all selected ways."
-msgstr "Inverti la direzione di tutti i percorsi selezionati"
+msgstr "Inverti la direzione di tutti i percorsi selezionati."
 
 msgid "Please select at least one way."
 msgstr "Selezionare almeno un precorso."
@@ -1229,7 +1268,7 @@ msgid "Save the current data to a new file."
 msgstr "Salva i dati correnti su un nuovo file."
 
 msgid "Search Notes..."
-msgstr "Cerca Note"
+msgstr "Cerca Note..."
 
 msgid "Download notes from the note search API"
 msgstr "Scarica le note dalle API di ricerca delle note"
@@ -1417,34 +1456,14 @@ msgstr " [id: {0}]"
 msgid "Segment {0}: {1}"
 msgstr "Segmento {0}: {1}"
 
-msgid "You must select two or more nodes to split a circular way."
-msgstr "Seleziona due o più nodi per dividere un percorso circolare."
-
-msgid ""
-"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
-"middle of the way.)"
-msgstr ""
-"Il percorso non può essere diviso in corrispondenza del nodo selezionato. "
-"(Suggerimento: seleziona i nodi in mezzo al percorso)."
-
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
-msgstr ""
-"Una appartenenza ad una relazione in base al ruolo è stata copiata per tutti "
-"i nuovi percorsi.<br>Si prega di verificare e di correggere ove necessario."
+msgid "Search preset"
+msgstr "Ricerca preimpostazione"
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
-msgstr ""
-"Una appartenenza ad una relazione è stata copiata per tutti i nuovi "
-"percorsi.<br>Si prega di verificare e di correggere ove necessario."
+msgid "Show preset search dialog"
+msgstr "Visualizza la finestra di ricerca delle preimpostazioni"
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] "Dividi percorso {0} in {1} parte"
-msgstr[1] "Dividi percorso {0} in {1} parti"
+msgid "Search presets"
+msgstr "Ricerca preimpostazioni"
 
 msgid "Discourage upload"
 msgstr "Scoraggia il caricamento"
@@ -3006,45 +3025,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] "Elimina {0} relazione"
 msgstr[1] "Elimina {0} relazioni"
 
-msgid "Delete confirmation"
-msgstr "Conferma di cancellazione"
-
-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 ""
-"Stai per cancellare dei nodi fuori dall''area scaricata.<br>Questo potrebbe "
-"causare dei problemi poiché i nodi potrebbero far parte di altri oggetti "
-"(che non puoi vedere).<br>Vuoi veramente cancellarli?"
-
-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 ""
-"State per cancellare degli oggetti incompleti <br>Questo può causare "
-"problemi perché non vedete l’oggetto reale. <br>Volete veramente cancellare?"
-
-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] ""
-"Si sta per eliminare {0} relazione: {1}<br/>Quest''azione spesso non è "
-"necessaria e non può essere annullata facilmente dopo aver caricato su "
-"server.<br/>Si desidera veramente eliminare?"
-msgstr[1] ""
-"Si stanno per eliminare {0} relazioni: {1}<br/>Quest''azione spesso non è "
-"necessaria e non può essere annullata facilmente dopo aver caricato su "
-"server.<br/>Si desidera veramente eliminare?"
-
-msgid "Delete relation?"
-msgstr "Eliminare la relazione?"
-
 msgid "Move {0} node"
 msgid_plural "Move {0} nodes"
 msgstr[0] "Sposta {0} nodo"
@@ -3076,6 +3056,35 @@ msgstr[1] "Selezionati {0} oggetti"
 msgid "Sequence: {0}"
 msgstr "Sequenza: {0}"
 
+msgid "You must select two or more nodes to split a circular way."
+msgstr "Seleziona due o più nodi per dividere un percorso circolare."
+
+msgid ""
+"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
+"middle of the way.)"
+msgstr ""
+"Il percorso non può essere diviso in corrispondenza del nodo selezionato. "
+"(Suggerimento: seleziona i nodi in mezzo al percorso)."
+
+msgid ""
+"A role based relation membership was copied to all new ways.<br>You should "
+"verify this and correct it when necessary."
+msgstr ""
+"Una appartenenza ad una relazione in base al ruolo è stata copiata per tutti "
+"i nuovi percorsi.<br>Si prega di verificare e di correggere ove necessario."
+
+msgid ""
+"A relation membership was copied to all new ways.<br>You should verify this "
+"and correct it when necessary."
+msgstr ""
+"Una appartenenza ad una relazione è stata copiata per tutti i nuovi "
+"percorsi.<br>Si prega di verificare e di correggere ove necessario."
+
+msgid "Split way {0} into {1} part"
+msgid_plural "Split way {0} into {1} parts"
+msgstr[0] "Dividi percorso {0} in {1} parte"
+msgstr[1] "Dividi percorso {0} in {1} parti"
+
 msgid "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] "Trasforma {0} nodo"
@@ -3211,6 +3220,18 @@ msgstr "Valore ''''{0}'''' non valido per la latitudine"
 msgid "Illegal longitude value ''{0}''"
 msgstr "Valore ''''{0}'''' non valido per la longitudine"
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr "Fallita la creazione della cartella cache mancante: {0}"
 
@@ -3346,6 +3367,11 @@ msgstr "Anglosassone"
 msgid "Nautical Mile"
 msgstr "Miglio Nautico"
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+"Era atteso un valore non vuoto per il parametro ''''{0}'''', ottenuto "
+"''''{1}''''"
+
 msgid "UNKNOWN"
 msgstr "SCONOSCIUTO"
 
@@ -3390,6 +3416,9 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr "Immagini risalenti al: {0}"
 
@@ -4095,6 +4124,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr "Proiezione personalizzata"
 
+msgid "Error: {0}"
+msgstr "Errore: {0}"
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr "Descrizione"
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr "Opzioni"
+
+msgid "Show this help"
+msgstr "Mostra questo aiuto"
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr "<crs>"
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr "Esempi"
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr "GRS80"
 
@@ -5201,11 +5284,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr "Scostamento"
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-"Era atteso un valore non vuoto per il parametro ''''{0}'''', ottenuto "
-"''''{1}''''"
-
 msgid "Outdated Java version"
 msgstr "Versione Java obsoleta"
 
@@ -5255,6 +5333,10 @@ msgstr "Inizializzazione interna dati dei confini"
 msgid "Initializing OSM API"
 msgstr "Inizializzazione delle API di OSM"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+"È stato rimosso il livello {0} perché non è permesso dalle API configurate."
+
 msgid "Initializing internal traffic data"
 msgstr "Inizializzazione interna dati traffico"
 
@@ -5276,9 +5358,6 @@ msgstr "uso"
 msgid "options"
 msgstr "opzioni"
 
-msgid "Show this help"
-msgstr "Mostra questo aiuto"
-
 msgid "Standard unix geometry argument"
 msgstr "Dimensioni e posizione della finestra (secondo lo standard UNIX)"
 
@@ -5512,6 +5591,14 @@ msgstr ""
 "potrebbe essere dovuto alla mancata configurazione del proxy.<br>Si desidera "
 "modificare ora le proprie impostazioni del proxy?"
 
+msgid "You have {0} unread message."
+msgid_plural "You have {0} unread messages."
+msgstr[0] "Hai {0} messaggio non letto"
+msgstr[1] "Hai {0} messaggi non letti"
+
+msgid "Click here to see your inbox."
+msgstr "Clicca qui per vedere la tua casella"
+
 msgctxt "menu"
 msgid "File"
 msgstr "File"
@@ -5779,6 +5866,12 @@ msgstr ""
 "Il valore corrente non è un indice di tassello valido per il livello di "
 "ingrandimento dato"
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+"Non è stato possibile avviare la segnalazione bug automatica. L''operazione "
+"dovrà essere svolta manualmente tramite il sito:"
+
 msgid "You have encountered a bug in JOSM"
 msgstr "Ci si è imbattuti in un bug di JOSM"
 
@@ -7093,8 +7186,8 @@ msgstr ""
 
 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"
+msgstr[0] "{0} utente ha modificato la selezione:"
+msgstr[1] "{0} utenti hanno modificato la selezione:"
 
 msgid "mapcss"
 msgstr "mapcss"
@@ -7103,7 +7196,7 @@ msgid "unknown"
 msgstr "sconosciuto"
 
 msgid "Enter the coordinates for the new node."
-msgstr "Inserire le coordinate del nuovo nodo"
+msgstr "Inserire le coordinate del nuovo nodo."
 
 msgid ""
 "You can separate longitude and latitude with space, comma or semicolon."
@@ -7156,7 +7249,7 @@ msgstr ""
 "oppure <tt>lat=''...'' lon=''...''</tt>."
 
 msgid "Some examples:"
-msgstr "Alcuni esempi"
+msgstr "Alcuni esempi:"
 
 msgid "Projected coordinates:"
 msgstr "Coordinate proiettate:"
@@ -7391,7 +7484,7 @@ msgstr ""
 "Impossibile continuare."
 
 msgid "Open a list of all relations."
-msgstr "Apri una lista di tutte le relazioni"
+msgstr "Apri una lista di tutte le relazioni."
 
 msgid "Relation list filter"
 msgstr "Elenco filtri relazioni"
@@ -7748,6 +7841,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr "Aggiorna dal server OSM il gruppo di modifiche"
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7823,7 +7919,7 @@ msgid ""
 "Select changesets based on the date/time they have been created or closed"
 msgstr ""
 "Seleziona i changeset sulla base della data/ora con i quali sono stati "
-"creati o chiusi."
+"creati o chiusi"
 
 msgid "Select only changesets related to a specific bounding box"
 msgstr ""
@@ -8027,9 +8123,6 @@ msgstr ""
 "Si prega di inserire o incollare un indirizzo URL per ottenere i gruppi di "
 "modifiche dalle API di OSM."
 
-msgid "Examples"
-msgstr "Esempi"
-
 msgid ""
 "Note that changeset queries are currently always submitted to ''{0}'', "
 "regardless of the host, port and path of the URL entered below."
@@ -8112,7 +8205,7 @@ msgid "Copy {1} of {0}"
 msgstr "Copia {1} di {0}"
 
 msgid "Change visibility of the selected layer."
-msgstr "Cambia la visibilità del livello selezionato"
+msgstr "Cambia la visibilità del livello selezionato."
 
 msgid "Show layer"
 msgstr "Mostra livello"
@@ -8130,13 +8223,13 @@ msgid "Gamma"
 msgstr "Gamma"
 
 msgid "Adjust sharpness/blur value of the layer."
-msgstr "Regola i valori di nitidezza/sfocatura del livello"
+msgstr "Regola i valori di nitidezza/sfocatura del livello."
 
 msgid "Sharpness"
 msgstr "Nitidezza"
 
 msgid "Adjust colorfulness of the layer."
-msgstr "Modifica la saturazione del livello"
+msgstr "Modifica la saturazione del livello."
 
 msgid "Colorfulness"
 msgstr "Saturazione"
@@ -8318,7 +8411,7 @@ msgstr[0] "Questo modificherà {0} oggetto."
 msgstr[1] "Questo modificherà fino a {0} oggetti."
 
 msgid "An empty value deletes the tag."
-msgstr "Un campo vuoto cancellerà il tag"
+msgstr "Un valore vuoto cancellerà il tag."
 
 msgid "You changed the key from ''{0}'' to ''{1}''."
 msgstr "E'' stata modificata la chiave da ''{0}'' a ''{1}''."
@@ -9010,7 +9103,7 @@ msgid "Download referrers (parent relations and ways)"
 msgstr "Scarica oggetti collegati (relazioni padre e percorsi)"
 
 msgid "Download from OSM"
-msgstr ""
+msgstr "Scarica da OSM"
 
 msgid "Data Sources and Types:"
 msgstr "Sorgenti dati e tipi:"
@@ -9058,6 +9151,11 @@ msgid "Download area ok, size probably acceptable to server"
 msgstr "Area da scaricare corretta, sarà probabilmente accettata dal server"
 
 msgid "Download from Overpass API"
+msgstr "Scarica dalle API Overpass"
+
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
 msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
@@ -9066,11 +9164,6 @@ msgstr ""
 msgid "Query Wizard"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
-msgstr ""
-
 msgid "Your saved queries:"
 msgstr ""
 
@@ -9097,33 +9190,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr "storia"
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -9134,7 +9200,7 @@ msgid "Build query and execute"
 msgstr ""
 
 msgid "Search :"
-msgstr ""
+msgstr "Cerca:"
 
 msgid "The Overpass wizard could not parse the following query:"
 msgstr ""
@@ -9146,6 +9212,8 @@ msgid ""
 "Allows you to interact with <i>Overpass API</i> by writing declarative, "
 "human-readable terms."
 msgstr ""
+"Consente di interagire con le <i>Overpass API</i> scrivendo termini "
+"dichiarativi, leggibili dall''uomo."
 
 msgid ""
 "The <i>Query Wizard</i> tool will transform those to a valid overpass query."
@@ -9247,6 +9315,33 @@ msgstr "Slippy map"
 msgid "Tile Numbers"
 msgstr "Numeri dei tasselli"
 
+msgid "history"
+msgstr "storia"
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr "Browser dell''aiuto di JOSM"
 
@@ -9409,6 +9504,12 @@ msgstr "Ingrandisci la visuale su questo nodo nel livello dei dati corrente"
 msgid "Open a history browser with the history of this node"
 msgstr "Apri una cronologia del browser con la cronologia di questo nodo"
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr "Percorso {0}"
 
@@ -9418,6 +9519,9 @@ msgstr "Relazione {0}"
 msgid "Object"
 msgstr "Oggetto"
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr "Commento al gruppo di modifiche"
 
@@ -9594,6 +9698,9 @@ msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 "Scegli \"Salva\" per salvare il livello nel file specificato a sinistra."
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "Crea un breve commento ai cambiamenti che sta caricando:"
 
@@ -10797,9 +10904,6 @@ msgid_plural "{0} tracks"
 msgstr[0] "{0} tracciato"
 msgstr[1] "{0} tracciati"
 
-msgid "Description"
-msgstr "Descrizione"
-
 msgid "Timespan"
 msgstr "Differenza temporale"
 
@@ -11867,7 +11971,7 @@ 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 ""
-"Con OAuth si concede a JOSM il diritto di caricare i dati della mappa ed i "
+"Con OAuth si concede a JOSM il diritto di caricare i dati cartografici ed i "
 "tracciati GPS per proprio conto (<a href=\"{0}\">maggiori "
 "informazioni...</a>)."
 
@@ -11930,11 +12034,11 @@ msgid "Logging out session ''{0}''..."
 msgstr "Disconnessione della sessione ''''{0}''''..."
 
 msgid "Allow to upload map data"
-msgstr "Permetti il caricamento dei dati della mappa"
+msgstr "Permetti il caricamento dei dati cartografici"
 
 msgid "Select to grant JOSM the right to upload map data on your behalf"
 msgstr ""
-"Selezionare per permettere a JOSM di caricare i dati della mappa a tuo nome"
+"Selezionare per permettere a JOSM di caricare i dati cartografici a tuo nome"
 
 msgid "Allow to upload GPS traces"
 msgstr "Permetti il caricamento di tracciati GPS"
@@ -14358,15 +14462,6 @@ msgstr "Sotto-elemento preimpostato senza genitori"
 msgid "Error parsing {0}: "
 msgstr "Impossibile leggere {0}: "
 
-msgid "Search preset"
-msgstr "Ricerca preimpostazione"
-
-msgid "Show preset search dialog"
-msgstr "Visualizza la finestra di ricerca delle preimpostazioni"
-
-msgid "Search presets"
-msgstr "Ricerca preimpostazioni"
-
 msgid "Presets"
 msgstr "Preimpostazioni"
 
@@ -14487,6 +14582,9 @@ msgstr "Tutti i file (*.*)"
 msgid "Received error page:"
 msgstr "Pagina errore ricevuta:"
 
+msgid "{0}... [please type its number]"
+msgstr "{0}... [si prega di digitare il suo numero]"
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -14565,13 +14663,13 @@ msgid "false: the property is explicitly switched off"
 msgstr "falso: la proprietà è esplicitamente disattivata"
 
 msgid "false: the property ''{0}'' is explicitly switched off"
-msgstr ""
+msgstr "falso: la proprietà ''{0}'' è esplicitamente disattivata"
 
 msgid "true: the property is explicitly switched on"
-msgstr "vero: la proprietà è esplicitamente impostata attiva"
+msgstr "vero: la proprietà è esplicitamente attivata"
 
 msgid "true: the property ''{0}'' is explicitly switched on"
-msgstr ""
+msgstr "vero: la proprietà ''{0}'' è esplicitamente attivata"
 
 msgid ""
 "partial: different selected objects have different values, do not change"
@@ -14582,12 +14680,15 @@ msgid ""
 "partial: different selected objects have different values for ''{0}'', do "
 "not change"
 msgstr ""
+"parziale: diversi oggetti selezionati hanno valori diversi per ''{0}'', non "
+"cambiato"
 
 msgid "unset: do not set this property on the selected objects"
 msgstr "non settato: non settare questa proprietà sugli oggetti selezionati"
 
 msgid "unset: do not set the property ''{0}'' on the selected objects"
 msgstr ""
+"non settato: non settare la  proprietà ''{0}'' sugli oggetti selezionati"
 
 msgid "Cut"
 msgstr "Taglia"
@@ -14800,14 +14901,6 @@ msgstr "Modalità {0} sconosciuta."
 msgid "get number of unread messages"
 msgstr "ottieni numero di messaggi non letti"
 
-msgid "You have {0} unread message."
-msgid_plural "You have {0} unread messages."
-msgstr[0] "Hai {0} messaggio non letto"
-msgstr[1] "Hai {0} messaggi non letti"
-
-msgid "Click here to see your inbox."
-msgstr "Clicca qui per vedere la tua casella"
-
 msgid "Message notifier"
 msgstr "Notificatore messaggi"
 
@@ -14877,10 +14970,6 @@ msgstr ""
 "Supporta la versione 0.6 del protocollo, mentre il server dice di supportare "
 "le versioni dalla {0} alla {1}."
 
-msgid "Removed layer {0} because it is not allowed by the configured API."
-msgstr ""
-"È stato rimosso il livello {0} perché non è permesso dalle API configurate."
-
 msgid "Unexpected format of ID replied by the server. Got ''{0}''."
 msgstr ""
 "Formato di ID non atteso restituito dal server. Ottenuto ''''{0}''''."
@@ -15016,8 +15105,7 @@ msgstr "Analisi della lista dei gruppi di modifiche..."
 
 msgid "Failed to sign a HTTP connection with an OAuth Authentication header"
 msgstr ""
-"Fallita la firma di una connessione HTTP con una testata di autenticazione "
-"OAuth"
+"Fallita la firma di una connessione HTTP con header di autenticazione OAuth"
 
 msgid "Unexpected value for preference ''{0}''. Got ''{1}''."
 msgstr "Valore inatteso per la preferenza ''{0}''. Ottenuto ''{1}''."
@@ -16368,7 +16456,7 @@ msgid ""
 "header. Can''t redirect. Aborting."
 msgstr ""
 "Risposta non prevista dal server HTTP. È stata ottenuta la risposta {0} "
-"senza la testata ''Location''. Impossibile reindirizzare. Annullo."
+"senza l''header ''Location''. Impossibile reindirizzare. Annullo."
 
 msgid "Download redirected to ''{0}''"
 msgstr "Scaricamento reindirizzato verso ''{0}''"
@@ -16409,9 +16497,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr "{0}... [si prega di digitare il suo numero]"
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -16524,12 +16609,6 @@ msgid "Failed to load XML schema."
 msgstr "Fallito il caricamento dello schema XML."
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-"Non è stato possibile avviare la segnalazione bug automatica. L''operazione "
-"dovrà essere svolta manualmente tramite il sito:"
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -17133,6 +17212,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr "nessuna"
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr "Tipo servizio"
 
@@ -19201,10 +19284,9 @@ msgid "Bay"
 msgstr "Baia"
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
-"Un ampio corpo d''acqua parzialmente racchiuso da terra ma con un una grande "
-"apertura."
 
 msgid "Shipping"
 msgstr "Navigazione"
@@ -20422,7 +20504,7 @@ msgid "Bird Hide"
 msgstr ""
 
 msgid "Night Club"
-msgstr "Night Club"
+msgstr "Discoteca"
 
 msgid "Casino"
 msgstr "Casinò"
@@ -25057,6 +25139,9 @@ msgstr "Itinerari Segnalati: Equitazione"
 msgid "Waymarked Trails: Winter Sports"
 msgstr "Itinerari Segnalati: Sport Invernali"
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr "OSM Inspector: Geometria"
 
@@ -25115,6 +25200,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -25196,6 +25284,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -25217,9 +25320,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -25816,6 +25916,9 @@ msgstr "Foto aeree Berlino 2015"
 msgid "Berlin aerial photograph 2016"
 msgstr "Berlino foto aeree 2016"
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr "Linee Deutsche Bahn VzG Nov 2013"
 
@@ -26227,6 +26330,9 @@ msgstr "Lussemburgo Inspire Water"
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Delta del Niger Ott 2012 Landsat"
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -26670,6 +26776,9 @@ msgstr "NLSC Open Data WMTS"
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr "MSR Maps Topo"
 
@@ -26693,6 +26802,9 @@ msgid ""
 "zooms, only changes since 2006 minus changes already incorporated into "
 "OpenStreetMap"
 msgstr ""
+"A livello di zoom 16+, dati cartografici di dominio pubblico presi da US "
+"Census. A livelli di zoom inferiori, modifiche a partire dal 2006 tranne "
+"quelle già incorporate in OpenStreetMap"
 
 msgid "MassGIS L3 Parcels"
 msgstr "MassGIS L3 Parcels"
@@ -27847,7 +27959,7 @@ msgid "{0} with multiple values"
 msgstr "{0} con valori multipli"
 
 msgid "empty value in semicolon-separated ''{0}''"
-msgstr "valore vuoto in elenco separato da virgola '' {0} ''"
+msgstr "valore vuoto in elenco separato da virgola ''{0}''"
 
 msgid "numerical key"
 msgstr "tasto numerico"
@@ -27910,6 +28022,9 @@ msgstr "relazione senza tipo"
 msgid "{0} relation without {0} tag"
 msgstr "relazione {0} senza etichetta {0}"
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr "religion senza denomination"
 
@@ -28112,12 +28227,6 @@ msgid "Customization of public public transport stops."
 msgstr ""
 
 msgid ""
-"Creating and handling address nodes and buildings within Czech Republic."
-msgstr ""
-"Creazione e gestione degli indirizzi di nodi ed edifici all''interno della "
-"Repubblica Ceca."
-
-msgid ""
 "Allows to import various file formats into JOSM directly. Currently "
 "supported: TangoGPS, Garmin Trainings Center TCX."
 msgstr ""
@@ -28175,9 +28284,6 @@ msgstr ""
 "Parla con gli utenti che stanno modificando la mappa nelle vicinanze, sii "
 "avvisato quando qualcuno si avvicina."
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -28620,14 +28726,6 @@ msgstr ""
 "un video georeferenziato con un tracciato GPS, per utilizzarlo "
 "nell''identificazione di oggetti visibili."
 
-msgid ""
-"Supports downloading tiled, scanned maps from walking-papers.org. This "
-"plugin is still under early development and may be buggy."
-msgstr ""
-"Supporta lo scaricamento delle mappe scansionate e tassellate da walking-"
-"papers.org. Quest''estensione è ancora in fase di sviluppo e può contenere "
-"qualche errore."
-
 msgid "Easy downloading along a long set of interconnected ways"
 msgstr ""
 "Scaricamento facilitato lungo un numeroso insieme di percorsi interconnessi"
@@ -29279,15 +29377,15 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
+msgid "Start Mapillary layer"
+msgstr "Avvia livello Mapillary"
+
 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"
 
@@ -30724,6 +30822,162 @@ msgstr[1] "Ci sono {0} edifici con indirizzi in conflitto"
 msgid "No address nodes inside buildings found"
 msgstr "Nessun nodo indirizzo trovato all''interno dell''edificio"
 
+msgid "Auto sourcing"
+msgstr "Sorgente auto-determinata"
+
+msgid ""
+"Please enable at least two WMS layers in the cadastre-fr plugin "
+"configuration.\n"
+"Layers ''Building'' and ''Parcel'' added by default."
+msgstr ""
+"Si prega di abilitare almeno due livelli WMS nella configurazione "
+"dell''estensione cadastre-fr.\n"
+"Sono stati aggiunti i livelli predefiniti ''Building'' e ''Parcel'' ."
+
+msgid ""
+"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+msgstr ""
+"Attenzione: non è stato possibile mettere sempre in primo piano la finestra "
+"del pannello delle opzioni. L''eccezione è stata: {0}"
+
+msgid ""
+"To enable the cadastre WMS plugin, change\n"
+"the current projection to one of the cadastre\n"
+"projections and retry"
+msgstr ""
+"Per abilitare l''estensione WMS del catasto, modificare\n"
+"la proiezione corrente con una delle proiezioni\n"
+"del catasto e riprovare"
+
+msgid "Change the current projection"
+msgstr "Cambia la proiezione attuale"
+
+msgid "Extract commune boundary"
+msgstr "Estrai il confine del comune"
+
+msgid "Only on vectorized layers"
+msgstr "Solo su livelli vettoriali"
+
+msgid "Cancel current grab"
+msgstr "Annulla il trascinamento corrente"
+
+msgid "Cancel current grab (only vector images)"
+msgstr "Annulla il trascinamento corrente (solo immagini vettoriali)"
+
+msgid "Cadastre grab"
+msgstr "Trascina catasto"
+
+msgid "Download Image from French Cadastre WMS"
+msgstr "Scarica immagine dal WMS francese del catasto"
+
+msgid "Cadastre: {0}"
+msgstr "Catasto: {0}"
+
+msgid "Georeference an image"
+msgstr "Georeferenzia una immagine"
+
+msgid "Grab non-georeferenced image"
+msgstr "Trascina immagine non georeferenziata"
+
+msgid "Georeferencing interrupted"
+msgstr "Georeferenziazione interrotta"
+
+msgid ""
+"This image contains georeference data.\n"
+"Do you want to use them ?"
+msgstr ""
+"Quest''immagine contiene dei dati di georeferenziazione.\n"
+"Si desidera utilizzarli?"
+
+msgid "Load layer from cache"
+msgstr "Carica livello da cache"
+
+msgid "Load location from cache (only if cache is enabled)"
+msgstr "Carica la posizione dalla cache (solo se la cache è abilitata)"
+
+msgid "{0} not allowed with the current projection"
+msgstr "{0} non ammesso con la proiezione corrente"
+
+msgid ""
+"Cannot load cache {0} which is not compatible with current projection zone"
+msgstr ""
+"Impossibile caricare la cache {0} siccome non è compatibile con la "
+"proiezione corrente"
+
+msgid ""
+"Selected file {0} is not a cache file from this plugin (invalid extension)"
+msgstr ""
+"Il file selezionato {0} non è un file di cache proveniente da "
+"quest''estensione JOSM (estensione del file non valida)"
+
+msgid "The location {0} is already on screen. Cache not loaded."
+msgstr "La posizione {0} è già sullo schermo. Cache non caricata."
+
+msgid "(optional)"
+msgstr "(facoltativo)"
+
+msgid "Change location"
+msgstr "Cambia posizione"
+
+msgid "Set a new location for the next request"
+msgstr "Imposta una nuova posizione per la prossima richiesta"
+
+msgid "Add a new municipality layer"
+msgstr "Aggiungi un nuovo livello comunale"
+
+msgid "Commune"
+msgstr "Comune"
+
+msgid ""
+"<html>Enter the town,village or city name.<br>Use the syntax and punctuation "
+"known by www.cadastre.gouv.fr .</html>"
+msgstr ""
+"<html>Inserire il nome della città o paese.<br>Utilizzare la sintassi e la "
+"punteggiatura conosciuta da www.cadastre.gouv.fr .</html>"
+
+msgid "Departement"
+msgstr "Provincia"
+
+msgid "<html>Departement number (optional)</html>"
+msgstr "<html>Numero della provincia (opzionale)</html>"
+
+msgid "Add new layer"
+msgstr "Aggiungi un nuovo livello"
+
+msgid "Open Cadastre Preferences"
+msgstr "Preferenze Open Cadastre"
+
+msgid "Refine georeferencing"
+msgstr "Affina georeferenziazione"
+
+msgid "Improve georeferencing (only raster images)"
+msgstr "Migliora georeferenziazione (solo immagini raster)"
+
+msgid "Reset cookie"
+msgstr "Reimposta il cookie"
+
+msgid "Get a new cookie (session timeout)"
+msgstr "Ottieni un nuovo cookie (sessione scaduta)"
+
+msgid "Save image as..."
+msgstr "Salva immagine come..."
+
+msgid "PNG files (*.png)"
+msgstr "File PNG (*.png)"
+
+msgid "GeoTiff files (*.tif)"
+msgstr "File GeoTiff (*.tif)"
+
+msgid "Export image (only raster images)"
+msgstr "Esporta immagine (solo immagini raster)"
+
+msgid ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+"È presente più di un livello WMS\n"
+"Selezionare prima uno di questi, e poi riprovare"
+
 msgid "on polygon"
 msgstr "sul poligono"
 
@@ -30739,95 +30993,85 @@ msgstr "Prossimo numero"
 msgid "Enter addresses"
 msgstr "Inserisci indirizzo"
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
+msgstr "Regola WMS"
+
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
-"Posizione \"''{0}\"'' trovata in cache.\n"
-"Caricare prima la cache ?\n"
-"(No = cache nuova)"
+"Regola la posizione del livello WMS (salvata soltanto per le immagini non "
+"vettoriali)"
 
-msgid "Select Feuille"
-msgstr "Seleziona Feuille"
+msgid "Add \"source=...\" to elements?"
+msgstr "Aggiungere \"source=...\" agli elementi?"
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Download from Cadastre"
 msgstr ""
-"Errore nel caricamento del file.\n"
-"Probabilmente è una vecchia versione del file di cache."
 
-msgid "Lambert Zone {0} cache file (.{0})"
-msgstr "File di cache della zona di Lambert {0} (.{0})"
+msgid "Objects:"
+msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
-msgstr "File di cache della zona di Lambert CC9 {0} (.CC{0})"
+msgid "Select to download buildings in the selected download area."
+msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
-msgstr "Guadalupa Fort-Marigot file di cache (.UTM1)"
+msgid "address"
+msgstr "indirizzo"
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
-msgstr "Guadalupa Ste-Anne file di cache (.UTM2)"
+msgid "Select to download addresses in the selected download area."
+msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
-msgstr "Martinica Fort Desaix file di cache (.UTM3)"
+msgid "symbol"
+msgstr "simbolo"
 
-msgid "Reunion RGR92 cache file (.UTM4)"
-msgstr "File di cache di Riunione RGR92 (.UTM4)"
+msgid "Select to download symbols in the selected download area."
+msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
-msgstr "CadastreGrabber: indirizzo url non valido."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "parcel"
+msgstr "particella catastale"
+
+msgid "Select to download cadastral parcels in the selected download area."
 msgstr ""
-"Impossibile aprire una nuova sessione del client.\n"
-"Il server è in manutenzione oppure temporaneamente sovraccaricato."
+
+msgid "parcel number"
+msgstr "appezzamento numero"
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
-"Paese/città {0} non trovata, non disponibile\n"
-"oppure azione annullata"
 
-msgid "Choose from..."
-msgstr "Scegliere da..."
+msgid "section"
+msgstr "sezione"
 
-msgid "Select commune"
-msgstr "Seleziona il comune"
+msgid "Select to download cadastral sections in the selected download area."
+msgstr ""
 
-msgid "Auto sourcing"
-msgstr "Sorgente auto-determinata"
+msgid "locality"
+msgstr "località"
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
 msgstr ""
-"Si prega di abilitare almeno due livelli WMS nella configurazione "
-"dell''estensione cadastre-fr.\n"
-"Sono stati aggiunti i livelli predefiniti ''Building'' e ''Parcel'' ."
+
+msgid "commune"
+msgstr "comune"
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
-"Attenzione: non è stato possibile mettere sempre in primo piano la finestra "
-"del pannello delle opzioni. L''eccezione è stata: {0}"
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
-"Per abilitare l''estensione WMS del catasto, modificare\n"
-"la proiezione corrente con una delle proiezioni\n"
-"del catasto e riprovare"
 
-msgid "Change the current projection"
-msgstr "Cambia la proiezione attuale"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
+msgstr ""
 
 msgid "Replace original background by JOSM background color."
 msgstr "Sostituisci lo sfondo originale con il colore di sfondo JOSM."
@@ -30879,27 +31123,6 @@ msgstr "medio"
 msgid "low"
 msgstr "basso"
 
-msgid "symbol"
-msgstr "simbolo"
-
-msgid "parcel"
-msgstr "particella catastale"
-
-msgid "parcel number"
-msgstr "appezzamento numero"
-
-msgid "address"
-msgstr "indirizzo"
-
-msgid "locality"
-msgstr "località"
-
-msgid "section"
-msgstr "sezione"
-
-msgid "commune"
-msgstr "comune"
-
 msgid "Enable automatic caching."
 msgstr "Abilita la cache automatica."
 
@@ -31066,8 +31289,65 @@ msgstr ""
 msgid "Unexpected file extension. {0}"
 msgstr "Estensione del file inaspettata. {0}"
 
-msgid "Add \"source=...\" to elements?"
-msgstr "Aggiungere \"source=...\" agli elementi?"
+msgid ""
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
+msgstr ""
+"Posizione \"''{0}\"'' trovata in cache.\n"
+"Caricare prima la cache ?\n"
+"(No = cache nuova)"
+
+msgid "Select Feuille"
+msgstr "Seleziona Feuille"
+
+msgid ""
+"Error loading file.\n"
+"Probably an old version of the cache file."
+msgstr ""
+"Errore nel caricamento del file.\n"
+"Probabilmente è una vecchia versione del file di cache."
+
+msgid "Lambert Zone {0} cache file (.{0})"
+msgstr "File di cache della zona di Lambert {0} (.{0})"
+
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgstr "File di cache della zona di Lambert CC9 {0} (.CC{0})"
+
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgstr "Guadalupa Fort-Marigot file di cache (.UTM1)"
+
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgstr "Guadalupa Ste-Anne file di cache (.UTM2)"
+
+msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgstr "Martinica Fort Desaix file di cache (.UTM3)"
+
+msgid "Reunion RGR92 cache file (.UTM4)"
+msgstr "File di cache di Riunione RGR92 (.UTM4)"
+
+msgid "CadastreGrabber: Illegal url."
+msgstr "CadastreGrabber: indirizzo url non valido."
+
+msgid ""
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
+msgstr ""
+"Impossibile aprire una nuova sessione del client.\n"
+"Il server è in manutenzione oppure temporaneamente sovraccaricato."
+
+msgid ""
+"Town/city {0} not found or not available\n"
+"or action canceled"
+msgstr ""
+"Paese/città {0} non trovata, non disponibile\n"
+"oppure azione annullata"
+
+msgid "Choose from..."
+msgstr "Scegliere da..."
+
+msgid "Select commune"
+msgstr "Seleziona il comune"
 
 msgid "Downloading {0}"
 msgstr "Scaricamento di {0}"
@@ -31119,125 +31399,6 @@ msgstr ""
 "Si prega di utilizzare l''altra voce del menu per georeferenziare una "
 "\"immagine piana\""
 
-msgid "Extract commune boundary"
-msgstr "Estrai il confine del comune"
-
-msgid "Only on vectorized layers"
-msgstr "Solo su livelli vettoriali"
-
-msgid "Cancel current grab"
-msgstr "Annulla il trascinamento corrente"
-
-msgid "Cancel current grab (only vector images)"
-msgstr "Annulla il trascinamento corrente (solo immagini vettoriali)"
-
-msgid "Cadastre grab"
-msgstr "Trascina catasto"
-
-msgid "Download Image from French Cadastre WMS"
-msgstr "Scarica immagine dal WMS francese del catasto"
-
-msgid "Cadastre: {0}"
-msgstr "Catasto: {0}"
-
-msgid "Georeference an image"
-msgstr "Georeferenzia una immagine"
-
-msgid "Grab non-georeferenced image"
-msgstr "Trascina immagine non georeferenziata"
-
-msgid "Georeferencing interrupted"
-msgstr "Georeferenziazione interrotta"
-
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
-msgstr ""
-"Quest''immagine contiene dei dati di georeferenziazione.\n"
-"Si desidera utilizzarli?"
-
-msgid "Load layer from cache"
-msgstr "Carica livello da cache"
-
-msgid "Load location from cache (only if cache is enabled)"
-msgstr "Carica la posizione dalla cache (solo se la cache è abilitata)"
-
-msgid "{0} not allowed with the current projection"
-msgstr "{0} non ammesso con la proiezione corrente"
-
-msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
-msgstr ""
-"Impossibile caricare la cache {0} siccome non è compatibile con la "
-"proiezione corrente"
-
-msgid ""
-"Selected file {0} is not a cache file from this plugin (invalid extension)"
-msgstr ""
-"Il file selezionato {0} non è un file di cache proveniente da "
-"quest''estensione JOSM (estensione del file non valida)"
-
-msgid "The location {0} is already on screen. Cache not loaded."
-msgstr "La posizione {0} è già sullo schermo. Cache non caricata."
-
-msgid "(optional)"
-msgstr "(facoltativo)"
-
-msgid "Change location"
-msgstr "Cambia posizione"
-
-msgid "Set a new location for the next request"
-msgstr "Imposta una nuova posizione per la prossima richiesta"
-
-msgid "Add a new municipality layer"
-msgstr "Aggiungi un nuovo livello comunale"
-
-msgid "Commune"
-msgstr "Comune"
-
-msgid ""
-"<html>Enter the town,village or city name.<br>Use the syntax and punctuation "
-"known by www.cadastre.gouv.fr .</html>"
-msgstr ""
-"<html>Inserire il nome della città o paese.<br>Utilizzare la sintassi e la "
-"punteggiatura conosciuta da www.cadastre.gouv.fr .</html>"
-
-msgid "Departement"
-msgstr "Provincia"
-
-msgid "<html>Departement number (optional)</html>"
-msgstr "<html>Numero della provincia (opzionale)</html>"
-
-msgid "Add new layer"
-msgstr "Aggiungi un nuovo livello"
-
-msgid "Open Cadastre Preferences"
-msgstr "Preferenze Open Cadastre"
-
-msgid "Refine georeferencing"
-msgstr "Affina georeferenziazione"
-
-msgid "Improve georeferencing (only raster images)"
-msgstr "Migliora georeferenziazione (solo immagini raster)"
-
-msgid "Reset cookie"
-msgstr "Reimposta il cookie"
-
-msgid "Get a new cookie (session timeout)"
-msgstr "Ottieni un nuovo cookie (sessione scaduta)"
-
-msgid "Save image as..."
-msgstr "Salva immagine come..."
-
-msgid "PNG files (*.png)"
-msgstr "File PNG (*.png)"
-
-msgid "GeoTiff files (*.tif)"
-msgstr "File GeoTiff (*.tif)"
-
-msgid "Export image (only raster images)"
-msgstr "Esporta immagine (solo immagini raster)"
-
 msgid ""
 "Click first corner for image cropping\n"
 "(two points required)"
@@ -31293,21 +31454,6 @@ msgstr "Clicca il secondo angolo per il ritaglio dell''immagine"
 msgid "Click second Lambert crosspiece for georeferencing"
 msgstr "Clicca la seconda traversa di Lambert per la georeferenziazione"
 
-msgid "Adjust WMS"
-msgstr "Regola WMS"
-
-msgid "Adjust the position of the WMS layer (saved for raster images only)"
-msgstr ""
-"Regola la posizione del livello WMS (salvata soltanto per le immagini non "
-"vettoriali)"
-
-msgid ""
-"More than one WMS layer present\n"
-"Select one of them first, then retry"
-msgstr ""
-"È presente più di un livello WMS\n"
-"Selezionare prima uno di questi, e poi riprovare"
-
 msgid "Reset offset"
 msgstr "Reimposta scostamento"
 
@@ -31749,21 +31895,6 @@ msgid ""
 "to cancel the download."
 msgstr ""
 
-msgid "Split area"
-msgstr "Dividi area"
-
-msgid "Splits an area by an untagged way."
-msgstr "Divide un''area mediante un percorso senza etichette."
-
-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 ""
-"L''area selezionata non può essere divisa perché è un membro di qualche "
-"relazione.\n"
-"Eliminare l''area dalla relazione prima di dividerla."
-
 msgid "TangoGPS Files (*.log)"
 msgstr "File TangoGPS (*.log)"
 
@@ -32839,13 +32970,13 @@ msgid "Lowest Level"
 msgstr "Livello più Basso"
 
 msgid "The lowest level of your building."
-msgstr "Il livello più basso del tuo edificio"
+msgstr "Il livello più basso del tuo edificio."
 
 msgid "Highest Level"
 msgstr "Livello più Alto"
 
 msgid "The highest level of your building."
-msgstr "Il livello più alto del tuo edificio"
+msgstr "Il livello più alto del tuo edificio."
 
 msgid "Toolbox for indoor mapping assistance"
 msgstr ""
@@ -33020,7 +33151,7 @@ msgid "<HTML><U>I</U>gnore this way</HTML>"
 msgstr ""
 
 msgid "Ignore direction of this way."
-msgstr ""
+msgstr "Ignora la direzione di questo percorso."
 
 msgid "Check direction of streams"
 msgstr "Controlla la direzione dei corsi d’acqua"
@@ -33324,7 +33455,7 @@ msgid "Selection Area"
 msgstr "Area della selezione"
 
 msgid "Selection Radius"
-msgstr ""
+msgstr "Raggio della selezione"
 
 msgid "Angle"
 msgstr "Angolo"
@@ -34766,10 +34897,10 @@ msgid "Incomplete Members"
 msgstr ""
 
 msgid "Do you want to make the roundabout round?"
-msgstr ""
+msgstr "Vuoi fare la rotonda circolare?"
 
 msgid "Roundabout round"
-msgstr ""
+msgstr "Rotonda circolare"
 
 msgid "Do you want to download referrers of platforms and stop positions?"
 msgstr ""
@@ -37992,10 +38123,10 @@ msgid "Sync"
 msgstr "Sincronizza"
 
 msgid "Unable to find JNA Java library!"
-msgstr "Impossibile trovare la libreria Java JNA"
+msgstr "Impossibile trovare la libreria Java JNA!"
 
 msgid "Unable to find native libvlc library!"
-msgstr "Impossibile trovare la libreira libvlc nativa"
+msgstr "Impossibile trovare la libreria libvlc nativa!"
 
 msgid "play"
 msgstr "riproduci"
@@ -38006,36 +38137,11 @@ msgstr "ripeti"
 msgid "mute"
 msgstr "muto"
 
-msgid "Walking Papers Scanned Map"
-msgstr "Mappa scansionata Walking Papers"
-
-msgid ""
-"Display a map that was previously scanned and uploaded to walking-papers.org"
-msgstr ""
-"Visualizza una mappa che è stata precedentemente scannerizzata e caricata su "
-"walking-papers.org"
-
-msgid ""
-"Enter a walking-papers.org URL or ID (the bit after the ?id= in the URL)"
-msgstr ""
-"Inserire un indirizzo URL o un ID (la parte dopo il ?id= nell''URL) di "
-"walking-papers.org"
-
-msgid "Could not read information from walking-papers.org the id \"{0}\""
-msgstr ""
-"Impossibile leggere le informazioni dell''id \"{0}\" da walking-papers.org"
-
-msgid "Walking Papers: {0}"
-msgstr "Walking Papers: {0}"
-
-msgid "Walking Papers layer ({0}) in zoom {1}"
-msgstr "Livello Walking Papers ({0}) con ingrandimento {1}"
-
 msgid "Way Download"
 msgstr "Scaricamento percorsi"
 
 msgid "Download map data on the end of selected way"
-msgstr "Scarica i dati della mappa alla fine del percorso selezionato"
+msgstr "Scarica i dati cartografici alla fine del percorso selezionato"
 
 msgid ""
 "<html>Neither a node nor a way with an endpoint outside of the<br>current "
@@ -38230,6 +38336,28 @@ msgstr ""
 "Aggiunge un tag ''wikipedia'' corrispondente a questo articolo per gli "
 "oggetti selezionati"
 
+msgid "Download from Wikosm API"
+msgstr "Scarica dalle API Wikosm"
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+"Trova luoghi di istruzione ad almeno 2 km e al massimo 3 km dal centro della "
+"selezione"
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr "aiuto"
+
+msgid "Server: "
+msgstr "Server: "
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "The Ultimate WMS Super-speed Turbo Challenge II"
 
diff --git a/i18n/po/ja.po b/i18n/po/ja.po
index 2cfdd13..7f342e9 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: 2017-09-02 22:59+0200\n"
-"PO-Revision-Date: 2017-08-24 06:37+0000\n"
-"Last-Translator: caesium <Unknown>\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
+"PO-Revision-Date: 2017-09-12 04:45+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: 2017-09-03 04:49+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:47+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "X-Poedit-Country: JAPAN\n"
 "Language: ja\n"
 "X-Poedit-Language: Japanese\n"
@@ -391,6 +391,39 @@ msgstr "削除"
 msgid "Delete selected objects."
 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 ""
+"ダウンロード範囲外のノードを削除しようとしています。<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 "
+"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] ""
+"あなたは次の{0}件のリレーションを削除しようとしています。{1}<br/>この操作はあまり必要ではなく、サーバーにアップロード後は簡単には元に戻せません"
+"。<br/>本当に削除しますか?"
+
+msgid "Delete relation?"
+msgstr "リレーションを削除しますか?"
+
 msgid "Delete Layer"
 msgstr "レイヤーを削除"
 
@@ -1308,27 +1341,14 @@ msgstr " [id: {0}]"
 msgid "Segment {0}: {1}"
 msgstr "区間 {0}:{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 "リレーションの所属に基づくロールがすべての新しいウェイにコピーされました。<br>必要に応じて確認や修正をしてください。"
+msgid "Search preset"
+msgstr "プリセットを検索"
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
-msgstr "リレーションの所属がすべての新しいウェイにコピーされました。<br>必要に応じて確認や修正をしてください。"
+msgid "Show preset search dialog"
+msgstr "プリセット検索ダイアログを表示"
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] "ウェイ {0} を{1}本に分割"
+msgid "Search presets"
+msgstr "プリセットを検索"
 
 msgid "Discourage upload"
 msgstr "アップロードを抑制"
@@ -2744,39 +2764,6 @@ msgid "Delete {0} relation"
 msgid_plural "Delete {0} relations"
 msgstr[0] "{0}件のリレーションを削除"
 
-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 ""
-"ダウンロード範囲外のノードを削除しようとしています。<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 "
-"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] ""
-"あなたは次の{0}件のリレーションを削除しようとしています。{1}<br/>この操作はあまり必要ではなく、サーバーにアップロード後は簡単には元に戻せません"
-"。<br/>本当に削除しますか?"
-
-msgid "Delete relation?"
-msgstr "リレーションを削除しますか?"
-
 msgid "Move {0} node"
 msgid_plural "Move {0} nodes"
 msgstr[0] "{0}個のノードを移動"
@@ -2803,6 +2790,28 @@ msgstr[0] "{0}件のオブジェクトを選択"
 msgid "Sequence: {0}"
 msgstr "一連の操作: {0}"
 
+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 "リレーションの所属に基づくロールがすべての新しいウェイにコピーされました。<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] "ウェイ {0} を{1}本に分割"
+
 msgid "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] "{0}個のノードを変換"
@@ -2921,6 +2930,18 @@ msgstr "誤った緯度の値 ''{0}''"
 msgid "Illegal longitude value ''{0}''"
 msgstr "誤った経度の値 ''{0}''"
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr "キャッシュディレクトリ{0}の作成に失敗しました"
 
@@ -3032,6 +3053,9 @@ msgstr "ヤード・ポンド法"
 msgid "Nautical Mile"
 msgstr "海里"
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr "パラメーター ''{0}'' は空欄ではいけませんが、現在 ''{1}'' になっています"
+
 msgid "UNKNOWN"
 msgstr "不明"
 
@@ -3075,6 +3099,9 @@ msgctxt "compass"
 msgid "E"
 msgstr "東"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr "画像の日付: {0}"
 
@@ -3405,7 +3432,7 @@ msgid "Range of numbers expected"
 msgstr "数値の範囲が必要です"
 
 msgid "Unknown preset name: "
-msgstr ""
+msgstr "不明なプリセット名: "
 
 msgid "Failed to parse MapCSS selector"
 msgstr "MapCSS セレクタの解析に失敗しました"
@@ -3711,6 +3738,60 @@ msgstr "パラメーター ''{0}'' の値 ''{1}'' が座標の値として解釈
 msgid "Custom Projection"
 msgstr "独自の投影法"
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr "説明"
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr "このヘルプの表示"
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr "例"
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr "GRS80"
 
@@ -4300,7 +4381,7 @@ msgid "<empty>"
 msgstr "<empty>"
 
 msgid "Role ''{0}'' unknown in templates ''{1}''"
-msgstr ""
+msgstr "''{1}'' テンプレートでロール ''{0}'' が見つかりません"
 
 msgid "Empty role type found when expecting one of ''{0}''"
 msgstr "ロールが ''{0}'' の何れかである必要があるのにロールがない"
@@ -4755,9 +4836,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr "オフセット"
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr "パラメーター ''{0}'' は空欄ではいけませんが、現在 ''{1}'' になっています"
-
 msgid "Outdated Java version"
 msgstr "Javaのバージョンが期限切れ"
 
@@ -4803,6 +4881,9 @@ msgstr "内部の境界線データを初期化中"
 msgid "Initializing OSM API"
 msgstr "OSM APIを初期化中"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr "設定用APIで許可されていないため、 {0} レイヤーは削除されました。"
+
 msgid "Initializing internal traffic data"
 msgstr "内部の交通データを初期化中"
 
@@ -4824,9 +4905,6 @@ msgstr "使用法"
 msgid "options"
 msgstr "オプション"
 
-msgid "Show this help"
-msgstr "このヘルプの表示"
-
 msgid "Standard unix geometry argument"
 msgstr "UNIX標準のgeometry引数"
 
@@ -5031,6 +5109,13 @@ msgstr ""
 "JOSMは次のリソースにアクセスしようとしました。<br>{0}しかし、次のネットワークエラーで<b>失敗</b>しました。<br>{1}プロキシ設定が行"
 "われていない可能性があります。<br>プロキシ設定を変更しますか?"
 
+msgid "You have {0} unread message."
+msgid_plural "You have {0} unread messages."
+msgstr[0] "{0}件の未読メッセージがあります。"
+
+msgid "Click here to see your inbox."
+msgstr "受信トレイを表示するにはここをクリックしてください。"
+
 msgctxt "menu"
 msgid "File"
 msgstr "ファイル"
@@ -5264,6 +5349,8 @@ 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>zoo;x;y</i> の形式でも入力できます。"
 
 msgid "Tile address:"
 msgstr "タイルのアドレス:"
@@ -5283,6 +5370,10 @@ msgstr "タイルのインデックスを入力してください"
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr "現在の値は指定されたズームレベルに適切なタイルインデックスではありません"
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr "バグレポートを開けませんでした。こちらのウェブサイトより報告をお願いします。"
+
 msgid "You have encountered a bug in JOSM"
 msgstr "JOSMのバグです"
 
@@ -5293,16 +5384,16 @@ msgid ""
 msgstr ""
 
 msgid "Debug information"
-msgstr ""
+msgstr "デバッグ情報"
 
 msgid "Manually report at:"
 msgstr ""
 
 msgid "Is JOSM up to date?"
-msgstr ""
+msgstr "JOSMは最新版ですか?"
 
 msgid "Send bug report"
-msgstr ""
+msgstr "バグレポートを送信"
 
 msgid ""
 "If you are running the latest version of JOSM and the plugins, please file a "
@@ -5328,7 +5419,7 @@ msgid "Include the system status report."
 msgstr "システムステータスレポートを含めます。"
 
 msgid "Include information about the data you were working on."
-msgstr ""
+msgstr "作業していたデータに関する情報を含めてください。"
 
 msgid "Include all stack traces."
 msgstr "スタックトレースを含めます。"
@@ -5346,7 +5437,7 @@ msgid "JOSM is up to date."
 msgstr "JOSMは最新版です。"
 
 msgid "JOSM is out of date. The current version is {0}. Try updating JOSM."
-msgstr ""
+msgstr "JOSMが最新ではありません。現在のバージョンは{0}です。JOSMを更新してみてください。"
 
 msgid ""
 "Before you file a bug report make sure you have updated to the latest "
@@ -7084,6 +7175,9 @@ msgstr "ローカルのキャッシュから詳細ビューパネルの変更セ
 msgid "Update the changeset from the OSM server"
 msgstr "OSMサーバーの情報で変更セットを更新する"
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7314,9 +7408,6 @@ 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."
@@ -8253,17 +8344,17 @@ msgstr "ダウンロード領域はOKです。指定のサイズはサーバー
 msgid "Download from Overpass API"
 msgstr ""
 
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
+msgstr "以下に Overpass クエリを配置するか、 Overpass Turbo クエリウィザードツールを使用して作成してください"
+
 msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr "Overpass Turbo クエリウィザードツールを使用して Overpass クエリを作成"
 
 msgid "Query Wizard"
 msgstr "クエリウィザード"
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
-msgstr "以下に Overpass クエリを配置するか、 Overpass Turbo クエリウィザードツールを使用して作成してください"
-
 msgid "Your saved queries:"
 msgstr "保存したクエリ:"
 
@@ -8290,33 +8381,6 @@ msgstr "選択したスニペットを削除"
 msgid "Edit selected snippet"
 msgstr "選択されたスニペットを編集"
 
-msgid "history"
-msgstr "履歴"
-
-msgid "Please select an item first"
-msgstr "最初に項目を選択してください"
-
-msgid "Edit item"
-msgstr "項目の編集"
-
-msgid "Add snippet"
-msgstr "スニペットを追加"
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr "この名前の項目はすでに存在します"
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr "Overpass Turbo クエリウィザード"
 
@@ -8384,7 +8448,7 @@ msgid ""
 msgstr ""
 
 msgid "<i>expression1 {0} expression2</i>"
-msgstr ""
+msgstr "<i>式1 {0} 式2</i>"
 
 msgid ""
 "Basic logical operators can be used to create more sophisticated queries. "
@@ -8440,6 +8504,33 @@ msgstr "スリッピーマップ"
 msgid "Tile Numbers"
 msgstr "タイル数"
 
+msgid "history"
+msgstr "履歴"
+
+msgid "Please select an item first"
+msgstr "最初に項目を選択してください"
+
+msgid "Edit item"
+msgstr "項目の編集"
+
+msgid "Add snippet"
+msgstr "スニペットを追加"
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr "この名前の項目はすでに存在します"
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr "JOSMヘルプブラウザー"
 
@@ -8585,6 +8676,12 @@ msgstr "現在のデータレイヤー内のこのノードにズーム"
 msgid "Open a history browser with the history of this node"
 msgstr "このノードの履歴で履歴ブラウザーを開く"
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr "ウェイ {0}"
 
@@ -8594,6 +8691,9 @@ msgstr "リレーション {0}"
 msgid "Object"
 msgstr "オブジェクト"
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr "変更セットのコメント"
 
@@ -8752,6 +8852,9 @@ msgstr "「アップロード」をチェックすると、 OSM サーバーに
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr "「保存」をチェックすると、左に指定されたファイルにレイヤーを保存します。"
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "アップロードする変更の概略コメントを入力してください。"
 
@@ -9812,9 +9915,6 @@ msgid "{0} track"
 msgid_plural "{0} tracks"
 msgstr[0] "{0}本のトラック"
 
-msgid "Description"
-msgstr "説明"
-
 msgid "Timespan"
 msgstr "測定時期"
 
@@ -10415,7 +10515,7 @@ msgid "Velocity, {0}"
 msgstr ""
 
 msgid "Audio files (*.wav, *.mp3, *.aac, *.aif, *.aiff)"
-msgstr ""
+msgstr "音声ファイル (*.wav, *.mp3, *.aac, *.aif, *.aiff)"
 
 msgid "Import Audio"
 msgstr "音声のインポート"
@@ -11586,7 +11686,7 @@ msgid "Track date"
 msgstr "記録日"
 
 msgid "Heat Map (dark = few, bright = many)"
-msgstr ""
+msgstr "ヒートマップ  (暗:少数、明:多数)"
 
 msgid "Single Color (can be customized for named layers)"
 msgstr "単色(名前付きレイヤーはカスタマイズ可能)"
@@ -11610,7 +11710,7 @@ msgstr ""
 
 msgctxt "Heat map"
 msgid "Traffic Lights"
-msgstr ""
+msgstr "信号機"
 
 msgctxt "Heat map"
 msgid "Inferno"
@@ -12336,7 +12436,7 @@ msgid "You can copy+paste the list of a status report here."
 msgstr ""
 
 msgid "Load plugins from list"
-msgstr ""
+msgstr "一覧からプラグインをロード"
 
 msgid "The following plugins were not found. Continue anyway?"
 msgstr ""
@@ -13038,15 +13138,6 @@ msgstr "親の無いサブ要素をプリセット"
 msgid "Error parsing {0}: "
 msgstr "走査時にエラー: {0}: "
 
-msgid "Search preset"
-msgstr "プリセットを検索"
-
-msgid "Show preset search dialog"
-msgstr "プリセット検索ダイアログを表示"
-
-msgid "Search presets"
-msgstr "プリセットを検索"
-
 msgid "Presets"
 msgstr "プリセット"
 
@@ -13160,6 +13251,9 @@ msgstr "すべてのファイル(*.*)"
 msgid "Received error page:"
 msgstr "エラーページを受信しました:"
 
+msgid "{0}... [please type its number]"
+msgstr "{0}... [番号を入力してください]"
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13412,13 +13506,6 @@ msgstr "不明なモード {0}。"
 msgid "get number of unread messages"
 msgstr "未読メッセージの件数を取得"
 
-msgid "You have {0} unread message."
-msgid_plural "You have {0} unread messages."
-msgstr[0] "{0}件の未読メッセージがあります。"
-
-msgid "Click here to see your inbox."
-msgstr "受信トレイを表示するにはここをクリックしてください。"
-
 msgid "Message notifier"
 msgstr "メッセージ通知"
 
@@ -13481,9 +13568,6 @@ msgid ""
 "{1}."
 msgstr "プロトコルバージョン0.6をサポートしていますが、サーバーからの応答では {0} ら {1} をサポートしています。"
 
-msgid "Removed layer {0} because it is not allowed by the configured API."
-msgstr "設定用APIで許可されていないため、 {0} レイヤーは削除されました。"
-
 msgid "Unexpected format of ID replied by the server. Got ''{0}''."
 msgstr "予想外の形式のID がサーバーから返されました。入力値: ''{0}''"
 
@@ -14769,9 +14853,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr "{0}... [番号を入力してください]"
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14872,10 +14953,6 @@ msgid "Failed to load XML schema."
 msgstr "XMLスキーマのロードに失敗。"
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr "検索式の {0} 文字目にエラーがあります - or(|) 演算子の右辺はプリミティブのセットでなければなりません"
@@ -15465,6 +15542,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr "なし"
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr "線路の種別"
 
@@ -17504,8 +17585,9 @@ msgid "Bay"
 msgstr "湾"
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
-msgstr "大きな水域で、部分的に陸地によって閉じていますが、大きな開口部があります。"
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
+msgstr ""
 
 msgid "Shipping"
 msgstr "港湾関連"
@@ -23331,6 +23413,9 @@ msgstr "Waymarked Trails: Horse Riding"
 msgid "Waymarked Trails: Winter Sports"
 msgstr "Waymarked Trails: Winter Sports"
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr "OSM Inspector: Geometry"
 
@@ -23389,6 +23474,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23470,6 +23558,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23491,9 +23594,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -24090,6 +24190,9 @@ msgstr "Berlin aerial photograph 2015"
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24501,6 +24604,9 @@ msgstr "Luxembourg Inspire Water"
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Niger Delta Oct 2012 Landsat"
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24944,6 +25050,9 @@ msgstr "NLSC Open Data WMTS"
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr "MSR Maps Topo"
 
@@ -26149,6 +26258,9 @@ msgstr "種別がないリレーション"
 msgid "{0} relation without {0} tag"
 msgstr "{0}リレーションに{0}タグがない"
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr "宗教に宗派がない"
 
@@ -26338,10 +26450,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26393,9 +26501,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr "付近の地図を編集しているユーザーと会話しましょう。誰かが近くに来ると通知されます。"
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26764,13 +26869,6 @@ 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 "長い相互接続されたウェイのセットに沿って簡単にダウンロード"
 
@@ -27391,15 +27489,15 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
+msgid "Start Mapillary layer"
+msgstr "Mapillary レイヤの開始"
+
 msgid "Mapillary"
 msgstr "Mapillary"
 
 msgid "Create Mapillary layer"
 msgstr "Mapillary レイヤの作成"
 
-msgid "Start Mapillary layer"
-msgstr "Mapillary レイヤの開始"
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -28775,6 +28873,155 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+msgstr "自動ソーシング"
+
+msgid ""
+"Please enable at least two WMS layers in the cadastre-fr plugin "
+"configuration.\n"
+"Layers ''Building'' and ''Parcel'' added by default."
+msgstr ""
+"cadastre-Frプラグイン構成で2つ以上のWMSレイヤーを有効にしてください。\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 ""
+"現在の投影法を cadastre 投影法のひとつに\n"
+"変更して cadastre WMS plugin を有効化し、\n"
+"やり直してください"
+
+msgid "Change the current projection"
+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 "フランスのCadastre WMSからイメージのダウンロード"
+
+msgid "Cadastre: {0}"
+msgstr "Cadastre: {0}"
+
+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 ""
+"この画像はジオ参照データを含んでいます。\n"
+"これらを使用しますか?"
+
+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 "{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 "ロケーション {0} は既にスクリーン上にあります。キャッシュがロードされていません。"
+
+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 ""
+"<html>町、村または市区の名前を入力してください。<br>文法や句読点はwww.cadastre.gouv.fr "
+"に従ってください。(フランス語の場合)</html>"
+
+msgid "Departement"
+msgstr "県"
+
+msgid "<html>Departement number (optional)</html>"
+msgstr "<html>県番号(オプション)</html>"
+
+msgid "Add new layer"
+msgstr "新規レイヤーを作成"
+
+msgid "Open Cadastre Preferences"
+msgstr "Open Cadastre 設定"
+
+msgid "Refine georeferencing"
+msgstr "下絵を純化する"
+
+msgid "Improve georeferencing (only raster images)"
+msgstr "下絵を強化する(ラスタ画像のみ)"
+
+msgid "Reset cookie"
+msgstr "クッキーのリセット"
+
+msgid "Get a new cookie (session timeout)"
+msgstr "新しい cookie を入手してください(セッションがタイムアウトしました)"
+
+msgid "Save image as..."
+msgstr "名前を付けて画像を保存..."
+
+msgid "PNG files (*.png)"
+msgstr "PNG ファイル (*.png)"
+
+msgid "GeoTiff files (*.tif)"
+msgstr "GeoTiff ファイル(*.tif)"
+
+msgid "Export image (only raster images)"
+msgstr "画像をエクスポート(ラスタ画像のみ)"
+
+msgid ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+"2つ以上のWMS レイヤーがあります\n"
+"最初にその1つを選んで、やり直してください"
+
 msgid "on polygon"
 msgstr "ポリゴン上"
 
@@ -28790,91 +29037,83 @@ msgstr "次の番号"
 msgid "Enter addresses"
 msgstr "住所の入力"
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
+msgstr "WMSの調整"
+
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
+msgstr "WMSレイヤーの位置を調整(ラスタイメージとして保存されたもののみ)"
+
+msgid "Add \"source=...\" to elements?"
+msgstr "\"source=...\" を要素に追加しますか?"
+
+msgid "Download from Cadastre"
 msgstr ""
-"位置 \"{0}\" がキャッシュに見つかりました。\n"
-"最初にキャッシュをロードしますか?"
 
-msgid "Select Feuille"
-msgstr "用紙選択"
+msgid "Objects:"
+msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Select to download buildings in the selected download area."
 msgstr ""
-"ファイルロード中にエラー。 \n"
-"おそらくキャッシュファイルが古いと思われます。"
 
-msgid "Lambert Zone {0} cache file (.{0})"
-msgstr "ランベルトゾーン {0}のキャッシュファイル(.{0})"
+msgid "address"
+msgstr "住所"
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
-msgstr "ランベルト CC9  ゾーン {0}のキャッシュファイル(.CC{0})"
+msgid "Select to download addresses in the selected download area."
+msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
-msgstr "Guadeloupe Fort-Marigot キャッシュファイル(.UTM1)"
+msgid "symbol"
+msgstr "シンボル"
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
-msgstr "Guadeloupe Ste-Anne キャッシュファイル(.UTM2)"
+msgid "Select to download symbols in the selected download area."
+msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
-msgstr "Martinique Fort Desaix キャッシュファイル(.UTM3)"
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
-msgstr "Reunion RGR92 キャッシュファイル(.UTM4)"
+msgid "parcel"
+msgstr "区画"
 
-msgid "CadastreGrabber: Illegal url."
-msgstr "CadastreGrabber: 不正な url."
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
+msgstr "区画番号"
 
 msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
-"新しいクライアントセッションを開始できません。\n"
-"サーバーが保守中か、一時的に過負荷になっています。"
 
-msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+msgid "section"
+msgstr "セクション"
+
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
-"町/市 {0} が見つからないか利用できません。\n"
-"又はキャンセルされました。"
 
-msgid "Choose from..."
-msgstr "選択..."
+msgid "locality"
+msgstr "地名(分類外)"
 
-msgid "Select commune"
-msgstr "コミューンの選択"
+msgid "Select to download localities in the selected download area."
+msgstr ""
 
-msgid "Auto sourcing"
-msgstr "自動ソーシング"
+msgid "commune"
+msgstr "コミューン"
 
 msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+"Select to download municipality boundary in the selected download area."
 msgstr ""
-"cadastre-Frプラグイン構成で2つ以上のWMSレイヤーを有効にしてください。\n"
-"既定値では''Building''と''Parcel''レイヤーが追加されます。"
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
-msgstr "警告: オプションペインダイアログを常時トップに表示するのに失敗しました。例外コード: {0}"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
+msgstr ""
 
-msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+msgid "Recipient"
 msgstr ""
-"現在の投影法を cadastre 投影法のひとつに\n"
-"変更して cadastre WMS plugin を有効化し、\n"
-"やり直してください"
 
-msgid "Change the current projection"
-msgstr "現在の投影法を変更"
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
+msgstr ""
 
 msgid "Replace original background by JOSM background color."
 msgstr "JOSM背景色で、オリジナルの背景を置き換える。"
@@ -28924,27 +29163,6 @@ msgstr "中"
 msgid "low"
 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 "自動キャッシュを有効にする"
 
@@ -29090,8 +29308,64 @@ msgstr "ノードに \"add:street\" タグの使用を許可する"
 msgid "Unexpected file extension. {0}"
 msgstr "想定外のファイル拡張子です。{0}"
 
-msgid "Add \"source=...\" to elements?"
-msgstr "\"source=...\" を要素に追加しますか?"
+msgid ""
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
+msgstr ""
+"位置 \"{0}\" がキャッシュに見つかりました。\n"
+"最初にキャッシュをロードしますか?"
+
+msgid "Select Feuille"
+msgstr "用紙選択"
+
+msgid ""
+"Error loading file.\n"
+"Probably an old version of the cache file."
+msgstr ""
+"ファイルロード中にエラー。 \n"
+"おそらくキャッシュファイルが古いと思われます。"
+
+msgid "Lambert Zone {0} cache file (.{0})"
+msgstr "ランベルトゾーン {0}のキャッシュファイル(.{0})"
+
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgstr "ランベルト CC9  ゾーン {0}のキャッシュファイル(.CC{0})"
+
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgstr "Guadeloupe Fort-Marigot キャッシュファイル(.UTM1)"
+
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgstr "Guadeloupe Ste-Anne キャッシュファイル(.UTM2)"
+
+msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgstr "Martinique Fort Desaix キャッシュファイル(.UTM3)"
+
+msgid "Reunion RGR92 cache file (.UTM4)"
+msgstr "Reunion RGR92 キャッシュファイル(.UTM4)"
+
+msgid "CadastreGrabber: Illegal url."
+msgstr "CadastreGrabber: 不正な url."
+
+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 "選択..."
+
+msgid "Select commune"
+msgstr "コミューンの選択"
 
 msgid "Downloading {0}"
 msgstr "ダウンロード {0}"
@@ -29141,121 +29415,6 @@ msgstr ""
 "このコミューンはベクトル化されていません。\n"
 "「計画イメージ」を設置するには、他のメニュー項目を使用してください"
 
-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 "フランスのCadastre WMSからイメージのダウンロード"
-
-msgid "Cadastre: {0}"
-msgstr "Cadastre: {0}"
-
-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 ""
-"この画像はジオ参照データを含んでいます。\n"
-"これらを使用しますか?"
-
-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 "{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 "ロケーション {0} は既にスクリーン上にあります。キャッシュがロードされていません。"
-
-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 ""
-"<html>町、村または市区の名前を入力してください。<br>文法や句読点はwww.cadastre.gouv.fr "
-"に従ってください。(フランス語の場合)</html>"
-
-msgid "Departement"
-msgstr "県"
-
-msgid "<html>Departement number (optional)</html>"
-msgstr "<html>県番号(オプション)</html>"
-
-msgid "Add new layer"
-msgstr "新規レイヤーを作成"
-
-msgid "Open Cadastre Preferences"
-msgstr "Open Cadastre 設定"
-
-msgid "Refine georeferencing"
-msgstr "下絵を純化する"
-
-msgid "Improve georeferencing (only raster images)"
-msgstr "下絵を強化する(ラスタ画像のみ)"
-
-msgid "Reset cookie"
-msgstr "クッキーのリセット"
-
-msgid "Get a new cookie (session timeout)"
-msgstr "新しい cookie を入手してください(セッションがタイムアウトしました)"
-
-msgid "Save image as..."
-msgstr "名前を付けて画像を保存..."
-
-msgid "PNG files (*.png)"
-msgstr "PNG ファイル (*.png)"
-
-msgid "GeoTiff files (*.tif)"
-msgstr "GeoTiff ファイル(*.tif)"
-
-msgid "Export image (only raster images)"
-msgstr "画像をエクスポート(ラスタ画像のみ)"
-
 msgid ""
 "Click first corner for image cropping\n"
 "(two points required)"
@@ -29311,19 +29470,6 @@ msgstr "切り抜くイメージの二番目の角をクリック"
 msgid "Click second Lambert crosspiece for georeferencing"
 msgstr "2番目の地理参照用ランベルトcrosspiece をクリック"
 
-msgid "Adjust WMS"
-msgstr "WMSの調整"
-
-msgid "Adjust the position of the WMS layer (saved for raster images only)"
-msgstr "WMSレイヤーの位置を調整(ラスタイメージとして保存されたもののみ)"
-
-msgid ""
-"More than one WMS layer present\n"
-"Select one of them first, then retry"
-msgstr ""
-"2つ以上のWMS レイヤーがあります\n"
-"最初にその1つを選んで、やり直してください"
-
 msgid "Reset offset"
 msgstr "オフセットを初期化"
 
@@ -29759,20 +29905,6 @@ msgid ""
 "to cancel the download."
 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 ""
-"選択されたエリアは、いくつかのリレーションのメンバーなので分割できません。\n"
-"分割の前にエリアをリレーションから削除してください。"
-
 msgid "TangoGPS Files (*.log)"
 msgstr "TangoGPS ファイル (*.log)"
 
@@ -35652,26 +35784,6 @@ msgstr "ループ"
 msgid "mute"
 msgstr "ミュート"
 
-msgid "Walking Papers Scanned Map"
-msgstr "Walking Papers Scanned Map"
-
-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 "walking-papers.orgのURLまたはID(URL中の ?id= の後のビット)を入力"
-
-msgid "Could not read information from walking-papers.org the id \"{0}\""
-msgstr "walking-papers.org からの情報を読み取れませんでした。idは \"{0}\""
-
-msgid "Walking Papers: {0}"
-msgstr "Walking Papers: {0}"
-
-msgid "Walking Papers layer ({0}) in zoom {1}"
-msgstr "ズーム{1}のWalking Papersレイヤー{0}"
-
 msgid "Way Download"
 msgstr "ウェイのダウンロード"
 
@@ -35844,6 +35956,26 @@ msgid ""
 "objects"
 msgstr "この文書に対応する選択されたオブジェクトに''wikipedia''タグを追加します"
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "最高WMSスーパースピードターボチャレンジII"
 
diff --git a/i18n/po/ka.po b/i18n/po/ka.po
index 1cea016..19565c5 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+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: 2017-09-03 04:43+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:41+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: ka\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -392,6 +392,34 @@ msgstr "წაშალე"
 msgid "Delete selected objects."
 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 "Delete Layer"
 msgstr ""
 
@@ -1298,29 +1326,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2729,34 +2743,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2788,6 +2774,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2907,6 +2916,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3014,6 +3035,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr "უცნიბი"
 
@@ -3057,6 +3081,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3693,6 +3720,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4733,9 +4814,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4781,6 +4859,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr ""
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4802,9 +4883,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -5005,6 +5083,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5257,6 +5343,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7039,6 +7129,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7261,9 +7354,6 @@ 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."
@@ -8191,15 +8281,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8228,33 +8318,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8378,6 +8441,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8511,6 +8601,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8520,6 +8616,9 @@ msgstr ""
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8664,6 +8763,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9703,9 +9805,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12842,15 +12941,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -12956,6 +13046,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13205,14 +13298,6 @@ 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 ""
 
@@ -13276,9 +13361,6 @@ msgid ""
 "{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 ""
 
@@ -14510,9 +14592,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14609,10 +14688,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15200,6 +15275,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17237,7 +17316,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23063,6 +23143,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23121,6 +23204,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23202,6 +23288,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23223,9 +23324,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23820,6 +23918,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24231,6 +24332,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24674,6 +24778,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25877,6 +25984,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26057,10 +26167,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26108,9 +26214,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26454,11 +26557,6 @@ msgid ""
 "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 ""
 
@@ -27069,13 +27167,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28372,6 +28470,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28387,77 +28623,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28508,27 +28749,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28669,160 +28889,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28872,17 +29029,6 @@ 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 ""
 
@@ -29319,18 +29465,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35076,26 +35210,6 @@ 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 ""
 
@@ -35264,6 +35378,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/km.po b/i18n/po/km.po
index f77fa12..c15c99f 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+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: 2017-09-03 04:49+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:47+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -397,6 +397,41 @@ msgstr "លុបចោល"
 msgid "Delete selected objects."
 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 ""
+"អ្នក​ហៀប​នឹង​លុប​តំណ​ដែល​នៅ​ក្រៅ​តំបន់​អ្នក​បាន​ទាញ​យក។<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 "
+"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] ""
+"អ្នក​ហៀបនឹង​លុប​ទំនាក់ទំនង {0} ៖ {1}<br/>ជំហាន​នេះ​គឺ​សំខាន់​ណាស់ "
+"ហើយ​មិន​អាច​មិនធ្វើវិញ​ដោយ​ងាយៗ​បាន​ឡើយ "
+"បន្ទាប់ពី​ផ្ទុក​ឡើង​ទៅកាន់​ម៉ាស៊ីន​មេ​រួច។<br/>តើ​អ្នក​ពិតជា​ចង់​លុប​មែន​ឬ?"
+
+msgid "Delete relation?"
+msgstr "លុប​ទំនាក់ទំនង?"
+
 msgid "Delete Layer"
 msgstr ""
 
@@ -1370,33 +1405,14 @@ msgstr " [id: {0}]"
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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 ""
-"សមាជិកភាព​នៃ​ទំនាក់ទំនង​ផ្អែក​តាម​តួនាទី​ត្រូវ​បាន​ចម្លង​ទៅកាន់​ផ្លូវ​ថ្មី​ទា"
-"ំងអស់។<br>អ្នក​គួរតែ​បញ្ជាក់​វា ហើយ​កែ​វា​នៅ​ពេល​ចាំបាច់។"
+msgid "Search preset"
+msgstr "ស្វែងរក​ការ​កំណត់​ស្រេច"
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
-msgstr ""
-"សមាជិកភាព​នៃ​ទំនាក់ទំនង​ត្រូវ​បាន​ចម្លង​ទៅកាន់​ផ្លូវ​ថ្មី​ទាំងអស់។<br>អ្នក​គួ"
-"រតែ​បញ្ជាក់​វា ហើយ​កែ​វា​នៅ​ពេល​ចាំបាច់។"
+msgid "Show preset search dialog"
+msgstr "បង្ហាញ​ប្រអប់​ស្វែងរក​ការ​កំណត់​ស្រេច"
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] "បំបែក​ផ្លូវ {0} ទៅជា {1} ផ្នែក"
+msgid "Search presets"
+msgstr "ស្វែងរក​ការ​កំណត់​ស្រេច"
 
 msgid "Discourage upload"
 msgstr ""
@@ -2879,41 +2895,6 @@ msgid "Delete {0} relation"
 msgid_plural "Delete {0} relations"
 msgstr[0] "លុប​ទំនាក់ទំនង {0}"
 
-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 ""
-"អ្នក​ហៀប​នឹង​លុប​តំណ​ដែល​នៅ​ក្រៅ​តំបន់​អ្នក​បាន​ទាញ​យក។<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 "
-"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] ""
-"អ្នក​ហៀបនឹង​លុប​ទំនាក់ទំនង {0} ៖ {1}<br/>ជំហាន​នេះ​គឺ​សំខាន់​ណាស់ "
-"ហើយ​មិន​អាច​មិនធ្វើវិញ​ដោយ​ងាយៗ​បាន​ឡើយ "
-"បន្ទាប់ពី​ផ្ទុក​ឡើង​ទៅកាន់​ម៉ាស៊ីន​មេ​រួច។<br/>តើ​អ្នក​ពិតជា​ចង់​លុប​មែន​ឬ?"
-
-msgid "Delete relation?"
-msgstr "លុប​ទំនាក់ទំនង?"
-
 msgid "Move {0} node"
 msgid_plural "Move {0} nodes"
 msgstr[0] "ផ្លាស់ទី​តំណ {0}"
@@ -2940,6 +2921,34 @@ msgstr[0] "បាន​ជ្រើស​វត្ថុ {0}"
 msgid "Sequence: {0}"
 msgstr "លំដាប់៖ {0}"
 
+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 ""
+"សមាជិកភាព​នៃ​ទំនាក់ទំនង​ផ្អែក​តាម​តួនាទី​ត្រូវ​បាន​ចម្លង​ទៅកាន់​ផ្លូវ​ថ្មី​ទា"
+"ំងអស់។<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] "បំបែក​ផ្លូវ {0} ទៅជា {1} ផ្នែក"
+
 msgid "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] "ប្លែង​តំណ {0}"
@@ -3067,6 +3076,18 @@ msgstr "តម្លៃ​រយៈទទឹង​មិន​ត្រឹមត
 msgid "Illegal longitude value ''{0}''"
 msgstr "តម្លៃ​រយៈបណ្ដោយ​មិន​ត្រឹមត្រូវ ''{0}''"
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr "បាន​បរាជ័យ​ក្នុង​ការ​បង្កើត​ថត​ឃ្លាំង​សម្ងាត់​ដែល​បាត់៖ {0}"
 
@@ -3193,6 +3214,10 @@ msgstr "Imperial"
 msgid "Nautical Mile"
 msgstr "Nautical Mile"
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+"បាន​រំពឹង​ទុក​តម្លៃ​មិន​ទទេ​សម្រាប់​ប៉ារ៉ាម៉ែត្រ ''{0}'', បាន​ទទួល ''{1}''"
+
 msgid "UNKNOWN"
 msgstr "មិន​ស្គាល់"
 
@@ -3238,6 +3263,9 @@ msgctxt "compass"
 msgid "E"
 msgstr "កើត"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3917,6 +3945,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr "ចំណោល​ផ្ទាល់ខ្លួន"
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr "សេចក្ដី​ពណ៌នា"
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr "បង្ហាញ​ជំនួយនេះ"
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr "ឧទាហរណ៍"
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr "GRS80"
 
@@ -4994,10 +5076,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr "អុហ្វសិត"
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-"បាន​រំពឹង​ទុក​តម្លៃ​មិន​ទទេ​សម្រាប់​ប៉ារ៉ាម៉ែត្រ ''{0}'', បាន​ទទួល ''{1}''"
-
 msgid "Outdated Java version"
 msgstr "កំណែ Java ហួស​សម័យ"
 
@@ -5046,6 +5124,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr "ចាប់ផ្ដើម OSM API"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr "យក​ស្រទាប់ {0} ចេញ ព្រោះ​វា​មិន​បាន​អនុញ្ញាត​ដោយ​រចនាសម្ព័ន្ធ API ។"
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -5067,9 +5148,6 @@ msgstr "ប្រើប្រាស់"
 msgid "options"
 msgstr "ជម្រើស"
 
-msgid "Show this help"
-msgstr "បង្ហាញ​ជំនួយនេះ"
-
 msgid "Standard unix geometry argument"
 msgstr "អាគុយម៉ង់​ធរណីមាត្រ​យូនីក​ស្តង់ដារ"
 
@@ -5289,6 +5367,13 @@ msgstr ""
 "ដោយសារ​កំហុស​បណ្ដាញ​ដូច​ខាងក្រោម៖<br>{1}វា​អាច​ដោយ​សារ​កំហុស​ការ​កំណត់​រចនាសម"
 "្ព័ន្ធ​ប្រូកស៊ី។<br>តើ​អ្នក​ចង់​ប្ដូរ​ការ​កំណត់​ប្រូកស៊ី​ឥឡូវ​ឬ?"
 
+msgid "You have {0} unread message."
+msgid_plural "You have {0} unread messages."
+msgstr[0] "អ្នក​មាន​សារ​មិនទាន់​អាន {0} ។"
+
+msgid "Click here to see your inbox."
+msgstr "ចុច​ទីនេះ​ដើម្បី​មើល​ប្រអប់​ទទួល​របស់​អ្នក។"
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5547,6 +5632,10 @@ msgstr ""
 "តម្លៃ​បច្ចុប្បន្ន​មិនមែន​ជា​សន្ទស្សន៍​ក្រឡា​ត្រឹមត្រូវ​សម្រាប់​កម្រិត​ពង្រីក​"
 "ដែល​បាន​ផ្ដល់​ទេ"
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr "អ្នក​បាន​ជួប​បញ្ហា​របាយការណ៍​កំហុស​នី​ក្នុង JOSM"
 
@@ -7448,6 +7537,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr "ធ្វើ​បច្ចុប្បន្នភាព​សំណុំ​ផ្លាស់ប្ដូរ​ពី​ម៉ាស៊ីន​មេ OSM"
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7716,9 +7808,6 @@ msgid "Please enter or paste an URL to retrieve changesets from the OSM API."
 msgstr ""
 "សូម​បញ្ចូល ឬ​បិទភ្ជាប់ URL ដើម្បី​ទៅ​យក​សំណុំ​ផ្លាស់ប្ដូរ​ពី OSM API ។"
 
-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."
@@ -8706,15 +8795,15 @@ msgstr "តំបន់​ទាញ​យក​គឺ​ត្រឹមត្រ
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8743,33 +8832,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8894,6 +8956,33 @@ msgstr "ផែនទី​រហ័ស"
 msgid "Tile Numbers"
 msgstr "លេខ​ក្បឿង"
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr "កម្មវិធី​អ៊ីនធឺណិត​ជំនួយ JOSM"
 
@@ -9055,6 +9144,12 @@ msgstr "ពង្រីក​ទៅ​តំណ​នេះ​ក្នុង​
 msgid "Open a history browser with the history of this node"
 msgstr "បើក​ប្រវត្តិ​កម្មវិធី​អ៊ីនធឺណិត​ដែល​មាន​ប្រវត្តិ​នៃ​តំណ"
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr "ផ្លូវ {0}"
 
@@ -9064,6 +9159,9 @@ msgstr "ទំនាក់ទំនង {0}"
 msgid "Object"
 msgstr "វត្ថុ"
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr "សេចក្ដីអធិប្បាយ​សំណុំ​ផ្លាស់ប្ដូរ"
 
@@ -9236,6 +9334,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 "ផ្ដល់​សេចក្ដី​អធិប្បាយ​សង្ខេប​សម្រាប់​ការ​ផ្លាស់ប្ដូរ​ដែល​អ្នក​កំពុង​ផ្ទុក​ឡើ"
@@ -10385,9 +10486,6 @@ msgid "{0} track"
 msgid_plural "{0} tracks"
 msgstr[0] "ដាន {0}"
 
-msgid "Description"
-msgstr "សេចក្ដី​ពណ៌នា"
-
 msgid "Timespan"
 msgstr "ចំណែក​ពេល"
 
@@ -13839,15 +13937,6 @@ msgstr "ធាតុ​រង​ការ​កំណត់​ស្រេច​
 msgid "Error parsing {0}: "
 msgstr "កំហុស​ក្នុង​ការ​ញែក {0}: "
 
-msgid "Search preset"
-msgstr "ស្វែងរក​ការ​កំណត់​ស្រេច"
-
-msgid "Show preset search dialog"
-msgstr "បង្ហាញ​ប្រអប់​ស្វែងរក​ការ​កំណត់​ស្រេច"
-
-msgid "Search presets"
-msgstr "ស្វែងរក​ការ​កំណត់​ស្រេច"
-
 msgid "Presets"
 msgstr "ការ​កំណត់​ជាមុន"
 
@@ -13967,6 +14056,9 @@ msgstr "ឯកសារ​​ទាំងអស់ (*.*)"
 msgid "Received error page:"
 msgstr "បាន​ទទួល​ទំព័រ​កំហុស៖"
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -14279,13 +14371,6 @@ msgstr "មិន​ស្គាល់​របៀប {0} ។"
 msgid "get number of unread messages"
 msgstr "យក​សារ​មួយ​ចំនួន​ដែល​មិន​បាន​អាន"
 
-msgid "You have {0} unread message."
-msgid_plural "You have {0} unread messages."
-msgstr[0] "អ្នក​មាន​សារ​មិនទាន់​អាន {0} ។"
-
-msgid "Click here to see your inbox."
-msgstr "ចុច​ទីនេះ​ដើម្បី​មើល​ប្រអប់​ទទួល​របស់​អ្នក។"
-
 msgid "Message notifier"
 msgstr "កម្មវិធី​ជូនដំណឹង​សារ"
 
@@ -14353,9 +14438,6 @@ msgstr ""
 "វា​គាំទ្រ​ពិធីការ​កំណែ 0.6, ខណៈ​ដែល​ម៉ាស៊ីន​មេ​និយាយ​ថា​វា​គាំទ្រ​កំណែ {0} "
 "ដល់ {1} ។"
 
-msgid "Removed layer {0} because it is not allowed by the configured API."
-msgstr "យក​ស្រទាប់ {0} ចេញ ព្រោះ​វា​មិន​បាន​អនុញ្ញាត​ដោយ​រចនាសម្ព័ន្ធ API ។"
-
 msgid "Unexpected format of ID replied by the server. Got ''{0}''."
 msgstr ""
 "ទ្រង់ទ្រាយ​មិន​រំពឹង​ទុក​របស់​លេខ​សម្គាល់​ដែល​បាន​ឆ្លើយតប​ដោយ​ម៉ាស៊ីន​មេ។ "
@@ -15800,9 +15882,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -15914,10 +15993,6 @@ msgid "Failed to load XML schema."
 msgstr "បាន​បរាជ័យ​ក្នុង​ការ​ផ្ទុក​ដ្យាក្រាម XML ។"
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -16521,6 +16596,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -18558,7 +18637,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -24384,6 +24464,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -24442,6 +24525,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -24523,6 +24609,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -24544,9 +24645,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -25141,6 +25239,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -25552,6 +25653,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -25995,6 +26099,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -27198,6 +27305,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -27400,11 +27510,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -27461,9 +27566,6 @@ msgstr ""
 "ជជែក​ជាមួយ​អ្នកប្រើ​ដែល​កែសម្រួល​ផែនទី​នៅ​ក្បែរ "
 "ដោយ​ជូនដំណឹង​ពេល​ពួកគេ​មក​ក្បែរ។"
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -27862,11 +27964,6 @@ msgid ""
 "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 ""
 
@@ -28477,13 +28574,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -29780,6 +29877,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -29795,77 +30030,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -29916,27 +30156,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -30077,160 +30296,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -30280,17 +30436,6 @@ 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 ""
 
@@ -30727,18 +30872,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -36484,26 +36617,6 @@ 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 ""
 
@@ -36672,6 +36785,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/ko.po b/i18n/po/ko.po
index 13d1b32..5388244 100644
--- a/i18n/po/ko.po
+++ b/i18n/po/ko.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
 "PO-Revision-Date: 2017-05-17 08:29+0000\n"
 "Last-Translator: Glados <Unknown>\n"
 "Language-Team: Korean <ko 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: 2017-09-03 04:50+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:48+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: ko\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -385,6 +385,36 @@ msgstr "삭제"
 msgid "Delete selected objects."
 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 ""
+"다운로드된 지역 바깥에 있는 점을 삭제하려고 합니다.<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 ""
+
+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 "Delete Layer"
 msgstr "레이어 삭제"
 
@@ -1287,28 +1317,14 @@ msgstr " [id: {0}]"
 msgid "Segment {0}: {1}"
 msgstr "부분 {0}: {1}"
 
-msgid "You must select two or more nodes to split a circular way."
-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."
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
+msgid "Search presets"
+msgstr ""
 
 msgid "Discourage upload"
 msgstr ""
@@ -2712,36 +2728,6 @@ msgid "Delete {0} relation"
 msgid_plural "Delete {0} relations"
 msgstr[0] "관계 {0} 삭제"
 
-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 ""
-"다운로드된 지역 바깥에 있는 점을 삭제하려고 합니다.<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 ""
-
-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] "점 {0}개 이동"
@@ -2769,6 +2755,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr "열: {0}"
 
+msgid "You must select two or more nodes to split a circular way."
+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 ""
+
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2888,6 +2897,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -2995,6 +3016,9 @@ msgstr "야드법"
 msgid "Nautical Mile"
 msgstr "노티컬 마일"
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr "알 수 없음"
 
@@ -3038,6 +3062,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr "사진의 날짜: {0}"
 
@@ -3671,6 +3698,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr "설명"
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr "예시"
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4710,9 +4791,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr "오프셋"
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr "오래된 Java 버전"
 
@@ -4758,6 +4836,9 @@ msgstr "내부 경계 데이터를 초기화하는 중"
 msgid "Initializing OSM API"
 msgstr "OSM API 초기화 중"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr "내부 교통 정보를 초기화하는 중"
 
@@ -4779,9 +4860,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -4984,6 +5062,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr "파일"
@@ -5236,6 +5322,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7033,6 +7123,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr "OSM 서버로부터 바뀜집합 업데이트"
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7255,9 +7348,6 @@ msgstr "URL: "
 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."
@@ -8186,15 +8276,15 @@ msgstr "다운로드 영역이 적당한 크기입니다."
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8223,33 +8313,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8373,6 +8436,33 @@ msgstr "슬리피 지도"
 msgid "Tile Numbers"
 msgstr "타일 번호"
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr "JOSM 도움말 브라우저"
 
@@ -8506,6 +8596,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr "선 {0}"
 
@@ -8515,6 +8611,9 @@ msgstr "관계 {0}"
 msgid "Object"
 msgstr "개체"
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr "바뀜집합 설명"
 
@@ -8669,6 +8768,9 @@ msgstr "\"업로드\"를 체크하면 OSM 서버에 변경 사항을 업로드
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr "\"저장\"을 체크하면 레이어를 왼쪽에 지정된 파일에 저장합니다."
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "업로드하려는 변경 사항에 대한 간략한 설명:"
 
@@ -9702,9 +9804,6 @@ msgid "{0} track"
 msgid_plural "{0} tracks"
 msgstr[0] "경로 {0}개"
 
-msgid "Description"
-msgstr "설명"
-
 msgid "Timespan"
 msgstr "일시"
 
@@ -12855,15 +12954,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -12971,6 +13061,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13222,14 +13315,6 @@ 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 ""
 
@@ -13293,9 +13378,6 @@ msgid ""
 "{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 ""
 
@@ -14529,9 +14611,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14628,10 +14707,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15219,6 +15294,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr "아니오"
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr "서비스 유형"
 
@@ -17256,7 +17335,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23082,6 +23162,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23140,6 +23223,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23221,6 +23307,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23242,9 +23343,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23839,6 +23937,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24250,6 +24351,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24693,6 +24797,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25896,6 +26003,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26076,10 +26186,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26127,9 +26233,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26477,11 +26580,6 @@ msgid ""
 "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 ""
 
@@ -27092,13 +27190,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28395,6 +28493,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28410,77 +28646,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28531,27 +28772,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28692,160 +28912,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28895,17 +29052,6 @@ 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 ""
 
@@ -29342,18 +29488,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35098,26 +35232,6 @@ 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 "이전에 스캔되고 walking-papers.org로 업로드된 지도 표시"
-
-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 ""
 
@@ -35286,6 +35400,26 @@ msgid ""
 "objects"
 msgstr "선택된 개체에 이 문서에 대응하는 ''wikipedia'' 태그를 추가합니다"
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/ku.po b/i18n/po/ku.po
index 7f3414a..6ec72e0 100644
--- a/i18n/po/ku.po
+++ b/i18n/po/ku.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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
 "PO-Revision-Date: 2017-01-31 19:32+0000\n"
 "Last-Translator: Rokar ✌ <Unknown>\n"
 "Language-Team: Kurdish <ku 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: 2017-09-03 04:50+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:48+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
 msgstr ""
@@ -386,6 +386,34 @@ msgstr ""
 msgid "Delete selected objects."
 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 "Delete Layer"
 msgstr ""
 
@@ -1292,29 +1320,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2723,34 +2737,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2782,6 +2768,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2901,6 +2910,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3008,6 +3029,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr ""
 
@@ -3051,6 +3075,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3687,6 +3714,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4727,9 +4808,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4775,6 +4853,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr ""
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4796,9 +4877,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -4999,6 +5077,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5251,6 +5337,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7033,6 +7123,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7255,9 +7348,6 @@ 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."
@@ -8185,15 +8275,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8222,33 +8312,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8372,6 +8435,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8505,6 +8595,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8514,6 +8610,9 @@ msgstr ""
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8658,6 +8757,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9697,9 +9799,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12836,15 +12935,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -12950,6 +13040,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13199,14 +13292,6 @@ 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 ""
 
@@ -13270,9 +13355,6 @@ msgid ""
 "{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 ""
 
@@ -14504,9 +14586,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14603,10 +14682,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15194,6 +15269,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17231,7 +17310,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23057,6 +23137,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23115,6 +23198,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23196,6 +23282,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23217,9 +23318,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23814,6 +23912,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24225,6 +24326,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24668,6 +24772,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25871,6 +25978,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26051,10 +26161,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26102,9 +26208,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26448,11 +26551,6 @@ msgid ""
 "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 ""
 
@@ -27063,13 +27161,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28366,6 +28464,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28381,77 +28617,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28502,27 +28743,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28663,160 +28883,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28866,17 +29023,6 @@ 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 ""
 
@@ -29313,18 +29459,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35070,26 +35204,6 @@ 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 ""
 
@@ -35258,6 +35372,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/ky.po b/i18n/po/ky.po
index 7ec6373..2c4a7de 100644
--- a/i18n/po/ky.po
+++ b/i18n/po/ky.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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
 "PO-Revision-Date: 2012-12-18 02:36+0000\n"
 "Last-Translator: SimpleLeon <Unknown>\n"
 "Language-Team: Kirghiz <ky 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: 2017-09-03 04:49+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:48+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
 msgstr ""
@@ -386,6 +386,34 @@ msgstr ""
 msgid "Delete selected objects."
 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 "Delete Layer"
 msgstr ""
 
@@ -1292,29 +1320,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2723,34 +2737,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2782,6 +2768,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2901,6 +2910,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3008,6 +3029,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr ""
 
@@ -3051,6 +3075,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3687,6 +3714,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4727,9 +4808,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4775,6 +4853,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr ""
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4796,9 +4877,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -4999,6 +5077,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5251,6 +5337,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7033,6 +7123,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7255,9 +7348,6 @@ 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."
@@ -8185,15 +8275,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8222,33 +8312,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8372,6 +8435,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8505,6 +8595,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8514,6 +8610,9 @@ msgstr ""
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8658,6 +8757,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9697,9 +9799,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12836,15 +12935,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -12950,6 +13040,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13199,14 +13292,6 @@ 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 ""
 
@@ -13270,9 +13355,6 @@ msgid ""
 "{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 ""
 
@@ -14504,9 +14586,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14603,10 +14682,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15194,6 +15269,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17231,7 +17310,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23057,6 +23137,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23115,6 +23198,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23196,6 +23282,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23217,9 +23318,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23814,6 +23912,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24225,6 +24326,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24668,6 +24772,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25871,6 +25978,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26051,10 +26161,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26102,9 +26208,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26448,11 +26551,6 @@ msgid ""
 "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 ""
 
@@ -27063,13 +27161,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28366,6 +28464,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28381,77 +28617,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28502,27 +28743,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28663,160 +28883,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28866,17 +29023,6 @@ 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 ""
 
@@ -29313,18 +29459,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35070,26 +35204,6 @@ 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 ""
 
@@ -35258,6 +35372,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/lb.po b/i18n/po/lb.po
index aa74bfe..1b3a5a6 100644
--- a/i18n/po/lb.po
+++ b/i18n/po/lb.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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
 "PO-Revision-Date: 2016-04-28 18:56+0000\n"
 "Last-Translator: Charel <ceilenbecker at gmail.com>\n"
 "Language-Team: Luxembourgish <lb 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: 2017-09-03 04:52+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:50+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
 msgstr "{0}:D''Optioun \"{1}\" ass net eendeiteg"
@@ -386,6 +386,34 @@ msgstr ""
 msgid "Delete selected objects."
 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 "Delete Layer"
 msgstr ""
 
@@ -1292,29 +1320,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2723,34 +2737,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2782,6 +2768,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2901,6 +2910,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3008,6 +3029,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr ""
 
@@ -3051,6 +3075,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3687,6 +3714,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4727,9 +4808,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4775,6 +4853,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr ""
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4796,9 +4877,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -4999,6 +5077,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5251,6 +5337,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7033,6 +7123,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7255,9 +7348,6 @@ 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."
@@ -8185,15 +8275,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8222,33 +8312,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8372,6 +8435,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8505,6 +8595,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8514,6 +8610,9 @@ msgstr ""
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8658,6 +8757,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9697,9 +9799,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12836,15 +12935,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -12950,6 +13040,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13199,14 +13292,6 @@ 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 ""
 
@@ -13270,9 +13355,6 @@ msgid ""
 "{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 ""
 
@@ -14504,9 +14586,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14603,10 +14682,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15194,6 +15269,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17231,7 +17310,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23057,6 +23137,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23115,6 +23198,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23196,6 +23282,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23217,9 +23318,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23814,6 +23912,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24225,6 +24326,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24668,6 +24772,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25871,6 +25978,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26051,10 +26161,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26102,9 +26208,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26448,11 +26551,6 @@ msgid ""
 "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 ""
 
@@ -27063,13 +27161,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28366,6 +28464,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28381,77 +28617,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28502,27 +28743,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28663,160 +28883,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28866,17 +29023,6 @@ 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 ""
 
@@ -29313,18 +29459,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35070,26 +35204,6 @@ 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 ""
 
@@ -35258,6 +35372,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/lo.po b/i18n/po/lo.po
index b393a20..d4da53a 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+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: 2017-09-03 04:51+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:49+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -387,6 +387,34 @@ msgstr ""
 msgid "Delete selected objects."
 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 "Delete Layer"
 msgstr ""
 
@@ -1293,29 +1321,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2724,34 +2738,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2783,6 +2769,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2902,6 +2911,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3009,6 +3030,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr "ທີ່ບໍ່ມີການບັນທຶກ"
 
@@ -3052,6 +3076,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3688,6 +3715,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4728,9 +4809,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4776,6 +4854,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr ""
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4797,9 +4878,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -5000,6 +5078,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5252,6 +5338,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7034,6 +7124,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7256,9 +7349,6 @@ 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."
@@ -8186,15 +8276,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8223,33 +8313,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8373,6 +8436,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8506,6 +8596,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8515,6 +8611,9 @@ msgstr ""
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8659,6 +8758,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9698,9 +9800,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12837,15 +12936,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -12951,6 +13041,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13200,14 +13293,6 @@ 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 ""
 
@@ -13271,9 +13356,6 @@ msgid ""
 "{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 ""
 
@@ -14505,9 +14587,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14604,10 +14683,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15195,6 +15270,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17232,7 +17311,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23058,6 +23138,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23116,6 +23199,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23197,6 +23283,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23218,9 +23319,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23815,6 +23913,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24226,6 +24327,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24669,6 +24773,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25872,6 +25979,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26052,10 +26162,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26103,9 +26209,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26449,11 +26552,6 @@ msgid ""
 "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 ""
 
@@ -27064,13 +27162,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28367,6 +28465,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28382,77 +28618,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28503,27 +28744,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28664,160 +28884,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28867,17 +29024,6 @@ 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 ""
 
@@ -29314,18 +29460,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35071,26 +35205,6 @@ 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 ""
 
@@ -35259,6 +35373,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/lt.po b/i18n/po/lt.po
index e052094..83ad004 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: 2017-09-02 22:59+0200\n"
-"PO-Revision-Date: 2017-08-26 08:13+0000\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
+"PO-Revision-Date: 2017-10-02 19:29+0000\n"
 "Last-Translator: Aurimas Fišeras <Unknown>\n"
 "Language-Team: Lithuanian <lt 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%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Launchpad-Export-Date: 2017-09-03 04:52+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-10-03 04:33+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: lt\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -407,6 +407,49 @@ msgstr "Pašalinti"
 msgid "Delete selected objects."
 msgstr "Šalinti pažymėtus objektus."
 
+msgid "Delete confirmation"
+msgstr "Šalinimo patvirtinimas"
+
+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 ""
+"Ruošiatės pašalinti taškus už jūsų atsiųsto ploto ribų.<br>Dėl to gali kilti "
+"problemų su kitais objektais (kurių jūs nematote), kurie gali naudoti tuos "
+"taškus.<br>Ar tikrai norite pašalinti?"
+
+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 ""
+"Ruošiatės pašalinti nepilnus objektus.<br>Tai sukels problemų, nes nematote "
+"tikro objekto.<br>Ar tikrai norite pašalinti?"
+
+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] ""
+"Ruošiatės pašalinti {0} ryšį: {1}<br/>Toks žingsnis retai reikalingas ir "
+"nėra lengvai atstatomas po to, kai pakeitimai išsiunčiami į serverį.<br/>Ar "
+"tikrai norite pašalinti?"
+msgstr[1] ""
+"Ruošiatės pašalinti {0} ryšius: {1}<br/>Toks žingsnis retai reikalingas ir "
+"nėra lengvai atstatomas po to, kai pakeitimai išsiunčiami į serverį.<br/>Ar "
+"tikrai norite pašalinti?"
+msgstr[2] ""
+"Ruošiatės pašalinti {0} ryšių: {1}<br/>Toks žingsnis retai reikalingas ir "
+"nėra lengvai atstatomas po to, kai pakeitimai išsiunčiami į serverį.<br/>Ar "
+"tikrai norite pašalinti?"
+
+msgid "Delete relation?"
+msgstr "Pašalinti ryšį?"
+
 msgid "Delete Layer"
 msgstr "Pašalinti sluoksnį"
 
@@ -441,7 +484,7 @@ msgid "Download data"
 msgstr "Atsiųsti duomenis"
 
 msgid "Download map data from a server of your choice"
-msgstr ""
+msgstr "Atsiųsti žemėlapio duomenis iš pasirinkto serverio"
 
 msgid ""
 "<html>This action will require {0} individual<br>download requests. Do you "
@@ -1395,38 +1438,17 @@ msgstr " [id: {0}]"
 msgid "Segment {0}: {1}"
 msgstr "Segmentas {0}: {1}"
 
-msgid "You must select two or more nodes to split a circular way."
-msgstr "Parinkite du ar daugiau taškų norėdami perskirti apskritą kelią."
-
-msgid ""
-"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
-"middle of the way.)"
-msgstr ""
-"Kelią negalimą perskirti ties parinktais taškais. (Užuomina: parinkite "
-"taškus kelio vidurį.)"
-
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
-msgstr ""
-"Rolėmis paremta ryšio narystė nukopijuota visiems naujiems "
-"keliams.<br>Turėtumėte patikrinti ir jei reikia - pataisyti."
+msgid "Search preset"
+msgstr "Ieškoti ruošinių"
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
-msgstr ""
-"Ryšio narystė nukopijuota visiems naujiems keliams.<br>Turėtumėte patikrinti "
-"ir jei reikia - pataisyti."
+msgid "Show preset search dialog"
+msgstr "Rodyti ruošinių paieškos dialogo langą"
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] "Dalinti kelią {0} į {1} dalį"
-msgstr[1] "Dalinti kelią {0} į {1} dalis"
-msgstr[2] "Dalinti kelią {0} į {1} dalių"
+msgid "Search presets"
+msgstr "Paieškos ruošiniai"
 
 msgid "Discourage upload"
-msgstr ""
+msgstr "Neskatinti išsiuntimo"
 
 msgid "UnGlue Ways"
 msgstr "Atjungti kelius"
@@ -1642,7 +1664,7 @@ msgstr ""
 "konflikte.<br>Visų pirma turite jį išspręsti.</html>"
 
 msgid "Upload discouraged"
-msgstr "Įkėlimas neskatinamas"
+msgstr "Išsiuntimas neskatinamas"
 
 msgid ""
 "You are about to upload data from the layer ''{0}''.<br /><br />Sending data "
@@ -2369,6 +2391,8 @@ msgid ""
 "{0}Add selection to relation{1}: Verify every single relation to avoid "
 "damage!"
 msgstr ""
+"{0}Pridėti pažymėjimą į ryšį{1}: Patikrinkite kiekvieną ryšį pažeidimams "
+"išvengti!"
 
 msgid "Add selection to {0} relation"
 msgid_plural "Add selection to {0} relations"
@@ -2609,7 +2633,7 @@ msgid "objects"
 msgstr "objektai"
 
 msgid "all nodes"
-msgstr ""
+msgstr "visi taškai"
 
 msgid "all ways"
 msgstr "visi keliai"
@@ -2688,7 +2712,7 @@ msgid "all incomplete objects"
 msgstr "visi nebaigti objektai"
 
 msgid "all deleted objects (checkbox <b>{0}</b> must be enabled)"
-msgstr ""
+msgstr "visi pašalinti taškai (langelis <b>{0}</b> privalo būti pažymėtas)"
 
 msgid "related objects"
 msgstr "susiję objektai"
@@ -2867,7 +2891,7 @@ msgid "Change relation {0}"
 msgstr "Keisti ryšį {0}"
 
 msgid "Change nodes of {0}"
-msgstr ""
+msgstr "Keisti {0} taškus"
 
 msgid "Remove \"{0}\" for node ''{1}''"
 msgstr "Išimti „{0}“ taškui „{1}“"
@@ -2962,49 +2986,6 @@ msgstr[0] "Šalinti {0} ryšį"
 msgstr[1] "Šalinti {0} ryšius"
 msgstr[2] "Šalinti {0} ryšių"
 
-msgid "Delete confirmation"
-msgstr "Šalinimo patvirtinimas"
-
-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 ""
-"Ruošiatės pašalinti taškus už jūsų atsiųsto ploto ribų.<br>Dėl to gali kilti "
-"problemų su kitais objektais (kurių jūs nematote), kurie gali naudoti tuos "
-"taškus.<br>Ar tikrai norite pašalinti?"
-
-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 ""
-"Ruošiatės pašalinti nepilnus objektus.<br>Tai sukels problemų, nes nematote "
-"tikro objekto.<br>Ar tikrai norite pašalinti?"
-
-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] ""
-"Ruošiatės pašalinti {0} ryšį: {1}<br/>Toks žingsnis retai reikalingas ir "
-"nėra lengvai atstatomas po to, kai pakeitimai išsiunčiami į serverį.<br/>Ar "
-"tikrai norite pašalinti?"
-msgstr[1] ""
-"Ruošiatės pašalinti {0} ryšius: {1}<br/>Toks žingsnis retai reikalingas ir "
-"nėra lengvai atstatomas po to, kai pakeitimai išsiunčiami į serverį.<br/>Ar "
-"tikrai norite pašalinti?"
-msgstr[2] ""
-"Ruošiatės pašalinti {0} ryšių: {1}<br/>Toks žingsnis retai reikalingas ir "
-"nėra lengvai atstatomas po to, kai pakeitimai išsiunčiami į serverį.<br/>Ar "
-"tikrai norite pašalinti?"
-
-msgid "Delete relation?"
-msgstr "Pašalinti ryšį?"
-
 msgid "Move {0} node"
 msgid_plural "Move {0} nodes"
 msgstr[0] "Perkelti {0} tašką"
@@ -3041,6 +3022,36 @@ msgstr[2] "Pažymėta {0} objektų"
 msgid "Sequence: {0}"
 msgstr "Seka: {0}"
 
+msgid "You must select two or more nodes to split a circular way."
+msgstr "Parinkite du ar daugiau taškų norėdami perskirti apskritą kelią."
+
+msgid ""
+"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
+"middle of the way.)"
+msgstr ""
+"Kelią negalimą perskirti ties parinktais taškais. (Užuomina: parinkite "
+"taškus kelio vidurį.)"
+
+msgid ""
+"A role based relation membership was copied to all new ways.<br>You should "
+"verify this and correct it when necessary."
+msgstr ""
+"Rolėmis paremta ryšio narystė nukopijuota visiems naujiems "
+"keliams.<br>Turėtumėte patikrinti ir jei reikia - pataisyti."
+
+msgid ""
+"A relation membership was copied to all new ways.<br>You should verify this "
+"and correct it when necessary."
+msgstr ""
+"Ryšio narystė nukopijuota visiems naujiems keliams.<br>Turėtumėte patikrinti "
+"ir jei reikia - pataisyti."
+
+msgid "Split way {0} into {1} part"
+msgid_plural "Split way {0} into {1} parts"
+msgstr[0] "Dalinti kelią {0} į {1} dalį"
+msgstr[1] "Dalinti kelią {0} į {1} dalis"
+msgstr[2] "Dalinti kelią {0} į {1} dalių"
+
 msgid "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] "Transformuoti {0} tašką"
@@ -3180,6 +3191,19 @@ msgstr "Netinkama platumos reikšmė „{0}“"
 msgid "Illegal longitude value ''{0}''"
 msgstr "Netinkama ilgumos reikšmė „{0}“"
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr "Nepavyko sukurti trūkstamo nustatymų aplanko: {0}"
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr "<html>Nepavyko sukurti trūkstamo nustatymų aplanko: {0}</html>"
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr "Nepavyko sukurti trūkstamo naudotojo duomenų aplanko: {0}"
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+"<html>Nepavyko sukurti trūkstamo naudotojo duomenų aplanko: {0}</html>"
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr "Nepavyko sukurti trūkstamą podėlio aplanką: {0}"
 
@@ -3307,6 +3331,9 @@ msgstr "Britiška"
 msgid "Nautical Mile"
 msgstr "Jūrmylės"
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr "Tikėtasi netuščios parametro „{0}“ reikšmės, gauta „{1}“"
+
 msgid "UNKNOWN"
 msgstr "NEŽINOMAS"
 
@@ -3350,26 +3377,30 @@ msgctxt "compass"
 msgid "E"
 msgstr "R"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr "Nepavyko išnagrinėti kaip koordinatės reikšmės: „{0}“"
+
 msgid "Date of imagery: {0}"
-msgstr ""
+msgstr "Vaizdų data: {0}"
 
 msgid "This imagery is marked as best in this region in other editors."
 msgstr ""
+"Šie vaizdai kitose rengyklėse yra pažymėti kaip geriausi šiam regionui."
 
 msgid "{0} mirror server {1}"
-msgstr ""
+msgstr "{0} dubliuojantis serveris {1}"
 
 msgid "{0} mirror server"
-msgstr ""
+msgstr "{0} dubliuojantis serveris"
 
 msgid "Update default entries"
 msgstr "Atnaujinti numatytuosius įrašus"
 
 msgid "Update imagery ''{0}''"
-msgstr ""
+msgstr "Atnaujinti vaizdus „{0}“"
 
 msgid "Drop old imagery ''{0}''"
-msgstr ""
+msgstr "Pašalinti senus vaizdus „{0}“"
 
 msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr "Projekcija „{0}“ nerasta, žymelė „{1}“ nepanaudojama"
@@ -3403,7 +3434,7 @@ msgid "Matrix set identifier"
 msgstr "Matricos rinkinio identifikatorius"
 
 msgid "No default layer selected, choosing first layer."
-msgstr ""
+msgstr "Nepažymėtas numatytasis sluoksnis, parenkamas pirmasis sluoksnis."
 
 msgid "No layers defined by getCapabilities document: {0}"
 msgstr "Jokie sluoksniai nebuvo apibrėžti getCapabilities dokumento: {0}"
@@ -3418,6 +3449,8 @@ msgid ""
 "Can''t use layer {0} because no supported formats where found. Layer is "
 "available in formats: {1}"
 msgstr ""
+"Negalima naudoti sluoksnio {0}, nes nerasta palaikomų formatų. Sluoksnis "
+"prieinamas šiais formatais: {1}"
 
 msgid ""
 "Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
@@ -3648,10 +3681,10 @@ msgid "<xor>"
 msgstr "<xor>"
 
 msgid "<left parent>"
-msgstr "<kairys tėvas>"
+msgstr "<kairys skliaustas>"
 
 msgid "<right parent>"
-msgstr "<dešinys tėvas>"
+msgstr "<dešinys skliaustas>"
 
 msgid "<colon>"
 msgstr "<kabliataškis>"
@@ -3719,7 +3752,7 @@ msgid "Range of numbers expected"
 msgstr "Tikimasi skaičių intervalo"
 
 msgid "Unknown preset name: "
-msgstr ""
+msgstr "Nežinomas ruošinio vardas "
 
 msgid "Failed to parse MapCSS selector"
 msgstr "Nepavyko išnagrinėti MapCSS parinkiklio"
@@ -4035,6 +4068,65 @@ msgstr ""
 msgid "Custom Projection"
 msgstr "Sava projekcija"
 
+msgid "Error: {0}"
+msgstr "Klaida: {0}"
+
+msgid "JOSM projection command line interface"
+msgstr "JOSM projekcijų tekstinė sąsaja"
+
+msgid "Description"
+msgstr "Aprašas"
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr "Konvertuoja koordinates iš vienos koordinačių sistemos į kitą."
+
+msgid "Options"
+msgstr "Parametrai"
+
+msgid "Show this help"
+msgstr "Rodyti šį žinyną"
+
+msgid "Switch input and output crs"
+msgstr "Sukeisti įvesties ir išvesties koordinačių sistemas"
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr "Pakeisti įvesties koordinačių tvarką (rytai/šiaurė, ilg./plat.)"
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr "Pakeisti išvesties koordinačių tvarką (rytai/šiaurė, ilg./plat.)"
+
+msgid "<crs>"
+msgstr "<crs>"
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+"Įvesties ir išvesties koordinačių sistemos formatas yra panašus į PROJ.4 "
+"programos formatą."
+
+msgid "[file]"
+msgstr "[failas]"
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+"Skaito įvesties duomenis iš vieno ar daugiau failų išvardintų kaip "
+"poziciniai argumentai. Kai failai nepateikti, arba failo vardas yra „-“, "
+"duomenys skaitomi iš standartinės įvesties."
+
+msgid "Examples"
+msgstr "Pavyzdžiai"
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr "Tikėtasi dviejų koordinačių, atskirtų tarpu, „{1}“ rasta {0}"
+
+msgid "Unable to parse number ''{0}''"
+msgstr "Nepavyko išanalizuoti skaičiaus „{0}“"
+
 msgid "GRS80"
 msgstr "GRS80"
 
@@ -4210,7 +4302,7 @@ msgid "Reversed coastline"
 msgstr "Atbula kranto linija"
 
 msgid "invalid coastline"
-msgstr ""
+msgstr "netinkamos kranto linijos"
 
 msgid "Conditional Keys"
 msgstr "Sąlyginiai raktai"
@@ -4249,7 +4341,7 @@ msgid "Crossing barriers"
 msgstr "Susikertantys barjerai"
 
 msgid "Self crossing"
-msgstr ""
+msgstr "Save kertantys"
 
 msgid "Self-crossing ways"
 msgstr "Save kertantys keliai"
@@ -4429,7 +4521,7 @@ msgid "Area style way is not closed"
 msgstr "Ploto tipo kelias neuždaras"
 
 msgid "No outer way for boundary"
-msgstr ""
+msgstr "Nėra išorinio kelio ribai"
 
 msgid "No outer way for multipolygon"
 msgstr "Multipoligonas neturi išorinio kelio"
@@ -4462,8 +4554,8 @@ msgid ""
 "With the currently used mappaint style(s) the style for outer way mismatches "
 "the area style"
 msgstr ""
-"Su dabar naudojamu mappaint stiliumi, išorinio kelio stilius neatitinka "
-"ploto stiliaus"
+"Su dabar naudojamu mappaint stiliumi išorinio kelio stilius neatitinka ploto "
+"stiliaus"
 
 msgid "Area style on outer way"
 msgstr "Ploto stilius išoriniame kelyje"
@@ -4472,13 +4564,13 @@ msgid "Multipolygon is not closed"
 msgstr "Neuždaras multipoligonas"
 
 msgid "Multipolygon rings share node(s)"
-msgstr ""
+msgstr "Multipoligono žiedai dalinasi taškais"
 
 msgid "Intersection between multipolygon ways"
 msgstr "Multipoligono kelių susikirtimas"
 
 msgid "Multipolygon rings are equal"
-msgstr ""
+msgstr "Multipoligono žiedai vienodi"
 
 msgid "Role for ''{0}'' should be ''{1}''"
 msgstr "„{0}“ rolė turėtų būti „{1}“"
@@ -4487,7 +4579,7 @@ msgid "Multipolygon inner way is outside"
 msgstr "Multipoligono vidinis kelias yra išorėje"
 
 msgid "Multipolygon ring contains segments twice"
-msgstr ""
+msgstr "Multipoligono žiedas turi segmentą du kartus"
 
 msgid "Multipolygon outer way shares segment(s) with other ring"
 msgstr "Multipoligono išorinis kelias dalinasi segmentu(-ais) su kitu žiedu"
@@ -4496,16 +4588,16 @@ msgid "No useful role for multipolygon member"
 msgstr "Nėra naudingos multipoligono nario rolės"
 
 msgid "Non-Way in boundary"
-msgstr ""
+msgstr "Ne kelias riboje"
 
 msgid "Non-Way in multipolygon"
 msgstr "Ne kelias multipoligone"
 
 msgid "Multipolygon member(s) repeated with different role"
-msgstr ""
+msgstr "Multipoligono nariai pakartoti su skirtingomis rolėmis"
 
 msgid "Multipolygon member(s) repeated with same role"
-msgstr ""
+msgstr "Multipoligono nariai pakartoti su vienodomis rolėmis"
 
 msgid "Missing name:* translation"
 msgstr "Trūksta name:* vertimo"
@@ -4609,7 +4701,7 @@ msgid "Route relation contains a gap"
 msgstr "Maršruto ryšyje yra tarpas"
 
 msgid "Stop position not part of route"
-msgstr ""
+msgstr "Sustojimo pozicija nėra maršruto dalis"
 
 msgid "Role verification problem"
 msgstr "Rolės tikrinimo problema"
@@ -4633,30 +4725,32 @@ msgstr "Ryšys yra tuščias"
 
 msgid ""
 "Role of relation member does not match expression ''{0}'' in template {1}"
-msgstr ""
+msgstr "Ryšio nario rolė neatitinka reiškinio „{0}“ šablone {1}"
 
 msgid ""
 "Type ''{0}'' of relation member with role ''{1}'' does not match accepted "
 "types ''{2}'' in template {3}"
 msgstr ""
+"Ryšio nario tipas „{0}“ su role „{1}“ neatitinka priimtinų tipų „{2}“ "
+"šablone {3}"
 
 msgid "<empty>"
 msgstr "<tuščias>"
 
 msgid "Role ''{0}'' unknown in templates ''{1}''"
-msgstr ""
+msgstr "Rolė „{0}“ nežinoma šablonuose {1}"
 
 msgid "Empty role type found when expecting one of ''{0}''"
-msgstr ""
+msgstr "Rastas tuščias rolės tipas kai tikimasi vieno iš „{0}"
 
 msgid "Role ''{0}'' missing"
-msgstr ""
+msgstr "Trūksta rolės „{0}“"
 
 msgid "Number of ''{0}'' roles too low ({1})"
-msgstr ""
+msgstr "Rolių „{0}“ skaičius per mažas ({1})"
 
 msgid "Number of ''{0}'' roles too high ({1})"
-msgstr ""
+msgstr "Rolių „{0}“ skaičius per didelis ({1})"
 
 msgid "Self-intersecting ways"
 msgstr "Save kertantys keliai"
@@ -5058,7 +5152,7 @@ msgid "Access to redacted version ''{0}'' of {1} {2} is forbidden."
 msgstr "Prieiga prie pašalintos {1} {2} versijos „{0}“ yra uždrausta."
 
 msgid "Authorisation Failed"
-msgstr "Autorizacija nepavyko"
+msgstr "Prieigos suteikimas nepavyko"
 
 msgid "Client Time Out"
 msgstr "Klientui baigėsi laikas"
@@ -5107,9 +5201,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr "Poslinkis"
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr "Tikėtasi netuščios parametro „{0}“ reikšmės, gauta „{1}“"
-
 msgid "Outdated Java version"
 msgstr "Pasenusi Java versija"
 
@@ -5136,12 +5227,14 @@ msgid ""
 "You may face critical Java bugs; we highly recommend you to update to Java "
 "{0}."
 msgstr ""
+"Galite susidurti su kritinėmis Java klaidomis; rekomenduojame atnaujinti į "
+"Java {0}."
 
 msgid "Would you like to update now ?"
 msgstr "Ar norite atnaujinti dabar?"
 
 msgid "Starting file watcher"
-msgstr ""
+msgstr "Pradedamas failų stebėjimas"
 
 msgid "Executing platform startup hook"
 msgstr "Vykdomas platformos paleidimas"
@@ -5158,6 +5251,9 @@ msgstr "Inicijuojami vidiniai ribų duomenys"
 msgid "Initializing OSM API"
 msgstr "Inicijuojamas OSM API"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr "Pašalintas sluoksnis {0} nes jo neleidžia konfiguruotas API."
+
 msgid "Initializing internal traffic data"
 msgstr "Inicijuojami vidiniai eismo duomenys"
 
@@ -5179,9 +5275,6 @@ msgstr "naudojimas"
 msgid "options"
 msgstr "parinktys"
 
-msgid "Show this help"
-msgstr "Rodyti šį žinyną"
-
 msgid "Standard unix geometry argument"
 msgstr "Standartinis unix geometrijos argumentas"
 
@@ -5196,7 +5289,7 @@ msgstr ""
 "Atverti failą (bet koks failo tipas, kurį galima atidaryti su Failas/Atverti)"
 
 msgid "Download the bounding box as raw GPS"
-msgstr "Atsiųsti apibrėžimą stačiakampių kaip pradinį GPS"
+msgstr "Atsiųsti apibrėžimą stačiakampiu kaip pradinį GPS"
 
 msgid "Download the location at the URL (with lat=x&lon=y&zoom=z) as raw GPS"
 msgstr "Atsiųsti vietą iš URL (su lat=x&lon=y&zoom=z) kaip pradinį GPS"
@@ -5226,7 +5319,7 @@ msgid "Print debugging messages to console"
 msgstr "Spausdinti derinimo pranešimus į konsolę"
 
 msgid "Skip loading plugins"
-msgstr "Nutraukti priedų įkėlimą"
+msgstr "Praleisti papildinių įkėlimą"
 
 msgid "Disable access to the given resource(s), separated by comma"
 msgstr "Išjungti prieigą prie nurodytų resursų, atskirtų kableliu"
@@ -5235,7 +5328,7 @@ msgid "options provided as Java system properties"
 msgstr "parinktys, pateiktos kaip Java sistemos savybės"
 
 msgid "Change the JOSM directory name"
-msgstr ""
+msgstr "Pakeisti JOSM aplanko vardą"
 
 msgid "/PATH/TO/JOSM/PREF    "
 msgstr "/KELIAS/IKI/JOSM/NUSTATYMŲ    "
@@ -5244,19 +5337,19 @@ msgid "Set the preferences directory"
 msgstr "Nurodyti nustatymų aplanką"
 
 msgid "Default: {0}"
-msgstr ""
+msgstr "Numatyta: {0}"
 
 msgid "/PATH/TO/JOSM/USERDATA"
 msgstr "/KELIAS/IKI/JOSM/NAUDOTOJO_DUOMENŲ"
 
 msgid "Set the user data directory"
-msgstr "Nurodykite naudotojo duomenų aplanką"
+msgstr "Nustatyti naudotojo duomenų aplanką"
 
 msgid "/PATH/TO/JOSM/CACHE   "
 msgstr "/KELIAS/IKI/JOSM/PODĖLIO   "
 
 msgid "Set the cache directory"
-msgstr "Nurodykite podėlio aplanką"
+msgstr "Nustatyti podėlio aplanką"
 
 msgid "/PATH/TO/JOSM/HOMEDIR "
 msgstr "/KELIAS/IKI/JOSM/NAMŲ_APLANKO "
@@ -5265,6 +5358,8 @@ msgid ""
 "Set the preferences+data+cache directory (cache directory will be "
 "josm.home/cache)"
 msgstr ""
+"Nustatyti nuostatų+duomenų+podėlio aplanką (podėlio aplankas bus "
+"josm.home/cache)"
 
 msgid ""
 "-Djosm.home has lower precedence, i.e. the specific setting overrides the "
@@ -5298,7 +5393,7 @@ msgstr ""
 "Įsitikinkite, kad įkeliate kokius nors duomenis, jei naudojate --selection"
 
 msgid "Log level is at {0} ({1}, {2})"
-msgstr ""
+msgstr "Žurnalo lygis yra {0} ({1}, {2})"
 
 msgid "Plugin loading skipped"
 msgstr "Priedų įkėlimas praleistas"
@@ -5410,6 +5505,15 @@ 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?"
 
+msgid "You have {0} unread message."
+msgid_plural "You have {0} unread messages."
+msgstr[0] "Turite {0} neperskaitytą pranešimą."
+msgstr[1] "Turite {0} neperskaitytus pranešimus."
+msgstr[2] "Turite {0} neperskaitytų pranešimų."
+
+msgid "Click here to see your inbox."
+msgstr "Spauskite čia gautiems pranešimams peržiūrėti"
+
 msgctxt "menu"
 msgid "File"
 msgstr "Failas"
@@ -5673,6 +5777,12 @@ msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 "Dabartinė reikšmė nėra tinkamas kaladėlių indeksas nurodytame mastelyje"
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+"Nepavyko sukurti pranešimo apie klaidą. Praneškite rankiniu būdu šioje "
+"svetainėje:"
+
 msgid "You have encountered a bug in JOSM"
 msgstr "Susidūrėte su JOSM klaida"
 
@@ -5734,7 +5844,7 @@ msgid "Your current version of JOSM is {0}"
 msgstr "Dabartinė JOSM versija yra {0}"
 
 msgid "JOSM is searching for updates..."
-msgstr ""
+msgstr "JOSM ieško atnaujinimų..."
 
 msgid "An error occured while checking if your JOSM instance is up to date."
 msgstr "Įvyko klaida tikrinant ar JOSM yra naujausios versijos."
@@ -5743,7 +5853,7 @@ msgid "JOSM is up to date."
 msgstr "JOSM yra naujausios versijos."
 
 msgid "JOSM is out of date. The current version is {0}. Try updating JOSM."
-msgstr ""
+msgstr "JOSM yra pasenęs. Dabartinė versija yra {0}. Atnaujinkite JOSM."
 
 msgid ""
 "Before you file a bug report make sure you have updated to the latest "
@@ -6184,6 +6294,7 @@ msgstr "Primityvas"
 
 msgid "Merged members not frozen yet. Cannot build resolution command"
 msgstr ""
+"Sulieti nariai dar ne įšaldyti. Negalima sukonstruoti sprendimo komandos"
 
 msgid "<undefined>"
 msgstr "<neapibrėžta>"
@@ -7223,7 +7334,7 @@ msgid "Sort"
 msgstr "Rikiuoti"
 
 msgid "Open the note in an external browser"
-msgstr ""
+msgstr "Atverti pastabą išorinėje naršyklėje"
 
 msgid "Object type:"
 msgstr "Objekto tipas:"
@@ -7471,12 +7582,13 @@ msgid "Download the content of the selected changesets from the server"
 msgstr "Atsiųsti pažymėtų pakeitimų turinį iš serverio"
 
 msgid "Download changed objects"
-msgstr ""
+msgstr "Atsiųsti pakeistus objektus"
 
 msgid ""
 "Download the current version of the changed objects in the selected "
 "changesets"
 msgstr ""
+"Atsiųsti pakeistų objektų dabartinę versiją pažymėtuose pakeitimuose."
 
 msgid "My changesets"
 msgstr "Mano pakeitimai"
@@ -7612,6 +7724,9 @@ msgstr "Išimti pakeitimą detalaus rodinio kortelėje iš vietinio podėlio"
 msgid "Update the changeset from the OSM server"
 msgstr "Atnaujinti pakeitimą iš OSM serverio"
 
+msgid "View changeset"
+msgstr "Peržiūrėti pakeitimą"
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7865,9 +7980,6 @@ msgstr "URL: "
 msgid "Please enter or paste an URL to retrieve changesets from the OSM API."
 msgstr "Prašome įvesti arba įdėti URL, kad gautumėte pakeitimus iš OSM API."
 
-msgid "Examples"
-msgstr "Pavyzdžiai"
-
 msgid ""
 "Note that changeset queries are currently always submitted to ''{0}'', "
 "regardless of the host, port and path of the URL entered below."
@@ -8097,7 +8209,7 @@ msgid "Paste the value of the selected tag from clipboard"
 msgstr "Įdėti pažymėtos žymos reikšmę iš iškarpinės"
 
 msgid "Copy Value"
-msgstr "Kopijuoti Vertę"
+msgstr "Kopijuoti reikšmę"
 
 msgid "Copy the value of the selected tag to clipboard"
 msgstr "Kopijuoti pažymėtos žymos reikšmę į iškarpinę"
@@ -8109,7 +8221,7 @@ msgid "Copy the key and value of the selected tag(s) to clipboard"
 msgstr "Kopijuoti pažymėtos(ų) žymos(ų) raktus ir reikšmes į iškarpinę"
 
 msgid "Copy all Keys/Values"
-msgstr "Kopijuoti visus Raktus/Vertes"
+msgstr "Kopijuoti visus raktus/reikšmes"
 
 msgid "Copy the key and value of all the tags to clipboard"
 msgstr "Kopijuoti visų žymų raktus ir reikšmes į iškarpinę"
@@ -8866,13 +8978,6 @@ msgstr "Atsiuntimo plotas tinkamas, dydis tikriausiai tinkamas serveriui"
 msgid "Download from Overpass API"
 msgstr "Atsiųsti iš Overpass API"
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
-msgstr ""
-"Sukurti Overpass užklausą naudojant Overpass Turbo užklausų vediklio įrankį"
-
-msgid "Query Wizard"
-msgstr "Užklausų vediklis"
-
 msgid ""
 "Place your Overpass query below or generate one using the Overpass Turbo "
 "Query Wizard"
@@ -8880,6 +8985,13 @@ msgstr ""
 "Įdėkite savo Overpass užklausą žemiau arba sugeneruokite ją naudodami "
 "Overpass Turbo užklausų vediklį"
 
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgstr ""
+"Sukurti Overpass užklausą naudojant Overpass Turbo užklausų vediklio įrankį"
+
+msgid "Query Wizard"
+msgstr "Užklausų vediklis"
+
 msgid "Your saved queries:"
 msgstr "Jūsų išsaugotos užklausos:"
 
@@ -8908,33 +9020,6 @@ msgstr "Pašalinti pasirinktą fragmentą"
 msgid "Edit selected snippet"
 msgstr "Redaguoti pasirinktą fragmentą"
 
-msgid "history"
-msgstr "istorija"
-
-msgid "Please select an item first"
-msgstr "Iš pradžių pasirinkite elementą"
-
-msgid "Edit item"
-msgstr "Redaguoti elementą"
-
-msgid "Add snippet"
-msgstr "Pridėti fragmentą"
-
-msgid "Query cannot be empty"
-msgstr "Užklausa negali būti tuščia"
-
-msgid "This name can be used for the item"
-msgstr "Šis vardas gali būti naudojamas elementui"
-
-msgid "Item with this name already exists"
-msgstr "Elementas su šiuo vardu jau egzistuoja"
-
-msgid "The item cannot be created with provided name"
-msgstr "Elementas su pateiktu vardu negali būti sukurtas"
-
-msgid "The item cannot be created with an empty query"
-msgstr "Elementas negali būti sukurtas su tuščia užklausa"
-
 msgid "Overpass Turbo Query Wizard"
 msgstr "Overpass Turbo užklausų vediklis"
 
@@ -9074,6 +9159,33 @@ msgstr "Stumdomas žemėlapis"
 msgid "Tile Numbers"
 msgstr "Kaladėlių numeriai"
 
+msgid "history"
+msgstr "istorija"
+
+msgid "Please select an item first"
+msgstr "Iš pradžių pasirinkite elementą"
+
+msgid "Edit item"
+msgstr "Redaguoti elementą"
+
+msgid "Add snippet"
+msgstr "Pridėti fragmentą"
+
+msgid "Query cannot be empty"
+msgstr "Užklausa negali būti tuščia"
+
+msgid "This name can be used for the item"
+msgstr "Šis vardas gali būti naudojamas elementui"
+
+msgid "Item with this name already exists"
+msgstr "Elementas su šiuo vardu jau egzistuoja"
+
+msgid "The item cannot be created with provided name"
+msgstr "Elementas su pateiktu vardu negali būti sukurtas"
+
+msgid "The item cannot be created with an empty query"
+msgstr "Elementas negali būti sukurtas su tuščia užklausa"
+
 msgid "JOSM Help Browser"
 msgstr "JOSM pagalbos naršyklė"
 
@@ -9226,6 +9338,12 @@ msgstr "Padidinti tašką dabartiniame duomenų sluoksnyje"
 msgid "Open a history browser with the history of this node"
 msgstr "Atverti istorijos naršyklę su šio taško istorija"
 
+msgid "View changeset in web browser"
+msgstr "Peržiūrėti pakeitimą naršyklėje"
+
+msgid "Open {0}"
+msgstr "Atverti {0}"
+
 msgid "Way {0}"
 msgstr "Kelias {0}"
 
@@ -9235,6 +9353,9 @@ msgstr "Ryšys  {0}"
 msgid "Object"
 msgstr "Objektas"
 
+msgid "Open Changeset Manager"
+msgstr "Atverti pakeitimų tvarkytuvę"
+
 msgid "Changeset comment"
 msgstr "Pakeitimo komentaras"
 
@@ -9297,7 +9418,7 @@ msgid "B"
 msgstr "B"
 
 msgid "Editor"
-msgstr ""
+msgstr "Rengyklė"
 
 msgid ""
 "Failed to update primitive with id {0} because current edit layer is null"
@@ -9409,6 +9530,9 @@ msgstr ""
 "Patikrinti punktą \"Išsaugoti\", kad išsaugoti sluoksnį į failą, nurodytą "
 "kairėje."
 
+msgid "I would like someone to review my edits."
+msgstr "Norėčiau, kad kas nors peržiūrėtų mano pakeitimus."
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "Trumpas aprašymas jūsų išsiunčiamiems pakeitimams:"
 
@@ -9800,7 +9924,7 @@ msgstr ""
 "Išeiti iš JOSM įrašant. Neįrašyti pakeitimai išsiunčiami ir/arba įrašomi."
 
 msgid "Perform actions before restarting"
-msgstr ""
+msgstr "Atlikti veiksmus prieš paleidžiant iš naujo"
 
 msgid "Restart JOSM with saving. Unsaved changes are uploaded and/or saved."
 msgstr ""
@@ -10016,7 +10140,7 @@ msgid "The changeset is <strong>left open</strong> after this upload"
 msgstr "Pakeitimas po išsiuntimo bus <strong>paliktas atviras</strong>"
 
 msgid "configure changeset"
-msgstr "konfigūruoti pakeitimas"
+msgstr "konfigūruoti pakeitimą"
 
 msgid "Uploading <strong>{0} object</strong> to <strong>1 changeset</strong>"
 msgid_plural ""
@@ -10327,17 +10451,20 @@ msgid "GPX Files"
 msgstr "GPX failai"
 
 msgid "Parsing data for layer ''{0}'' failed"
-msgstr ""
+msgstr "Sluoksnio „{0}“ duomenų analizė nepavyko"
 
 msgid ""
 "Error occurred while parsing gpx data for layer ''{0}''. Only a part of the "
 "file will be available."
 msgstr ""
+"Įvyko klaida analizuojant sluoksnio „{0}“ gpx duomenis. Tik dalis failo bus "
+"prieinama."
 
 msgid ""
 "Error occurred while parsing gpx file ''{0}''. Only a part of the file will "
 "be available."
 msgstr ""
+"Įvyko klaida analizuojant gpx failą „{0}“. Tik dalis failo bus prieinama."
 
 msgid "Image Files"
 msgstr "Vaizdo failai"
@@ -10423,7 +10550,7 @@ msgid "Open OSM file"
 msgstr "Atverti OSM failą"
 
 msgid "Validation Error Files"
-msgstr ""
+msgstr "Tikrinimo klaidų failai"
 
 msgid "WMS Files (*.wms)"
 msgstr "WMS failai (*.wms)"
@@ -10444,7 +10571,7 @@ msgid "Tile display projection"
 msgstr "Kaladėlių rodymo projekcija"
 
 msgid "Current zoom"
-msgstr ""
+msgstr "Dabartinis mastelis"
 
 msgid "Show tile info"
 msgstr "Rodyti kaladėlės informaciją"
@@ -10453,22 +10580,22 @@ msgid "Tile Info"
 msgstr "Kaladėlės info"
 
 msgid "Tile name"
-msgstr ""
+msgstr "Kaladėlės pavadinimas"
 
 msgid "Tile URL"
-msgstr ""
+msgstr "Kaladėlės URL"
 
 msgid "Tile size"
-msgstr ""
+msgstr "Kaladėlės dydis"
 
 msgid "Tile display size"
-msgstr ""
+msgstr "Kaladėlės rodymo dydis"
 
 msgid "Reprojection"
 msgstr "Perprojektavimas"
 
 msgid "Reprojected tile size"
-msgstr ""
+msgstr "Perprojektuotos kaladėlės dydis"
 
 msgid "Metadata "
 msgstr "Metaduomenys "
@@ -10487,6 +10614,7 @@ msgstr "padidinkite, kad įkeltumėte daugiau kaladėlių"
 
 msgid "increase tiles zoom level (change resolution) to see more detail"
 msgstr ""
+"padidinkite kaladėlių mastelį (pakeiskite skiriamąją gebą) detalėms pamatyti"
 
 msgid "No tiles at this zoom level"
 msgstr "Šiame mastelyje nėra kaladėlių"
@@ -10589,9 +10717,6 @@ msgstr[0] "{0} pėdsakas"
 msgstr[1] "{0} pėdsakai"
 msgstr[2] "{0} pėdsakų"
 
-msgid "Description"
-msgstr "Aprašas"
-
 msgid "Timespan"
 msgstr "Trukmė"
 
@@ -10626,10 +10751,10 @@ msgid "Id"
 msgstr "Id"
 
 msgid "Min. zoom"
-msgstr ""
+msgstr "Min. didinimas"
 
 msgid "Max. zoom"
-msgstr ""
+msgstr "Maks. didinimas"
 
 msgid "Unsupported imagery type: {0}"
 msgstr "Nepalaikomas vaizdo tipas: {0}"
@@ -10677,7 +10802,7 @@ msgid "Changes need uploading?"
 msgstr "Pakeitimus reikia įkelti?"
 
 msgid "Save Note file"
-msgstr ""
+msgstr "Išsaugoti pastabų failą"
 
 msgid "outside downloaded area"
 msgstr "už atsiųsto ploto ribų"
@@ -10707,7 +10832,7 @@ msgid "Upload is discouraged"
 msgstr "Siūloma neįkelti"
 
 msgid "Upload is blocked"
-msgstr ""
+msgstr "Išsiuntimas blokuotas"
 
 msgid "Convert to GPX layer"
 msgstr "Konvertuoti į GPX sluoksnį"
@@ -10756,7 +10881,7 @@ msgid "No validation errors"
 msgstr "Nėra tikrinimo klaidų"
 
 msgid "Save Validation errors file"
-msgstr ""
+msgstr "Išsaugoti tikrinimo klaidų failą"
 
 msgid "Set WMS Bookmark"
 msgstr "Nustatyti WMS žymelę"
@@ -11216,7 +11341,7 @@ msgid "gps point"
 msgstr "gps taškas"
 
 msgid "HDOP"
-msgstr ""
+msgstr "HDOP"
 
 msgid "Time"
 msgstr "Laikas"
@@ -11225,10 +11350,10 @@ msgid "Direction"
 msgstr "Kryptis"
 
 msgid "Velocity, {0}"
-msgstr ""
+msgstr "Greitis, {0}"
 
 msgid "Audio files (*.wav, *.mp3, *.aac, *.aif, *.aiff)"
-msgstr ""
+msgstr "Audio failai (*.wav, *.mp3, *.aac, *.aif, *.aiff)"
 
 msgid "Import Audio"
 msgstr "Importuoti garsą"
@@ -12351,10 +12476,10 @@ msgid "Display discardable keys"
 msgstr "Rodyti išmetamus raktus"
 
 msgid "Use auto filters"
-msgstr ""
+msgstr "Naudoti automatinius filtrus"
 
 msgid "Rule"
-msgstr ""
+msgstr "Taisyklė"
 
 msgid "Highlight target ways and nodes"
 msgstr "Paryškinti paskirties kelius ir taškus"
@@ -12424,6 +12549,7 @@ msgstr ""
 msgid ""
 "Display buttons to automatically filter numeric values of a predefined tag"
 msgstr ""
+"Rodyti mygtukus automatiniam nustatytos žymos skaitinių reikšmių filtrui"
 
 msgid "Options that affect drawing performance"
 msgstr "Parinktys įtakojančios piešimo našumą"
@@ -12738,7 +12864,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 "Nereikalaukite perjungti veiksnų (potlatch stiliaus darbo eiga)"
+msgstr "Nereikalauti perjungti veiksenų (potlatch stiliaus darbo eiga)"
 
 msgid ""
 "Display buttons in right side menus only when mouse is inside the element"
@@ -12762,7 +12888,7 @@ msgstr ""
 "bet nepalaiko kai kurių galimybių, pvz., failų filtrų"
 
 msgid "Check if you feel opposite direction more convenient"
-msgstr "Patikrinkite, jei jaučiate, kad priešinga kryptis yra patogesnė"
+msgstr "Pažymėkite, jei priešinga kryptis yra patogesnė"
 
 msgid ""
 "Divide intervals between native resolution levels to smaller steps if they "
@@ -13302,7 +13428,7 @@ msgid "Load plugins from list"
 msgstr "Įkelti papildinius iš sąrašo"
 
 msgid "The following plugins were not found. Continue anyway?"
-msgstr ""
+msgstr "Šie papildiniai nerasti. Vis tiek tęsti?"
 
 msgid "Add JOSM Plugin description URL."
 msgstr "Pridėkite JOSM papildinių aprašo URL."
@@ -13463,10 +13589,10 @@ msgid "Set as default"
 msgstr "Nustatyti numatytąja"
 
 msgid "Default projection"
-msgstr ""
+msgstr "Numatytoji projekcija"
 
 msgid "Default projection has been set to ''{0}''"
-msgstr ""
+msgstr "Numatytoji projekcija nustatyta į „{0}“"
 
 msgid "Display coordinates as"
 msgstr "Rodyti koordinates kaip"
@@ -13496,7 +13622,7 @@ msgid "Swiss Grid (Switzerland)"
 msgstr "Swiss Grid (Šveicarija)"
 
 msgid "<i>CH1903 / LV03</i>"
-msgstr ""
+msgstr "<i>CH1903 / LV03</i>"
 
 msgid "Guadeloupe Fort-Marigot 1949"
 msgstr "Gvadelupės Fort-Marigot 1949"
@@ -14043,15 +14169,6 @@ msgstr "Paruošti paelementį be tevo"
 msgid "Error parsing {0}: "
 msgstr "Nagrinėjimo klaida {0}: "
 
-msgid "Search preset"
-msgstr "Ieškoti ruošinių"
-
-msgid "Show preset search dialog"
-msgstr "Rodyti ruošinių paieškos dialogo langą"
-
-msgid "Search presets"
-msgstr "Paieškos ruošiniai"
-
 msgid "Presets"
 msgstr "Ruošiniai"
 
@@ -14124,7 +14241,7 @@ msgid "Unknown requisite: {0}"
 msgstr "Nežinomas rekvizitas: {0}"
 
 msgid "Unknown regexp value: {0}"
-msgstr ""
+msgstr "Nežinoma reguliariojo reiškinio reikšmė: {0}"
 
 msgid "Illegal member expression: {0}"
 msgstr "Negalimas nario išreiškimas: {0}"
@@ -14171,6 +14288,9 @@ msgstr "Visi failai (*.*)"
 msgid "Received error page:"
 msgstr "Gautas klaidos puslapis:"
 
+msgid "{0}... [please type its number]"
+msgstr "{0}... [įveskite jo numerį]"
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -14241,16 +14361,16 @@ msgid ""
 msgstr "Dabartinė vertė nėra galima OSM ID. Prašome įvesti sveiką vertę > 0"
 
 msgid "false: the property is explicitly switched off"
-msgstr "neteisingai: nuosavybė yra aiškiai išjungta"
+msgstr "netiesa: savybė yra išjungta"
 
 msgid "false: the property ''{0}'' is explicitly switched off"
-msgstr ""
+msgstr "netiesa: savybė „{0}“ yra išjungta"
 
 msgid "true: the property is explicitly switched on"
-msgstr "teisingai: nuosavybė yra aiškiai įjungta"
+msgstr "tiesa: savybė yra įjungta"
 
 msgid "true: the property ''{0}'' is explicitly switched on"
-msgstr ""
+msgstr "tiesa: savybė „{0}“ yra įjungta"
 
 msgid ""
 "partial: different selected objects have different values, do not change"
@@ -14261,12 +14381,14 @@ msgid ""
 "partial: different selected objects have different values for ''{0}'', do "
 "not change"
 msgstr ""
+"iš dalies: skirtingi pažymėti objektai turi skirtingas „{0} reikšmes, "
+"nekeiskite"
 
 msgid "unset: do not set this property on the selected objects"
 msgstr "nenustatyta: nenustatyti šios savybės pažymėtiems objektams"
 
 msgid "unset: do not set the property ''{0}'' on the selected objects"
-msgstr ""
+msgstr "atžymėta: nenustatyti savybės „{0}“ pažymėtiems objektams"
 
 msgid "Cut"
 msgstr "Iškirpti"
@@ -14324,6 +14446,7 @@ msgid ""
 "Relation with external id ''{0}'' refers to a missing primitive with "
 "external id ''{1}''."
 msgstr ""
+"Ryšys su išoriniu id „{0}“ rodo į trūkstamą primityvą su išoriniu id „{1}“."
 
 msgid "Deleted member {0} is used by relation {1}"
 msgstr "Ištrintas narys {0} yra naudojamas ryšio {1}"
@@ -14338,15 +14461,17 @@ msgid "Downloading notes"
 msgstr "Atsiunčiamos pastabos"
 
 msgid "Failed to open input stream for resource ''{0}''"
-msgstr ""
+msgstr "Nepavyko atverti įvesties srauto resursui „{0}“"
 
 msgid ""
 "Failed to open file with extension ''{2}'' and namepart ''{3}'' in zip file "
 "''{0}''. Exception was: {1}"
 msgstr ""
+"Nepavyko atverti failo su plėtiniu „{2}“ ir vardo dalimi „{3}“ zip faile "
+"„{0}“. Išimtinė situacija: {1}"
 
 msgid "The requested URL {0} was not found"
-msgstr ""
+msgstr "Užklaustas URL {0} nerastas"
 
 msgid "Failed to rename file {0} to {1}."
 msgstr "Nepavyko pervadinti failo {0} į {1}."
@@ -14366,12 +14491,14 @@ msgid ""
 "Error adding certificate {0} - certificate fingerprint mismatch. Expected "
 "{1}, was {2}"
 msgstr ""
+"Klaida pridedant liudijimą {0} - liudijimo kontrolinio kodo neatitiktis. "
+"Tikėtasi {1}, buvo {2}"
 
 msgid "Adding certificate for TLS connections: {0}"
-msgstr ""
+msgstr "Pridedamas liudijimas TLS susijungimams: {0}"
 
 msgid "Failed to parse date ''{0}'' replied by server."
-msgstr ""
+msgstr "Nepavyko išnagrinėti datos „{0}“ grąžintos serverio."
 
 msgid ""
 "Unexpected format of error header for conflict in changeset update. Got "
@@ -14400,30 +14527,38 @@ msgid "Unsupported parameter ''{0}'' in changeset query string"
 msgstr "Nepalaikomas parametras „{0}“ pakeitimų užklausoje"
 
 msgid "Unexpected format for port number in preference ''{0}''. Got ''{1}''."
-msgstr ""
+msgstr "Netikėtas prievado numerio formatas nustatyme „{0}“. Gauta „{1}“."
 
 msgid "The proxy will not be used."
 msgstr "Šliuzas nebus naudojamas."
 
 msgid "Illegal port number in preference ''{0}''. Got {1}."
-msgstr ""
+msgstr "Neteisingas prievado numeris nustatyme „{0}“. Gauta {1}."
 
 msgid ""
 "Unexpected value for preference ''{0}'' found. Got ''{1}''. Will use no "
 "proxy."
 msgstr ""
+"Rasta netikėta reikšmė nustatyme „{0}“. Gauta „{1}“. Įgaliotasis serveris "
+"nebus naudojamas."
 
 msgid ""
 "Unexpected parameters for HTTP proxy. Got host ''{0}'' and port ''{1}''."
 msgstr ""
+"Netikėti parametrai HTTP įgaliotajam serveriui. Gautas serveris „{0}“ ir "
+"prievadas „{1}“."
 
 msgid ""
 "Unexpected parameters for SOCKS proxy. Got host ''{0}'' and port ''{1}''."
 msgstr ""
+"Netikėti parametrai SOCKS įgaliotajam serveriui. Gautas serveris „{0}“ ir "
+"prievadas „{1}“."
 
 msgid ""
 "Connection to proxy ''{0}'' for URI ''{1}'' failed. Exception was: {2}"
 msgstr ""
+"Prisijungimas prie įgaliotojo serverio „{0}“ adresui „{1}“ nepavyko. "
+"Išimtinė situacija: {2}"
 
 msgid ""
 "The JVM is not configured to lookup proxies from the system settings. The "
@@ -14441,7 +14576,7 @@ msgid "Unexpected XML element with name ''{0}''"
 msgstr "Netikėtas XML elementas, su vardu ''{0}''"
 
 msgid "Parse error: invalid document structure for GPX document."
-msgstr ""
+msgstr "Nagrinėjimo klaida: neteisinga GPX dokumento struktūra."
 
 msgid "(at line {0}, column {1})"
 msgstr "(eilutėje {0}, skiltis {1})"
@@ -14452,15 +14587,6 @@ msgstr "Nežinoma veiksena {0}."
 msgid "get number of unread messages"
 msgstr "gauti neskaitytų pranešimų skaičių"
 
-msgid "You have {0} unread message."
-msgid_plural "You have {0} unread messages."
-msgstr[0] "Turite {0} neperskaitytą pranešimą."
-msgstr[1] "Turite {0} neperskaitytus pranešimus."
-msgstr[2] "Turite {0} neperskaitytų pranešimų."
-
-msgid "Click here to see your inbox."
-msgstr "Spauskite čia gautiems pranešimams peržiūrėti"
-
 msgid "Message notifier"
 msgstr "Pranešimų pranešiklis"
 
@@ -14486,6 +14612,8 @@ msgid ""
 "Server replied with response code 404, retrying with an individual request "
 "for each object."
 msgstr ""
+"Serveris atsakė kodu 404, bandoma dar kartą su individualiomis užklausomis "
+"kiekvienam objektui."
 
 msgid "Downloading OSM data..."
 msgstr "Atsiunčiami OSM duomenys..."
@@ -14527,11 +14655,8 @@ msgid ""
 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 "Pašalintas sluoksnis {0} nes jo neleidžia konfiguruotas API."
-
 msgid "Unexpected format of ID replied by the server. Got ''{0}''."
-msgstr ""
+msgstr "Netikėtas ID formatas serverio atsakyme. Gauta „{0}“."
 
 msgid ""
 "Unexpected format of new version of modified primitive ''{0}''. Got ''{1}''."
@@ -14597,6 +14722,7 @@ msgstr "Severis išvedė klaidą, su kodu {0}."
 
 msgid "Prolog of OsmChange document already written. Please write only once."
 msgstr ""
+"OsmChange dokumento prologas jau įrašytas. Įrašykite tik vieną kartą."
 
 msgid "Prolog of OsmChange document not written yet. Please write first."
 msgstr ""
@@ -14616,6 +14742,8 @@ msgid ""
 "Illegal document structure. Found node, way, or relation outside of "
 "''create'', ''modify'', or ''delete''."
 msgstr ""
+"Netinkama dokumento struktūra. Rastas taškas, kelias arba ryšys „create“, "
+"„modify“ ar „delete“ išorėje."
 
 msgid ""
 "Unsupported end element ''{0}'' in changeset content at position ({1},{2}). "
@@ -14628,7 +14756,7 @@ msgid "Parsing changeset content ..."
 msgstr "Nagrinėjamas pakeitimo turinys..."
 
 msgid "Illegal boolean value for attribute ''{0}''. Got ''{1}''."
-msgstr ""
+msgstr "Netinkama atributo „{0}“ loginė reikšmė. Gauta „{1}“."
 
 msgid "Illegal value for attribute ''{0}''. Got ''{1}''."
 msgstr "Neleistina atributo „{0}“ reikšmė. Gauta „{1}“."
@@ -14637,10 +14765,10 @@ msgid "Illegal numeric value for attribute ''{0}''. Got ''{1}''."
 msgstr "Neteisinga atributo „{0}“skaitinė reikšmė. Gauta „{1}“."
 
 msgid "Missing mandatory attribute ''{0}'' of XML element {1}."
-msgstr ""
+msgstr "Trūksta XML elemento {1} privalomo atributo „{0}“."
 
 msgid "Undefined element ''{0}'' found in input stream. Aborting."
-msgstr ""
+msgstr "Neapibrėžtas elementas „{0}“ rasta įvesties sraute. Nutraukiama."
 
 msgid "Parsing list of changesets..."
 msgstr "Nagrinėjamas pakeitimų sąrašas..."
@@ -14649,7 +14777,7 @@ msgid "Failed to sign a HTTP connection with an OAuth Authentication header"
 msgstr "Nepavyko pasirašyti HTTP ryšio su OAuth tapatumo nustatymo antrašte"
 
 msgid "Unexpected value for preference ''{0}''. Got ''{1}''."
-msgstr ""
+msgstr "Netikėta nustatymo „{0}“ reikšmė. Gauta „{1}“."
 
 msgid "Parsing OSM history data ..."
 msgstr "Nagrinėjami OSM istorijos duomenys ..."
@@ -14661,17 +14789,21 @@ msgid ""
 "Missing mandatory attributes on element ''bounds''. Got "
 "minlon=''{0}'',minlat=''{1}'',maxlon=''{2}'',maxlat=''{3}'', origin=''{4}''."
 msgstr ""
+"Elementui „bounds“ trūksta privalomų atributų. Gauta "
+"minlon=„{0}“,minlat=„{1}“,maxlon=„{2}“,maxlat=„{3}“, origin=„{4}“."
 
 msgid ""
 "Illegal value for attributes ''lat'', ''lon'' on node with ID {0}. Got "
 "''{1}'', ''{2}''."
 msgstr ""
+"Neleistinos atributų „lat“, „lon“ reikšmės taškui su ID {0}. Gauta „{1}“, "
+"„{2}“."
 
 msgid "Deleted way {0} contains nodes"
 msgstr "Pašalintas kelias {0} turėjo taškų"
 
 msgid "Missing mandatory attribute ''{0}'' on <nd> of way {1}."
-msgstr ""
+msgstr "Trūksta <nd> privalomo atributo „{0}“ keliui {1}."
 
 msgid "Illegal value of attribute ''ref'' of element <nd>. Got {0}."
 msgstr "Neleistina elemento <nd> atributo „ref“ reikšmė. Gauta „{0}“."
@@ -14680,14 +14812,14 @@ msgid "Deleted relation {0} contains members"
 msgstr "Ištrintas ryšys {0} turėjo narių"
 
 msgid "Missing attribute ''ref'' on member in relation {0}."
-msgstr ""
+msgstr "Trūksta atributo „ref“ nariui ryšyje {0}."
 
 msgid ""
 "Illegal value for attribute ''ref'' on member in relation {0}. Got {1}"
 msgstr "Neleistina nario ryšyje {0} atributo „ref“ reikšmė. Gauta „{1}“."
 
 msgid "Missing attribute ''type'' on member {0} in relation {1}."
-msgstr ""
+msgstr "Trūksta atributo „type“ nariui {0} ryšyje {1}."
 
 msgid ""
 "Illegal value for attribute ''type'' on member {0} in relation {1}. Got {2}."
@@ -14695,13 +14827,13 @@ msgstr ""
 "Neleistina nario {0} ryšyje {1} atributo „type“ reikšmė. Gauta „{2}“."
 
 msgid "Incomplete <member> specification with ref=0"
-msgstr ""
+msgstr "Nepilna <member> specifikacija su ref=0"
 
 msgid "Missing key or value attribute in tag."
 msgstr "Trūkstamas rakto arba vertės atributas žymoje."
 
 msgid "Undefined element ''{0}'' found in input stream. Skipping."
-msgstr ""
+msgstr "Neapibrėžtas elementas „{0}“ rastas įvedimo sraute. Praleidžiamas."
 
 msgid "Illegal object with ID=0."
 msgstr "Netinkamas objektas su ID=0."
@@ -14740,6 +14872,7 @@ msgstr "Trūksta reikalaujamo atributo ''{0}''."
 
 msgid "Illegal long value for attribute ''{0}''. Got ''{1}''."
 msgstr ""
+"Neleistina ilgojo sveikojo skaičiaus reikšmė atributui „{0}“. Gauta „{1}“."
 
 msgid "Prepare OSM data..."
 msgstr "Paruošti OSM duomenis..."
@@ -14817,10 +14950,10 @@ msgid "Reading user info ..."
 msgstr "Skaitoma naudotojo informacija ..."
 
 msgid "Reading user preferences ..."
-msgstr ""
+msgstr "Skaitomi naudotojo nustatymai..."
 
 msgid "Starting to upload with one request per primitive ..."
-msgstr ""
+msgstr "Pradedamas išsiuntimas su viena užklausa primityvui..."
 
 msgid "{0}% ({1}/{2}), {3} left. Uploading node ''{4}'' (id: {5})"
 msgstr "{0} % ({1}/{2}), {3} liko. Išsiunčiamas taškas „{4}“ (id: {5})"
@@ -14838,7 +14971,7 @@ msgid "Value >0 expected for parameter ''{0}'', got {1}"
 msgstr "Buvo tikimasi vertės >0 parametrui ''{0}'', gauta {1}"
 
 msgid "Starting to upload in chunks..."
-msgstr ""
+msgstr "Pradedamas išsiuntimas gabalais..."
 
 msgid "({0}/{1}) Uploading {2} object..."
 msgid_plural "({0}/{1}) Uploading {2} objects..."
@@ -14850,10 +14983,10 @@ msgid "Uploading data ..."
 msgstr "Išsiunčiami duomenys ..."
 
 msgid "Unexpected id 0 for osm primitive found"
-msgstr ""
+msgstr "Rastas netikėtas id 0 osm primityvui"
 
 msgid "Failed to evaluate {0}"
-msgstr ""
+msgstr "Nepavyko išanalizuoti {0}"
 
 msgid "Unexpected value for key ''{0}'' in preferences, got ''{1}''"
 msgstr "Netikėta rakto „{0}“ reikšmė nustatymuose, gauta „{1}“"
@@ -14868,7 +15001,7 @@ msgid "Error playing sound"
 msgstr "Klaida grojant garsą"
 
 msgid "This is after the end of the recording"
-msgstr ""
+msgstr "Tai yra už įrašo pabaigos"
 
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
@@ -14876,6 +15009,11 @@ 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>Įspėjimas:</strong> "
+"Slaptažodis saugomas kaip paprastas tekstas JOSM nustatymų faile. Be to jis "
+"siunčiamas <strong>nešifruotas</strong> kiekvienoje užklausoje nusiųstoje į "
+"OSM serverį. <strong>Nenaudokite vertingo "
+"slaptažodžio.</strong></p></body></html>"
 
 msgid "Save user and password (unencrypted)"
 msgstr "Išsaugoti naudotojo vardą ir slaptažodį (nešifruotą)"
@@ -14908,7 +15046,7 @@ msgid "Shift+Enter: Add all tags to selected objects"
 msgstr "Shift+Enter: Pridėti visas žymas pažymėtiems objektams"
 
 msgid "Enable the checkbox to accept the value"
-msgstr ""
+msgstr "Pažymėkite langelį reikšmei priimti"
 
 msgid "Accept all tags from {0} for this session"
 msgstr "Priimti visas žymas iš {0} šiame seanse"
@@ -14939,9 +15077,11 @@ msgstr "Nuskaityti protokolo versiją"
 
 msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
+"Nepavyko paleisti IPv4 nuotolinio valdymo serverio su prievadu {0}: {1}"
 
 msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
+"Nepavyko paleisti IPv6 nuotolinio valdymo serverio su prievadu {0}: {1}"
 
 msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr "RemoteControl::Priimami nuotoliniai prisijungimai per {0}:{1}"
@@ -14951,9 +15091,11 @@ msgstr "RemoteControl::Serveris {0}:{1} sustabdytas."
 
 msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
+"Nepavyko paleisti IPv4 nuotolinio valdymo https serverio su prievadu {0}: {1}"
 
 msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
+"Nepavyko paleisti IPv6 nuotolinio valdymo https serverio su prievadu {0}: {1}"
 
 msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr "RemoteControl::Priimami saugūs nuotoliniai prisijungimai per {0}:{1}"
@@ -15031,7 +15173,7 @@ msgid "Confirm Remote Control action"
 msgstr "Patvirtinti nuotolinio valdymo veiksmą"
 
 msgid "The following keys are mandatory, but have not been provided: {0}"
-msgstr ""
+msgstr "Šie raktai yra privalomi, bet nebuvo pateikti: {0}"
 
 msgid ""
 "Remote Control has been asked to report its protocol version. This enables "
@@ -15129,22 +15271,22 @@ msgid "Version ''{0}'' of session file is not supported. Expected: 0.1"
 msgstr "Seanso failo versija „{0}“ nepalaikoma. Tikėtasi: 0.1"
 
 msgid "missing mandatory attribute ''index'' for element ''layer''"
-msgstr ""
+msgstr "trūksta privalomo atributo „index“ elementui „layer“"
 
 msgid "unexpected format of attribute ''index'' for element ''layer''"
-msgstr ""
+msgstr "netikėtas atributo „index“ formatas elementui „layer“"
 
 msgid "attribute ''index'' ({0}) for element ''layer'' must be unique"
-msgstr ""
+msgstr "atributas „index“ ({0}) elementui „layer“ privalo būti unikalus"
 
 msgid "missing layer with index {0}"
-msgstr ""
+msgstr "trūksta sluoksnio su indeksu {0}"
 
 msgid "missing mandatory attribute ''name'' for element ''layer''"
-msgstr ""
+msgstr "trūksta privalomo atributo „name“ elementui „layer“"
 
 msgid "missing mandatory attribute ''type'' for element ''layer''"
-msgstr ""
+msgstr "trūksta privalomo atributo „type“ elementui „layer“"
 
 msgid "Unable to load layer"
 msgstr "Nepavyko įkelti sluoksnio"
@@ -15152,10 +15294,13 @@ msgstr "Nepavyko įkelti sluoksnio"
 msgid ""
 "Cannot load layer of type ''{0}'' because no suitable importer was found."
 msgstr ""
+"Nepavyko įkelti sluoksnio su tipu „{0}“, nes nerastas tinkamas įkėliklis."
 
 msgid ""
 "Cannot load layer {0} because it depends on layer {1} which has been skipped."
 msgstr ""
+"Nepavyko įkelti sluoksnio {0}, nes jis priklauso nuo sluoksnio {1}, kuris "
+"buvo praleistas."
 
 msgid "Error loading layer"
 msgstr "Klaida įkeliant sluoksnį"
@@ -15278,7 +15423,7 @@ msgstr ""
 
 msgid ""
 "Unexpected value ''{0}'' for preference ''{1}''. Assuming value ''ask''."
-msgstr ""
+msgstr "Netikėta nustatymo „{1}“ reikšmė „{0}“. Imama reikšmė „ask“."
 
 msgid "Click to update the activated plugins"
 msgstr "Spauskite aktyviems papildiniams atnaujinti"
@@ -15382,7 +15527,14 @@ msgid_plural ""
 "Please open the Preference Dialog after JOSM has started and try to update "
 "them manually."
 msgstr[0] ""
+"Atverkite nuostatų dialogo langą po JOSM paleidimo ir pabandykite atnaujinti "
+"rankiniu būdu."
 msgstr[1] ""
+"Atverkite nuostatų dialogo langą po JOSM paleidimo ir pabandykite atnaujinti "
+"rankiniu būdu."
+msgstr[2] ""
+"Atverkite nuostatų dialogo langą po JOSM paleidimo ir pabandykite atnaujinti "
+"rankiniu būdu."
 
 msgid "Plugin update failed"
 msgstr "Papildinio atnaujinimas nepavyko"
@@ -15519,7 +15671,7 @@ msgid "Downloading plugin list from ''{0}''"
 msgstr "Atsiunčiamas papildinių sąrašas iš „{0}“"
 
 msgid "Unsuccessful HTTP request"
-msgstr ""
+msgstr "Nesėkminga HTTP užklausa"
 
 msgid "Plugin list download error"
 msgstr "Papildinių sąrašo atsiuntimo klaida"
@@ -15765,6 +15917,9 @@ msgid ""
 "current<br>dataset violates a precondition.<br>The error message "
 "is:<br>{0}</html>"
 msgstr ""
+"<html>Išsiuntimas į serverį <strong>nepavyko</strong>, nes "
+"dabartinė<br>duomenų aibė pažeidžia prielaidą.<br>Klaidos "
+"pranešimas:<br>{0}</html>"
 
 msgid ""
 "<html>Authentication at the OSM server with the username ''{0}'' "
@@ -15788,9 +15943,11 @@ msgid ""
 "<html>Authorisation at the OSM server failed.<br>The server reported the "
 "following error:<br>''{0}''</html>"
 msgstr ""
+"<html>Prieigos suteikimas OSM serveryje nepavyko.<br>Serveris pranešė šią "
+"klaidą:<br>„{0}“</html>"
 
 msgid "<html>Authorisation at the OSM server failed.<br></html>"
-msgstr "<html>Autorizacija OSM serveryje nepavyko.<br></html>"
+msgstr "<html>Prieigos suteikimas OSM serveryje nepavyko.<br></html>"
 
 msgid ""
 "<html>Authorisation at the OSM server with the OAuth token ''{0}'' "
@@ -15840,6 +15997,8 @@ msgid ""
 "<html>The server reported that it has detected a conflict.<br>Error message "
 "(untranslated):<br>{0}</html>"
 msgstr ""
+"<html>Serveris pranešė, kad aptiko konfliktą.<br>Klaidos pranešimas "
+"(neišverstas):<br>{0}</html>"
 
 msgid "<html>The server reported that it has detected a conflict."
 msgstr "<html>Serveris pranešė,  kad užfiksavo konfliktą."
@@ -15856,6 +16015,9 @@ msgid ""
 "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>Nepavyko prisijungti prie nutolusio serverio<br>„{0}“<br>dėl saugumo "
+"sumetimų. Tai greičiausiai yra todėl, kad vykdote<br>kaip programėlę ir "
+"neįkėlėte programėlės iš „{1}“."
 
 msgid ""
 "<html>Failed to open a connection to the remote server<br>''{0}''.<br>Please "
@@ -15885,9 +16047,11 @@ 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 serveris<br>„{0}“<br>pranešė apie vidinę serverio klaidą.<br>Tai "
+"greičiausiai laikina problema. Pamėginkite vėliau."
 
 msgid "The OSM server ''{0}'' reported a bad request.<br>"
-msgstr "The OSM serveris ''{0}'' pranešė apie blogą užklausą.<br>"
+msgstr "OSM serveris „{0}“ pranešė apie blogą užklausą.<br>"
 
 msgid ""
 "The area you tried to download is too big or your request was too "
@@ -15924,6 +16088,10 @@ msgid ""
 "<strong>Downloading failed</strong> if you tried to download this "
 "object.<br><br>The error message is:<br>{0}</html>"
 msgstr ""
+"<html>Serveris praneša, kad objektas pašalintas.<br><strong>Išsiuntimas "
+"nepavyko</strong>, jei bandėte atnaujinti ar pašalinti šį objektą.<br> "
+"<strong>Atsiuntimas nepavyko</strong>, jei bandėte atsiųsti šį "
+"objektą.<br><br>Klaidos pranešimas:<br>{0}</html>"
 
 msgid "latitude"
 msgstr "platuma"
@@ -15941,6 +16109,8 @@ msgid ""
 "Unexpected response from HTTP server. Got {0} response without ''Location'' "
 "header. Can''t redirect. Aborting."
 msgstr ""
+"Netikėtas atsakymas iš HTTP serverio. Gautas {0} atsakymas be „Location“ "
+"antraštės. Negalima nukreipti. Nutraukiama."
 
 msgid "Download redirected to ''{0}''"
 msgstr "Atsisiuntimas perkeltas į ''{0}''"
@@ -15949,7 +16119,7 @@ msgid "Too many redirects to the download URL detected. Aborting."
 msgstr "Per daug aptikta nukreipimų į atsiųstą URL. Atmetama."
 
 msgid "Unable to find translation for the locale {0}. Reverting to {1}."
-msgstr ""
+msgstr "Nepavyko rasti vertimo lokalei {0}. Grįžtama į {1}."
 
 msgid ""
 "Fatal: failed to locate image ''{0}''. This is a serious configuration "
@@ -15959,11 +16129,13 @@ msgstr ""
 "konfigūracijos problema. JOSM nustos veikti."
 
 msgid "Failed to handle zip file ''{0}''. Exception was: {1}"
-msgstr ""
+msgstr "Nepavyko apdoroti zip failo „{0}“. Išimtinė situacija: {1}"
 
 msgid ""
 "Failed to access directory ''{0}'' for security reasons. Exception was: {1}"
 msgstr ""
+"Nepavyko prieiti prie aplanko „{0}“ dėl saugumo priežasčių. Išimtinė "
+"situacija: {1}"
 
 msgid "Cause: "
 msgstr "Priežastis: "
@@ -15979,9 +16151,6 @@ msgstr ""
 "http://forum.openstreetmap.org/viewtopic.php?id=25677).\n"
 "Šiuo metu jūs turite {1,number,#}MB atminties, kuri naudojama JOSM"
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -16015,13 +16184,13 @@ msgstr ""
 "Taip</b> kitame dialogo lange."
 
 msgid "Removing insecure certificate from {0} keystore: {1}"
-msgstr ""
+msgstr "Šalinamas nesaugus liudijimas iš raktinės {0}: {1}"
 
 msgid "Unable to remove insecure certificate from keystore: {0}"
-msgstr ""
+msgstr "Nepavyko pašalinti nesaugaus liudijimo iš raktinės: {0}"
 
 msgid "JOSM localhost certificate found in {0} keystore: {1}"
-msgstr ""
+msgstr "JOSM localhost liudijimas rastas raktinėje {0}: {1}"
 
 msgid ""
 "Remote Control is configured to provide HTTPS support.<br>This requires to "
@@ -16039,17 +16208,17 @@ msgstr ""
 "HTTPS palaikymą nuotolinio valdymo nustatymuose."
 
 msgid "HTTPS support in Remote Control"
-msgstr ""
+msgstr "HTTPS palaikymas nuotoliniame valdyme"
 
 msgid "Adding JOSM localhost certificate to {0} keystore"
-msgstr ""
+msgstr "Pridedamas JOSM localhost liudijimas į raktinę {0}"
 
 msgid "Silent shortcut conflict: ''{0}'' moved by ''{1}'' to ''{2}''."
 msgstr ""
 "Tylus sparčiųjų klavišų konfliktas: „{1}“ perkeltas iš „{0}“ į „{2}“."
 
 msgid "Unknown territory id: {0}"
-msgstr ""
+msgstr "Nežinomas teritorijos id: {0}"
 
 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!"
@@ -16067,10 +16236,10 @@ msgid "Value is too long (max {0} characters):"
 msgstr "Vertė per ilga (maks. {0} simboliai):"
 
 msgid "Unable to delete file {0}"
-msgstr ""
+msgstr "Nepavyko pašalinti failo {0}"
 
 msgid "Unable to create directory {0}"
-msgstr ""
+msgstr "Nepavyko sukurti aplanko {0}"
 
 msgid "ms"
 msgstr "ms"
@@ -16094,28 +16263,32 @@ msgid "Failed to load XML schema."
 msgstr "Nepavyko įkelti XML schemos."
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
+"Klaida paieškos reiškinyje pozicijoje {0} - dešinė or(|) išraiškos pusė "
+"privalo grąžinti primityvų aibę"
 
 msgid ""
 "Error in search expression on position {0} - left side of or(|) expression "
 "must return set of primitives"
 msgstr ""
+"Klaida paieškos reiškinyje pozicijoje {0} - kairė or(|) išraiškos pusė "
+"privalo grąžinti primityvų aibę"
 
 msgid ""
 "Error in search expression on position {0} - not(-) cannot be used in this "
 "context"
 msgstr ""
+"Klaida paieškos reiškinyje pozicijoje {0} - not(-) negali būti naudojama "
+"šiame kontekste"
 
 msgid ""
 "Error in search expression on position {0} - expression must return "
 "different then current primitive"
 msgstr ""
+"Klaida paieškos reiškinyje pozicijoje {0} - išraiška privalo grąžinti kitą "
+"nei šis primityvą"
 
 msgid "Unexpected token ({0}) on position {1}"
 msgstr "Netikėta leksema ({0}) pozicijoje {1}"
@@ -16124,13 +16297,13 @@ msgid "Unexpected token on position {0}. Expected {1}, found {2}"
 msgstr "Netikėta leksema pozicijoje {0}. Tikėtasi {1}, rasta {2}"
 
 msgid "Error while parsing search expression on position {0}"
-msgstr ""
+msgstr "Klaida nagrinėjant paieškos išraišką pozicijoje {0}"
 
 msgid "Unexpected char on {0}. Expected {1} found {2}"
-msgstr ""
+msgstr "Netikėtas simbolis {0}. Tikėtasi {1} rasta {2}"
 
 msgid "Expected search expression"
-msgstr ""
+msgstr "Tikėtasi paieškos reiškinio"
 
 msgid ""
 "You requested too many nodes (limit is 50,000). Either request a smaller "
@@ -16153,16 +16326,16 @@ msgstr ""
 "didelė. Užklauskite mažesnio ploto arba naudokite planet.osm"
 
 msgid "JOSM-Trac login at josm.openstreetmap.de"
-msgstr ""
+msgstr "JOSM-Trac prisijungimas josm.openstreetmap.de"
 
 msgid "could not get audio input stream from input URL"
-msgstr ""
+msgstr "nepavyko gauti audio įvedimo srauto iš įvedimo URL"
 
 msgid "Audio Device Unavailable"
 msgstr "Garso įtaisas nepasiekiamas"
 
 msgid "You must make your edits public to upload new data"
-msgstr ""
+msgstr "Privalote padaryti savo keitimus viešais naujiems duomenims išsiųsti"
 
 msgid "town"
 msgstr "miestelis"
@@ -16181,11 +16354,11 @@ msgstr "dirbama žemė"
 
 msgctxt "landuse"
 msgid "farmyard"
-msgstr ""
+msgstr "ūkio_kiemas"
 
 msgctxt "landuse"
 msgid "cemetery"
-msgstr ""
+msgstr "kapinės"
 
 msgctxt "landuse"
 msgid "residential"
@@ -16193,11 +16366,11 @@ msgstr "gyvenamasis"
 
 msgctxt "landuse"
 msgid "greenfield"
-msgstr ""
+msgstr "vystoma_teritorija"
 
 msgctxt "landuse"
 msgid "village_green"
-msgstr ""
+msgstr "gyvenvietės_žalioji_erdvė"
 
 msgctxt "landuse"
 msgid "quarry"
@@ -16205,11 +16378,11 @@ msgstr "karjeras"
 
 msgctxt "landuse"
 msgid "allotments"
-msgstr ""
+msgstr "sklypai"
 
 msgctxt "landuse"
 msgid "vineyard"
-msgstr ""
+msgstr "vynuogynas"
 
 msgctxt "natural"
 msgid "scrub"
@@ -16221,7 +16394,7 @@ msgstr "medžiai"
 
 msgctxt "natural"
 msgid "grassland"
-msgstr ""
+msgstr "pieva"
 
 msgctxt "natural"
 msgid "wetland"
@@ -16229,19 +16402,19 @@ msgstr "pelkė"
 
 msgctxt "natural"
 msgid "heath"
-msgstr ""
+msgstr "dykynė"
 
 msgctxt "amenity"
 msgid "fire_station"
-msgstr ""
+msgstr "gaisrinė"
 
 msgctxt "leisure"
 msgid "park"
-msgstr ""
+msgstr "parkas"
 
 msgctxt "leisure"
 msgid "track"
-msgstr ""
+msgstr "takas"
 
 msgctxt "building"
 msgid "industrial"
@@ -16492,25 +16665,25 @@ msgid "concrete"
 msgstr "betonas"
 
 msgid "concrete:plates"
-msgstr ""
+msgstr "betonas:plokštės"
 
 msgid "concrete:lanes"
-msgstr ""
+msgstr "betonas:juostos"
 
 msgid "paving_stones"
 msgstr "trinkelės"
 
 msgid "sett"
-msgstr ""
+msgstr "tašyti_akmenys"
 
 msgid "cobblestone"
 msgstr "grįsta akmenimis"
 
 msgid "grass_paver"
-msgstr ""
+msgstr "ažūrinės_trinkelės"
 
 msgid "compacted"
-msgstr ""
+msgstr "sutankintas"
 
 msgid "fine_gravel"
 msgstr "smulkus_žvyras"
@@ -16525,7 +16698,7 @@ msgid "ground"
 msgstr "žemė"
 
 msgid "mud"
-msgstr ""
+msgstr "purvas"
 
 msgid "sand"
 msgstr "smėlis"
@@ -16543,96 +16716,96 @@ msgid "Smoothness"
 msgstr "Lygumas"
 
 msgid "excellent"
-msgstr ""
+msgstr "puikus"
 
 msgid "Thin Rollers: rollerblade, skateboard"
-msgstr ""
+msgstr "Smulkūs ratukai: riedučiai, riedlentė"
 
 msgid "good"
-msgstr ""
+msgstr "geras"
 
 msgid "Thin Wheels: racing bike"
-msgstr ""
+msgstr "Ploni ratai: lenktyninis dviratis"
 
 msgid "intermediate"
-msgstr ""
+msgstr "vidutinis"
 
 msgid "Wheels: city bike, wheelchair, scooter"
-msgstr ""
+msgstr "Ratai: miesto dviratis, invalidų vežimėlis, paspirtukas"
 
 msgid "bad"
-msgstr ""
+msgstr "blogas"
 
 msgid "Robust Wheels: trekking bike, car, rickshaw"
-msgstr ""
+msgstr "Tvirti ratai: kelioninis dviratis, automobilis rikša"
 
 msgid "very_bad"
-msgstr ""
+msgstr "labai_blogas"
 
 msgid "High Clearance: light duty off-road vehicle"
 msgstr ""
 
 msgid "horrible"
-msgstr ""
+msgstr "siaubingas"
 
 msgid "Off-Road: heavy duty off-road vehicle"
-msgstr ""
+msgstr "Bekelė: sunkaus tipo visureigis"
 
 msgid "very_horrible"
-msgstr ""
+msgstr "labai_siaubingas"
 
 msgid "Specialized off-road: tractor, ATV"
-msgstr ""
+msgstr "Specializuota bekelė: traktorius, visureigis"
 
 msgid "impassable"
-msgstr ""
+msgstr "neišvažiuojamas"
 
 msgid "No wheeled vehicle"
-msgstr ""
+msgstr "Ne ratuota transporto priemonė"
 
 msgctxt "riding"
 msgid "horse_riding"
-msgstr ""
+msgstr "jodinėjimas"
 
 msgctxt "riding"
 msgid "pitch"
-msgstr ""
+msgstr "aikštelė"
 
 msgctxt "riding"
 msgid "sports_centre"
-msgstr ""
+msgstr "sporto_centras"
 
 msgctxt "riding"
 msgid "stadium"
-msgstr ""
+msgstr "stadionas"
 
 msgctxt "riding"
 msgid "track"
 msgstr "takas"
 
 msgid "clay"
-msgstr ""
+msgstr "molis"
 
 msgid "dirt"
-msgstr ""
+msgstr "gruntas"
 
 msgid "Lanes"
 msgstr "Juostos"
 
 msgid "Lanes in way direction"
-msgstr ""
+msgstr "Juostos kelio kryptimi"
 
 msgid "Lanes opposed to way direction"
-msgstr ""
+msgstr "Juostos prieš kelio kryptį"
 
 msgid "Max. speed (km/h)"
 msgstr "Greičio riba (km/h)"
 
 msgid "Max. speed in way direction"
-msgstr ""
+msgstr "Maks. greitis kelio kryptimi"
 
 msgid "Max. speed opposed to way direction"
-msgstr ""
+msgstr "Maks. greitis prieš kelio kryptį"
 
 msgid "Bridge"
 msgstr "Tiltas"
@@ -16671,23 +16844,27 @@ msgid "Width (meters)"
 msgstr "Plotis (metrais)"
 
 msgid "Sidewalk"
-msgstr ""
+msgstr "Šaligatvis"
 
 msgctxt "sidewalk"
 msgid "both"
-msgstr ""
+msgstr "abipus"
 
 msgctxt "sidewalk"
 msgid "left"
-msgstr ""
+msgstr "kairėje"
 
 msgctxt "sidewalk"
 msgid "right"
-msgstr ""
+msgstr "dešinėje"
 
 msgctxt "sidewalk"
 msgid "no"
-msgstr ""
+msgstr "nėra"
+
+msgctxt "sidewalk"
+msgid "separate"
+msgstr "atskiras"
 
 msgid "Service type"
 msgstr "Paslaugos tipas"
@@ -16696,32 +16873,32 @@ msgid "yard"
 msgstr "manevrinė stotis"
 
 msgid "siding"
-msgstr ""
+msgstr "atšaka"
 
 msgid "spur"
-msgstr ""
+msgstr "aklakelis"
 
 msgid "crossover"
-msgstr ""
+msgstr "susieinantys_bėgiai"
 
 msgid "Electrified"
 msgstr "Elektrifikavimas"
 
 msgctxt "electrified"
 msgid "contact_line"
-msgstr ""
+msgstr "kontaktinė_linija"
 
 msgctxt "electrified"
 msgid "no"
-msgstr ""
+msgstr "ne"
 
 msgctxt "electrified"
 msgid "yes"
-msgstr ""
+msgstr "taip"
 
 msgctxt "electrified"
 msgid "rail"
-msgstr ""
+msgstr "bėgis"
 
 msgid "Voltage in Volts (V)"
 msgstr "Įtampa voltais (V)"
@@ -17665,7 +17842,7 @@ msgid "Passing Places"
 msgstr "Apsilenkimo vietos"
 
 msgid "Residential"
-msgstr "Gyvenamoji gatvė"
+msgstr "Gyvenvietės gatvė"
 
 msgid "Bicycle Road"
 msgstr "Dviračių eismo kelias"
@@ -17741,7 +17918,7 @@ msgid ""
 msgstr ""
 
 msgid "Raceway"
-msgstr ""
+msgstr "Lenktynių trasa"
 
 msgid "Road (Unknown Type)"
 msgstr "Kelias (nežinomo tipo)"
@@ -17940,7 +18117,7 @@ msgid "grade1"
 msgstr "būklė1"
 
 msgid "Solid: paved or heavily compacted hardcore surface"
-msgstr ""
+msgstr "Kietas: grįstas arba kietai sutankintas kietas paviršius"
 
 msgid "grade2"
 msgstr "būklė2"
@@ -18726,9 +18903,9 @@ msgid "Bay"
 msgstr "Įlanka"
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
-"Didelis vandens telkinys iš dalies apsuptas žemės bet su didelėmis žiotimis."
 
 msgid "Shipping"
 msgstr "Laivininkystė"
@@ -19122,7 +19299,7 @@ msgid "Spaces for Women"
 msgstr "Vietos Moterims"
 
 msgid "Spaces for Parents"
-msgstr "Vietos Tėvams"
+msgstr "Vietos tėvams"
 
 msgid "See the Wiki for other capacity:[types]=*."
 msgstr ""
@@ -24565,6 +24742,9 @@ msgstr "Pažymėtos trasos: jodinėjimams"
 msgid "Waymarked Trails: Winter Sports"
 msgstr "Pažymėtos trasos: žiemos sportui"
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr "OSM tikrintuvė: geometrija"
 
@@ -24623,6 +24803,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -24704,6 +24887,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -24725,9 +24923,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -25324,6 +25519,9 @@ msgstr "Berlyno 2015 m. oro nuotraukos"
 msgid "Berlin aerial photograph 2016"
 msgstr "Berlyno 2016 m. oro nuotraukos"
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -25737,6 +25935,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Nigerio delta - 2012 m. spalis - Landsat"
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -26180,6 +26381,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr "MSR Maps Topo"
 
@@ -27397,6 +27601,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr "{0} ryšys be {0} žymos"
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr "religija be denominacijos"
 
@@ -27428,7 +27635,7 @@ msgid "{0} makes no sense"
 msgstr ""
 
 msgid "Nodes duplicating parent way tags"
-msgstr ""
+msgstr "Taškai dubliuoja tėvinio kelio žymas"
 
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
@@ -27581,10 +27788,6 @@ msgid "Customization of public public transport stops."
 msgstr ""
 
 msgid ""
-"Creating and handling address nodes and buildings within Czech Republic."
-msgstr "Kuriami ir tvarkomi adresų taškai ir pastatai Čekijos teritorijoje."
-
-msgid ""
 "Allows to import various file formats into JOSM directly. Currently "
 "supported: TangoGPS, Garmin Trainings Center TCX."
 msgstr ""
@@ -27635,9 +27838,6 @@ msgstr ""
 "Kalbėkite su naudotojais, redaguojančiais žemėlapį šalia jūsų, būkite "
 "informuotas, jeigu kažkas prie jūsų artėja."
 
-msgid "Allows you to view a GeoJSON file as a layer."
-msgstr "Leidžia peržiūrėti GeoJSON failą kaip sluoksnį."
-
 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."
@@ -27994,11 +28194,6 @@ msgid ""
 "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 ""
 
@@ -28621,15 +28816,15 @@ msgstr "Mapillary objektų sluoksnis"
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
+msgid "Start Mapillary layer"
+msgstr "Pradėti Mapillary sluoksnį"
+
 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"
 
@@ -28998,7 +29193,7 @@ msgid "View in browser"
 msgstr ""
 
 msgid "Copy key"
-msgstr ""
+msgstr "Kopijuoti raktą"
 
 msgid "Add Mapillary tag"
 msgstr ""
@@ -29202,7 +29397,7 @@ msgid "Start the training engine!"
 msgstr ""
 
 msgid "Edit opening hours"
-msgstr ""
+msgstr "Redaguoti darbo laiką"
 
 msgid "Edit time-tag of selected element in a graphical interface"
 msgstr ""
@@ -29945,6 +30140,148 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr "Nerasta adresų taškų pastatų viduje"
 
+msgid "Auto sourcing"
+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 "Pakeisti dabartinę projekciją"
+
+msgid "Extract commune boundary"
+msgstr "Išrinkti komunos ribą"
+
+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 "Atsiųsti vaizdus iš Prancūzų kadastro WMS"
+
+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 "{0} neleidžiama su dabartine projekcija"
+
+msgid ""
+"Cannot load cache {0} which is not compatible with current projection zone"
+msgstr ""
+"Nepavyko įkelti podėlio {0}, kuris yra nesuderinamas su dabartine "
+"projekcijos zona"
+
+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 "Vieta {0} jau ekrane. Podėlis neįkeltas."
+
+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 ""
+"<html>Įveskite miestelio, kaimo ar miesto pavadinimą.<br>Naudokite sintaksę "
+"ir skyrybą žinomą www.cadastre.gouv.fr .</html>"
+
+msgid "Departement"
+msgstr ""
+
+msgid "<html>Departement number (optional)</html>"
+msgstr ""
+
+msgid "Add new layer"
+msgstr "Pridėti naują sluoksnį"
+
+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 "PNG failai (*.png)"
+
+msgid "GeoTiff files (*.tif)"
+msgstr ""
+
+msgid "Export image (only raster images)"
+msgstr "Eksportuoti vaizdą (tik taškiniams vaizdams)"
+
+msgid ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -29960,85 +30297,83 @@ msgstr ""
 msgid "Enter addresses"
 msgstr "Įveskite adresus"
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
-"Vieta „{0}“ rasta podėlyje.\n"
-"Pirmiau įkelti podėlį?\n"
-"(Ne = naujas podėlis)"
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
-"Klaida įkeliant failą.\n"
-"Greičiausiai sena podėlio failo versija."
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
+msgstr "adresas"
+
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "symbol"
+msgstr "simbolis"
+
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "Select to download water bodies in the selected download area."
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "parcel"
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
-"Miestelis/miestas {0} nerastas ar neprieinamas\n"
-"arba atsisakyta veiksmo"
 
-msgid "Choose from..."
-msgstr "Pasirinkite iš..."
+msgid "section"
+msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
+msgstr "vietovė"
+
+msgid "Select to download localities in the selected download area."
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
-msgstr "Pakeisti dabartinę projekciją"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
+msgstr ""
 
 msgid "Replace original background by JOSM background color."
 msgstr ""
@@ -30088,27 +30423,6 @@ msgstr "vidutinis"
 msgid "low"
 msgstr ""
 
-msgid "symbol"
-msgstr "simbolis"
-
-msgid "parcel"
-msgstr ""
-
-msgid "parcel number"
-msgstr ""
-
-msgid "address"
-msgstr "adresas"
-
-msgid "locality"
-msgstr "vietovė"
-
-msgid "section"
-msgstr ""
-
-msgid "commune"
-msgstr ""
-
 msgid "Enable automatic caching."
 msgstr ""
 
@@ -30249,166 +30563,106 @@ msgstr ""
 msgid "Unexpected file extension. {0}"
 msgstr ""
 
-msgid "Add \"source=...\" to elements?"
-msgstr ""
-
-msgid "Downloading {0}"
-msgstr "Parsiunčiama {0}"
-
-msgid "Contacting WMS Server..."
-msgstr ""
-
-msgid "Create buildings"
-msgstr "Pastatų kūrimas"
-
 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 "Išrinkti geriausiai tinkančią ribą..."
-
-msgid "Create boundary"
-msgstr "Sukurti ribą"
-
-msgid "Contacting cadastre WMS ..."
-msgstr ""
-
-msgid "Image already loaded"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
+"Vieta „{0}“ rasta podėlyje.\n"
+"Pirmiau įkelti podėlį?\n"
+"(Ne = naujas podėlis)"
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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 "Išrinkti komunos ribą"
-
-msgid "Only on vectorized layers"
-msgstr ""
-
-msgid "Cancel current grab"
-msgstr ""
-
-msgid "Cancel current grab (only vector images)"
-msgstr ""
-
-msgid "Cadastre grab"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
+"Klaida įkeliant failą.\n"
+"Greičiausiai sena podėlio failo versija."
 
-msgid "Download Image from French Cadastre WMS"
-msgstr "Atsiųsti vaizdus iš Prancūzų kadastro WMS"
-
-msgid "Cadastre: {0}"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
-msgstr "{0} neleidžiama su dabartine projekcija"
-
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 msgstr ""
-"Nepavyko įkelti podėlio {0}, kuris yra nesuderinamas su dabartine "
-"projekcijos zona"
 
 msgid ""
-"Selected file {0} is not a cache file from this plugin (invalid extension)"
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
+"Miestelis/miestas {0} nerastas ar neprieinamas\n"
+"arba atsisakyta veiksmo"
 
-msgid "The location {0} is already on screen. Cache not loaded."
-msgstr "Vieta {0} jau ekrane. Podėlis neįkeltas."
-
-msgid "(optional)"
-msgstr ""
+msgid "Choose from..."
+msgstr "Pasirinkite iš..."
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
-msgstr ""
+msgid "Downloading {0}"
+msgstr "Parsiunčiama {0}"
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
-msgstr ""
+msgid "Create buildings"
+msgstr "Pastatų kūrimas"
 
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "<html>Departement number (optional)</html>"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Add new layer"
-msgstr "Pridėti naują sluoksnį"
-
-msgid "Open Cadastre Preferences"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Refine georeferencing"
-msgstr ""
+msgid "Extract best fitting boundary..."
+msgstr "Išrinkti geriausiai tinkančią ribą..."
 
-msgid "Improve georeferencing (only raster images)"
-msgstr ""
+msgid "Create boundary"
+msgstr "Sukurti ribą"
 
-msgid "Reset cookie"
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "Save image as..."
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "PNG files (*.png)"
-msgstr "PNG failai (*.png)"
-
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
-msgid "Export image (only raster images)"
-msgstr "Eksportuoti vaizdą (tik taškiniams vaizdams)"
-
 msgid ""
 "Click first corner for image cropping\n"
 "(two points required)"
@@ -30456,17 +30710,6 @@ 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 "Atstatyti poslinkį"
 
@@ -30544,7 +30787,7 @@ msgid "Activates the conflation plugin"
 msgstr ""
 
 msgid "Matches"
-msgstr ""
+msgstr "Atitikmenys"
 
 msgid "Reference only"
 msgstr ""
@@ -30553,7 +30796,7 @@ msgid "Subject only"
 msgstr ""
 
 msgid "Matches ({0})"
-msgstr ""
+msgstr "Atitikmenys ({0})"
 
 msgid "Reference only ({0})"
 msgstr ""
@@ -30568,7 +30811,7 @@ msgid "Configure conflation options"
 msgstr ""
 
 msgid "Remove selected matches"
-msgstr ""
+msgstr "Pašalinti pažymėtus atitikmenis"
 
 msgid "Remove ({0})"
 msgstr ""
@@ -30598,16 +30841,16 @@ msgid "Select the primitives currently selected in the list"
 msgstr ""
 
 msgid "Generating matches"
-msgstr ""
+msgstr "Generuojami atitikmenys"
 
 msgid "Finding matches"
-msgstr ""
+msgstr "Ieškoma atitikmenų"
 
 msgid "Sorting scores"
 msgstr ""
 
 msgid "Discarding inferior matches"
-msgstr ""
+msgstr "Atmetami prastesni atitikmenys"
 
 msgid "Subject"
 msgstr ""
@@ -30679,7 +30922,7 @@ msgid "Symmetric Difference (Centroids Aligned)"
 msgstr ""
 
 msgid "Compactness"
-msgstr ""
+msgstr "Kompaktiškumas"
 
 msgid "Angle Histogram. Bins: "
 msgstr ""
@@ -30758,7 +31001,7 @@ msgid "Configure conflation settings"
 msgstr ""
 
 msgid "Generate matches"
-msgstr ""
+msgstr "Generuoti atitikmenis"
 
 msgid "Merging"
 msgstr ""
@@ -30907,18 +31150,6 @@ msgstr ""
 "Nerodyti eigos lango, kuris rodomas atsiunčiant. Jei pažymėta, nėra "
 "indikacijos, kad kažkas yra daroma ir nėra būdo atsisakyti atsiuntimo."
 
-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 ""
 
@@ -36764,26 +36995,6 @@ msgstr "ciklas"
 msgid "mute"
 msgstr "nutildyti"
 
-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 ""
 
@@ -36837,10 +37048,10 @@ msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
 msgid "Fetch Wikidata IDs"
-msgstr ""
+msgstr "Gauti Wikidata IDs"
 
 msgid "Fetch Wikidata IDs using the ''wikipedia'' tag"
-msgstr ""
+msgstr "Gauti Wikidata IDs naudojant „wikipedia“ žymą"
 
 msgid "Fetching Wikidata IDs"
 msgstr ""
@@ -36872,9 +37083,11 @@ msgid ""
 "Copies the {0} template to the system clipboard instantiated with the "
 "coordinates of the first selected node"
 msgstr ""
+"Kopijuoja {0} šabloną į iškarpinę užpildytą pirmojo pažymėto taško "
+"koordinatėmis"
 
 msgid "Copy {0} template"
-msgstr ""
+msgstr "Kopijuoti {0} šabloną"
 
 msgid "Overwrite ''{0}'' tag {1} from {2} with new value ''{3}''?"
 msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
@@ -36882,7 +37095,7 @@ msgstr[0] ""
 msgstr[1] ""
 
 msgid "Search Wikidata items"
-msgstr ""
+msgstr "Ieškoti Wikidata elementų"
 
 msgid "Target key: "
 msgstr ""
@@ -36955,6 +37168,27 @@ msgid ""
 msgstr ""
 "Prideda „wikipedia“ žymą atitinkančią šį straipsnį pažymėtiems objektams"
 
+msgid "Download from Wikosm API"
+msgstr "Atsiųsti iš Wikosm API"
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+"Rasti mokslo įstaigas mažiausiai 2 km, daugiausiai 3 km nuo pažymėjimo centro"
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/lv.po b/i18n/po/lv.po
index c82d11d..69f31e4 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+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: 2017-09-03 04:51+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:49+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: lv\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -392,6 +392,34 @@ msgstr "Dzēst"
 msgid "Delete selected objects."
 msgstr "Dzēst iezīmētos objektus."
 
+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 "Delete Layer"
 msgstr ""
 
@@ -1304,29 +1332,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2735,34 +2749,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2794,6 +2780,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2913,6 +2922,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3020,6 +3041,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr "NEZINĀMS"
 
@@ -3063,6 +3087,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3699,6 +3726,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4738,9 +4819,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4786,6 +4864,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr "Sartē OSM API"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4807,9 +4888,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -5010,6 +5088,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5262,6 +5348,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7044,6 +7134,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7266,9 +7359,6 @@ 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."
@@ -8196,15 +8286,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8233,33 +8323,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8383,6 +8446,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8516,6 +8606,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8525,6 +8621,9 @@ msgstr ""
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8669,6 +8768,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9712,9 +9814,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12851,15 +12950,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -12965,6 +13055,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13214,14 +13307,6 @@ 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 ""
 
@@ -13285,9 +13370,6 @@ msgid ""
 "{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 ""
 
@@ -14519,9 +14601,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14618,10 +14697,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15209,6 +15284,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17246,7 +17325,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23072,6 +23152,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23130,6 +23213,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23211,6 +23297,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23232,9 +23333,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23829,6 +23927,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24240,6 +24341,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24683,6 +24787,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25886,6 +25993,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26066,10 +26176,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26117,9 +26223,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26463,11 +26566,6 @@ msgid ""
 "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 ""
 
@@ -27078,13 +27176,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28381,6 +28479,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28396,77 +28632,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28517,27 +28758,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28678,160 +28898,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28881,17 +29038,6 @@ 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 ""
 
@@ -29328,18 +29474,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35085,26 +35219,6 @@ 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 ""
 
@@ -35273,6 +35387,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/mk.po b/i18n/po/mk.po
index a0ff227..0b81306 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+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: 2017-09-03 04:52+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:51+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: mk\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -389,6 +389,34 @@ msgstr ""
 msgid "Delete selected objects."
 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 "Delete Layer"
 msgstr ""
 
@@ -1295,29 +1323,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2726,34 +2740,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2785,6 +2771,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2904,6 +2913,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3011,6 +3032,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr "НЕПОЗНАТО"
 
@@ -3054,6 +3078,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3690,6 +3717,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4731,9 +4812,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4779,6 +4857,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr "Го покревам прилогот на OSM"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4800,9 +4881,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -5003,6 +5081,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5255,6 +5341,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7037,6 +7127,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7259,9 +7352,6 @@ 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."
@@ -8189,15 +8279,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8226,33 +8316,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8376,6 +8439,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8509,6 +8599,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8518,6 +8614,9 @@ msgstr ""
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8662,6 +8761,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9701,9 +9803,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12841,15 +12940,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -12955,6 +13045,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13204,14 +13297,6 @@ 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 ""
 
@@ -13275,9 +13360,6 @@ msgid ""
 "{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 ""
 
@@ -14509,9 +14591,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14608,10 +14687,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15199,6 +15274,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17236,7 +17315,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23062,6 +23142,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23120,6 +23203,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23201,6 +23287,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23222,9 +23323,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23819,6 +23917,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24230,6 +24331,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24673,6 +24777,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25876,6 +25983,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26056,10 +26166,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26107,9 +26213,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26453,11 +26556,6 @@ msgid ""
 "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 ""
 
@@ -27068,13 +27166,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28371,6 +28469,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28386,77 +28622,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28507,27 +28748,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28668,160 +28888,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28871,17 +29028,6 @@ 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 ""
 
@@ -29318,18 +29464,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35075,26 +35209,6 @@ 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 ""
 
@@ -35263,6 +35377,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/mr.po b/i18n/po/mr.po
index 97f5f8a..671160c 100644
--- a/i18n/po/mr.po
+++ b/i18n/po/mr.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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+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"
@@ -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: 2017-09-03 04:53+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:51+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: mr\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -394,6 +394,34 @@ msgstr ""
 msgid "Delete selected objects."
 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 "Delete Layer"
 msgstr ""
 
@@ -1314,30 +1342,15 @@ msgstr " [id: {0}]"
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 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 "Discourage upload"
 msgstr ""
 
@@ -2752,34 +2765,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2811,6 +2796,30 @@ msgstr[1] "{0} वस्तू निवडल्या"
 msgid "Sequence: {0}"
 msgstr "अनुक्रम: {0}"
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2930,6 +2939,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3037,6 +3058,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr "सागरी मैल"
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr "अज्ञात"
 
@@ -3080,6 +3104,9 @@ msgctxt "compass"
 msgid "E"
 msgstr "पू"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3716,6 +3743,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr "वर्णन"
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr "ही मदत दाखवा"
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr "उदाहरणे"
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4756,9 +4837,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4804,6 +4882,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr "OSM API प्रारंभत आहे"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4825,9 +4906,6 @@ msgstr "वापर"
 msgid "options"
 msgstr "पर्याय"
 
-msgid "Show this help"
-msgstr "ही मदत दाखवा"
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -5028,6 +5106,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5280,6 +5366,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7062,6 +7152,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7284,9 +7377,6 @@ 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."
@@ -8214,15 +8304,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8251,33 +8341,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8401,6 +8464,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8534,6 +8624,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr "मार्ग {0}"
 
@@ -8543,6 +8639,9 @@ msgstr "संबंध {0}"
 msgid "Object"
 msgstr "वस्तू"
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8687,6 +8786,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9726,9 +9828,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr "वर्णन"
-
 msgid "Timespan"
 msgstr ""
 
@@ -12876,15 +12975,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -12990,6 +13080,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13239,14 +13332,6 @@ 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 ""
 
@@ -13310,9 +13395,6 @@ msgid ""
 "{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 ""
 
@@ -14544,9 +14626,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14643,10 +14722,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15234,6 +15309,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17271,7 +17350,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23097,6 +23177,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23155,6 +23238,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23236,6 +23322,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23257,9 +23358,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23854,6 +23952,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24265,6 +24366,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24708,6 +24812,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25911,6 +26018,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26091,10 +26201,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26142,9 +26248,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26488,11 +26591,6 @@ msgid ""
 "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 ""
 
@@ -27103,13 +27201,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28406,6 +28504,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28421,77 +28657,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28542,27 +28783,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28703,160 +28923,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28906,17 +29063,6 @@ 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 ""
 
@@ -29353,18 +29499,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35110,26 +35244,6 @@ 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 ""
 
@@ -35298,6 +35412,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/ms.po b/i18n/po/ms.po
index d99ae8f..2213092 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+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: 2017-09-03 04:53+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:52+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: ms\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -387,6 +387,34 @@ msgstr ""
 msgid "Delete selected objects."
 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 "Delete Layer"
 msgstr ""
 
@@ -1293,29 +1321,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2724,34 +2738,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2783,6 +2769,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2902,6 +2911,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3009,6 +3030,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr "TIDAK DIKETAHUI"
 
@@ -3052,6 +3076,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3688,6 +3715,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4728,9 +4809,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4776,6 +4854,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr ""
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4797,9 +4878,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -5000,6 +5078,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5252,6 +5338,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7034,6 +7124,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7256,9 +7349,6 @@ 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."
@@ -8186,15 +8276,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8223,33 +8313,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8373,6 +8436,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8506,6 +8596,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8515,6 +8611,9 @@ msgstr ""
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8659,6 +8758,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9698,9 +9800,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12837,15 +12936,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -12951,6 +13041,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13200,14 +13293,6 @@ 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 ""
 
@@ -13271,9 +13356,6 @@ msgid ""
 "{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 ""
 
@@ -14505,9 +14587,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14604,10 +14683,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15195,6 +15270,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17232,7 +17311,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23058,6 +23138,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23116,6 +23199,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23197,6 +23283,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23218,9 +23319,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23815,6 +23913,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24226,6 +24327,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24669,6 +24773,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25872,6 +25979,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26052,10 +26162,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26103,9 +26209,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26449,11 +26552,6 @@ msgid ""
 "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 ""
 
@@ -27064,13 +27162,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28367,6 +28465,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28382,77 +28618,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28503,27 +28744,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28664,160 +28884,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28867,17 +29024,6 @@ 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 ""
 
@@ -29314,18 +29460,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35071,26 +35205,6 @@ 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 ""
 
@@ -35259,6 +35373,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/nb.po b/i18n/po/nb.po
index 4770135..fdc5628 100644
--- a/i18n/po/nb.po
+++ b/i18n/po/nb.po
@@ -7,29 +7,29 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-02 22:59+0200\n"
-"PO-Revision-Date: 2017-07-25 19:26+0000\n"
-"Last-Translator: Kristoffer Hagen <Unknown>\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
+"PO-Revision-Date: 2017-09-21 13:42+0000\n"
+"Last-Translator: Anders Lyngvi Fougner <Unknown>\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: 2017-09-03 04:54+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:53+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: nb\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
-msgstr "{0}: alternativ''{1}'' er tvetydig"
+msgstr "{0}: alternativ ''{1}'' er tvetydig"
 
 msgid "{0}: option ''--{1}'' does not allow an argument"
-msgstr "{0}: alternativ''--{1}'' følger ikke et argument"
+msgstr "{0}: alternativ ''--{1}'' tillater ikke et argument"
 
 msgid "{0}: option ''{1}{2}'' does not allow an argument"
-msgstr "{0}: alternativ''{1}{2}'' tillater ikke et argument"
+msgstr "{0}: alternativ ''{1}{2}'' tillater ikke et argument"
 
 msgid "{0}: option ''{1}'' requires an argument"
-msgstr "{0}: alternativ''{1}'' krever et argument"
+msgstr "{0}: alternativ ''{1}'' krever et argument"
 
 msgid "{0}: unrecognized option ''--{1}''"
 msgstr "{0}: ukjent alternativ ''--{1}''"
@@ -243,7 +243,7 @@ msgid "Please select at least three nodes."
 msgstr "Velg minst 3 noder"
 
 msgid "Can not align a polygon. Abort."
-msgstr ""
+msgstr "Klarer ikke å tilpasse polygonet. Avbryt."
 
 msgid "Intersection of three or more ways can not be solved. Abort."
 msgstr "Krysning av tre eller flere veier kan ikke løses. Avbryter."
@@ -403,6 +403,45 @@ msgstr "Slett"
 msgid "Delete selected objects."
 msgstr "Slett valgte objekter."
 
+msgid "Delete confirmation"
+msgstr "Slett bekreftelse"
+
+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 ""
+"Du er i ferd med å slette noder utenfor nedlastet område.<br>Dette kan skape "
+"problemer fordi de kan være i bruk av andre objekter (som du ikke kan se nå) "
+".<br>Er du sikker på at du vil slette nodene?"
+
+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 ""
+"Du er i ferd med å slette ufullstendige objekter.<br>Dette vil medføre "
+"problemer ettersom du ikke ser hele objektet.<br>Ønsker du virkelig å slette?"
+
+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] ""
+"Du er i ferd med å slette {0} relasjon: {1}<br/>Dette steget er sjelden "
+"nødvendig og kan ikke enkelt omgjøres etter opplasting til server.<br/>Vil "
+"du virkelig slette?"
+msgstr[1] ""
+"Du er i ferd med å slette {0} relasjoner: {1}<br/>Dette steget er sjelden "
+"nødvendig og kan ikke enkelt omgjøres etter opplasting til server.<br/>Vil "
+"du virkelig slette?"
+
+msgid "Delete relation?"
+msgstr "Slette relasjon?"
+
 msgid "Delete Layer"
 msgstr "Fjern lag"
 
@@ -438,7 +477,7 @@ msgid "Download data"
 msgstr "Last ned data"
 
 msgid "Download map data from a server of your choice"
-msgstr ""
+msgstr "Last ned kartdata fra selvvalgt server"
 
 msgid ""
 "<html>This action will require {0} individual<br>download requests. Do you "
@@ -631,7 +670,7 @@ msgid "Added node on all intersections"
 msgstr "Noder er lagt til i alle skjæringspunkt"
 
 msgid "Assemble new polygons"
-msgstr ""
+msgstr "Sett sammen nye polygoner"
 
 msgid "Delete relations"
 msgstr "Slett relasjoner"
@@ -917,7 +956,11 @@ msgid_plural ""
 "Cannot open {0} files because files do not exist or no suitable file "
 "importer is available."
 msgstr[0] ""
+"Klarer ikke å åpne {0} fil ettersom den ikke eksisterer eller fordi ingen "
+"passende importmetode er tilgjengelig."
 msgstr[1] ""
+"Klarer ikke å åpne {0} filer ettersom de ikke eksisterer eller fordi ingen "
+"passende importmetode er tilgjengelig."
 
 msgid "no importer"
 msgstr "ingen importør"
@@ -1035,6 +1078,8 @@ msgid ""
 "<html>Please make sure all selected ways head in a similar direction<br>or "
 "orthogonalize them one by one.</html>"
 msgstr ""
+"<html>Vennligst pass på at alle valgte linjer går i omtrent samme "
+"retning<br>eller ortogonaliser dem én og én.</html>"
 
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr "Vennligst velg linjer med vinkler på omtrent 90 eller 180 grader."
@@ -1350,31 +1395,15 @@ msgstr " [id: {0}]"
 msgid "Segment {0}: {1}"
 msgstr "Segment {0}: {1}"
 
-msgid "You must select two or more nodes to split a circular way."
-msgstr "Velg to eller flere noder for å splitte sirkelformet linje."
-
-msgid ""
-"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
-"middle of the way.)"
-msgstr ""
-"Linje kan ikke splittes i valgte noder. (Tips: velg noder mot midten av "
-"linjen.)"
+msgid "Search preset"
+msgstr "Søk etter forhåndsinnstilling"
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
-msgstr ""
+msgid "Show preset search dialog"
+msgstr "Vis søkevindu for forhåndsinnstillinger"
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] "Del vei {0} inn i {1} del"
-msgstr[1] "Del vei {0} inn i {1} deler"
-
 msgid "Discourage upload"
 msgstr "Fraråde opplasting"
 
@@ -2815,37 +2844,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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 ""
-"Du er i ferd med å slette noder utenfor nedlastet område.<br>Dette kan skape "
-"problemer fordi de kan være i bruk av andre objekter (som du ikke kan se nå) "
-".<br>Er du sikker på at du vil slette nodene?"
-
-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] "Flytt {0} node"
@@ -2877,6 +2875,31 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+msgid "You must select two or more nodes to split a circular way."
+msgstr "Velg to eller flere noder for å splitte sirkelformet linje."
+
+msgid ""
+"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
+"middle of the way.)"
+msgstr ""
+"Linje kan ikke splittes i valgte noder. (Tips: velg noder mot midten av "
+"linjen.)"
+
+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] "Del vei {0} inn i {1} del"
+msgstr[1] "Del vei {0} inn i {1} deler"
+
 msgid "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2998,6 +3021,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3105,6 +3140,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr "Ukjent"
 
@@ -3148,6 +3186,9 @@ msgctxt "compass"
 msgid "E"
 msgstr "Ø"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3788,6 +3829,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr "Beskrivelse"
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr "Vis hjelp"
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr "Eksempler"
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4837,9 +4932,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr "Forskyvning"
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4885,6 +4977,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr "Starter OSM API"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4906,9 +5001,6 @@ msgstr "bruk"
 msgid "options"
 msgstr "innstillinger"
 
-msgid "Show this help"
-msgstr "Vis hjelp"
-
 msgid "Standard unix geometry argument"
 msgstr "Standard Unix-geometri"
 
@@ -5109,6 +5201,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr "Fil"
@@ -5361,6 +5461,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -6669,7 +6773,7 @@ msgid "Map paint preferences"
 msgstr ""
 
 msgid "Map Paint Styles"
-msgstr "Map Pain stiler"
+msgstr "Stilsett for karttegning (MapCSS)"
 
 msgid "configure the map painting style"
 msgstr ""
@@ -7170,6 +7274,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7392,9 +7499,6 @@ msgstr ""
 msgid "Please enter or paste an URL to retrieve changesets from the OSM API."
 msgstr ""
 
-msgid "Examples"
-msgstr "Eksempler"
-
 msgid ""
 "Note that changeset queries are currently always submitted to ''{0}'', "
 "regardless of the host, port and path of the URL entered below."
@@ -7435,28 +7539,28 @@ msgid "Cannot restrict the changeset query to the user name ''{0}''"
 msgstr ""
 
 msgid "Please enter a valid user ID"
-msgstr ""
+msgstr "Vennligst skriv inn en gyldig bruker-ID"
 
 msgid "Invalid user ID"
-msgstr ""
+msgstr "Ugyldig bruker-ID"
 
 msgid "Please enter a non-empty user name"
-msgstr ""
+msgstr "Vennligst skriv inn et brukernavn"
 
 msgid "Invalid user name"
-msgstr ""
+msgstr "Ugyldig brukernavn"
 
 msgid "Activate"
-msgstr ""
+msgstr "Aktivér"
 
 msgid "Activate the selected layer"
-msgstr ""
+msgstr "Aktivér valgt lag"
 
 msgid "Activate layer"
-msgstr ""
+msgstr "Aktivér lag"
 
 msgid "Delete the selected layers."
-msgstr ""
+msgstr "Slett valgte lag."
 
 msgid "Duplicate this layer"
 msgstr ""
@@ -8327,15 +8431,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8364,33 +8468,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr "Historisk"
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8514,6 +8591,33 @@ msgstr "Flytbart kart"
 msgid "Tile Numbers"
 msgstr "Flis-nummer"
 
+msgid "history"
+msgstr "Historisk"
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8653,6 +8757,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr "Linje {0}"
 
@@ -8662,6 +8772,9 @@ msgstr ""
 msgid "Object"
 msgstr "Objekt"
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8818,6 +8931,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "Gi en kort kommentar for endringene du laster opp:"
 
@@ -9808,6 +9924,8 @@ msgid ""
 "Aerial imagery \"{0}\" might be misaligned. Please check its offset using "
 "GPS tracks!"
 msgstr ""
+"Flyfoto fra kilden \"{0}\" kan ligge skjevt. Vennligst sjekk offset ved "
+"hjelp av flere GPS-spor (eller f.eks. Strava heatmap)!"
 
 msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
 msgstr ""
@@ -9868,9 +9986,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr "Beskrivelse"
-
 msgid "Timespan"
 msgstr ""
 
@@ -13054,15 +13169,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr "Feil ved lesing av {0}: "
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr "Objektmaler"
 
@@ -13168,6 +13274,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13426,14 +13535,6 @@ 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 ""
 
@@ -13497,9 +13598,6 @@ msgid ""
 "{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 "Uventet ID-format i svar fra tjener – leste «{0}»"
 
@@ -14740,9 +14838,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14839,10 +14934,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15434,6 +15525,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17471,7 +17566,8 @@ msgid "Bay"
 msgstr "Havbukt"
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23301,6 +23397,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23359,6 +23458,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23440,6 +23542,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23461,9 +23578,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -24058,6 +24172,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24469,6 +24586,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24912,6 +25032,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -26121,6 +26244,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26301,10 +26427,6 @@ msgid "Customization of public public transport stops."
 msgstr ""
 
 msgid ""
-"Creating and handling address nodes and buildings within Czech Republic."
-msgstr "Lag og håntere addressenoder og bygninger i den Tsjekkiske Republikk"
-
-msgid ""
 "Allows to import various file formats into JOSM directly. Currently "
 "supported: TangoGPS, Garmin Trainings Center TCX."
 msgstr ""
@@ -26355,9 +26477,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26713,11 +26832,6 @@ msgid ""
 "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 "Last enkelt ned data langs strekninger av sammenknyttede veier."
 
@@ -27330,13 +27444,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28633,6 +28747,148 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+msgstr "Auto sourcing"
+
+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 "Extract commune boundary"
+msgstr "Hent kommunens grenser"
+
+msgid "Only on vectorized layers"
+msgstr "Kun ved vektoriserte lag"
+
+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 "Last ned bilder fra fransk Cadastre WMS"
+
+msgid "Cadastre: {0}"
+msgstr "Fransk Cadastre: {0}"
+
+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 "Lst område fra mellomlager (bare hvis mellomlager er aktivt)"
+
+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 "Bytt område"
+
+msgid "Set a new location for the next request"
+msgstr "Bruk et nytt områder for neste nedlasting"
+
+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 ""
+"<html>Oppgi by, landsby eller stedsnavn.<br>Bruk nøyaktig skrivemåte som i "
+"www.cadastre.gouv.fr .</html>"
+
+msgid "Departement"
+msgstr ""
+
+msgid "<html>Departement number (optional)</html>"
+msgstr ""
+
+msgid "Add new layer"
+msgstr "Legg til nytt lag"
+
+msgid "Open Cadastre Preferences"
+msgstr ""
+
+msgid "Refine georeferencing"
+msgstr ""
+
+msgid "Improve georeferencing (only raster images)"
+msgstr ""
+
+msgid "Reset cookie"
+msgstr "Nullstill cookie"
+
+msgid "Get a new cookie (session timeout)"
+msgstr "Be om ny cookie (Internett sesjon nedkobling)"
+
+msgid "Save image as..."
+msgstr ""
+
+msgid "PNG files (*.png)"
+msgstr ""
+
+msgid "GeoTiff files (*.tif)"
+msgstr ""
+
+msgid "Export image (only raster images)"
+msgstr ""
+
+msgid ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+"Fler enn ett  WMS lag tilstede\n"
+"Velg ett og prøv på nytt"
+
 msgid "on polygon"
 msgstr ""
 
@@ -28648,77 +28904,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
+msgstr "Tilpass WMS"
+
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Add \"source=...\" to elements?"
+msgstr "Legg inn kilde ( source=...) på element?"
+
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Objects:"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "address"
+msgstr "adresse"
+
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "symbol"
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download water bodies in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "parcel"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
-msgstr "Feil URL for lesing av Matrikkel."
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
-msgstr "Velg fra …"
+msgid "section"
+msgstr ""
 
-msgid "Select commune"
-msgstr "Velg kommune"
+msgid "Select to download cadastral sections in the selected download area."
+msgstr ""
 
-msgid "Auto sourcing"
-msgstr "Auto sourcing"
+msgid "locality"
+msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28769,27 +29030,6 @@ msgstr ""
 msgid "low"
 msgstr "lav"
 
-msgid "symbol"
-msgstr ""
-
-msgid "parcel"
-msgstr ""
-
-msgid "parcel number"
-msgstr ""
-
-msgid "address"
-msgstr "adresse"
-
-msgid "locality"
-msgstr ""
-
-msgid "section"
-msgstr ""
-
-msgid "commune"
-msgstr ""
-
 msgid "Enable automatic caching."
 msgstr "Aktiviser automatisk mellomlager."
 
@@ -28942,164 +29182,99 @@ msgstr ""
 msgid "Unexpected file extension. {0}"
 msgstr ""
 
-msgid "Add \"source=...\" to elements?"
-msgstr "Legg inn kilde ( source=...) på element?"
-
-msgid "Downloading {0}"
-msgstr "Laster ned {0}"
-
-msgid "Contacting WMS Server..."
-msgstr "Kobler til WMS-tjener …"
-
-msgid "Create buildings"
-msgstr "Lag bygninger"
-
 msgid ""
-"To avoid cadastre WMS overload,\n"
-"building import size is limited to 1 km2 max."
-msgstr ""
-"For å unngå overbelastning av Cadastre  WMS,\n"
-"bygningsimport er maks 1 km2."
-
-msgid "Please, enable auto-sourcing and check cadastre millesime."
-msgstr "Vennligst aktiviser \"auto-sourcing\" og sjekk Cadastre millesime."
-
-msgid "Extract SVG ViewBox..."
-msgstr "Hent ut SVG-ViewBox …"
-
-msgid "Extract best fitting boundary..."
-msgstr "Hent ut beste avgrensing …"
-
-msgid "Create boundary"
-msgstr "Lag avgrensing"
-
-msgid "Contacting cadastre WMS ..."
-msgstr ""
-
-msgid "Image already loaded"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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 "Hent kommunens grenser"
-
-msgid "Only on vectorized layers"
-msgstr "Kun ved vektoriserte lag"
-
-msgid "Cancel current grab"
-msgstr ""
-
-msgid "Cancel current grab (only vector images)"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Cadastre grab"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Download Image from French Cadastre WMS"
-msgstr "Last ned bilder fra fransk Cadastre WMS"
-
-msgid "Cadastre: {0}"
-msgstr "Fransk Cadastre: {0}"
-
-msgid "Georeference an image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
-msgstr "Lst område fra mellomlager (bare hvis mellomlager er aktivt)"
-
-msgid "{0} not allowed with the current projection"
-msgstr ""
+msgid "CadastreGrabber: Illegal url."
+msgstr "Feil URL for lesing av Matrikkel."
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
-msgstr ""
+msgid "Choose from..."
+msgstr "Velg fra …"
 
-msgid "Change location"
-msgstr "Bytt område"
+msgid "Select commune"
+msgstr "Velg kommune"
 
-msgid "Set a new location for the next request"
-msgstr "Bruk et nytt områder for neste nedlasting"
+msgid "Downloading {0}"
+msgstr "Laster ned {0}"
 
-msgid "Add a new municipality layer"
-msgstr ""
+msgid "Contacting WMS Server..."
+msgstr "Kobler til WMS-tjener …"
 
-msgid "Commune"
-msgstr ""
+msgid "Create buildings"
+msgstr "Lag bygninger"
 
 msgid ""
-"<html>Enter the town,village or city name.<br>Use the syntax and punctuation "
-"known by www.cadastre.gouv.fr .</html>"
-msgstr ""
-"<html>Oppgi by, landsby eller stedsnavn.<br>Bruk nøyaktig skrivemåte som i "
-"www.cadastre.gouv.fr .</html>"
-
-msgid "Departement"
-msgstr ""
-
-msgid "<html>Departement number (optional)</html>"
-msgstr ""
-
-msgid "Add new layer"
-msgstr "Legg til nytt lag"
-
-msgid "Open Cadastre Preferences"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
+"For å unngå overbelastning av Cadastre  WMS,\n"
+"bygningsimport er maks 1 km2."
 
-msgid "Refine georeferencing"
-msgstr ""
+msgid "Please, enable auto-sourcing and check cadastre millesime."
+msgstr "Vennligst aktiviser \"auto-sourcing\" og sjekk Cadastre millesime."
 
-msgid "Improve georeferencing (only raster images)"
-msgstr ""
+msgid "Extract SVG ViewBox..."
+msgstr "Hent ut SVG-ViewBox …"
 
-msgid "Reset cookie"
-msgstr "Nullstill cookie"
+msgid "Extract best fitting boundary..."
+msgstr "Hent ut beste avgrensing …"
 
-msgid "Get a new cookie (session timeout)"
-msgstr "Be om ny cookie (Internett sesjon nedkobling)"
+msgid "Create boundary"
+msgstr "Lag avgrensing"
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -29149,19 +29324,6 @@ msgstr ""
 msgid "Click second Lambert crosspiece for georeferencing"
 msgstr ""
 
-msgid "Adjust WMS"
-msgstr "Tilpass WMS"
-
-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 ""
-"Fler enn ett  WMS lag tilstede\n"
-"Velg ett og prøv på nytt"
-
 msgid "Reset offset"
 msgstr ""
 
@@ -29601,18 +29763,6 @@ msgid ""
 "to cancel the download."
 msgstr ""
 
-msgid "Split area"
-msgstr "Del område"
-
-msgid "Splits an area by an untagged way."
-msgstr "Deler et område med en umerket linje."
-
-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 "TangoGPS-filer (*.log)"
 
@@ -35373,36 +35523,16 @@ msgid "play"
 msgstr ""
 
 msgid "loop"
-msgstr ""
+msgstr "sløyfe"
 
 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 ""
+msgstr "Demp"
 
 msgid "Way Download"
-msgstr ""
+msgstr "Last ned linje"
 
 msgid "Download map data on the end of selected way"
-msgstr ""
+msgstr "Last ned kartdata ved enden av valgt linje"
 
 msgid ""
 "<html>Neither a node nor a way with an endpoint outside of the<br>current "
@@ -35412,9 +35542,10 @@ msgstr ""
 
 msgid "<html>Could not find a unique node to start downloading from.</html>"
 msgstr ""
+"<html>Klarte ikke å finne en unik node å starte nedlasting fra.</html>"
 
 msgid "<html>There are no ways connected to node ''{0}''. Aborting.</html>"
-msgstr ""
+msgstr "<html>Det er ingen linjer koblet til node ''{0}''. Avbryter.</html>"
 
 msgid ""
 "Way downloader data inconsistency. Prior connected way ''{0}'' wasn''t "
@@ -35430,34 +35561,34 @@ msgid ""
 msgstr ""
 
 msgid "Merge duplicate node?"
-msgstr ""
+msgstr "Slå sammen duplikatnode?"
 
 msgid "<html>No more connected ways to download.</html>"
-msgstr ""
+msgstr "<html>Ingen flere koblede linjer å laste ned.</html>"
 
 msgid "Node ''{0}'' is a junction with more than 2 connected ways."
-msgstr ""
+msgstr "Node ''{0}'' er et knutepunkt med mer enn 2 tilkoblede linjer."
 
 msgid "Enter search expression here.."
-msgstr ""
+msgstr "Skriv inn søkeuttrykk her.."
 
 msgid "Select waypoint to move map"
-msgstr ""
+msgstr "Velg node for å flytte kart"
 
 msgid "Waypoint search"
-msgstr ""
+msgstr "Nodesøk"
 
 msgid "Search after waypoint. Click and move the map view to the waypoint."
-msgstr ""
+msgstr "Søk etter node. Klikk og flytt kartet til noden."
 
 msgid "Fetch Wikidata IDs"
-msgstr ""
+msgstr "Få tak i Wikidata-ID-er"
 
 msgid "Fetch Wikidata IDs using the ''wikipedia'' tag"
-msgstr ""
+msgstr "Få tak i Wikidata-ID-er ved hjelp av ''wikipedia''-tagen"
 
 msgid "Fetching Wikidata IDs"
-msgstr ""
+msgstr "Får tak i Wikidata-ID-er"
 
 msgid "Add Wikidata"
 msgstr ""
@@ -35467,14 +35598,14 @@ msgstr ""
 
 msgid "Fetching {0} Wikidata ID for language ''{1}''"
 msgid_plural "Fetching {0} Wikidata IDs for language ''{1}''"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Skaffer {0} Wikidata-ID for språk ''{1}''"
+msgstr[1] "Skaffer {0} Wikidata ID-er for språk ''{1}''"
 
 msgid "Add Wikidata for language ''{0}''"
-msgstr ""
+msgstr "Legg til Wikidata for språk ''{0}''"
 
 msgid "Add names from Wikipedia"
-msgstr ""
+msgstr "Legg til navn fra Wikipedia"
 
 msgid ""
 "Fetches interwiki links from Wikipedia in order to add several name tags"
@@ -35486,7 +35617,7 @@ msgid ""
 msgstr ""
 
 msgid "Copy {0} template"
-msgstr ""
+msgstr "Kopiér {0}-mal"
 
 msgid "Overwrite ''{0}'' tag {1} from {2} with new value ''{3}''?"
 msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
@@ -35503,7 +35634,7 @@ msgid "Search Wikipedia category"
 msgstr ""
 
 msgid "Load category"
-msgstr ""
+msgstr "Last inn kategori"
 
 msgid "Fetch Wikipedia articles with coordinates"
 msgstr "Hent Wikipedia-artikler med koordinater"
@@ -35517,10 +35648,10 @@ msgid "Available via WIWOSM server"
 msgstr "Tilgjengelig via WIWOSM-serveren"
 
 msgid "Available in local dataset"
-msgstr ""
+msgstr "Tilgjengelig i lokalt datasett"
 
 msgid "Not linked yet"
-msgstr ""
+msgstr "Ikke lenket ennå"
 
 msgid "{0}: {1}"
 msgstr "{0}: {1}"
@@ -35529,10 +35660,10 @@ msgid "Wikidata"
 msgstr "Wikidata"
 
 msgid "Fetches all coordinates from Wikidata in the current view"
-msgstr ""
+msgstr "Henter alle koordinatene fra Wikidata i den nåværende visningen"
 
 msgid "Fetches all coordinates from Wikipedia in the current view"
-msgstr ""
+msgstr "Henter alle koordinatene fra Wikipedia i den nåværende visningen"
 
 msgid "Category"
 msgstr "Kategori"
@@ -35566,14 +35697,34 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr "hjelp"
+
+msgid "Server: "
+msgstr "Tjener: "
+
+msgid "Wikidata+OSM server"
+msgstr "Wikidata & OSM-server"
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
 msgid "Go driving"
-msgstr ""
+msgstr "Kjør en tur"
 
 msgid "Drive a race car on this layer"
-msgstr ""
+msgstr "Kjør en racerbil på dette laget"
 
 msgid "Tunnel Start"
 msgstr "Tunnelstart"
@@ -35600,31 +35751,31 @@ msgid "Test"
 msgstr "Test"
 
 msgid "View website"
-msgstr ""
+msgstr "Vis hjemmeside"
 
 msgid "View URL"
-msgstr ""
+msgstr "Vis URL"
 
 msgid "Send Email"
-msgstr ""
+msgstr "Send epost"
 
 msgid "View image"
-msgstr ""
+msgstr "Vis bilde"
 
 msgid "View %name% article"
-msgstr ""
+msgstr "Vis %name% artikkel"
 
 msgid "View Wikidata page"
-msgstr ""
+msgstr "Vis Wikidata-side"
 
 msgid "View Wikispecies page"
-msgstr ""
+msgstr "Vis Wikispecies-side"
 
 msgid "View UNESCO sheet"
-msgstr ""
+msgstr "Vis UNESCO-ark"
 
 msgid "View %name% image"
-msgstr ""
+msgstr "Vis %name% bilde"
 
 msgid "View %name% sheet of river"
 msgstr ""
diff --git a/i18n/po/nds.po b/i18n/po/nds.po
index 0a9e750..7f34516 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+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: 2017-09-03 04:54+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:52+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -387,6 +387,34 @@ msgstr "Löschen"
 msgid "Delete selected objects."
 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 "Delete Layer"
 msgstr ""
 
@@ -1293,29 +1321,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2723,34 +2737,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2782,6 +2768,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2901,6 +2910,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3008,6 +3029,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr ""
 
@@ -3051,6 +3075,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3687,6 +3714,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4727,9 +4808,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4775,6 +4853,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr ""
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4796,9 +4877,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -4999,6 +5077,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5251,6 +5337,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7033,6 +7123,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7255,9 +7348,6 @@ 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."
@@ -8185,15 +8275,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8222,33 +8312,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8372,6 +8435,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8505,6 +8595,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8514,6 +8610,9 @@ msgstr ""
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8658,6 +8757,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9697,9 +9799,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12836,15 +12935,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -12950,6 +13040,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13199,14 +13292,6 @@ 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 ""
 
@@ -13270,9 +13355,6 @@ msgid ""
 "{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 ""
 
@@ -14504,9 +14586,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14603,10 +14682,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15194,6 +15269,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17231,7 +17310,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23057,6 +23137,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23115,6 +23198,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23196,6 +23282,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23217,9 +23318,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23814,6 +23912,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24225,6 +24326,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24668,6 +24772,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25871,6 +25978,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26051,10 +26161,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26102,9 +26208,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26448,11 +26551,6 @@ msgid ""
 "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 ""
 
@@ -27063,13 +27161,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28366,6 +28464,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28381,77 +28617,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28502,27 +28743,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28663,160 +28883,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28866,17 +29023,6 @@ 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 ""
 
@@ -29313,18 +29459,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35070,26 +35204,6 @@ 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 ""
 
@@ -35258,6 +35372,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/nl.po b/i18n/po/nl.po
index 7581214..98624e1 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: 2017-09-02 22:59+0200\n"
-"PO-Revision-Date: 2017-07-02 11:29+0000\n"
-"Last-Translator: DiGro <Unknown>\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
+"PO-Revision-Date: 2017-10-01 13:00+0000\n"
+"Last-Translator: Don-vip <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: 2017-09-03 04:40+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-10-02 04:31+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: nl\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -408,6 +408,45 @@ msgstr "Verwijderen"
 msgid "Delete selected objects."
 msgstr "Geselecteerde objecten verwijderen."
 
+msgid "Delete confirmation"
+msgstr "Bevestig verwijderen"
+
+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 ""
+"U staat op het punt knopen te verwijderen buiten het gebied dat u hebt "
+"gedownload.<br>Dit kan problemen veroorzaken omdat andere objecten (die u "
+"niet ziet) ze zouden kunnen gebruiken.<br>Wilt u ze echt verwijderen?"
+
+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 ""
+"U gaat incomplete objecten verwijderen.<br>Dit zal problemen veroorzaken "
+"aangezien u niet het echte object ziet.<br>Wilt u ze echt verwijderen?"
+
+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] ""
+"U gaat verwijderen {0} relatie: {1}<br/>Deze stap is zelden nodig en kan "
+"niet eenvoudig ongedaan worden gemaakt als hij is geüpload naar de "
+"server.<br/>Wilt u werkelijk verwijderen?"
+msgstr[1] ""
+"U gaat verwijderen {0} relatie: {1}<br/>Deze stap is zelden nodig en kan "
+"niet eenvoudig ongedaan worden gemaakt als hij is geüpload naar de "
+"server.<br/>Wilt u werkelijk verwijderen?"
+
+msgid "Delete relation?"
+msgstr "Relatie verwijderen?"
+
 msgid "Delete Layer"
 msgstr "Laag verwijderen"
 
@@ -440,10 +479,10 @@ msgstr ""
 "* Drie knopen."
 
 msgid "Download data"
-msgstr "Ophalen gegevens"
+msgstr "Gegevens ophalen"
 
 msgid "Download map data from a server of your choice"
-msgstr ""
+msgstr "Kaartgegevens downloaden van een server van uw keuze"
 
 msgid ""
 "<html>This action will require {0} individual<br>download requests. Do you "
@@ -1426,35 +1465,14 @@ msgstr " [id: {0}]"
 msgid "Segment {0}: {1}"
 msgstr "Segment {0}: {1}"
 
-msgid "You must select two or more nodes to split a circular way."
-msgstr ""
-"Je moet twee of meer knopen selecteren om een rondgaande weg te splitsen"
-
-msgid ""
-"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
-"middle of the way.)"
-msgstr ""
-"De weg kan niet gesplitst worden bij de geselecteerde knopen. (Tip: "
-"selecteer knopen in het midden van de weg.)"
-
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
-msgstr ""
-"Een op een rol gebaseerd lid van de relatie werd gekopieerd naar alle nieuwe "
-"wegen.<br>U zou dit moeten verifiëren en corrigeren indien nodig."
+msgid "Search preset"
+msgstr "Voorkeuze zoeken"
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
-msgstr ""
-"Een lid van de relatie werd gekopieerd naar alle nieuwe wegen.<br>U zou dit "
-"moeten verifiëren en corrigeren indien nodig."
+msgid "Show preset search dialog"
+msgstr "Dialoogvenster Voorkeuze zoeken weergeven"
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] "Splits weg {0} in {1} deel"
-msgstr[1] "Splits weg {0} in {1} delen"
+msgid "Search presets"
+msgstr "Voorkeuzen zoeken"
 
 msgid "Discourage upload"
 msgstr "Discourage uploaden"
@@ -2554,7 +2572,7 @@ msgid "Invalid search expression"
 msgstr "Ongeldige zoekexpressie"
 
 msgid "Search by preset"
-msgstr ""
+msgstr "Zoeken op voorkeuze"
 
 msgid "Filter"
 msgstr "Filteren"
@@ -2660,10 +2678,11 @@ msgid "object without useful tags"
 msgstr "object zonder nuttige tags"
 
 msgid "all objects that use the address preset"
-msgstr ""
+msgstr "alle objecten die de voorkeuze voor adres gebruiken"
 
 msgid "all objects that use any preset under the Geography/Nature group"
 msgstr ""
+"alle objecten die een voorkeuze gebruiken van de groep Geografie/Natuur"
 
 msgid "metadata"
 msgstr "metadata"
@@ -2993,45 +3012,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] "Verwijder {0} relatie"
 msgstr[1] "Verwijder {0} relaties"
 
-msgid "Delete confirmation"
-msgstr "Bevestig verwijderen"
-
-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 ""
-"U staat op het punt knopen te verwijderen buiten het gebied dat u hebt "
-"gedownload.<br>Dit kan problemen veroorzaken omdat andere objecten (die u "
-"niet ziet) ze zouden kunnen gebruiken.<br>Wilt u ze echt verwijderen?"
-
-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 ""
-"U gaat incomplete objecten verwijderen.<br>Dit zal problemen veroorzaken "
-"aangezien u niet het echte object ziet.<br>Wilt u ze echt verwijderen?"
-
-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] ""
-"U gaat verwijderen {0} relatie: {1}<br/>Deze stap is zelden nodig en kan "
-"niet eenvoudig ongedaan worden gemaakt als hij is geüpload naar de "
-"server.<br/>Wilt u werkelijk verwijderen?"
-msgstr[1] ""
-"U gaat verwijderen {0} relatie: {1}<br/>Deze stap is zelden nodig en kan "
-"niet eenvoudig ongedaan worden gemaakt als hij is geüpload naar de "
-"server.<br/>Wilt u werkelijk verwijderen?"
-
-msgid "Delete relation?"
-msgstr "Relatie verwijderen?"
-
 msgid "Move {0} node"
 msgid_plural "Move {0} nodes"
 msgstr[0] "Verplaats {0} knoop"
@@ -3063,6 +3043,36 @@ msgstr[1] "{0} objecten geselecteerd"
 msgid "Sequence: {0}"
 msgstr "Volgorde: {0}"
 
+msgid "You must select two or more nodes to split a circular way."
+msgstr ""
+"Je moet twee of meer knopen selecteren om een rondgaande weg te splitsen"
+
+msgid ""
+"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
+"middle of the way.)"
+msgstr ""
+"De weg kan niet gesplitst worden bij de geselecteerde knopen. (Tip: "
+"selecteer knopen in het midden van de weg.)"
+
+msgid ""
+"A role based relation membership was copied to all new ways.<br>You should "
+"verify this and correct it when necessary."
+msgstr ""
+"Een op een rol gebaseerd lid van de relatie werd gekopieerd naar alle nieuwe "
+"wegen.<br>U zou dit moeten verifiëren en corrigeren indien nodig."
+
+msgid ""
+"A relation membership was copied to all new ways.<br>You should verify this "
+"and correct it when necessary."
+msgstr ""
+"Een lid van de relatie werd gekopieerd naar alle nieuwe wegen.<br>U zou dit "
+"moeten verifiëren en corrigeren indien nodig."
+
+msgid "Split way {0} into {1} part"
+msgid_plural "Split way {0} into {1} parts"
+msgstr[0] "Splits weg {0} in {1} deel"
+msgstr[1] "Splits weg {0} in {1} delen"
+
 msgid "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] "Transformeer {0} knoop"
@@ -3197,6 +3207,19 @@ msgstr "Ongeldige waarde ''{0}'' voor breedtegraad"
 msgid "Illegal longitude value ''{0}''"
 msgstr "Ongeldige waarde ''{0}'' voor lengtegraad"
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr "Maken van ontbrekende map voor voorkeuren mislukt: {0}"
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr "<html>Maken van ontbrekende map voor voorkeuren mislukt: {0}</html>"
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr "Maken van ontbrekende map voor gebruikersgegevens mislukt: {0}"
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+"<html>Maken van ontbrekende map voor gebruikersgegevens mislukt: {0}</html>"
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr "Maken van ontbrekende cache-map: {0} mislukt"
 
@@ -3331,6 +3354,9 @@ msgstr "Brits-Amerikaans"
 msgid "Nautical Mile"
 msgstr "Nautische mijl"
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr "Verwachtte niet-lege waarde voor parameter ''{0}'', kreeg ''{1}''"
+
 msgid "UNKNOWN"
 msgstr "ONBEKEND"
 
@@ -3375,6 +3401,9 @@ msgctxt "compass"
 msgid "E"
 msgstr "O"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr "Niet mogelijk te parsen als waarde voor coördinaat: ''{0}''"
+
 msgid "Date of imagery: {0}"
 msgstr "Datum afbeelding: {0}"
 
@@ -3747,7 +3776,7 @@ msgid "Range of numbers expected"
 msgstr "Een bereik van getallen werd verwacht"
 
 msgid "Unknown preset name: "
-msgstr ""
+msgstr "Onbekende naam voor voorkeuze: "
 
 msgid "Failed to parse MapCSS selector"
 msgstr "Parsen selectie MapCSS mislukt"
@@ -4068,6 +4097,69 @@ msgstr ""
 msgid "Custom Projection"
 msgstr "Aangepaste projectie"
 
+msgid "Error: {0}"
+msgstr "Fout: {0}"
+
+msgid "JOSM projection command line interface"
+msgstr "JOSM projectie interface voor de opdrachtregel"
+
+msgid "Description"
+msgstr "Beschrijving"
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+"Converteert coördinaten uit het ene coördinaten referentiesysteem naar een "
+"ander."
+
+msgid "Options"
+msgstr "Opties"
+
+msgid "Show this help"
+msgstr "Deze hulptekst tonen"
+
+msgid "Switch input and output crs"
+msgstr "Wisselen van CRS voor invoer en uitvoer"
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr "Wissel de volgorde van invoercoördinaten (oost/noord, lon/lat)"
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr "Wissel de volgorde van uitvoercoördinaten (oost/noord, lon/lat)"
+
+msgid "<crs>"
+msgstr "<crs>"
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+"De indeling voor invoer en uitvoer coördinaten referentiesysteem is "
+"soortgelijk aan die van de software voor PROJ.4."
+
+msgid "[file]"
+msgstr "[bestand]"
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+"Leest invoergegevens vanuit één of meer bestanden vermeld als positionele "
+"argumenten. Wanneer geen bestanden zijn opgegeven, of de ebstandsnaam is \"-"
+"\", worden gegevens gelezen vanuit de standaard invoer."
+
+msgid "Examples"
+msgstr "Voorbeelden"
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+"Verwachtte twee coördinaten, gescheiden door witruimte, gevonden {0} in "
+"''{1}''"
+
+msgid "Unable to parse number ''{0}''"
+msgstr "Niet mogelijk te parsen getal ''{0}''"
+
 msgid "GRS80"
 msgstr "GRS80"
 
@@ -5162,9 +5254,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr "Verschuiving"
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr "Verwachtte niet-lege waarde voor parameter ''{0}'', kreeg ''{1}''"
-
 msgid "Outdated Java version"
 msgstr "Verouderde Java-versie"
 
@@ -5199,7 +5288,7 @@ msgid "Would you like to update now ?"
 msgstr "Wilt u nu bijwerken?"
 
 msgid "Starting file watcher"
-msgstr ""
+msgstr "Bestandscontrole starten"
 
 msgid "Executing platform startup hook"
 msgstr "Platform-opstarthook uitvoeren"
@@ -5216,6 +5305,10 @@ msgstr "Initialiseren van gegevens van interne grenzen"
 msgid "Initializing OSM API"
 msgstr "OSM-API initialiseren"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+"Laag {0} verwijderd omdat die niet is toegestaan door de geconfigureerde API."
+
 msgid "Initializing internal traffic data"
 msgstr "Initialiseren van interne verkeersgegevens"
 
@@ -5237,9 +5330,6 @@ msgstr "gebruik"
 msgid "options"
 msgstr "opties"
 
-msgid "Show this help"
-msgstr "Deze hulptekst tonen"
-
 msgid "Standard unix geometry argument"
 msgstr "Standaard UNIX argument voor geometrie"
 
@@ -5472,6 +5562,14 @@ msgstr ""
 "ontbrekende configuratie voor de proxy kunnen liggen.<br>Wilt u nu uw "
 "instellingen voor de proxy wijzigen?"
 
+msgid "You have {0} unread message."
+msgid_plural "You have {0} unread messages."
+msgstr[0] "U heeft {0} niet gelezen bericht."
+msgstr[1] "U heeft {0} niet gelezen berichten."
+
+msgid "Click here to see your inbox."
+msgstr "Klik hier om uw postvak IN te bekijken."
+
 msgctxt "menu"
 msgid "File"
 msgstr "Bestand"
@@ -5737,6 +5835,12 @@ msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 "De huidige waarde is geen geldige tegelindex voor het opgegeven zoomniveau"
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+"Openen van het bugrapport is mislukt. Rapporteer dit handmatig met behulp "
+"van deze website:"
+
 msgid "You have encountered a bug in JOSM"
 msgstr "U bent een probleem tegengekomen in JOSM"
 
@@ -7714,6 +7818,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr "Werk de wijzigingenset bij vanaf de server van OSM"
 
+msgid "View changeset"
+msgstr "Wijzigingenset bekijken"
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7987,9 +8094,6 @@ msgid "Please enter or paste an URL to retrieve changesets from the OSM API."
 msgstr ""
 "Voer een URL in of plak die om wijzigingensets uit de OSM API op te halen."
 
-msgid "Examples"
-msgstr "Voorbeelden"
-
 msgid ""
 "Note that changeset queries are currently always submitted to ''{0}'', "
 "regardless of the host, port and path of the URL entered below."
@@ -8819,7 +8923,7 @@ msgid "Wrong number of arguments for bookmark"
 msgstr "Fout aantal argumenten voor bladwijzer"
 
 msgid "Home location"
-msgstr ""
+msgstr "Thuislocatie"
 
 msgid "Error reading bookmark entry: %s"
 msgstr "Fout bij het inlezen van bladwijzer: %s"
@@ -8864,7 +8968,7 @@ msgid "Rename the currently selected bookmark"
 msgstr "De huidige geselecteerde bladwijzers hernoemen"
 
 msgid "Download bookmarks for my {0} last changesets"
-msgstr ""
+msgstr "Bladwijzers voor mijn laatste {0} wijzigingensets downloaden"
 
 msgid "min lat"
 msgstr "min lat"
@@ -8966,7 +9070,7 @@ msgid "Download referrers (parent relations and ways)"
 msgstr "Download verwijzers (ouderrelaties en -wegen)"
 
 msgid "Download from OSM"
-msgstr ""
+msgstr "Downloaden vanaf OSM"
 
 msgid "Data Sources and Types:"
 msgstr "Gegevensbronnen en types:"
@@ -9014,86 +9118,65 @@ msgstr ""
 "server"
 
 msgid "Download from Overpass API"
+msgstr "Downloaden vanaf Overpass API"
+
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
+"Plaats uw query voor Overpass hieronder of genereer er ene met behulp van de "
+"Overpass Turbo Query Wizard"
 
 msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
+"Bouw een query voor Overpass met behulp van de Overpass Turbo Query Wizard "
+"tool"
 
 msgid "Query Wizard"
-msgstr ""
-
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
-msgstr ""
+msgstr "Query Wizard"
 
 msgid "Your saved queries:"
-msgstr ""
+msgstr "uw opgeslagen query''s:"
 
 msgid "Show/hide Overpass snippet list"
-msgstr ""
+msgstr "Overpass snipperlijst weergeven/verbergen"
 
 msgid "Overpass query:"
-msgstr ""
+msgstr "Overpass query:"
 
 msgid ""
 "You entered an empty query. Do you want to download all data in this area "
 "instead?"
 msgstr ""
+"U voerde een lege query in. Wilt u in plaats daarvan alle gegevens van dit "
+"gebied downloaden?"
 
 msgid "Download all data?"
-msgstr ""
+msgstr "Alle gegevens downloaden?"
 
 msgid "Add new snippet"
-msgstr ""
+msgstr "Nieuwe snipper toevoegen"
 
 msgid "Delete selected snippet"
-msgstr ""
+msgstr "Geselecteerde snipper verwijderen"
 
 msgid "Edit selected snippet"
-msgstr ""
-
-msgid "history"
-msgstr "geschiedenis"
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
+msgstr "Geselecteerde snipper bewerken"
 
 msgid "Overpass Turbo Query Wizard"
-msgstr ""
+msgstr "Overpass Turbo Query Wizard"
 
 msgid "Build query"
 msgstr "Query bouwen"
 
 msgid "Build query and execute"
-msgstr ""
+msgstr "Query bouwen en uitvoeren"
 
 msgid "Search :"
-msgstr ""
+msgstr "Zoeken :"
 
 msgid "The Overpass wizard could not parse the following query:"
-msgstr ""
+msgstr "De wizard van Overpass kon de volgende query niet parsen:"
 
 msgid "Parse error"
 msgstr "Fout bij parsen"
@@ -9102,58 +9185,76 @@ msgid ""
 "Allows you to interact with <i>Overpass API</i> by writing declarative, "
 "human-readable terms."
 msgstr ""
+"Stelt u in staat te communiceren met <i>Overpass API</i> door beschrijvende, "
+"door mensen te lezen termen te schrijven."
 
 msgid ""
 "The <i>Query Wizard</i> tool will transform those to a valid overpass query."
 msgstr ""
+"Het gereedschap <i>Query Wizard</i> zal deze naar een geldig query voor "
+"Overpass transformeren."
 
 msgid "For more detailed description see "
-msgstr ""
+msgstr "Voor een meer gedetailleerde beschrijving, zie "
 
 msgid "<a href=\"{0}\">OSM Wiki</a>."
-msgstr ""
+msgstr "<a href=\"{0}\">OSM Wiki</a>."
 
 msgid "Hints"
-msgstr ""
+msgstr "Hints"
 
 msgid "Download objects of a certain type."
-msgstr ""
+msgstr "Objecten van een bepaald type downloaden."
 
 msgid "Download object by specifying a specific location. For example,"
 msgstr ""
+"Object downloaden door een specifieke plaats te specificeren. Bijvoorbeeld:"
 
 msgid "{0} all objects having {1} as attribute are downloaded."
-msgstr ""
+msgstr "{0} alle objecten die {1} als attribuut hebben worden gedownload."
 
 msgid ""
 "{0} all object with the corresponding key/value pair located around Berlin. "
 "Note, the default value for radius is set to 1000m, but it can be changed in "
 "the generated query."
 msgstr ""
+"{0} alle objecten met het overeenkomende paar sleutel/waarde, gelegen rondom "
+"Berlijn. Onthoud dat de standaard waarde voor de  radius is ingesteld op "
+"1000 m., maar die kan worden gewijzigd in de gegenereerde query."
 
 msgid ""
 "{0} all objects within the current selection that have {1} as attribute."
 msgstr ""
+"{0} alle objecten binnen de huidige selectie die {1} als attribuut hebben."
 
 msgid ""
 "Instead of <i>location</i> any valid place name can be used like address, "
 "city, etc."
 msgstr ""
+"In plaats van <i>location</i> mag elke geldige plaatsnaam worden gebruikt "
+"zoals adres, stad, etc."
 
 msgid ""
 "<span>Download objects that have some concrete key/value pair, only the key "
 "with any contents for the value, the value matching some regular expression. "
 "\"Not equal\" operators are supported as well.</span>"
 msgstr ""
+"<span>Objecten downloaden die een concreet paar sleutel/waarde hebben, "
+"alleen de selutel met willekeurige inhoud voor de waarde, de waarde die "
+"overeenkomt met een reguliere expressie. Operatoren \"Niet gelijk aan\" "
+"worden ook ondersteund.</span>"
 
 msgid "<i>expression1 {0} expression2</i>"
-msgstr ""
+msgstr "<i>expressie1 {0} expressie2</i>"
 
 msgid ""
 "Basic logical operators can be used to create more sophisticated queries. "
 "Instead of \"or\" - \"|\", \"||\" can be used, and instead of \"and\" - "
 "\"&\", \"&&\"."
 msgstr ""
+"Basis logische operatoren mogen worden gebruikt om meer uitgebreide query''s "
+"te maken. In plaats van \"of\" - \"|\", mag \"||\" worden gebruikt, en in "
+"plaats van \"and\" - \"&\", \"&&\"."
 
 msgid "Class Type"
 msgstr "Klassetype"
@@ -9203,6 +9304,33 @@ msgstr "Slippy-kaart"
 msgid "Tile Numbers"
 msgstr "Tegelnummers"
 
+msgid "history"
+msgstr "geschiedenis"
+
+msgid "Please select an item first"
+msgstr "Selecteer eerst een item"
+
+msgid "Edit item"
+msgstr "Item bewerken"
+
+msgid "Add snippet"
+msgstr "Snipper toevoegen"
+
+msgid "Query cannot be empty"
+msgstr "Query mag niet leeg zijn"
+
+msgid "This name can be used for the item"
+msgstr "Deze naam mag worden gebruikt voor het item"
+
+msgid "Item with this name already exists"
+msgstr "Er bestaat al een item met deze naam"
+
+msgid "The item cannot be created with provided name"
+msgstr "Het item kan niet worden gemaakt met de voorgestelde naam"
+
+msgid "The item cannot be created with an empty query"
+msgstr "Het item kan niet worden gemaakt met een lege query"
+
 msgid "JOSM Help Browser"
 msgstr "JOSM Help-browser"
 
@@ -9362,6 +9490,12 @@ msgstr "Zoom in op deze knoop in de huidige gegevenslaag"
 msgid "Open a history browser with the history of this node"
 msgstr "Open een geschiedenisverkenner met de geschiedenis van deze knoop."
 
+msgid "View changeset in web browser"
+msgstr "Wijzigingenset in webbrowser bekijken"
+
+msgid "Open {0}"
+msgstr "Openen {0}"
+
 msgid "Way {0}"
 msgstr "Weg {0}"
 
@@ -9371,6 +9505,9 @@ msgstr "Relatie {0}"
 msgid "Object"
 msgstr "Object"
 
+msgid "Open Changeset Manager"
+msgstr "Beheren Wijzigingensets openen"
+
 msgid "Changeset comment"
 msgstr "Opmerking wijzigingenset"
 
@@ -9545,6 +9682,9 @@ msgstr ""
 "\"Opslaan\" selecteren om de laag op te slaan als het links gespecificeerde "
 "bestand."
 
+msgid "I would like someone to review my edits."
+msgstr "Ik wil graag dat iemand mijn bewerkingen nakijkt."
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "Beschrijf kort de veranderingen die je uploadt:"
 
@@ -10562,7 +10702,7 @@ msgid "Open OSM file"
 msgstr "Open OSM-bestand"
 
 msgid "Validation Error Files"
-msgstr ""
+msgstr "Bestanden Fouten validatie"
 
 msgid "WMS Files (*.wms)"
 msgstr "WMS-bestanden (*.wms)"
@@ -10733,9 +10873,6 @@ msgid_plural "{0} tracks"
 msgstr[0] "{0} spoor,"
 msgstr[1] "{0} sporen,"
 
-msgid "Description"
-msgstr "Beschrijving"
-
 msgid "Timespan"
 msgstr "Tijsduur"
 
@@ -10817,7 +10954,7 @@ msgid "Changes need uploading?"
 msgstr "Moeten de wijzigingen worden geüpload?"
 
 msgid "Save Note file"
-msgstr ""
+msgstr "Bestand met Opmerkingen opslaan"
 
 msgid "outside downloaded area"
 msgstr "buiten gedownload gebied"
@@ -10895,7 +11032,7 @@ msgid "No validation errors"
 msgstr "Geen fouten bij valideren"
 
 msgid "Save Validation errors file"
-msgstr ""
+msgstr "Bestand met Fouten validatie opslaan"
 
 msgid "Set WMS Bookmark"
 msgstr "Stel WMS-bladwijzer in"
@@ -14260,15 +14397,6 @@ msgstr "Voorkeuze sub-element zonder ouder"
 msgid "Error parsing {0}: "
 msgstr "Fout bij parsen van {0}: "
 
-msgid "Search preset"
-msgstr "Voorkeuze zoeken"
-
-msgid "Show preset search dialog"
-msgstr "Dialoogvenster Voorkeuze zoeken weergeven"
-
-msgid "Search presets"
-msgstr "Voorkeuzen zoeken"
-
 msgid "Presets"
 msgstr "Voorkeuze"
 
@@ -14389,6 +14517,9 @@ msgstr "Alle bestanden (*.*)"
 msgid "Received error page:"
 msgstr "Ontvangen pagina met fouten:"
 
+msgid "{0}... [please type its number]"
+msgstr "{0}... [typ het nummer]"
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -14697,14 +14828,6 @@ msgstr "Onbekende modus {0}."
 msgid "get number of unread messages"
 msgstr "haal aantal niet-gelezen berichten op"
 
-msgid "You have {0} unread message."
-msgid_plural "You have {0} unread messages."
-msgstr[0] "U heeft {0} niet gelezen bericht."
-msgstr[1] "U heeft {0} niet gelezen berichten."
-
-msgid "Click here to see your inbox."
-msgstr "Klik hier om uw postvak IN te bekijken."
-
 msgid "Message notifier"
 msgstr "Aanduiding voor berichten"
 
@@ -14773,10 +14896,6 @@ msgstr ""
 "Het ondersteunt protocolversie 0.6, terwijl de server zegt dat het {0} tot "
 "en met {1} ondersteunt."
 
-msgid "Removed layer {0} because it is not allowed by the configured API."
-msgstr ""
-"Laag {0} verwijderd omdat die niet is toegestaan door de geconfigureerde API."
-
 msgid "Unexpected format of ID replied by the server. Got ''{0}''."
 msgstr ""
 "Onverwachte indeling van ID geantwoord door de server. Kreeg ''{0}''."
@@ -15081,7 +15200,7 @@ msgid "Reading user info ..."
 msgstr "Informatie over gebruiker lezen ..."
 
 msgid "Reading user preferences ..."
-msgstr ""
+msgstr "Gebruikersvoorkeuren lezen ..."
 
 msgid "Starting to upload with one request per primitive ..."
 msgstr "Starten met uploaden van één verzoek per primitief ..."
@@ -16264,9 +16383,6 @@ msgstr ""
 "(zie http://forum.openstreetmap.org/viewtopic.php?id=25677).Momenteel heeft "
 "u {1,number,#}MB geheugen toegewezen aan JOSM"
 
-msgid "{0}... [please type its number]"
-msgstr "{0}... [typ het nummer]"
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -16381,12 +16497,6 @@ msgid "Failed to load XML schema."
 msgstr "Laden van XML-schema mislukt."
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-"Openen van het bugrapport is mislukt. Rapporteer dit handmatig met behulp "
-"van deze website:"
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -16987,6 +17097,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr "geen"
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr "afzonderlijk"
+
 msgid "Service type"
 msgstr "Type Service"
 
@@ -19053,9 +19167,11 @@ msgid "Bay"
 msgstr "Baai"
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
-"Een groot water, gedeeltelijk omsloten door land maar met een brede monding."
+"Een waterlichaam, meestal omsloten door land maar met een verbinding op "
+"niveau naar oceaan of een meer."
 
 msgid "Shipping"
 msgstr "Scheepvaart"
@@ -20726,7 +20842,7 @@ msgid "Nursing Home"
 msgstr "Verpleeghuis"
 
 msgid "Nursing Home (Legacy)"
-msgstr ""
+msgstr "Verpleeghuis (gedateerd)"
 
 msgid "Group Home"
 msgstr "Groepshuis"
@@ -23171,7 +23287,7 @@ msgid "Variety Store"
 msgstr "Euroshop"
 
 msgid "Charity"
-msgstr ""
+msgstr "Liefdadigheidsinstelling"
 
 msgid "Bookmaker"
 msgstr "Wedkantoor"
@@ -24066,55 +24182,55 @@ msgstr ""
 
 msgctxt "industrial"
 msgid "factory"
-msgstr ""
+msgstr "fabriek"
 
 msgctxt "industrial"
 msgid "grinding_mill"
-msgstr ""
+msgstr "metaalwerkerij"
 
 msgctxt "industrial"
 msgid "heating_station"
-msgstr ""
+msgstr "verwarmingsstation"
 
 msgctxt "industrial"
 msgid "machine_shop"
-msgstr ""
+msgstr "machinehandel"
 
 msgctxt "industrial"
 msgid "mine"
-msgstr ""
+msgstr "mijn"
 
 msgctxt "industrial"
 msgid "oil"
-msgstr ""
+msgstr "oliehandel"
 
 msgctxt "industrial"
 msgid "port"
-msgstr ""
+msgstr "havenbedrijf"
 
 msgctxt "industrial"
 msgid "salt_pond"
-msgstr ""
+msgstr "zoutwinning"
 
 msgctxt "industrial"
 msgid "sawmill"
-msgstr ""
+msgstr "houtzagerij"
 
 msgctxt "industrial"
 msgid "scrap_yard"
-msgstr ""
+msgstr "sloopbedrijf"
 
 msgctxt "industrial"
 msgid "shipyard"
-msgstr ""
+msgstr "scheepsbouw"
 
 msgctxt "industrial"
 msgid "slaughterhouse"
-msgstr ""
+msgstr "slachthuis"
 
 msgctxt "industrial"
 msgid "warehouse"
-msgstr ""
+msgstr "opslagplaats"
 
 msgid "Garages"
 msgstr "Garages"
@@ -24189,7 +24305,7 @@ msgid "Country code"
 msgstr "Landcode"
 
 msgid "Unit/Suite"
-msgstr ""
+msgstr "Eenheid/Suite"
 
 msgid "House name"
 msgstr "Huisnaam"
@@ -24487,10 +24603,10 @@ msgid "Label point"
 msgstr "Punt labellen"
 
 msgid "Outline of building"
-msgstr ""
+msgstr "Omtrek van gebouw"
 
 msgid "Inner segment"
-msgstr ""
+msgstr "Binnenste segment"
 
 msgid "Roof ridge"
 msgstr "Daknok"
@@ -24806,6 +24922,10 @@ msgid ""
 "select regions filled with +Vivid or custom area of interest imagery, 50cm "
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
+"DigitalGlobe-Premium is een mozaïek, samengesteld uit DigitalGlobe "
+"basiskaart met geselecteerde regio''s gevuld met +Vivid of afbeeldingen "
+"vanuit eigen gebied van interesse, 50cm resolutie of beter en meer frequent "
+"vernieuwd met doorlopende bijwerkingen."
 
 msgid "DigitalGlobe Standard Imagery"
 msgstr "DigitalGlobe Standard Imagery"
@@ -24815,9 +24935,13 @@ msgid ""
 "earth’s landmass, with 30-60cm or resolution where available, backfilled by "
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
+"DigitalGlobe-Standard is een gedeeltelijke verzameling van afbeeldingen die "
+"86% van de landmassa van de aarde bedekt, met 30-60cm of hogere resolutie "
+"waar beschikbaar, achtergrond gevuld door Landsat. Gemiddelde ouderdom is "
+"2,31 jaar, met enkele gebieden die 2x per jaar worden bijgewerkt."
 
 msgid "Esri World Imagery"
-msgstr ""
+msgstr "Esri World Imagery"
 
 msgid "OpenCycleMap"
 msgstr "OpenCycleMap"
@@ -24903,6 +25027,9 @@ msgstr "Weggemarkeerde paden: Paardrijden"
 msgid "Waymarked Trails: Winter Sports"
 msgstr "Weggemarkeerde paden: Wintersport"
 
+msgid "Wikimedia Map"
+msgstr "Wikimedia Map"
+
 msgid "OSM Inspector: Geometry"
 msgstr "OSM Inspector: Geometrie"
 
@@ -24967,136 +25094,153 @@ msgstr ""
 "Sentinel-2-afbeeldingen van Enderby Land en Kemp Coast (ware kleuren)"
 
 msgid "IGN topographical map (TMS)"
-msgstr ""
+msgstr "IGN topografische kaart (TMS)"
+
+msgid "IGN topographical map (WMTS)"
+msgstr "IGN topografische kaart (WMTS)"
 
 msgid "IGN topographical map (WMS)"
-msgstr ""
+msgstr "IGN topografische kaart (WMS)"
 
 msgid "IGN orthophoto AMBA a (WMTS)"
-msgstr ""
+msgstr "IGN luchtfoto AMBA a (WMTS)"
 
 msgid "IGN orthophoto AMBA b (WMTS)"
-msgstr ""
+msgstr "IGN luchtfoto AMBA b (WMTS)"
 
 msgid "IGN orthophoto AMBA c (WMTS)"
-msgstr ""
+msgstr "IGN luchtfoto AMBA c (WMTS)"
 
 msgid "IGN orthophoto AMBA d (WMTS)"
-msgstr ""
+msgstr "IGN luchtfoto AMBA d (WMTS)"
 
 msgid "IGN orthophoto AMBA e (WMTS)"
-msgstr ""
+msgstr "IGN luchtfoto AMBA e (WMTS)"
 
 msgid "IGN orthophoto AMBA f (WMTS)"
-msgstr ""
+msgstr "IGN luchtfoto AMBA f (WMTS)"
 
 msgid "IGN orthophoto AMBA 4 (WMTS)"
-msgstr ""
+msgstr "IGN luchtfoto AMBA 4 (WMTS)"
 
 msgid "IGN orthophoto AMBA 5 (WMTS)"
-msgstr ""
+msgstr "IGN luchtfoto AMBA 5 (WMTS)"
 
 msgid "IGN orthophoto AMBA 6 (WMTS)"
-msgstr ""
+msgstr "IGN luchtfoto AMBA 6 (WMTS)"
 
 msgid "IGN orthophoto AMBA 7 (WMTS)"
-msgstr ""
+msgstr "IGN luchtfoto AMBA 7 (WMTS)"
 
 msgid "IGN orthophoto Barranqueras (WMTS)"
-msgstr ""
+msgstr "IGN luchtfoto Barranqueras (WMTS)"
 
 msgid "IGN orthophoto Catamarca (WMTS)"
-msgstr ""
+msgstr "IGN luchtfoto Catamarca (WMTS)"
 
 msgid "IGN orthophoto Córdoba (WMTS)"
-msgstr ""
+msgstr "IGN luchtfoto Córdoba (WMTS)"
 
 msgid "IGN orthophoto El Calafate (WMTS)"
-msgstr ""
+msgstr "IGN luchtfoto El Calafate (WMTS)"
 
 msgid "IGN orthophoto El Rodeo (WMTS)"
-msgstr ""
+msgstr "IGN luchtfoto El Rodeo (WMTS)"
 
 msgid "IGN orthophoto Jujuy (WMTS)"
-msgstr ""
+msgstr "IGN luchtfoto Jujuy (WMTS)"
 
 msgid "IGN orthophoto La Rioja (WMTS)"
-msgstr ""
+msgstr "IGN luchtfoto La Rioja (WMTS)"
 
 msgid "IGN orthophoto Mendoza (WMTS)"
-msgstr ""
+msgstr "IGN luchtfoto Mendoza (WMTS)"
 
 msgid "IGN orthophoto Neuquén (WMTS)"
-msgstr ""
+msgstr "IGN luchtfoto Neuquén (WMTS)"
 
 msgid "IGN orthophoto Posadas (WMTS)"
-msgstr ""
+msgstr "IGN luchtfoto Posadas (WMTS)"
 
 msgid "IGN orthophoto Resistencia (WMTS)"
-msgstr ""
+msgstr "IGN luchtfoto Resistencia (WMTS)"
 
 msgid "IGN orthophoto Río Gallegos (WMTS)"
-msgstr ""
+msgstr "IGN luchtfoto Río Gallegos (WMTS)"
 
 msgid "IGN orthophoto Río Grande (WMTS)"
-msgstr ""
+msgstr "IGN luchtfoto Río Grande (WMTS)"
 
 msgid "IGN orthophoto Río Paraná A (WMTS)"
-msgstr ""
+msgstr "IGN luchtfoto Río Paraná A (WMTS)"
 
 msgid "IGN orthophoto Río Paraná B (WMTS)"
-msgstr ""
+msgstr "IGN luchtfoto Río Paraná B (WMTS)"
 
 msgid "IGN orthophoto Rosario (WMTS)"
-msgstr ""
+msgstr "IGN luchtfoto Rosario (WMTS)"
+
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr "IGN luchtfoto Salta (WMTS)"
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr "IGN luchtfoto Salta 1 (WMTS)"
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr "IGN luchtfoto Salta 2 (WMTS)"
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr "IGN luchtfoto Salta 3 (WMTS)"
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr "IGN luchtfoto Salta 4 (WMTS)"
 
 msgid "IGN orthophoto Salto Grande (WMTS)"
-msgstr ""
+msgstr "IGN luchtfoto Salto Grande (WMTS)"
 
 msgid "IGN orthophoto San Juan (WMTS)"
-msgstr ""
+msgstr "IGN luchtfoto San Juan (WMTS)"
 
 msgid "IGN orthophoto San Luis (WMTS)"
-msgstr ""
+msgstr "IGN luchtfoto San Luis (WMTS)"
 
 msgid "IGN orthophoto Santa Cruz III (WMTS)"
-msgstr ""
+msgstr "IGN luchtfoto Santa Cruz III (WMTS)"
 
 msgid "IGN orthophoto Santa Cruz IV (WMTS)"
-msgstr ""
+msgstr "IGN luchtfoto Santa Cruz IV (WMTS)"
 
 msgid "IGN orthophoto Santa Cruz VI (WMTS)"
-msgstr ""
+msgstr "IGN luchtfoto Santa Cruz VI (WMTS)"
 
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
-msgstr ""
-
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
+msgstr "IGN luchtfoto Santa Fe and Paraná (WMTS)"
 
 msgid "IGN orthophoto Tucumán (WMTS)"
-msgstr ""
+msgstr "IGN luchtfoto Tucumán (WMTS)"
 
 msgid "IGN orthophoto Ushuaia (WMTS)"
-msgstr ""
+msgstr "IGN luchtfoto Ushuaia (WMTS)"
 
 msgid "Educational map (WMS)"
-msgstr ""
+msgstr "Onderwijskundige kaart (WMS)"
 
 msgid "Ministry of Agroindustry (WMS)"
-msgstr ""
+msgstr "Ministry of Agroindustry (WMS)"
 
 msgid "Ministry of Energy and Mining (WMS)"
-msgstr ""
+msgstr "Ministry of Energy and Mining (WMS)"
 
 msgid "imagico.de OSM images for mapping: Bahía Blanca (low tide)"
 msgstr ""
+"imagico.de OSM-afbeeldingen voor in kaart brengen: Bahía Blanca (laagtij)"
 
 msgid "Tidal flats and islands at the coast (true color)"
-msgstr ""
+msgstr "Getijdeplaten en eilanden aan de kust (ware kleuren)"
 
 msgid "imagico.de OSM images for mapping: Bahía Blanca (high tide)"
 msgstr ""
+"imagico.de OSM-afbeeldingen voor in kaart brengen: Bahía Blanca (hoogtij)"
 
 msgid "AGRI black-and-white 2.5m"
 msgstr "AGRI zwart-wit 2.5m"
@@ -25530,10 +25674,10 @@ msgid "SDFE DTK Kort25"
 msgstr "SDFE DTK Kort25"
 
 msgid "SDFE Terrain Shadow Map (40 cm)"
-msgstr ""
+msgstr "SDFE Terrain Shadow Map (40 cm)"
 
 msgid "SDFE Surface Shadow Map (40 cm)"
-msgstr ""
+msgstr "SDFE Surface Shadow Map (40 cm)"
 
 msgid "SDFE Skærmkort"
 msgstr "SDFE Skærmkort"
@@ -25603,7 +25747,7 @@ msgid "French land registry"
 msgstr "Frans kadaster"
 
 msgid "CRAIG - Auvergne 2016 - 25 cm"
-msgstr ""
+msgstr "CRAIG - Auvergne 2016 - 25 cm"
 
 msgid "CRAIG - Auvergne 2013 - 25 cm"
 msgstr "CRAIG - Auvergne 2013 - 25 cm"
@@ -25693,6 +25837,9 @@ msgstr "Berlijn luchtfoto''s 2015"
 msgid "Berlin aerial photograph 2016"
 msgstr "Berlijn luchtfoto''s 2016"
 
+msgid "Berlin aerial photograph 2017"
+msgstr "Berlijn luchtfoto 2017"
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr "Deutsche Bahn VzG lijnen november 2013"
 
@@ -25753,6 +25900,7 @@ msgstr ""
 
 msgid "imagico.de OSM images for mapping: North Sea Coast 2017"
 msgstr ""
+"imagico.de OSM-afbeeldingen voor in kaart brengen: North Sea Coast 2017"
 
 msgid "Saxony latest aerial imagery"
 msgstr "Saksen laatste luchtfoto’s"
@@ -25799,17 +25947,23 @@ msgstr "Icebridge DMSafbeelding - uitlijning kan slecht zijn"
 
 msgid "imagico.de OSM images for mapping: Kangerlussuaq Autumn"
 msgstr ""
+"imagico.de OSM-afbeeldingen voor in kaart brengen: Kangerlussuaq herfst"
 
 msgid ""
 "Icebridge DMS image of the airport and settlement - alignment might be poor"
 msgstr ""
+"Icebridge DMS afbeelding van het vliegveld en de nederzetting - uitlijning "
+"zou slecht kunnen zijn"
 
 msgid "imagico.de OSM images for mapping: Kangerlussuaq Spring"
 msgstr ""
+"imagico.de OSM-afbeeldingen voor in kaart brengen: Kangerlussuaq voorjaar"
 
 msgid ""
 "Icebridge DMS image of the airport and roads - alignment might be poor"
 msgstr ""
+"Icebridge DMS afbeelding van het vliegveld en de wegen - uitlijning zou "
+"slecht kunnen zijn"
 
 msgid ""
 "imagico.de OSM images for mapping: Thule Airbase DMS low altitude overflight "
@@ -25951,11 +26105,14 @@ msgstr ""
 
 msgid "imagico.de OSM images for mapping: Sudirman Range 2015"
 msgstr ""
+"imagico.de OSM-afbeeldingen voor in kaart brengen: Sudirman Range 2015"
 
 msgid ""
 "Older image of the Sudirman Range with no fresh snow showing glacier extent "
 "(true color)"
 msgstr ""
+"Oudere afbeelding van de Sudirman Range zonder sneeuw die het bereik van de "
+"gletsjer weergeeft (ware kleuren)"
 
 msgid "imagico.de OSM images for mapping: Southeastern Sulawesi"
 msgstr "imagico.de OSM images for mapping: Southeastern Sulawesi"
@@ -25981,10 +26138,13 @@ msgstr "Ontbrekende eilanden in OSM (ware kleuren)"
 
 msgid "imagico.de OSM images for mapping: Sudirman Range 2016"
 msgstr ""
+"imagico.de OSM-afbeeldingen voor in kaart brengen: Sudirman Range 2016"
 
 msgid ""
 "Cloud free image of the Sudirman Range but with fresh snow (true color)"
 msgstr ""
+"Wolkenvrije afbeelding van de Sudirman Range maar met verse sneeuw (ware "
+"kleuren)"
 
 msgid "Ireland British War Office 1:25k GSGS 3906"
 msgstr "Ireland British War Office 1:25k GSGS 3906"
@@ -26023,16 +26183,16 @@ msgid "OSMIE T.ie Land not in Counties"
 msgstr "OSMIE T.ie Land niet in Counties"
 
 msgid "Israel Hiking"
-msgstr ""
+msgstr "Israel wandelen"
 
 msgid "Israel Hiking map"
-msgstr ""
+msgstr "Israel wandelkaart"
 
 msgid "Israel MTB"
-msgstr ""
+msgstr "Israel MTB"
 
 msgid "Israel MTB map"
-msgstr ""
+msgstr "Israel MTB-kaart"
 
 msgid "Lodi - Italy"
 msgstr "Lodi - Italië"
@@ -26084,17 +26244,23 @@ msgstr "Japan GSI ortho Imagery"
 
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
+"imagico.de OSM-afbeeldingen voor in kaart brengen: Aral Sea (niveau laag "
+"water)"
 
 msgid "Water and wetland extents, dams etc. (true color)"
-msgstr ""
+msgstr "Water en bereik nat land, dammen etc. (ware kleuren)"
 
 msgid "imagico.de OSM images for mapping: Aral Sea (high water level)"
 msgstr ""
+"imagico.de OSM-afbeeldingen voor in kaart brengen: Aral Sea (high water "
+"level)"
 
 msgid ""
 "Water and wetland extents, dams etc. - some remaining winter ice in the "
 "north (true color)"
 msgstr ""
+"Water en bereik nat land, dammen etc. - sommige in het noorden blijven ijs "
+"(ware kleuren)"
 
 msgid "imagico.de OSM images for mapping: Mount Kenya 2016"
 msgstr "imagico.de OSM-afbeeldingen voor in kaart brengen: Mount Kenya 2016"
@@ -26135,6 +26301,9 @@ msgstr "Luxemburg Inspire Water"
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Niger Delta Oct 2012 Landsat"
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr "INEGI Digital Map of Mexico (WMS)"
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr "PDOK luchtfoto’s Beeldmateriaal.nl 25cm"
 
@@ -26383,9 +26552,11 @@ msgstr ""
 
 msgid "imagico.de OSM images for mapping: Northern Dvina delta at low tide"
 msgstr ""
+"imagico.de OSM-afbeeldingen voor in kaart brengen: Northern Dvina delta bij "
+"laagtij"
 
 msgid "Beaches, tidal flats and other costal forms (true color)"
-msgstr ""
+msgstr "Stranden, getijdeplaten en andere kustvormen (ware kleuren)"
 
 msgid ""
 "imagico.de OSM images for mapping: Northern and Polar Ural mountains August "
@@ -26611,6 +26782,9 @@ msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 "imagico.de OSM-afbeeldingen voor in kaart brengen: Mount Kilimanjaro 2016"
 
+msgid "Aşgabat (high resolution)"
+msgstr "Aşgabat (hoge resolutie)"
+
 msgid "MSR Maps Topo"
 msgstr "MSR Maps Topo"
 
@@ -26679,16 +26853,16 @@ msgstr ""
 "brengen van natuurlijke objecten (ware kleuren)"
 
 msgid "imagico.de OSM images for mapping: Bogoslof Island"
-msgstr ""
+msgstr "imagico.de OSM-afbeeldingen voor in kaart brengen: Bogoslof Island"
 
 msgid "Recent image from after the eruption (true color)"
-msgstr ""
+msgstr "Recente afbeelding van na de uitbarsting (ware kleuren)"
 
 msgid "imagico.de OSM images for mapping: Cook Inlet"
-msgstr ""
+msgstr "imagico.de OSM-afbeeldingen voor in kaart brengen: Cook Inlet"
 
 msgid "Tidal flats and glaciers in surrounding mountains (true color)"
-msgstr ""
+msgstr "Getijdeplaten en gletsjers in omliggende bergen (ware kleuren)"
 
 msgid "NJ 2015 Aerial Imagery (Infrared)"
 msgstr "NJ 2015 Aerial Imagery (Infrared)"
@@ -27927,9 +28101,11 @@ msgid ""
 "Object at Position 0.00E 0.00N. There is nothing at this position except an "
 "already mapped weather buoy."
 msgstr ""
+"Object op positie 0.00E 0.00N. Er is niets op deze positie, behalve een "
+"reeds eerder in kaart gebrachte weerboei."
 
 msgid "Ferry route is not connected to the road network or branches."
-msgstr ""
+msgstr "Ferryroute is niet verbonden met het wegennetwerk of takken daarvan."
 
 msgid "Ferry route is not connected to a ferry terminal or branches."
 msgstr ""
@@ -28047,6 +28223,9 @@ msgstr "relatie zonder type"
 msgid "{0} relation without {0} tag"
 msgstr "{0} relatie zonder {0} tag"
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr "religie zonder nadere omschrijving"
 
@@ -28274,12 +28453,6 @@ msgid "Customization of public public transport stops."
 msgstr "Aanpassen van haltes openbaar vervoer."
 
 msgid ""
-"Creating and handling address nodes and buildings within Czech Republic."
-msgstr ""
-"Maken en afhandelen van adresknopen en gebouwen binnen de Tsjechische "
-"Republiek."
-
-msgid ""
 "Allows to import various file formats into JOSM directly. Currently "
 "supported: TangoGPS, Garmin Trainings Center TCX."
 msgstr ""
@@ -28340,9 +28513,6 @@ msgstr ""
 "Spreek met gebruikers de de kaart dichtbij bewerken, krijg bericht als "
 "iemand dichtbij komt."
 
-msgid "Allows you to view a GeoJSON file as a layer."
-msgstr "Stelt u in staat een bestand van GeoJSON weer te geven als laag."
-
 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."
@@ -28812,14 +28982,6 @@ msgstr ""
 "synchroniseert een video met geo-verwijzingen tegen een GPS-spoor, om het te "
 "gebruiken om zichtbare objecten te identificeren."
 
-msgid ""
-"Supports downloading tiled, scanned maps from walking-papers.org. This "
-"plugin is still under early development and may be buggy."
-msgstr ""
-"Ondersteunt het downloaden van getegelde, gescande kaarten vanaf walking-"
-"papers.org. Deze plug-in verkeert in het stadium van eerste ontwikkeling en "
-"kan fouten veroorzaken."
-
 msgid "Easy downloading along a long set of interconnected ways"
 msgstr ""
 "Eenvoudig downloaden langs een grote verzameling onderling verbonden wegen"
@@ -29452,10 +29614,10 @@ msgid "{0} sequences, each containing between {1} and {2} images (ø {3})"
 msgstr ""
 
 msgid "{0} imported images"
-msgstr ""
+msgstr "{0} geïmporteerde afbeeldingen"
 
 msgid "{0} downloaded images"
-msgstr ""
+msgstr "{0} gedownloade afbeeldingen"
 
 msgid "{0} images in total"
 msgstr "{0} totaal aantal afbeeldingen"
@@ -29471,15 +29633,15 @@ msgstr ""
 "Geeft de laag weer die de kaartobjecten weergeeft die zijn gedetecteerd door "
 "Mapillary"
 
+msgid "Start Mapillary layer"
+msgstr "Laag voor Mapillary beginnen"
+
 msgid "Mapillary"
 msgstr "Mapillary"
 
 msgid "Create Mapillary layer"
 msgstr "Laag voor Mapillary maken"
 
-msgid "Start Mapillary layer"
-msgstr "Laag voor Mapillary beginnen"
-
 msgid "Download Mapillary images in current view"
 msgstr "Afbeeldingen van Mapillary in huidige weergave downloaden"
 
@@ -30628,7 +30790,7 @@ msgid "Name:"
 msgstr "Naam:"
 
 msgid "update building info"
-msgstr ""
+msgstr "informatie voor gebouw bijwerken"
 
 msgid "Tag Element"
 msgstr "Tag voor element"
@@ -30656,10 +30818,10 @@ msgid "Trying to detect an area at:"
 msgstr "Proberen om een gebied te detecteren op:"
 
 msgid "create building"
-msgstr ""
+msgstr "gebouw maken"
 
 msgid "replace building"
-msgstr ""
+msgstr "gebouw vervangen"
 
 msgid "Add address"
 msgid_plural "Add addresses"
@@ -30780,10 +30942,10 @@ msgstr ""
 "Address Helper"
 
 msgid "Replace existing buildings"
-msgstr ""
+msgstr "Bestaande gebouwen vervangen"
 
 msgid "Replace an existing building with the new one."
-msgstr ""
+msgstr "Een bestaand gebouw vervangen door een nieuw."
 
 msgid "Debug"
 msgstr "Foutopsporing"
@@ -30948,6 +31110,161 @@ msgstr[1] "Er zijn {0} gebouwen met conflicten in adressen"
 msgid "No address nodes inside buildings found"
 msgstr "Geen adresknopen binnen gebouwen gevonden"
 
+msgid "Auto sourcing"
+msgstr "Automatisch vullen"
+
+msgid ""
+"Please enable at least two WMS layers in the cadastre-fr plugin "
+"configuration.\n"
+"Layers ''Building'' and ''Parcel'' added by default."
+msgstr ""
+"Schakel ten minste twee WMS-lagen in in de configuratie van de cadastre-fr "
+"plugin.\n"
+"De lagen ''Building'' en ''Parcel'' worden standaard toegevoegd."
+
+msgid ""
+"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+msgstr ""
+"Waarschuwing: dialoogvenster Opties altijd vooraan plaatsen is mislukt. "
+"Exceptie was: {0}"
+
+msgid ""
+"To enable the cadastre WMS plugin, change\n"
+"the current projection to one of the cadastre\n"
+"projections and retry"
+msgstr ""
+"Wijzig de huidige projectie naar een van de kadastrale\n"
+"projecties en probeer opnieuw om de plug-in cadastre WMS in te schakelen."
+
+msgid "Change the current projection"
+msgstr "Wijzig de huidige projectie"
+
+msgid "Extract commune boundary"
+msgstr "Gemeentegrens uitnemen"
+
+msgid "Only on vectorized layers"
+msgstr "Alleen voor lagen met vectoren"
+
+msgid "Cancel current grab"
+msgstr "Huidige ophalen annuleren"
+
+msgid "Cancel current grab (only vector images)"
+msgstr "Huidige ophalen annuleren (alleen vectorafbeeldingen)"
+
+msgid "Cadastre grab"
+msgstr "Kadaster ophalen"
+
+msgid "Download Image from French Cadastre WMS"
+msgstr "Download afbeelding vanaf Franse Cadastre WMS"
+
+msgid "Cadastre: {0}"
+msgstr "Kadaster: {0}"
+
+msgid "Georeference an image"
+msgstr "Geo-verwijzingen naar een afbeelding"
+
+msgid "Grab non-georeferenced image"
+msgstr "Ophalen van een afbeelding zonder geo-verwijzingen"
+
+msgid "Georeferencing interrupted"
+msgstr "Geo-verwijzingen onderbroken"
+
+msgid ""
+"This image contains georeference data.\n"
+"Do you want to use them ?"
+msgstr ""
+"Deze afbeelding bevat gegevens over geo-verwijzingen\n"
+"Wilt u die gebruiken ?"
+
+msgid "Load layer from cache"
+msgstr "Laag laden vanuit cache"
+
+msgid "Load location from cache (only if cache is enabled)"
+msgstr "Locatie uit cache laden (alleen als cache ingeschakeld is)"
+
+msgid "{0} not allowed with the current projection"
+msgstr "{0} niet toegestaan met de huidige projectie"
+
+msgid ""
+"Cannot load cache {0} which is not compatible with current projection zone"
+msgstr ""
+"Kan cache {0} die niet compatibel is met de huidige zone voor de projectie "
+"niet laden"
+
+msgid ""
+"Selected file {0} is not a cache file from this plugin (invalid extension)"
+msgstr ""
+"Geselecteerd bestand {0} is geen cache-bestand van deze plug-in (ongeldige "
+"extensie)"
+
+msgid "The location {0} is already on screen. Cache not loaded."
+msgstr "De locatie {0} staat al op het scherm. Cache niet geladen."
+
+msgid "(optional)"
+msgstr "(optioneel)"
+
+msgid "Change location"
+msgstr "Locatie veranderen"
+
+msgid "Set a new location for the next request"
+msgstr "Stel een nieuwe locatie voor het volgende verzoek in"
+
+msgid "Add a new municipality layer"
+msgstr "Voeg een nieuwe laag in voor de gemeente"
+
+msgid "Commune"
+msgstr "Gemeente"
+
+msgid ""
+"<html>Enter the town,village or city name.<br>Use the syntax and punctuation "
+"known by www.cadastre.gouv.fr .</html>"
+msgstr ""
+"<html>Geef de naam voor dorp of stad op.<br>Gebruik de syntaxis en "
+"interpunctie die bekend is bij www.cadastre.gouv.fr .</html>"
+
+msgid "Departement"
+msgstr "Departement"
+
+msgid "<html>Departement number (optional)</html>"
+msgstr "<html>Nummer departement (optioneel)</html>"
+
+msgid "Add new layer"
+msgstr "Voegt nieuwe laag toe"
+
+msgid "Open Cadastre Preferences"
+msgstr "Open de voorkeuren voor Cadastre"
+
+msgid "Refine georeferencing"
+msgstr "Geoverwijzingen verfijnen"
+
+msgid "Improve georeferencing (only raster images)"
+msgstr "Geoverwijzingen verbeteren  (alleen rasterafbeeldingen)"
+
+msgid "Reset cookie"
+msgstr "Cookie herstellen"
+
+msgid "Get a new cookie (session timeout)"
+msgstr "Een nieuwe cookie verkrijgen (sessie verlopen)"
+
+msgid "Save image as..."
+msgstr "Afbeelding opslaan als..."
+
+msgid "PNG files (*.png)"
+msgstr "PNG-bestanden (*.png)"
+
+msgid "GeoTiff files (*.tif)"
+msgstr "GeoTiff-bestanden (*.tif)"
+
+msgid "Export image (only raster images)"
+msgstr "Afbeelding exporteren (alleen rasterafbeeldingen)"
+
+msgid ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+"Meer dan één WMS-laag beschikbaar\n"
+"Selecteer er eerst één en probeer dan opnieuw"
+
 msgid "on polygon"
 msgstr "op polygoon"
 
@@ -30963,93 +31280,104 @@ msgstr "Volgend nr"
 msgid "Enter addresses"
 msgstr "Adressen invoeren"
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
+msgstr "WMS aanpassen"
+
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
-"Locatie \"{0}\" gevonden in cache.\n"
-"Cache eerst laden ?\n"
-"(Nee = nieuwe cache)"
+"Pas de positie van de WMS-laag aan (wordt alleen opgeslagen voor "
+"rasterafbeeldingen)"
 
-msgid "Select Feuille"
-msgstr "Selecteer kaart"
+msgid "Add \"source=...\" to elements?"
+msgstr "Voeg \"source=...\" toe aan elementen?"
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
-msgstr ""
-"Fout bij laden van bestand\n"
-"Waarschijnlijk een oude versie van het cache-bestand."
+msgid "Download from Cadastre"
+msgstr "Downloaden vanaf Cadastre"
 
-msgid "Lambert Zone {0} cache file (.{0})"
-msgstr "Lambert Zone {0} cache-bestand (.{0})"
+msgid "Objects:"
+msgstr "Objecten:"
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
-msgstr "Lambert CC9 Zone {0} cache-bestand (.CC{0})"
+msgid "Select to download buildings in the selected download area."
+msgstr ""
+"Gebouwen selecteren om te downloaden in het geselecteerde gebied voor "
+"downloaden."
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
-msgstr "Guadeloupe Fort-Marigot cache-bestand (.UTM1)"
+msgid "address"
+msgstr "adres"
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
-msgstr "Guadeloupe Ste-Anne cache-bestand (.UTM2)"
+msgid "Select to download addresses in the selected download area."
+msgstr ""
+"Adressen selecteren om te downloaden in het geselecteerde gebied voor "
+"downloaden."
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
-msgstr "Martinique Fort Desaix cache-bestand (.UTM3)"
+msgid "symbol"
+msgstr "symbool"
 
-msgid "Reunion RGR92 cache file (.UTM4)"
-msgstr "Reunion RGR92 cache-bestand (.UTM4)"
+msgid "Select to download symbols in the selected download area."
+msgstr ""
+"Symbolen selecteren om te downloaden in het geselecteerde gebied voor "
+"downloaden."
 
-msgid "CadastreGrabber: Illegal url."
-msgstr "CadastreGrabber: Ongeldige URL."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+"Waterlichamen selecteren om te downloaden in het geselecteerde gebied voor "
+"downloaden."
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "parcel"
+msgstr "perceel"
+
+msgid "Select to download cadastral parcels in the selected download area."
 msgstr ""
-"Kan geen nieuwe cliëntsessie openen.\n"
-"Server in onderhoud of tijdelijk overbelast."
+"Kadastrale percelen selecteren om te downloaden in het geselecteerde gebied "
+"voor downloaden."
+
+msgid "parcel number"
+msgstr "perceelnummer"
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
-"Stad (groot)/stad {0} niet gevonden of niet beschikbaar of actie geannuleerd"
+"Nummers van kadastrale percelen selecteren om te downloaden in het "
+"geselecteerde gebied voor downloaden."
 
-msgid "Choose from..."
-msgstr "Kies uit..."
+msgid "section"
+msgstr "sectie"
 
-msgid "Select commune"
-msgstr "Gemeente selecteren"
+msgid "Select to download cadastral sections in the selected download area."
+msgstr ""
+"Kadastrale secties selecteren om te downloaden in het geselecteerde gebied "
+"voor downloaden."
 
-msgid "Auto sourcing"
-msgstr "Automatisch vullen"
+msgid "locality"
+msgstr "plaats"
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
 msgstr ""
-"Schakel ten minste twee WMS-lagen in in de configuratie van de cadastre-fr "
-"plugin.\n"
-"De lagen ''Building'' en ''Parcel'' worden standaard toegevoegd."
+"Lokaliteiten selecteren om te downloaden in het geselecteerde gebied voor "
+"downloaden."
+
+msgid "commune"
+msgstr "gemeente"
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
-"Waarschuwing: dialoogvenster Opties altijd vooraan plaatsen is mislukt. "
-"Exceptie was: {0}"
+"Grenzen van gemeenten selecteren om te downloaden in het geselecteerde "
+"gebied voor downloaden."
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
-"Wijzig de huidige projectie naar een van de kadastrale\n"
-"projecties en probeer opnieuw om de plug-in cadastre WMS in te schakelen."
+"<html>Er is niets geselecteerd.<br>Kies iets om te downloaden.</html>"
 
-msgid "Change the current projection"
-msgstr "Wijzig de huidige projectie"
+msgid "Recipient"
+msgstr "Ontvanger"
+
+msgid "Diffusion restriction"
+msgstr "Beperking Diffusion"
+
+msgid "Cadastre Edigeo files"
+msgstr "Cadastre Edigeo-bestanden"
 
 msgid "Replace original background by JOSM background color."
 msgstr ""
@@ -31101,27 +31429,6 @@ msgstr "medium"
 msgid "low"
 msgstr "laag"
 
-msgid "symbol"
-msgstr "symbool"
-
-msgid "parcel"
-msgstr "perceel"
-
-msgid "parcel number"
-msgstr "perceelnummer"
-
-msgid "address"
-msgstr "adres"
-
-msgid "locality"
-msgstr "plaats"
-
-msgid "section"
-msgstr "sectie"
-
-msgid "commune"
-msgstr "gemeente"
-
 msgid "Enable automatic caching."
 msgstr "Automatisch bufferen inschakelen"
 
@@ -31287,8 +31594,64 @@ msgstr "Schakel dit in om de tag \"add:street\" voor knopen te gebruiken."
 msgid "Unexpected file extension. {0}"
 msgstr "Onverwachte bestandsextensie. {0}"
 
-msgid "Add \"source=...\" to elements?"
-msgstr "Voeg \"source=...\" toe aan elementen?"
+msgid ""
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
+msgstr ""
+"Locatie \"{0}\" gevonden in cache.\n"
+"Cache eerst laden ?\n"
+"(Nee = nieuwe cache)"
+
+msgid "Select Feuille"
+msgstr "Selecteer kaart"
+
+msgid ""
+"Error loading file.\n"
+"Probably an old version of the cache file."
+msgstr ""
+"Fout bij laden van bestand\n"
+"Waarschijnlijk een oude versie van het cache-bestand."
+
+msgid "Lambert Zone {0} cache file (.{0})"
+msgstr "Lambert Zone {0} cache-bestand (.{0})"
+
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgstr "Lambert CC9 Zone {0} cache-bestand (.CC{0})"
+
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgstr "Guadeloupe Fort-Marigot cache-bestand (.UTM1)"
+
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgstr "Guadeloupe Ste-Anne cache-bestand (.UTM2)"
+
+msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgstr "Martinique Fort Desaix cache-bestand (.UTM3)"
+
+msgid "Reunion RGR92 cache file (.UTM4)"
+msgstr "Reunion RGR92 cache-bestand (.UTM4)"
+
+msgid "CadastreGrabber: Illegal url."
+msgstr "CadastreGrabber: Ongeldige URL."
+
+msgid ""
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
+msgstr ""
+"Kan geen nieuwe cliëntsessie openen.\n"
+"Server in onderhoud of tijdelijk overbelast."
+
+msgid ""
+"Town/city {0} not found or not available\n"
+"or action canceled"
+msgstr ""
+"Stad (groot)/stad {0} niet gevonden of niet beschikbaar of actie geannuleerd"
+
+msgid "Choose from..."
+msgstr "Kies uit..."
+
+msgid "Select commune"
+msgstr "Gemeente selecteren"
 
 msgid "Downloading {0}"
 msgstr "{0} downloaden"
@@ -31339,125 +31702,6 @@ msgstr ""
 "Gebruik het andere menuitem om geo-verwijzingen te maken voor een \"Plan "
 "image\""
 
-msgid "Extract commune boundary"
-msgstr "Gemeentegrens uitnemen"
-
-msgid "Only on vectorized layers"
-msgstr "Alleen voor lagen met vectoren"
-
-msgid "Cancel current grab"
-msgstr "Huidige ophalen annuleren"
-
-msgid "Cancel current grab (only vector images)"
-msgstr "Huidige ophalen annuleren (alleen vectorafbeeldingen)"
-
-msgid "Cadastre grab"
-msgstr "Kadaster ophalen"
-
-msgid "Download Image from French Cadastre WMS"
-msgstr "Download afbeelding vanaf Franse Cadastre WMS"
-
-msgid "Cadastre: {0}"
-msgstr "Kadaster: {0}"
-
-msgid "Georeference an image"
-msgstr "Geo-verwijzingen naar een afbeelding"
-
-msgid "Grab non-georeferenced image"
-msgstr "Ophalen van een afbeelding zonder geo-verwijzingen"
-
-msgid "Georeferencing interrupted"
-msgstr "Geo-verwijzingen onderbroken"
-
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
-msgstr ""
-"Deze afbeelding bevat gegevens over geo-verwijzingen\n"
-"Wilt u die gebruiken ?"
-
-msgid "Load layer from cache"
-msgstr "Laag laden vanuit cache"
-
-msgid "Load location from cache (only if cache is enabled)"
-msgstr "Locatie uit cache laden (alleen als cache ingeschakeld is)"
-
-msgid "{0} not allowed with the current projection"
-msgstr "{0} niet toegestaan met de huidige projectie"
-
-msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
-msgstr ""
-"Kan cache {0} die niet compatibel is met de huidige zone voor de projectie "
-"niet laden"
-
-msgid ""
-"Selected file {0} is not a cache file from this plugin (invalid extension)"
-msgstr ""
-"Geselecteerd bestand {0} is geen cache-bestand van deze plug-in (ongeldige "
-"extensie)"
-
-msgid "The location {0} is already on screen. Cache not loaded."
-msgstr "De locatie {0} staat al op het scherm. Cache niet geladen."
-
-msgid "(optional)"
-msgstr "(optioneel)"
-
-msgid "Change location"
-msgstr "Locatie veranderen"
-
-msgid "Set a new location for the next request"
-msgstr "Stel een nieuwe locatie voor het volgende verzoek in"
-
-msgid "Add a new municipality layer"
-msgstr "Voeg een nieuwe laag in voor de gemeente"
-
-msgid "Commune"
-msgstr "Gemeente"
-
-msgid ""
-"<html>Enter the town,village or city name.<br>Use the syntax and punctuation "
-"known by www.cadastre.gouv.fr .</html>"
-msgstr ""
-"<html>Geef de naam voor dorp of stad op.<br>Gebruik de syntaxis en "
-"interpunctie die bekend is bij www.cadastre.gouv.fr .</html>"
-
-msgid "Departement"
-msgstr "Departement"
-
-msgid "<html>Departement number (optional)</html>"
-msgstr "<html>Nummer departement (optioneel)</html>"
-
-msgid "Add new layer"
-msgstr "Voegt nieuwe laag toe"
-
-msgid "Open Cadastre Preferences"
-msgstr "Open de voorkeuren voor Cadastre"
-
-msgid "Refine georeferencing"
-msgstr "Geoverwijzingen verfijnen"
-
-msgid "Improve georeferencing (only raster images)"
-msgstr "Geoverwijzingen verbeteren  (alleen rasterafbeeldingen)"
-
-msgid "Reset cookie"
-msgstr "Cookie herstellen"
-
-msgid "Get a new cookie (session timeout)"
-msgstr "Een nieuwe cookie verkrijgen (sessie verlopen)"
-
-msgid "Save image as..."
-msgstr "Afbeelding opslaan als..."
-
-msgid "PNG files (*.png)"
-msgstr "PNG-bestanden (*.png)"
-
-msgid "GeoTiff files (*.tif)"
-msgstr "GeoTiff-bestanden (*.tif)"
-
-msgid "Export image (only raster images)"
-msgstr "Afbeelding exporteren (alleen rasterafbeeldingen)"
-
 msgid ""
 "Click first corner for image cropping\n"
 "(two points required)"
@@ -31509,21 +31753,6 @@ msgstr "Klik op de tweede hoek voor het bijsnijden van de afbeelding"
 msgid "Click second Lambert crosspiece for georeferencing"
 msgstr "Klik op de tweede hulplijn voor Lambert voor geo-verwijzingen"
 
-msgid "Adjust WMS"
-msgstr "WMS aanpassen"
-
-msgid "Adjust the position of the WMS layer (saved for raster images only)"
-msgstr ""
-"Pas de positie van de WMS-laag aan (wordt alleen opgeslagen voor "
-"rasterafbeeldingen)"
-
-msgid ""
-"More than one WMS layer present\n"
-"Select one of them first, then retry"
-msgstr ""
-"Meer dan één WMS-laag beschikbaar\n"
-"Selecteer er eerst één en probeer dan opnieuw"
-
 msgid "Reset offset"
 msgstr "Positie terugzetten"
 
@@ -31991,21 +32220,6 @@ msgstr ""
 "deze optie is geselecteerd is er geen indicatie dat er iets wordt gedaan, en "
 "geen manier om het downloaden te annuleren."
 
-msgid "Split area"
-msgstr "Gebied splitsen"
-
-msgid "Splits an area by an untagged way."
-msgstr "Splits een gebied bij een niet-getagde weg."
-
-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 ""
-"Het geselecteerde gebied kan niet worden gesplitst, omdat het een lid is van "
-"een relatie.\n"
-"Verwijder het gebied uit de relatie vóór het te splitsen."
-
 msgid "TangoGPS Files (*.log)"
 msgstr "TangoGPS-bestanden (*.log)"
 
@@ -34567,10 +34781,10 @@ msgid "Writing position information to image files..."
 msgstr "Informatie over positie schrijven naar afbeeldingsbestanden..."
 
 msgid "Retry"
-msgstr ""
+msgstr "Opnieuw proberen"
 
 msgid "Unable to process file ''{0}'':"
-msgstr ""
+msgstr "Niet mogelijk bestand ''{0}'' te verwerken:"
 
 msgid "File could not be deleted!"
 msgstr "Bestand kon niet worden verwijderd!"
@@ -34998,9 +35212,11 @@ msgid ""
 "The relation has incomplete members. Do you want to download them and "
 "continue with the sorting?"
 msgstr ""
+"De relatie heeft incomplete leden. Wilt u ze downloaden en doorgaan met "
+"sorteren?"
 
 msgid "Incomplete Members"
-msgstr ""
+msgstr "Incomplete leden"
 
 msgid "Do you want to make the roundabout round?"
 msgstr "Wilt u de rotonde rond maken?"
@@ -35052,10 +35268,10 @@ msgid "PT_Assistant Proceed Request"
 msgstr "Verzoek door te gaan met PT_Assistant"
 
 msgid "Bicycle and foot routes Tests"
-msgstr ""
+msgstr "Testen voor fiets- en wandelroutes"
 
 msgid "PT: There is a gap in the "
-msgstr ""
+msgstr "PT: Er is een gat in de "
 
 msgid "PT: Stop_position is not part of a way"
 msgstr "PT: Halte_positie is geen deel van een weg"
@@ -35089,6 +35305,8 @@ msgstr "PT: dummy testwaarschuwing"
 
 msgid "PT: Route needs to be sorted, found tag fixme:relation=order members"
 msgstr ""
+"PT: Route dient te worden gesorteerd, gevonden tag fixme:relation=order "
+"members"
 
 msgid "PT: Route contains a gap that can be fixed by sorting"
 msgstr "PT: Route bevat een gat dat kan worden opgelost door te sorteren"
@@ -35102,22 +35320,28 @@ msgstr ""
 
 msgid "PT: Route gap can be closed by adding a single way"
 msgstr ""
+"PT: Gat in de route kan worden gesloten door één enkele weg toe te voegen"
 
 msgid ""
 "PT: The name of the first stop does not match the \"from\" tag of the route "
 "relation"
 msgstr ""
+"PT: De naam van de eerste stop komt niet overeen met de tag \"from\" van de "
+"relatie van de route"
 
 msgid ""
 "PT: The name of the last stop does not match the \"to\" tag of the route "
 "relation"
 msgstr ""
+"PT: De naam van de laatste stop komt niet overeen met de tag \"to\" van de "
+"relatie van de route"
 
 msgid "PT: The first stop of the route does not match the first way"
-msgstr ""
+msgstr "PT: De eerste stop van de route komt niet overeen met de eerste weg"
 
 msgid "PT: The last stop of the route does not match the last way"
 msgstr ""
+"PT: De laatste stop van de route komt niet overeen met de laatste weg"
 
 msgid "PT: Route should start and end with a stop_position"
 msgstr "PT: Route zou moeten beginnen en eindigen met een stop_position"
@@ -36395,7 +36619,7 @@ msgid "Auto delete layer"
 msgstr "Laag automatisch verwijderen"
 
 msgid "Set default url"
-msgstr ""
+msgstr "Standaard ingestelde URL"
 
 msgid "Select the checkbox to:"
 msgstr "Het keuzevak selecteren om:"
@@ -36422,13 +36646,13 @@ msgid "Select a task ..."
 msgstr "Een taak selecteren ..."
 
 msgid "Setting default URL"
-msgstr ""
+msgstr "Standaard URL instellen"
 
 msgid "Enter the new URL"
-msgstr ""
+msgstr "Voer de nieuwe URL in"
 
 msgid "Setting new URL: "
-msgstr ""
+msgstr "Nieuwe URL instellen: "
 
 msgid "Set download area (m²)"
 msgstr "Downloadgebied instellen (m²)"
@@ -38259,31 +38483,6 @@ msgstr "herhalen"
 msgid "mute"
 msgstr "stil"
 
-msgid "Walking Papers Scanned Map"
-msgstr "Walking Papers gescande kaart"
-
-msgid ""
-"Display a map that was previously scanned and uploaded to walking-papers.org"
-msgstr ""
-"Geeft een kaart weer die eerder was gescand en geüpload naar walking-"
-"papers.org"
-
-msgid ""
-"Enter a walking-papers.org URL or ID (the bit after the ?id= in the URL)"
-msgstr ""
-"Voer een URL of ID (het gedeelte achter de ?id= in de URL) in voor walking-"
-"papers.org"
-
-msgid "Could not read information from walking-papers.org the id \"{0}\""
-msgstr ""
-"Kon geen informatie lezen vanaf walking-papers.org voor de ID \"{0}\""
-
-msgid "Walking Papers: {0}"
-msgstr "Walking Papers: {0}"
-
-msgid "Walking Papers layer ({0}) in zoom {1}"
-msgstr "Walking Papers-laag ({0}) in zoom {1}"
-
 msgid "Way Download"
 msgstr "Download weg"
 
@@ -38475,6 +38674,28 @@ msgstr ""
 "Voegt aan de geselecteerde objecten een tag ''wikipedia'' toe die "
 "overeenkomt met dit artikel"
 
+msgid "Download from Wikosm API"
+msgstr "Downloaden vanaf Wikosm API"
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+"Zoek naar plaatsen voor onderwijs op ten minste 2 km afstand en ten hoogste "
+"3 km van het centrum van de selectie"
+
+msgid "Show/hide Wikosm snippet list"
+msgstr "Wikosm snipperlijst tonen/verbergen"
+
+msgid "help"
+msgstr "help"
+
+msgid "Server: "
+msgstr "Server: "
+
+msgid "Wikidata+OSM server"
+msgstr "Wikidata+OSM server"
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "De Ultimate WMS Super-speed Turbo Challenge II"
 
@@ -38527,7 +38748,7 @@ msgid "View Wikidata page"
 msgstr "Pagina van Wikidata bekijken"
 
 msgid "View Wikispecies page"
-msgstr ""
+msgstr "Pagina van Wikispecies bekijken"
 
 msgid "View UNESCO sheet"
 msgstr "Blad van UNESCO bekijken"
@@ -38593,7 +38814,7 @@ msgid "View %name% sheet of hospital/home"
 msgstr "Blad %name% va ziekenhuis/verzorgingshuis bekijken"
 
 msgid "View INSEE explanation of %name% code"
-msgstr ""
+msgstr "Uitleg van INSEE bekijken voor code %name%"
 
 msgid "Get identification card (pdf) for this establishment"
 msgstr "Haal identificatiekaart (pdf) voor dit etablissement op"
diff --git a/i18n/po/nn.po b/i18n/po/nn.po
index 9ceee46..a3cb1ab 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+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: 2017-09-03 04:54+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:53+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: nn\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -387,6 +387,34 @@ msgstr "Slett"
 msgid "Delete selected objects."
 msgstr "Slett dei valde objekta."
 
+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 "Delete Layer"
 msgstr ""
 
@@ -1293,29 +1321,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2724,34 +2738,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2783,6 +2769,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2902,6 +2911,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3009,6 +3030,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr "Ukjend"
 
@@ -3052,6 +3076,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3688,6 +3715,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4728,9 +4809,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4776,6 +4854,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr ""
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4797,9 +4878,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -5000,6 +5078,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5252,6 +5338,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7034,6 +7124,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7256,9 +7349,6 @@ 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."
@@ -8186,15 +8276,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8223,33 +8313,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8373,6 +8436,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8506,6 +8596,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8515,6 +8611,9 @@ msgstr ""
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8659,6 +8758,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9698,9 +9800,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12837,15 +12936,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -12951,6 +13041,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13200,14 +13293,6 @@ 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 ""
 
@@ -13271,9 +13356,6 @@ msgid ""
 "{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 ""
 
@@ -14505,9 +14587,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14604,10 +14683,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15195,6 +15270,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17232,7 +17311,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23058,6 +23138,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23116,6 +23199,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23197,6 +23283,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23218,9 +23319,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23815,6 +23913,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24226,6 +24327,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24669,6 +24773,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25872,6 +25979,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26052,10 +26162,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26103,9 +26209,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26449,11 +26552,6 @@ msgid ""
 "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 ""
 
@@ -27064,13 +27162,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28367,6 +28465,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28382,77 +28618,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28503,27 +28744,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28664,160 +28884,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28867,17 +29024,6 @@ 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 ""
 
@@ -29314,18 +29460,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35071,26 +35205,6 @@ 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 ""
 
@@ -35259,6 +35373,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/oc.po b/i18n/po/oc.po
index 3f04452..a9249f0 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+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: 2017-09-03 04:55+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:53+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -393,6 +393,34 @@ msgstr "Suprimir"
 msgid "Delete selected objects."
 msgstr "Suprimir los objèctes seleccionats"
 
+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 "Delete Layer"
 msgstr ""
 
@@ -1299,29 +1327,15 @@ msgstr " [id: {0}]"
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2730,34 +2744,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2789,6 +2775,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2908,6 +2917,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3015,6 +3036,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr "DESCONEGUT"
 
@@ -3058,6 +3082,9 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3694,6 +3721,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr "Descripcion"
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr "Exemples"
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4735,9 +4816,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4783,6 +4861,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr ""
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4804,9 +4885,6 @@ msgstr "usatge"
 msgid "options"
 msgstr "opcions"
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -5007,6 +5085,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5259,6 +5345,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7041,6 +7131,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7263,9 +7356,6 @@ msgstr "URL : "
 msgid "Please enter or paste an URL to retrieve changesets from the OSM API."
 msgstr ""
 
-msgid "Examples"
-msgstr "Exemples"
-
 msgid ""
 "Note that changeset queries are currently always submitted to ''{0}'', "
 "regardless of the host, port and path of the URL entered below."
@@ -8193,15 +8283,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8230,33 +8320,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8380,6 +8443,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8513,6 +8603,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr "Camin {0}"
 
@@ -8522,6 +8618,9 @@ msgstr "Relacion {0}"
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8666,6 +8765,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9705,9 +9807,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr "Descripcion"
-
 msgid "Timespan"
 msgstr "Durada"
 
@@ -12846,15 +12945,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr "Prereglatges"
 
@@ -12960,6 +13050,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13209,14 +13302,6 @@ 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 ""
 
@@ -13280,9 +13365,6 @@ msgid ""
 "{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 ""
 
@@ -14514,9 +14596,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14613,10 +14692,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15204,6 +15279,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17241,7 +17320,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23067,6 +23147,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23125,6 +23208,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23206,6 +23292,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23227,9 +23328,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23824,6 +23922,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24235,6 +24336,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24678,6 +24782,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25881,6 +25988,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26061,10 +26171,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26112,9 +26218,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26458,11 +26561,6 @@ msgid ""
 "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 ""
 
@@ -27073,13 +27171,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28376,6 +28474,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28391,77 +28627,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28512,27 +28753,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28673,160 +28893,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28876,17 +29033,6 @@ 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 ""
 
@@ -29323,18 +29469,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35080,26 +35214,6 @@ 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 ""
 
@@ -35268,6 +35382,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/pa.po b/i18n/po/pa.po
index 0b5f27a..c2fc9f4 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+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: 2017-09-03 04:55+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:54+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: pa\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -387,6 +387,34 @@ msgstr ""
 msgid "Delete selected objects."
 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 "Delete Layer"
 msgstr ""
 
@@ -1293,29 +1321,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2724,34 +2738,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2783,6 +2769,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2902,6 +2911,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3009,6 +3030,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr ""
 
@@ -3052,6 +3076,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3688,6 +3715,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4728,9 +4809,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4776,6 +4854,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr ""
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4797,9 +4878,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -5000,6 +5078,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5252,6 +5338,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7034,6 +7124,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7256,9 +7349,6 @@ 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."
@@ -8186,15 +8276,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8223,33 +8313,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8373,6 +8436,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8506,6 +8596,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8515,6 +8611,9 @@ msgstr ""
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8659,6 +8758,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9698,9 +9800,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12837,15 +12936,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -12951,6 +13041,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13200,14 +13293,6 @@ 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 ""
 
@@ -13271,9 +13356,6 @@ msgid ""
 "{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 ""
 
@@ -14505,9 +14587,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14604,10 +14683,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15195,6 +15270,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17232,7 +17311,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23058,6 +23138,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23116,6 +23199,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23197,6 +23283,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23218,9 +23319,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23815,6 +23913,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24226,6 +24327,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24669,6 +24773,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25872,6 +25979,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26052,10 +26162,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26103,9 +26209,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26449,11 +26552,6 @@ msgid ""
 "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 ""
 
@@ -27064,13 +27162,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28367,6 +28465,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28382,77 +28618,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28503,27 +28744,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28664,160 +28884,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28867,17 +29024,6 @@ 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 ""
 
@@ -29314,18 +29460,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35071,26 +35205,6 @@ 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 ""
 
@@ -35259,6 +35373,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/pl.po b/i18n/po/pl.po
index 994cd4f..13a5006 100644
--- a/i18n/po/pl.po
+++ b/i18n/po/pl.po
@@ -8,17 +8,17 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-02 22:59+0200\n"
-"PO-Revision-Date: 2017-08-27 12:27+0000\n"
-"Last-Translator: Piotr Sokół <Unknown>\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
+"PO-Revision-Date: 2017-10-03 03:32+0000\n"
+"Last-Translator: Daniel Koć <daniel at xn--ko-wla.pl>\n"
 "Language-Team: polski <>\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: 2017-09-03 04:56+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-10-03 04:33+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: pl\n"
 
 msgid "Cutting"
@@ -421,6 +421,49 @@ msgstr "Usuń"
 msgid "Delete selected objects."
 msgstr "Usuwa wybrane obiekty"
 
+msgid "Delete confirmation"
+msgstr "Potwierdzanie usuwania"
+
+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 ""
+"Zostaną usunięte węzły spoza obszaru, który pobrano.<br>Może to spowodowac "
+"problem, ponieważ inne (aktualnie niewidoczne) obiekty mogą używać tych "
+"węzłów.<br>Usunąć je?"
+
+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 ""
+"Zostaną usunięte niekompletne obiekty.<br>Spowoduje to problem, bo obiekty "
+"nie są widoczne w całości.<br>Usunąć je?"
+
+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] ""
+"Zostanie usunięta {0} relacja: {1}<br/>Jest to bardzo rzadko wykonywana "
+"czynność i cofnięcie jej będzie trudne po wysłaniu zmian na "
+"serwer.<br/>Usunąć tę relację?"
+msgstr[1] ""
+"Zostaną usunięte {0} relacje: {1}<br/>Jest to bardzo rzadko wykonywana "
+"czynność i cofnięcie jej będzie trudne po wysłaniu zmian na "
+"serwer.<br/>Usunąć te relacje?"
+msgstr[2] ""
+"Zostanie usuniętych {0} relacji: {1}<br/>Jest to bardzo rzadko wykonywana "
+"czynność i cofnięcie jej będzie trudne po wysłaniu zmian na "
+"serwer.<br/>Usunąć te relacje?"
+
+msgid "Delete relation?"
+msgstr "Usuwanie relacji"
+
 msgid "Delete Layer"
 msgstr "Usuń warstwę"
 
@@ -1421,35 +1464,14 @@ msgstr " [id: {0}]"
 msgid "Segment {0}: {1}"
 msgstr "Segment {0}: {1}"
 
-msgid "You must select two or more nodes to split a circular way."
-msgstr "Musisz wybrać dwa lub więcej węzłów aby rozdzielić linię okrężną."
-
-msgid ""
-"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
-"middle of the way.)"
-msgstr ""
-"Linia nie może być rozdzielona w wybranych węzłach (podpowiedź: wybierz "
-"węzły w obrębie linii)."
-
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
-msgstr ""
-"Członkostwo w relacji opartej na rolach zostało skopiowane na wszystkie "
-"linie. <br>Powinieneś to sprawdzić i w razie konieczności, poprawić."
+msgid "Search preset"
+msgstr "Szukaj szablonu"
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
-msgstr ""
-"Relacja członka została skopiowana do wszystkich nowych dróg.<br>Powinieneś "
-"sprawdzić to i poprawić jeśli to potrzebne."
+msgid "Show preset search dialog"
+msgstr "Otwiera okno wyszukiwania szablonów"
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] "Rozdziel linię {0} na {1} część"
-msgstr[1] "Rozdziel linię {0} na {1} części"
-msgstr[2] "Rozdziel linię {0} na {1} części"
+msgid "Search presets"
+msgstr "Szukaj w szablonach"
 
 msgid "Discourage upload"
 msgstr "Zapobieganie wysyłaniu"
@@ -3000,49 +3022,6 @@ msgstr[0] "Usunięto {0} relację"
 msgstr[1] "Usunięto {0} relacje"
 msgstr[2] "Usunięto {0} relacji"
 
-msgid "Delete confirmation"
-msgstr "Potwierdzanie usuwania"
-
-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 ""
-"Zostaną usunięte węzły spoza obszaru, który pobrano.<br>Może to spowodowac "
-"problem, ponieważ inne (aktualnie niewidoczne) obiekty mogą używać tych "
-"węzłów.<br>Usunąć je?"
-
-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 ""
-"Zostaną usunięte niekompletne obiekty.<br>Spowoduje to problem, bo obiekty "
-"nie są widoczne w całości.<br>Usunąć je?"
-
-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] ""
-"Zostanie usunięta {0} relacja: {1}<br/>Jest to bardzo rzadko wykonywana "
-"czynność i cofnięcie jej będzie trudne po wysłaniu zmian na "
-"serwer.<br/>Usunąć tę relację?"
-msgstr[1] ""
-"Zostaną usunięte {0} relacje: {1}<br/>Jest to bardzo rzadko wykonywana "
-"czynność i cofnięcie jej będzie trudne po wysłaniu zmian na "
-"serwer.<br/>Usunąć te relacje?"
-msgstr[2] ""
-"Zostanie usuniętych {0} relacji: {1}<br/>Jest to bardzo rzadko wykonywana "
-"czynność i cofnięcie jej będzie trudne po wysłaniu zmian na "
-"serwer.<br/>Usunąć te relacje?"
-
-msgid "Delete relation?"
-msgstr "Usuwanie relacji"
-
 msgid "Move {0} node"
 msgid_plural "Move {0} nodes"
 msgstr[0] "Przesunięto {0} węzeł"
@@ -3079,6 +3058,36 @@ msgstr[2] "Wybrano {0} obiektów"
 msgid "Sequence: {0}"
 msgstr "Kolejność: {0}"
 
+msgid "You must select two or more nodes to split a circular way."
+msgstr "Musisz wybrać dwa lub więcej węzłów aby rozdzielić linię okrężną."
+
+msgid ""
+"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
+"middle of the way.)"
+msgstr ""
+"Linia nie może być rozdzielona w wybranych węzłach (podpowiedź: wybierz "
+"węzły w obrębie linii)."
+
+msgid ""
+"A role based relation membership was copied to all new ways.<br>You should "
+"verify this and correct it when necessary."
+msgstr ""
+"Członkostwo w relacji opartej na rolach zostało skopiowane na wszystkie "
+"linie. <br>Powinieneś to sprawdzić i w razie konieczności, poprawić."
+
+msgid ""
+"A relation membership was copied to all new ways.<br>You should verify this "
+"and correct it when necessary."
+msgstr ""
+"Relacja członka została skopiowana do wszystkich nowych dróg.<br>Powinieneś "
+"sprawdzić to i poprawić jeśli to potrzebne."
+
+msgid "Split way {0} into {1} part"
+msgid_plural "Split way {0} into {1} parts"
+msgstr[0] "Rozdziel linię {0} na {1} część"
+msgstr[1] "Rozdziel linię {0} na {1} części"
+msgstr[2] "Rozdziel linię {0} na {1} części"
+
 msgid "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] "Transformuj {0} węzeł"
@@ -3217,6 +3226,18 @@ msgstr "Niewłaściwa wartość szerokości geograficznej „{0}”"
 msgid "Illegal longitude value ''{0}''"
 msgstr "Niewłaściwa wartość długości geograficznej „{0}”"
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr "Nie udało się utworzyć brakującego katalogu pamięci podręcznej: {0}"
 
@@ -3349,6 +3370,9 @@ msgstr "Imperialny"
 msgid "Nautical Mile"
 msgstr "Mile morskie"
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr "Wartość parametru „{0}” nie może być pusta, jest „{1}”"
+
 msgid "UNKNOWN"
 msgstr "NIEZNANA"
 
@@ -3392,6 +3416,9 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr "Data wykonania zdjęć: {0}"
 
@@ -4075,6 +4102,60 @@ msgstr "Błąd analizowania wartości „{1}” parametru „{0}” jako współ
 msgid "Custom Projection"
 msgstr "Własna projekcja"
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr "Opis"
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr "Wyświetla tę pomoc"
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr "Przykłady"
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr "GRS80"
 
@@ -5161,9 +5242,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr "Przesunięcie"
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr "Wartość parametru „{0}” nie może być pusta, jest „{1}”"
-
 msgid "Outdated Java version"
 msgstr "Nieaktualna wersja Javy"
 
@@ -5212,6 +5290,9 @@ msgstr "Inicjowanie danych wewnętrznych granic"
 msgid "Initializing OSM API"
 msgstr "Inicjowanie API OSM"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr "Inicjowanie wewnętrznych danych o kierunku ruchu"
 
@@ -5233,9 +5314,6 @@ msgstr "użycie"
 msgid "options"
 msgstr "opcje"
 
-msgid "Show this help"
-msgstr "Wyświetla tę pomoc"
-
 msgid "Standard unix geometry argument"
 msgstr "Standardowy argument X-Windows określający wymiary okna"
 
@@ -5459,6 +5537,15 @@ msgstr ""
 "<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> Zmienić teraz ustawienia proxy?"
 
+msgid "You have {0} unread message."
+msgid_plural "You have {0} unread messages."
+msgstr[0] "Masz {0} nieprzeczytaną wiadomość."
+msgstr[1] "Liczba nieprzeczytanych wiadomości: {0}"
+msgstr[2] "Liczba nieprzeczytanych wiadomości: {0}"
+
+msgid "Click here to see your inbox."
+msgstr "Kliknij tutaj, by przejść do swojej skrzynki odbiorczej"
+
 msgctxt "menu"
 msgid "File"
 msgstr "Plik"
@@ -5724,6 +5811,12 @@ msgstr ""
 "Wprowadzona wartość dla kafelka nie jest poprawna dla podanego stopnia "
 "przybliżenia"
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+"Nie udało się zgłosić błędu. Proszę zgłosić błąd przy użyciu strony "
+"internetowej:"
+
 msgid "You have encountered a bug in JOSM"
 msgstr "Błąd programu"
 
@@ -7651,6 +7744,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr "Uaktualnia zestaw zmian z serwera OSM"
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7911,9 +8007,6 @@ msgstr "Adres URL: "
 msgid "Please enter or paste an URL to retrieve changesets from the OSM API."
 msgstr "Wpisz lub wklej link aby otrzymać zestawy zmian z OSM API."
 
-msgid "Examples"
-msgstr "Przykłady"
-
 msgid ""
 "Note that changeset queries are currently always submitted to ''{0}'', "
 "regardless of the host, port and path of the URL entered below."
@@ -8862,7 +8955,7 @@ msgid "Download referrers (parent relations and ways)"
 msgstr "Pobierz obiekty nadrzędne (np. relacje i linie)"
 
 msgid "Download from OSM"
-msgstr ""
+msgstr "Pobieranie z OSM"
 
 msgid "Data Sources and Types:"
 msgstr "Zasoby i typy danych:"
@@ -8904,6 +8997,11 @@ msgid "Download area ok, size probably acceptable to server"
 msgstr "Właściwy rozmiar obszaru, potencjalnie do przyjęcia przez serwer"
 
 msgid "Download from Overpass API"
+msgstr "Pobieranie przez API Overpass"
+
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
 msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
@@ -8912,11 +9010,6 @@ msgstr ""
 msgid "Query Wizard"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
-msgstr ""
-
 msgid "Your saved queries:"
 msgstr ""
 
@@ -8924,7 +9017,7 @@ msgid "Show/hide Overpass snippet list"
 msgstr ""
 
 msgid "Overpass query:"
-msgstr ""
+msgstr "Zapytanie Overpass:"
 
 msgid ""
 "You entered an empty query. Do you want to download all data in this area "
@@ -8943,33 +9036,6 @@ msgstr "Usuwa zaznaczoną wstawkę"
 msgid "Edit selected snippet"
 msgstr "Modyfikuje zaznaczoną wstawkę"
 
-msgid "history"
-msgstr "tablica historyczna"
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -9093,6 +9159,33 @@ msgstr "Mapa"
 msgid "Tile Numbers"
 msgstr "Numery kafelków"
 
+msgid "history"
+msgstr "tablica historyczna"
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr "Przeglądarka pomocy JOSM"
 
@@ -9233,6 +9326,12 @@ msgstr "Powiększ do tego węzła w bieżącym zestawie danych"
 msgid "Open a history browser with the history of this node"
 msgstr "Otwórz przeglądarkę historii z historią tego węzła"
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr "Linia {0}"
 
@@ -9242,6 +9341,9 @@ msgstr "Relacja {0}"
 msgid "Object"
 msgstr "Obiekt"
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr "Komentarz zestawu zmian"
 
@@ -9411,6 +9513,9 @@ msgstr "Zaznaczenie „Wyślij”, wyśle zmiany do serwera OSM."
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr "Zaznaczenie „Zapisz”, zapisze warstwę do pliku określonego po lewej."
 
+msgid "I would like someone to review my edits."
+msgstr "Chcę żeby ktoś przejrzał moje zmiany"
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "Opis zmian wysyłanych do serwera:"
 
@@ -10610,9 +10715,6 @@ msgstr[0] "{0} ślad"
 msgstr[1] "{0} ślady"
 msgstr[2] "{0} śladów"
 
-msgid "Description"
-msgstr "Opis"
-
 msgid "Timespan"
 msgstr "Zakres czasu"
 
@@ -14013,15 +14115,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr "Błąd przetwarzania {0}: "
 
-msgid "Search preset"
-msgstr "Szukaj szablonu"
-
-msgid "Show preset search dialog"
-msgstr "Otwiera okno wyszukiwania szablonów"
-
-msgid "Search presets"
-msgstr "Szukaj w szablonach"
-
 msgid "Presets"
 msgstr "Szablony"
 
@@ -14127,6 +14220,9 @@ msgstr "Wszystkie pliki (*.*)"
 msgid "Received error page:"
 msgstr "Strona błędu:"
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -14394,15 +14490,6 @@ msgstr "Nieznany tryb {0}"
 msgid "get number of unread messages"
 msgstr "pobieranie liczby nieprzeczytanych wiadomości"
 
-msgid "You have {0} unread message."
-msgid_plural "You have {0} unread messages."
-msgstr[0] "Masz {0} nieprzeczytaną wiadomość."
-msgstr[1] "Liczba nieprzeczytanych wiadomości: {0}"
-msgstr[2] "Liczba nieprzeczytanych wiadomości: {0}"
-
-msgid "Click here to see your inbox."
-msgstr "Kliknij tutaj, by przejść do swojej skrzynki odbiorczej"
-
 msgid "Message notifier"
 msgstr "Powiadamianie"
 
@@ -14467,9 +14554,6 @@ msgid ""
 "{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 "Nieoczekiwany format ID zwrócony przez serwer. Otrzymano „{0}”."
 
@@ -15893,9 +15977,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -16004,12 +16085,6 @@ msgid "Failed to load XML schema."
 msgstr "Nie udało się wczytać schematu XML."
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-"Nie udało się zgłosić błędu. Proszę zgłosić błąd przy użyciu strony "
-"internetowej:"
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -16606,6 +16681,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr "brak"
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr "Użycie"
 
@@ -18652,8 +18731,9 @@ msgid "Bay"
 msgstr "Zatoka"
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
-msgstr "Duży obszar wodny częściowo ograniczony lądem ale o szerokim wlocie."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
+msgstr ""
 
 msgid "Shipping"
 msgstr "Żegluga"
@@ -20312,7 +20392,7 @@ msgid "Nursing Home"
 msgstr "Dom opieki"
 
 msgid "Nursing Home (Legacy)"
-msgstr ""
+msgstr "Dom opieki (przestarzałe)"
 
 msgid "Group Home"
 msgstr "Dom grupowy"
@@ -20581,7 +20661,7 @@ msgid "Hide"
 msgstr "Zamaskowana"
 
 msgid "Lockable"
-msgstr ""
+msgstr "Zamykana"
 
 msgid "Water Point"
 msgstr "Punkt pobierania wody"
@@ -21255,7 +21335,7 @@ msgid "observation"
 msgstr "obserwacyjna"
 
 msgid "Flagpole"
-msgstr "Maszt (dla flagi)"
+msgstr "Maszt flagowy"
 
 msgid "Cross"
 msgstr "Krzyż"
@@ -22526,7 +22606,7 @@ msgid "Deli (Fine Food)"
 msgstr "Delikatesy"
 
 msgid "Pastry"
-msgstr "Słodkie wypieki"
+msgstr "Słodkie wypieki (cukiernia)"
 
 msgid "Confectionery"
 msgstr "Cukierki"
@@ -24480,6 +24560,9 @@ msgstr "Waymarked Trails: Jazda konna"
 msgid "Waymarked Trails: Winter Sports"
 msgstr "Waymarked Trails: Sporty zimowe"
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr "OSM Inspector: Geometria"
 
@@ -24538,6 +24621,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -24619,6 +24705,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -24640,9 +24741,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -25237,6 +25335,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -25648,6 +25749,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -26091,6 +26195,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -27301,6 +27408,9 @@ msgstr "relacja bez typu"
 msgid "{0} relation without {0} tag"
 msgstr "{0} relacji bez znacznika {0}"
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr "religia bez wyznania"
 
@@ -27490,10 +27600,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -27549,9 +27655,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-msgstr "Umożliwia przeglądanie plików GeoJSON jako warstwy."
-
 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."
@@ -27944,14 +28047,6 @@ msgid ""
 "objects."
 msgstr ""
 
-msgid ""
-"Supports downloading tiled, scanned maps from walking-papers.org. This "
-"plugin is still under early development and may be buggy."
-msgstr ""
-"Obsługuje wczytywanie zeskanowanych i podzielonych na fragmenty map ze "
-"strony walking-papers.org. Wtyczka jest we wczesnej fazie rozwoju i może "
-"zawierać błędy."
-
 msgid "Easy downloading along a long set of interconnected ways"
 msgstr ""
 
@@ -28575,15 +28670,15 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
+msgid "Start Mapillary layer"
+msgstr ""
+
 msgid "Mapillary"
 msgstr "Mapillary"
 
 msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Start Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -29882,6 +29977,146 @@ msgstr[2] "Jest {0} budynków z konfliktem adresowym"
 msgid "No address nodes inside buildings found"
 msgstr "Nie odnaleziono węzłów adresowych wewnątrz budynków"
 
+msgid "Auto sourcing"
+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 "Zmień obecną projekcję"
+
+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 "Kataster: {0}"
+
+msgid "Georeference an image"
+msgstr "Nadaj georeferencję"
+
+msgid "Grab non-georeferenced image"
+msgstr ""
+
+msgid "Georeferencing interrupted"
+msgstr "Georeferencjonowanie przerwane"
+
+msgid ""
+"This image contains georeference data.\n"
+"Do you want to use them ?"
+msgstr ""
+"Ten obraz zawiera georeferencjonowane dane.\n"
+"Czy chcesz ich użyć ?"
+
+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 "{0} nie jest dozwolone przy bieżacym odwzorowaniu"
+
+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 "(opcjonalnie)"
+
+msgid "Change location"
+msgstr "Zmień położenie"
+
+msgid "Set a new location for the next request"
+msgstr "Ustal nowe położenie dla następnego żądania"
+
+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 "Dodaj nową warstwę"
+
+msgid "Open Cadastre Preferences"
+msgstr ""
+
+msgid "Refine georeferencing"
+msgstr ""
+
+msgid "Improve georeferencing (only raster images)"
+msgstr ""
+
+msgid "Reset cookie"
+msgstr "Wyczyść ciasteczka"
+
+msgid "Get a new cookie (session timeout)"
+msgstr ""
+
+msgid "Save image as..."
+msgstr "Zapisz obraz jako..."
+
+msgid "PNG files (*.png)"
+msgstr "Pliki PNG (*.png)"
+
+msgid "GeoTiff files (*.tif)"
+msgstr "Pliki GeoTiff (*.tif)"
+
+msgid "Export image (only raster images)"
+msgstr ""
+
+msgid ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -29897,78 +30132,83 @@ msgstr "Obok"
 msgid "Enter addresses"
 msgstr "Wprowadź adres"
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
-msgstr ""
+msgid "Adjust WMS"
+msgstr "Dopasuj WMS"
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
+msgstr "Dodać „source=...” do elementów?"
+
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "address"
+msgstr "adres"
+
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "symbol"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "Select to download water bodies in the selected download area."
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "parcel"
+msgstr "działka"
+
+msgid "Select to download cadastral parcels in the selected download area."
 msgstr ""
 
+msgid "parcel number"
+msgstr "numer działki"
+
 msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+msgid "section"
 msgstr ""
 
-msgid "Choose from..."
-msgstr "Wybierz z..."
+msgid "Select to download cadastral sections in the selected download area."
+msgstr ""
 
-msgid "Select commune"
+msgid "locality"
+msgstr "miejsce niezaludnione"
+
+msgid "Select to download localities in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+msgid "Recipient"
 msgstr ""
 
-msgid "Change the current projection"
-msgstr "Zmień obecną projekcję"
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
+msgstr ""
 
 msgid "Replace original background by JOSM background color."
 msgstr ""
@@ -30018,27 +30258,6 @@ msgstr "średni"
 msgid "low"
 msgstr "niski"
 
-msgid "symbol"
-msgstr ""
-
-msgid "parcel"
-msgstr "działka"
-
-msgid "parcel number"
-msgstr "numer działki"
-
-msgid "address"
-msgstr "adres"
-
-msgid "locality"
-msgstr "miejsce niezaludnione"
-
-msgid "section"
-msgstr ""
-
-msgid "commune"
-msgstr ""
-
 msgid "Enable automatic caching."
 msgstr ""
 
@@ -30179,162 +30398,97 @@ msgstr ""
 msgid "Unexpected file extension. {0}"
 msgstr ""
 
-msgid "Add \"source=...\" to elements?"
-msgstr "Dodać „source=...” do elementów?"
-
-msgid "Downloading {0}"
-msgstr "Pobieranie {0}"
-
-msgid "Contacting WMS Server..."
-msgstr "Łączenie z serwerem WMS..."
-
-msgid "Create buildings"
-msgstr "Tworzenie budynków"
-
 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..."
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid "Create boundary"
-msgstr "Utwórz granicę"
-
-msgid "Contacting cadastre WMS ..."
-msgstr "Łączenie z katastrem WMS..."
-
-msgid "Image already loaded"
-msgstr "Obraz już wczytany"
-
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 msgstr ""
 
 msgid ""
-"This commune is not vectorized.\n"
-"Please use the other menu entry to georeference a \"Plan image\""
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Extract commune boundary"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Only on vectorized layers"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Cancel current grab"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid "Cancel current grab (only vector images)"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Cadastre grab"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Download Image from French Cadastre WMS"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "Cadastre: {0}"
-msgstr "Kataster: {0}"
-
-msgid "Georeference an image"
-msgstr "Nadaj georeferencję"
-
-msgid "Grab non-georeferenced image"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
-msgid "Georeferencing interrupted"
-msgstr "Georeferencjonowanie przerwane"
-
 msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
-msgstr ""
-"Ten obraz zawiera georeferencjonowane dane.\n"
-"Czy chcesz ich użyć ?"
-
-msgid "Load layer from cache"
-msgstr ""
-
-msgid "Load location from cache (only if cache is enabled)"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
-msgstr "{0} nie jest dozwolone przy bieżacym odwzorowaniu"
-
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid ""
-"Selected file {0} is not a cache file from this plugin (invalid extension)"
-msgstr ""
+msgid "Choose from..."
+msgstr "Wybierz z..."
 
-msgid "The location {0} is already on screen. Cache not loaded."
+msgid "Select commune"
 msgstr ""
 
-msgid "(optional)"
-msgstr "(opcjonalnie)"
-
-msgid "Change location"
-msgstr "Zmień położenie"
-
-msgid "Set a new location for the next request"
-msgstr "Ustal nowe położenie dla następnego żądania"
+msgid "Downloading {0}"
+msgstr "Pobieranie {0}"
 
-msgid "Add a new municipality layer"
-msgstr ""
+msgid "Contacting WMS Server..."
+msgstr "Łączenie z serwerem WMS..."
 
-msgid "Commune"
-msgstr ""
+msgid "Create buildings"
+msgstr "Tworzenie budynków"
 
 msgid ""
-"<html>Enter the town,village or city name.<br>Use the syntax and punctuation "
-"known by www.cadastre.gouv.fr .</html>"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Departement"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "<html>Departement number (optional)</html>"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Add new layer"
-msgstr "Dodaj nową warstwę"
-
-msgid "Open Cadastre Preferences"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Refine georeferencing"
-msgstr ""
+msgid "Create boundary"
+msgstr "Utwórz granicę"
 
-msgid "Improve georeferencing (only raster images)"
-msgstr ""
+msgid "Contacting cadastre WMS ..."
+msgstr "Łączenie z katastrem WMS..."
 
-msgid "Reset cookie"
-msgstr "Wyczyść ciasteczka"
+msgid "Image already loaded"
+msgstr "Obraz już wczytany"
 
-msgid "Get a new cookie (session timeout)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Save image as..."
-msgstr "Zapisz obraz jako..."
-
-msgid "PNG files (*.png)"
-msgstr "Pliki PNG (*.png)"
-
-msgid "GeoTiff files (*.tif)"
-msgstr "Pliki GeoTiff (*.tif)"
-
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -30386,17 +30540,6 @@ msgstr ""
 msgid "Click second Lambert crosspiece for georeferencing"
 msgstr ""
 
-msgid "Adjust WMS"
-msgstr "Dopasuj WMS"
-
-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 "Reset przesunięcia"
 
@@ -30833,21 +30976,6 @@ msgid ""
 "to cancel the download."
 msgstr ""
 
-msgid "Split area"
-msgstr "Podział obszaru"
-
-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 ""
-"Nie można podzielić zaznaczonego obszaru, ponieważ jego członkowie są w "
-"jakiejś relacji.\n"
-"Proszę usunąć obszar z tej relacji przed podzieleniem go."
-
 msgid "TangoGPS Files (*.log)"
 msgstr "pliki TangoGPS (*.log)"
 
@@ -30879,7 +31007,7 @@ msgid "Please select 1 or more ways to download along"
 msgstr "Zaznacz jedną lub więcej linii, aby pobrać dane"
 
 msgid "Download from OSM along selected ways"
-msgstr ""
+msgstr "Pobierz dane OSM wzdłuż wybranych linii"
 
 msgid "{0} intermediate nodes to download."
 msgstr ""
@@ -36764,28 +36892,6 @@ msgstr "pętla"
 msgid "mute"
 msgstr "wycisz"
 
-msgid "Walking Papers Scanned Map"
-msgstr "Skanowane mapy Walking Papers"
-
-msgid ""
-"Display a map that was previously scanned and uploaded to walking-papers.org"
-msgstr ""
-"Pokaż mapę która została wcześniej zeskanowana i wgrana na walking-papers.org"
-
-msgid ""
-"Enter a walking-papers.org URL or ID (the bit after the ?id= in the URL)"
-msgstr ""
-"Podaj adres lub ID (fragment po ?id=w adresie URL) mapy z walking-papers.org"
-
-msgid "Could not read information from walking-papers.org the id \"{0}\""
-msgstr "Nie mogę przeczytać informacji z walking-papers.org o id „{0}”"
-
-msgid "Walking Papers: {0}"
-msgstr "Walking Papers: {0}"
-
-msgid "Walking Papers layer ({0}) in zoom {1}"
-msgstr "Walking Papers warstwa ({0}) w powiększeniu {1}"
-
 msgid "Way Download"
 msgstr "Pobierz na końcu..."
 
@@ -36962,6 +37068,26 @@ msgid ""
 msgstr ""
 "Dodaje do zaznaczonych obiektów znacznik „wikidata” powiązany z tym artykułem"
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "The Ultimate WMS Super-speed Turbo Challenge II"
 
diff --git a/i18n/po/pt.po b/i18n/po/pt.po
index 5282c78..7197f69 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: 2017-09-02 22:59+0200\n"
-"PO-Revision-Date: 2017-04-07 16:38+0000\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
+"PO-Revision-Date: 2017-09-28 11:56+0000\n"
 "Last-Translator: Rui <xande6ruz at yandex.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: 2017-09-03 04:57+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:55+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: pt\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -413,6 +413,46 @@ msgstr "Eliminar"
 msgid "Delete selected objects."
 msgstr "Elimina os objetos selecionados."
 
+msgid "Delete confirmation"
+msgstr "Confirmação de eliminação"
+
+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 ""
+"Está prestes a eliminar nós fora da área que descarregou.<br>Isto poderá "
+"causar problemas porque os outros objetos (que não vê neste momento) podem "
+"estar a usar esses nós.<br>Mesmo assim quer eliminá-los?"
+
+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 ""
+"Está prestes a eliminar objetos incompletos.<br>Isto irá causar problemas "
+"porque não está a ver o objeto tal como ele é.<br>Mesmo assim quer eliminá-"
+"los?"
+
+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] ""
+"Está prestes a eliminar {0} relação: {1}<br/>Raramente é necessário fazer "
+"isso, e não é fácil de reverter a eliminação posteriormente avós o envio "
+"para o servidor.<br/>Mesmo assim quer eliminar?"
+msgstr[1] ""
+"Está prestes a eliminar {0} relação: {1}<br/>Raramente é necessário fazer "
+"isso, e não é fácil de reverter a eliminação posteriormente avós o envio "
+"para o servidor.<br/>Mesmo assim quer eliminar?"
+
+msgid "Delete relation?"
+msgstr "Eliminar relação?"
+
 msgid "Delete Layer"
 msgstr "Eliminar Camada"
 
@@ -447,7 +487,7 @@ msgid "Download data"
 msgstr "Descarregar dados"
 
 msgid "Download map data from a server of your choice"
-msgstr ""
+msgstr "Descarregar um mapa de dados de um servidor à escolha"
 
 msgid ""
 "<html>This action will require {0} individual<br>download requests. Do you "
@@ -1431,37 +1471,17 @@ msgstr " [id: {0}]"
 msgid "Segment {0}: {1}"
 msgstr "Segmento {0}: {1}"
 
-msgid "You must select two or more nodes to split a circular way."
-msgstr "Em linhas fechadas é necessário selecionar pelo menos 2  nós."
-
-msgid ""
-"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
-"middle of the way.)"
-msgstr ""
-"A linha não pode ser dividida nos nós selecionados. (Dica: Selecione nós no "
-"meio da linha.)"
-
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
-msgstr ""
-"Foi aplicada em todas as linhas uma função numa relação.<br>Deve confirmar "
-"se está correto e corrigir se necessário na relação."
+msgid "Search preset"
+msgstr "Procurar modelo de etiquetas"
 
-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 "Show preset search dialog"
+msgstr "Mostra a janela de procura de modelos de etiquetas"
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] "Dividir a linha {0} em {1} parte"
-msgstr[1] "Dividir a linha {0} em {1} partes"
+msgid "Search presets"
+msgstr "Procurar modelo de etiquetas"
 
 msgid "Discourage upload"
-msgstr ""
+msgstr "Não recomendar envio"
 
 msgid "UnGlue Ways"
 msgstr "Desligar Linhas"
@@ -2543,19 +2563,19 @@ msgid "MapCSS selector"
 msgstr "Seletor MapCSS"
 
 msgid "Selection settings"
-msgstr ""
+msgstr "Definições de seleção"
 
 msgid "Additional settings"
-msgstr ""
+msgstr "Definições adicionais"
 
 msgid "Search syntax"
-msgstr ""
+msgstr "Sintaxe de pesquisa"
 
 msgid "Invalid search expression"
 msgstr "A expressão de pesquisa está incorreta"
 
 msgid "Search by preset"
-msgstr ""
+msgstr "Pesquisar por modelo de etiquetas"
 
 msgid "Filter"
 msgstr "Filtrar"
@@ -2579,7 +2599,7 @@ msgstr ""
 " {0}"
 
 msgid "Search hints"
-msgstr ""
+msgstr "Dicas de pesquisa"
 
 msgid "basics"
 msgstr "básicos"
@@ -2662,10 +2682,11 @@ msgid "object without useful tags"
 msgstr "objeto sem etiquetas úteis"
 
 msgid "all objects that use the address preset"
-msgstr ""
+msgstr "todos os objetos que usem o modelo de etiquetas de endereços"
 
 msgid "all objects that use any preset under the Geography/Nature group"
 msgstr ""
+"os os objetos que usem o modelo de etiquetas do grupo Geografia/Natureza"
 
 msgid "metadata"
 msgstr "metadados"
@@ -2728,6 +2749,8 @@ msgstr "todos os objetos incompletos"
 
 msgid "all deleted objects (checkbox <b>{0}</b> must be enabled)"
 msgstr ""
+"todos os objetos eliminados (tem de estar ativado <b>{0}</b> em Definições "
+"adicionais)"
 
 msgid "related objects"
 msgstr "objetos relacionados"
@@ -2996,46 +3019,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] "Eliminar {0} relação"
 msgstr[1] "Eliminar {0} relações"
 
-msgid "Delete confirmation"
-msgstr "Confirmação de eliminação"
-
-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 ""
-"Está prestes a eliminar nós fora da área que descarregou.<br>Isto poderá "
-"causar problemas porque os outros objetos (que não vê neste momento) podem "
-"estar a usar esses nós.<br>Mesmo assim quer eliminá-los?"
-
-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 ""
-"Está prestes a eliminar objetos incompletos.<br>Isto irá causar problemas "
-"porque não está a ver o objeto tal como ele é.<br>Mesmo assim quer eliminá-"
-"los?"
-
-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] ""
-"Está prestes a eliminar {0} relação: {1}<br/>Raramente é necessário fazer "
-"isso, e não é fácil de reverter a eliminação posteriormente avós o envio "
-"para o servidor.<br/>Mesmo assim quer eliminar?"
-msgstr[1] ""
-"Está prestes a eliminar {0} relação: {1}<br/>Raramente é necessário fazer "
-"isso, e não é fácil de reverter a eliminação posteriormente avós o envio "
-"para o servidor.<br/>Mesmo assim quer eliminar?"
-
-msgid "Delete relation?"
-msgstr "Eliminar relação?"
-
 msgid "Move {0} node"
 msgid_plural "Move {0} nodes"
 msgstr[0] "Mover {0} nó"
@@ -3067,6 +3050,35 @@ msgstr[1] "Selecionados {0} objetos"
 msgid "Sequence: {0}"
 msgstr "Sequência: {0}"
 
+msgid "You must select two or more nodes to split a circular way."
+msgstr "Em linhas fechadas é necessário selecionar pelo menos 2  nós."
+
+msgid ""
+"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
+"middle of the way.)"
+msgstr ""
+"A linha não pode ser dividida nos nós selecionados. (Dica: Selecione nós no "
+"meio da linha.)"
+
+msgid ""
+"A role based relation membership was copied to all new ways.<br>You should "
+"verify this and correct it when necessary."
+msgstr ""
+"Foi aplicada em todas as linhas uma função numa relação.<br>Deve confirmar "
+"se está correto e corrigir se necessário na relação."
+
+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] "Dividir a linha {0} em {1} parte"
+msgstr[1] "Dividir a linha {0} em {1} partes"
+
 msgid "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] "{0} nó transformado"
@@ -3199,6 +3211,18 @@ msgstr "Valor de latitude \"{0}\" incorreto"
 msgid "Illegal longitude value ''{0}''"
 msgstr "Valor de longitude \"{0}\" incorreto"
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr "Não foi possível criar o diretório que falta da cache: {0}"
 
@@ -3331,6 +3355,9 @@ msgstr "Imperial"
 msgid "Nautical Mile"
 msgstr "Milha Náutica"
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr "Esperado um valor não-vazio para o parâmetro ''{0}'', obtido ''{1}''"
+
 msgid "UNKNOWN"
 msgstr "DESCONHECIDO"
 
@@ -3376,6 +3403,9 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr "Data das imagens aéreas: {0}"
 
@@ -3434,7 +3464,7 @@ msgid "Matrix set identifier"
 msgstr "Identificador de conjunto de matriz"
 
 msgid "No default layer selected, choosing first layer."
-msgstr ""
+msgstr "Nenhuma camada padrão selecionada, a escolher a primeira camada."
 
 msgid "No layers defined by getCapabilities document: {0}"
 msgstr "Sem camadas definidas pelo documento getCapabilities: {0}"
@@ -3447,6 +3477,8 @@ msgid ""
 "Can''t use layer {0} because no supported formats where found. Layer is "
 "available in formats: {1}"
 msgstr ""
+"Não é possível usar a camada {0} porque não foram encontrados formatos "
+"suportados. A camada está disponível nos formatos: {1}"
 
 msgid ""
 "Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
@@ -3745,7 +3777,7 @@ msgid "Range of numbers expected"
 msgstr "Esperado um intervalo de números"
 
 msgid "Unknown preset name: "
-msgstr ""
+msgstr "Nome de modelo de etiquetas desconhecido: "
 
 msgid "Failed to parse MapCSS selector"
 msgstr "Não foi possível processar o seletor MapCSS"
@@ -3973,10 +4005,11 @@ msgid "Checks for errors on relations"
 msgstr "Verifica se existem errros em relações"
 
 msgid "Territories"
-msgstr ""
+msgstr "Territórios"
 
 msgid "Checks for territories-specific features"
 msgstr ""
+"Verificações para elementos específicos de determinados territórios/países"
 
 msgid "Unnecessary tags"
 msgstr "Etiquetas desnecessárias"
@@ -4074,6 +4107,63 @@ msgstr ""
 msgid "Custom Projection"
 msgstr "Projeção Personalizada"
 
+msgid "Error: {0}"
+msgstr "Erro: {0}"
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr "Descrição"
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+"Converte coordenadas de um sistema de referência de coordenadas para outro."
+
+msgid "Options"
+msgstr "Opções"
+
+msgid "Show this help"
+msgstr "Mostrar esta ajuda"
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr "[ficheiro]"
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr "Exemplos"
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+"Esperadas 2 coordenadas, separadas por espaço em branco. Encontrado {0} em "
+"''{1}''"
+
+msgid "Unable to parse number ''{0}''"
+msgstr "Não foi possível processar o número ''{0}''"
+
 msgid "GRS80"
 msgstr "GRS80"
 
@@ -4257,7 +4347,7 @@ msgid "invalid coastline"
 msgstr "linha costeira inválida"
 
 msgid "Conditional Keys"
-msgstr "Etiquetas Condicionais"
+msgstr "Etiquetas condicionais"
 
 msgid "Tests for the correct usage of ''*:conditional'' tags."
 msgstr ""
@@ -4353,7 +4443,7 @@ msgid ""
 "This test checks that there are no relations with same tags and same members "
 "with same roles."
 msgstr ""
-"Isto verifica se existem relações com as mesmas etiquetas, os mesmos membros "
+"Verifica se existem relações com as mesmas etiquetas com os mesmos membros e "
 "com as mesmas funções."
 
 msgid "Relations with same members"
@@ -4552,10 +4642,10 @@ msgid "Non-Way in multipolygon"
 msgstr "Não-linha dentro de um multi-polígono"
 
 msgid "Multipolygon member(s) repeated with different role"
-msgstr ""
+msgstr "Multi-polígono com membros repetidos com funções diferentes"
 
 msgid "Multipolygon member(s) repeated with same role"
-msgstr ""
+msgstr "Multi-polígono com membros repetidos com funções iguais"
 
 msgid "Missing name:* translation"
 msgstr ""
@@ -4583,7 +4673,7 @@ msgid "This test checks the correct usage of the opening hours syntax."
 msgstr "Verifica se a sintaxe do horário de abertura está correta"
 
 msgid "opening_hours value can be prettified"
-msgstr ""
+msgstr "o valor em opening_hours pode ser melhorado"
 
 msgid "Unexpected token:"
 msgstr "Token não esperado:"
@@ -4932,9 +5022,7 @@ msgid "Unclosed Ways"
 msgstr "Linhas por fechar (com etiqueta de área/similar)"
 
 msgid "This tests if ways which should be circular are closed."
-msgstr ""
-"Isto verifica se existem linhas que deviam ser fechadas mas não estão (como "
-"áreas)"
+msgstr "Verifica se existem linhas que deviam ser fechadas (como áreas)."
 
 msgid "Unclosed way"
 msgstr "Linha por fechar"
@@ -5009,8 +5097,7 @@ msgstr "Nós isolados e sem nenhuma etiqueta"
 
 msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
-"Isto verifica se existem nós sem etiquetas que não façam parte de nenhuma "
-"linha"
+"Verifica se existem nós sem etiquetas que não façam parte de nenhuma linha."
 
 msgid "No tags"
 msgstr "Sem etiquetas"
@@ -5068,7 +5155,7 @@ msgid "Way terminates on Area"
 msgstr "Linha termina numa Área"
 
 msgid "Wrongly Ordered Ways"
-msgstr "Linhas com Direção Errada (terra à esquerda do sentido da linha)"
+msgstr "Linhas com direção errada (terra à esquerda do sentido da linha)"
 
 msgid "This test checks the direction of water, land and coastline ways."
 msgstr ""
@@ -5185,9 +5272,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr "Alinhamento"
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr "Esperado um valor não-vazio para o parâmetro ''{0}'', obtido ''{1}''"
-
 msgid "Outdated Java version"
 msgstr "Versão do JAVA desatualizada"
 
@@ -5215,6 +5299,8 @@ msgid ""
 "You may face critical Java bugs; we highly recommend you to update to Java "
 "{0}."
 msgstr ""
+"Pode estar exposto a erros e vulnerabilidades do Java; recomendados que "
+"atualize para a versão do Java {0}."
 
 msgid "Would you like to update now ?"
 msgstr "Quer atualizar agora?"
@@ -5237,6 +5323,9 @@ msgstr "A inicializar os dados de fronteiras internas"
 msgid "Initializing OSM API"
 msgstr "A inicializar a API do OpenStreetMap"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr "Camada {0} removida porque não é permitida pela API configurada."
+
 msgid "Initializing internal traffic data"
 msgstr "A inicializar os dados de tráfego interno"
 
@@ -5258,9 +5347,6 @@ msgstr "utilização"
 msgid "options"
 msgstr "opções"
 
-msgid "Show this help"
-msgstr "Mostrar esta ajuda"
-
 msgid "Standard unix geometry argument"
 msgstr "Dimensão e posicionamento da janela (segundo o UNIX padrão)"
 
@@ -5491,6 +5577,14 @@ msgstr ""
 "Internet ou ter a configuração de proxy errada.<br>Quer alterar as "
 "configurações de proxy?"
 
+msgid "You have {0} unread message."
+msgid_plural "You have {0} unread messages."
+msgstr[0] "Tem {0} mensagem por ler."
+msgstr[1] "Tem {0} mensagens por ler."
+
+msgid "Click here to see your inbox."
+msgstr "Clique aqui para ver a sua caixa de entrada"
+
 msgctxt "menu"
 msgid "File"
 msgstr "Ficheiro"
@@ -5698,10 +5792,12 @@ msgid " ({0})"
 msgstr " ({0})"
 
 msgid "<h2>Filter active: {0}</h2>"
-msgstr ""
+msgstr "<h2>Filtro ativo: {0}</h2>"
 
 msgid "</p><p>Click again on filter button to see all objects.</p></html>"
 msgstr ""
+"</p><p>Clique outra vez no botão do filtro para ver todos os "
+"objetos.</p></html>"
 
 msgid "Enlarge"
 msgstr "Aumentar"
@@ -5755,6 +5851,12 @@ msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 "O valor atual não é uma tela válida no nível de enquadramento (zoom) indicado"
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+"Não foi possível abrir a página para relatar um erro. Por favor relate um "
+"erro acedendo ao site:"
+
 msgid "You have encountered a bug in JOSM"
 msgstr "Encontrou um bug no JOSM"
 
@@ -5786,9 +5888,14 @@ msgid ""
 "include information on how to reproduce the error and try to supply as much "
 "detail as possible."
 msgstr ""
+"Se tiver o JOSM e os módulos atualizados, por favor envie um relatório de "
+"erro no nosso bugtracker.\n"
+"É mostrado a seguir a informação necessária. Por favor inclua informação "
+"adicional de como o erro aconteceu (e que situação) e outras informações o "
+"mais detalhadas possível."
 
 msgid "Report Bug"
-msgstr "Comunicar um Erro"
+msgstr "Reportar Erro"
 
 msgid "Suppress this error for this session."
 msgstr "Suprimir este erro para esta sessão"
@@ -5797,7 +5904,7 @@ msgid "Suppress further error dialogs for this session."
 msgstr "Não mostrar mais avisos de erros nesta sessão."
 
 msgid "Ignore this error."
-msgstr "Ignorar este erro."
+msgstr "Ignorar este erro"
 
 msgid "Include the system status report."
 msgstr "Incluir o relatório do estado do sistema operativo."
@@ -5806,7 +5913,7 @@ msgid "Include information about the data you were working on."
 msgstr "Incluir informações sobre os dados em que estava a trabalhar."
 
 msgid "Include all stack traces."
-msgstr ""
+msgstr "Incluir todos os stack traces."
 
 msgid "Your current version of JOSM is {0}"
 msgstr "A versão atual do JOSM que está a usar é {0}"
@@ -7701,6 +7808,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr "Atualizar o conjunto de alterações do servidor OSM"
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7976,9 +8086,6 @@ msgstr ""
 "Introduza ou cole o endereço web para receber conjuntos de alterações da API "
 "do OSM."
 
-msgid "Examples"
-msgstr "Exemplos"
-
 msgid ""
 "Note that changeset queries are currently always submitted to ''{0}'', "
 "regardless of the host, port and path of the URL entered below."
@@ -8844,7 +8951,7 @@ msgid "Rename the currently selected bookmark"
 msgstr "Alterar o nome do favorito selecionado"
 
 msgid "Download bookmarks for my {0} last changesets"
-msgstr ""
+msgstr "Adicionar como favoritos os meus últimos {0} conjuntos de alterações"
 
 msgid "min lat"
 msgstr "lat mín"
@@ -8903,10 +9010,10 @@ msgstr ""
 "OpenStreetMap''.</html>"
 
 msgid "Zoom to downloaded data"
-msgstr ""
+msgstr "Enquadrar visualização da área descarregada"
 
 msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
+msgstr "Ative para fazer zoom da nova área descarregada."
 
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
@@ -8946,7 +9053,7 @@ msgid "Download referrers (parent relations and ways)"
 msgstr "Descarregar referentes (relações pai e linhas)"
 
 msgid "Download from OSM"
-msgstr ""
+msgstr "Descarregar do OSM"
 
 msgid "Data Sources and Types:"
 msgstr "Fonte e tipo de dados:"
@@ -8997,86 +9104,66 @@ msgstr ""
 "área"
 
 msgid "Download from Overpass API"
+msgstr "Descarregar da API do Overpass"
+
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
+"Cole a consulta Overpass abaixo ou crie uma usando o Construtor de Consultas "
+"do Overpass Turbo"
 
 msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
+"Criar uma consulta Overpass utilizando a ferramenta Construtor de Consultas "
+"do Overpass Turbo"
 
 msgid "Query Wizard"
-msgstr ""
-
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
-msgstr ""
+msgstr "Construtor de Consultas"
 
 msgid "Your saved queries:"
-msgstr ""
+msgstr "As suas consultas gravadas:"
 
 msgid "Show/hide Overpass snippet list"
-msgstr ""
+msgstr "Mostrar / ocultar lista de consultas gravadas"
 
 msgid "Overpass query:"
-msgstr ""
+msgstr "Consulta Overpass:"
 
 msgid ""
 "You entered an empty query. Do you want to download all data in this area "
 "instead?"
 msgstr ""
+"Introduziu uma consulta em branco. Quer descarregar todos os dados desta "
+"área?"
 
 msgid "Download all data?"
-msgstr ""
+msgstr "Descarregar todos os dados?"
 
 msgid "Add new snippet"
-msgstr ""
+msgstr "Adicionar consulta"
 
 msgid "Delete selected snippet"
-msgstr ""
+msgstr "Eliminar consulta"
 
 msgid "Edit selected snippet"
-msgstr ""
-
-msgid "history"
-msgstr "história"
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
+msgstr "Editar consulta selecionada"
 
 msgid "Overpass Turbo Query Wizard"
-msgstr ""
+msgstr "Construtor de Consultas Overpass Turbo"
 
 msgid "Build query"
 msgstr "Criar consulta"
 
 msgid "Build query and execute"
-msgstr ""
+msgstr "Criar consulta e executar"
 
 msgid "Search :"
-msgstr ""
+msgstr "Procurar:"
 
 msgid "The Overpass wizard could not parse the following query:"
 msgstr ""
+"O Construtor de Consultas não conseguiu processar a seguinte consulta:"
 
 msgid "Parse error"
 msgstr "Erro de processamento"
@@ -9085,58 +9172,74 @@ msgid ""
 "Allows you to interact with <i>Overpass API</i> by writing declarative, "
 "human-readable terms."
 msgstr ""
+"Permite interagir com a <i>API do Overpass</i> escrevendo termos inelegíveis "
+"e declarativos."
 
 msgid ""
 "The <i>Query Wizard</i> tool will transform those to a valid overpass query."
 msgstr ""
+"A ferramenta <i>Construtor de Consultas</i> transforma as expressões numa "
+"consulta processável pela ferramenta."
 
 msgid "For more detailed description see "
-msgstr ""
+msgstr "Para mais informações consultar "
 
 msgid "<a href=\"{0}\">OSM Wiki</a>."
-msgstr ""
+msgstr "<a href=\"{0}\">Wiki do OSM</a>."
 
 msgid "Hints"
-msgstr ""
+msgstr "Dicas"
 
 msgid "Download objects of a certain type."
-msgstr ""
+msgstr "Descarregar objetos de um determinado tipo."
 
 msgid "Download object by specifying a specific location. For example,"
-msgstr ""
+msgstr "Descarregar objeto especificando uma localização. Por exemplo,"
 
 msgid "{0} all objects having {1} as attribute are downloaded."
-msgstr ""
+msgstr "{0} são descarregados todos os objetos com o atributo {1}."
 
 msgid ""
 "{0} all object with the corresponding key/value pair located around Berlin. "
 "Note, the default value for radius is set to 1000m, but it can be changed in "
 "the generated query."
 msgstr ""
+"{0} todos os objetos com a chave/valor correspondente localizados à volta de "
+"Berlin. Note que o valor do raio padrão é 1000 metros, mas pode ser alterado "
+"manualmente na consulta gerada."
 
 msgid ""
 "{0} all objects within the current selection that have {1} as attribute."
 msgstr ""
+"{0} todos os objetos dentro da seleção atual que tenham o atributo {1}."
 
 msgid ""
 "Instead of <i>location</i> any valid place name can be used like address, "
 "city, etc."
 msgstr ""
+"Em vez de <i>location</i> (localização) pode ser usado qualquer nome de um "
+"local, como endereço, cidade, etc."
 
 msgid ""
 "<span>Download objects that have some concrete key/value pair, only the key "
 "with any contents for the value, the value matching some regular expression. "
 "\"Not equal\" operators are supported as well.</span>"
 msgstr ""
+"<span>Descarrega objetos que: tenham a chave/valor específicos; apenas a "
+"chave com qualquer valor; o valor que corresponda a uma expressão regular. "
+"Os operadores lógicos \"Não igual\" também são suportados.</span>"
 
 msgid "<i>expression1 {0} expression2</i>"
-msgstr ""
+msgstr "<i>expressão1 {0} expressão2</i>"
 
 msgid ""
 "Basic logical operators can be used to create more sophisticated queries. "
 "Instead of \"or\" - \"|\", \"||\" can be used, and instead of \"and\" - "
 "\"&\", \"&&\"."
 msgstr ""
+"Podem ser usados operadores lógicos básicos para criar consultas mais "
+"sofisticadas. Em vez de \"or\" (ou) - pode-se usar \"|\", \"||\"  e em vez "
+"de \"and\" (e) - pode-se usar \"&\", \"&&\"."
 
 msgid "Class Type"
 msgstr "Sub-tipo"
@@ -9187,6 +9290,33 @@ msgstr "Mapa visual"
 msgid "Tile Numbers"
 msgstr "Números de Telas"
 
+msgid "history"
+msgstr "história"
+
+msgid "Please select an item first"
+msgstr "Pro favor selecione primeiro um item"
+
+msgid "Edit item"
+msgstr "Editar item"
+
+msgid "Add snippet"
+msgstr "Adicionar consulta"
+
+msgid "Query cannot be empty"
+msgstr "A consulta não pode estar em branco"
+
+msgid "This name can be used for the item"
+msgstr "Este nome pode ser usado no item"
+
+msgid "Item with this name already exists"
+msgstr "Já existem um item com este nome"
+
+msgid "The item cannot be created with provided name"
+msgstr "O item não pode ser criado com o nome introduzido"
+
+msgid "The item cannot be created with an empty query"
+msgstr "O item não pode ser criado com uma consulta em branco"
+
 msgid "JOSM Help Browser"
 msgstr "Navegador de Ajuda do JOSM"
 
@@ -9348,6 +9478,12 @@ msgstr "Enquadrar o nó na camada atual"
 msgid "Open a history browser with the history of this node"
 msgstr "Abrir o navegador de históricos com o histórico deste nó"
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr "Linha {0}"
 
@@ -9357,6 +9493,9 @@ msgstr "Relação {0}"
 msgid "Object"
 msgstr "Objeto"
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr "Comentário do conjunto de dados"
 
@@ -9521,13 +9660,18 @@ msgstr "Enviar"
 msgid ""
 "Select which actions to perform for this layer, if you click the leftmost "
 "button."
-msgstr ""
+msgstr "Selecione as ações a executar para esta camada."
 
 msgid "Check \"Upload\" to upload the changes to the OSM server."
-msgstr ""
+msgstr "Ative \"Enviar\" para enviar as alterações para o OpenStreetMap."
 
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
+"Ative \"Gravar\" para gravar as alterações num ficheiro do seu computador no "
+"diretório indicado."
+
+msgid "I would like someone to review my edits."
+msgstr ""
 
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "Forneça por favor um comentário breve sobre as alterações que fez:"
@@ -10536,7 +10680,7 @@ msgid "Open OSM file"
 msgstr "Abrir ficheiro OSM"
 
 msgid "Validation Error Files"
-msgstr ""
+msgstr "Ficheiros de Validação de Erros"
 
 msgid "WMS Files (*.wms)"
 msgstr "Ficheiros WMS (*.wms)"
@@ -10545,19 +10689,19 @@ msgid "Unsupported WMS file version; found {0}, expected {1}"
 msgstr "Versão de ficheiro WMS não suportada; encontrada {0}, esperada {1}"
 
 msgid "Native projections"
-msgstr ""
+msgstr "Projeções nativas"
 
 msgid "Offset"
 msgstr "Alinhamento"
 
 msgid "Tile download projection"
-msgstr ""
+msgstr "Projeção de descarregamento de telas"
 
 msgid "Tile display projection"
-msgstr ""
+msgstr "Projeção de visualização de telas"
 
 msgid "Current zoom"
-msgstr ""
+msgstr "Aproximação atual"
 
 msgid "Show tile info"
 msgstr "Mostrar informações da tela"
@@ -10566,22 +10710,22 @@ msgid "Tile Info"
 msgstr "Informação da Tela"
 
 msgid "Tile name"
-msgstr ""
+msgstr "Nome da tela"
 
 msgid "Tile URL"
-msgstr ""
+msgstr "URL da tela"
 
 msgid "Tile size"
-msgstr ""
+msgstr "Tamanho da tela"
 
 msgid "Tile display size"
-msgstr ""
+msgstr "Tamanho de visualização da tela"
 
 msgid "Reprojection"
-msgstr ""
+msgstr "Retro-projeção"
 
 msgid "Reprojected tile size"
-msgstr ""
+msgstr "Tamanho da tela retro-projetada"
 
 msgid "Metadata "
 msgstr "Metadados "
@@ -10708,9 +10852,6 @@ msgid_plural "{0} tracks"
 msgstr[0] "{0} trilho GPS"
 msgstr[1] "{0} trilhos GPS"
 
-msgid "Description"
-msgstr "Descrição"
-
 msgid "Timespan"
 msgstr "Diferença temporal"
 
@@ -10742,10 +10883,10 @@ msgid "Id"
 msgstr "Identificador"
 
 msgid "Min. zoom"
-msgstr ""
+msgstr "Aproximação mínima"
 
 msgid "Max. zoom"
-msgstr ""
+msgstr "Aproximação máxima"
 
 msgid "Unsupported imagery type: {0}"
 msgstr "Tipo de imagem não suportada: {0}"
@@ -10792,7 +10933,7 @@ msgid "Changes need uploading?"
 msgstr "As alterações necessitam de ser enviadas?"
 
 msgid "Save Note file"
-msgstr ""
+msgstr "Gravar ficheiro com Erros Reportados"
 
 msgid "outside downloaded area"
 msgstr "fora da área descarregada"
@@ -10821,7 +10962,7 @@ msgid "Upload is discouraged"
 msgstr "Não é recomendado enviar"
 
 msgid "Upload is blocked"
-msgstr ""
+msgstr "O envio está bloqueado"
 
 msgid "Convert to GPX layer"
 msgstr "Converter numa camada GPX (GPS)"
@@ -10870,7 +11011,7 @@ msgid "No validation errors"
 msgstr "Nenhum erro de validação"
 
 msgid "Save Validation errors file"
-msgstr ""
+msgstr "Gravar ficheiro com erros de Validação"
 
 msgid "Set WMS Bookmark"
 msgstr "Criar favorito da imagem de fundo WMS"
@@ -10879,9 +11020,13 @@ msgid ""
 "Reprojecting layer {0} from {1} to {2}. For best image quality and "
 "performance, switch to one of the supported projections: {3}"
 msgstr ""
+"A retroprojetar a camada {0} de {1} a {2}. Para a melhor qualidade de imagem "
+"e melhor desempenho, mude para uma das projeções suportadas: {3}"
 
 msgid "Unable to find supported projection for layer {0}. Using {1}."
 msgstr ""
+"Não foi possível encontrar a projeção suportada para a camada {0}. A usar "
+"{1}."
 
 msgid "Correlate to GPX"
 msgstr "Correlacionar com GPX"
@@ -11270,7 +11415,7 @@ msgid "Select to download OSM data."
 msgstr "Selecione para baixar dados do OSM."
 
 msgid "Select to download GPS traces."
-msgstr "Selecione para baixar trilhas do GPS."
+msgstr "Selecione para descarregar trilhos GPS."
 
 msgid "Download everything within:"
 msgstr "Descarregar tudo num raio de:"
@@ -11339,7 +11484,7 @@ msgid "Velocity, {0}"
 msgstr "Velocidade, {0}"
 
 msgid "Audio files (*.wav, *.mp3, *.aac, *.aif, *.aiff)"
-msgstr ""
+msgstr "Ficheiros áudio (*.wav, *.mp3, *.aac, *.aif, *.aiff)"
 
 msgid "Import Audio"
 msgstr "Importar Áudio"
@@ -12479,7 +12624,7 @@ msgid "Draw segment order numbers"
 msgstr "Mostrar números de ordem dos segmentos"
 
 msgid "Draw segment order numbers on selected way"
-msgstr ""
+msgstr "Mostrar número de ordem dos segmentos nas vias selecionadas"
 
 msgid "Draw boundaries of downloaded data"
 msgstr "Mostrar limites dos dados descarregados"
@@ -12498,7 +12643,7 @@ msgid "Use auto filters"
 msgstr ""
 
 msgid "Rule"
-msgstr ""
+msgstr "Regra"
 
 msgid "Highlight target ways and nodes"
 msgstr "Destacar linhas e nós alvo ao selecionar ou desenhar"
@@ -12669,31 +12814,31 @@ msgstr "A pé"
 
 msgctxt "Heat map"
 msgid "User Normal"
-msgstr ""
+msgstr "Utilizador Normal"
 
 msgctxt "Heat map"
 msgid "User Light"
-msgstr ""
+msgstr "Utilizador Leve"
 
 msgctxt "Heat map"
 msgid "Traffic Lights"
-msgstr ""
+msgstr "Semáforos"
 
 msgctxt "Heat map"
 msgid "Inferno"
-msgstr ""
+msgstr "Inferno"
 
 msgctxt "Heat map"
 msgid "Viridis"
-msgstr ""
+msgstr "Viridis"
 
 msgctxt "Heat map"
 msgid "Wood"
-msgstr ""
+msgstr "Madeira"
 
 msgctxt "Heat map"
 msgid "Heat"
-msgstr ""
+msgstr "Temperatura"
 
 msgid "Use points instead of lines for heat map"
 msgstr ""
@@ -13097,7 +13242,7 @@ msgid "Available default entries:"
 msgstr "Fontes disponíveis:"
 
 msgid "New default entries can be added in the <a href=\"{0}\">Wiki</a>."
-msgstr ""
+msgstr "Podem ser adicionadas mais fontes na <a href=\"{0}\">Wiki</a>."
 
 msgid "Selected entries:"
 msgstr "Fontes ativadas:"
@@ -13636,13 +13781,13 @@ msgid "Projection method"
 msgstr "Método de projeção"
 
 msgid "Set as default"
-msgstr ""
+msgstr "Definir como padrão"
 
 msgid "Default projection"
-msgstr ""
+msgstr "Projeção padrão"
 
 msgid "Default projection has been set to ''{0}''"
-msgstr ""
+msgstr "A projeção padrão foi definida como ''{0}''"
 
 msgid "Display coordinates as"
 msgstr "Mostrar coordenadas como"
@@ -13672,7 +13817,7 @@ msgid "Swiss Grid (Switzerland)"
 msgstr "Grelha Sueca (Suíça)"
 
 msgid "<i>CH1903 / LV03</i>"
-msgstr ""
+msgstr "<i>CH1903 / LV03</i>"
 
 msgid "Guadeloupe Fort-Marigot 1949"
 msgstr "Fort-Marigot Guadalupe 1949"
@@ -14242,15 +14387,6 @@ msgstr "Elemento secundário predefinido sem pai"
 msgid "Error parsing {0}: "
 msgstr "Erro ao processar {0}: "
 
-msgid "Search preset"
-msgstr "Procurar modelo de etiquetas"
-
-msgid "Show preset search dialog"
-msgstr "Mostra a janela de procura de modelos de etiquetas"
-
-msgid "Search presets"
-msgstr "Procurar modelo de etiquetas"
-
 msgid "Presets"
 msgstr "Modelos de Etiquetas"
 
@@ -14323,7 +14459,7 @@ msgid "Unknown requisite: {0}"
 msgstr "Requisito desconhecido: {0}"
 
 msgid "Unknown regexp value: {0}"
-msgstr ""
+msgstr "Valor de expressão regular desconhecida: {0}"
 
 msgid "Illegal member expression: {0}"
 msgstr "Expressão de membro inválida: {0}"
@@ -14368,6 +14504,9 @@ msgstr "Todos os ficheiros (*.*)"
 msgid "Received error page:"
 msgstr "Página de erro obtida:"
 
+msgid "{0}... [please type its number]"
+msgstr "{0}... [por favor digite o seu número]"
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -14676,14 +14815,6 @@ msgstr "Modo desconhecido: {0}."
 msgid "get number of unread messages"
 msgstr "obter número de mensagens por ler"
 
-msgid "You have {0} unread message."
-msgid_plural "You have {0} unread messages."
-msgstr[0] "Tem {0} mensagem por ler."
-msgstr[1] "Tem {0} mensagens por ler."
-
-msgid "Click here to see your inbox."
-msgstr "Clique aqui para ver a sua caixa de entrada"
-
 msgid "Message notifier"
 msgstr "Notificador de mensagens"
 
@@ -14754,9 +14885,6 @@ msgstr ""
 "Suporta a versão 0.6 do protocolo, enquanto o servidor diz que suporta {0} a "
 "{1}."
 
-msgid "Removed layer {0} because it is not allowed by the configured API."
-msgstr "Camada {0} removida porque não é permitida pela API configurada."
-
 msgid "Unexpected format of ID replied by the server. Got ''{0}''."
 msgstr ""
 "Formato de identificador (ID) inesperado respondido pelo servidor. Obteve-se "
@@ -14907,6 +15035,8 @@ msgid ""
 "Illegal value for attributes ''lat'', ''lon'' on node with ID {0}. Got "
 "''{1}'', ''{2}''."
 msgstr ""
+"Valor ilegal para os atributos ''lat'', ''lon'' no nó com o identificador "
+"{0}. Obtido ''{1}'', ''{2}''."
 
 msgid "Deleted way {0} contains nodes"
 msgstr "A linha eliminada {0} contém nós"
@@ -15065,7 +15195,7 @@ msgid "Reading user info ..."
 msgstr "A ler a informação de utilizador ..."
 
 msgid "Reading user preferences ..."
-msgstr ""
+msgstr "A ler as preferências do utilizador..."
 
 msgid "Starting to upload with one request per primitive ..."
 msgstr "A começar a enviar com um pedido por objeto...."
@@ -16243,9 +16373,6 @@ msgstr ""
 "http://forum.openstreetmap.org/viewtopic.php?id=25677).\n"
 "Neste momento tem atribuído ao JOSM {1,number,#}MB de memória RAM."
 
-msgid "{0}... [please type its number]"
-msgstr "{0}... [por favor digite o seu número]"
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -16370,12 +16497,6 @@ msgid "Failed to load XML schema."
 msgstr "Não foi possível carregar o esquema XML."
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-"Não foi possível abrir a página para relatar um erro. Por favor relate um "
-"erro acedendo ao site:"
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -16468,11 +16589,11 @@ msgstr "terra de cultivo"
 
 msgctxt "landuse"
 msgid "farmyard"
-msgstr ""
+msgstr "quinta (apenas edifícios e pátio)"
 
 msgctxt "landuse"
 msgid "cemetery"
-msgstr ""
+msgstr "cemitério"
 
 msgctxt "landuse"
 msgid "residential"
@@ -16480,11 +16601,11 @@ msgstr "residencial"
 
 msgctxt "landuse"
 msgid "greenfield"
-msgstr ""
+msgstr "campo com loteamento planeado"
 
 msgctxt "landuse"
 msgid "village_green"
-msgstr ""
+msgstr "espaço verde em zona urbana"
 
 msgctxt "landuse"
 msgid "quarry"
@@ -16492,11 +16613,11 @@ msgstr "pedreira"
 
 msgctxt "landuse"
 msgid "allotments"
-msgstr ""
+msgstr "horta urbana ou comunitária"
 
 msgctxt "landuse"
 msgid "vineyard"
-msgstr ""
+msgstr "vinha"
 
 msgctxt "natural"
 msgid "scrub"
@@ -16508,27 +16629,27 @@ msgstr ""
 
 msgctxt "natural"
 msgid "grassland"
-msgstr ""
+msgstr "pradaria"
 
 msgctxt "natural"
 msgid "wetland"
-msgstr ""
+msgstr "zonas encharcadas"
 
 msgctxt "natural"
 msgid "heath"
-msgstr ""
+msgstr "mato de vegetação rasteira"
 
 msgctxt "amenity"
 msgid "fire_station"
-msgstr ""
+msgstr "quartel de bombeiros"
 
 msgctxt "leisure"
 msgid "park"
-msgstr ""
+msgstr "parque"
 
 msgctxt "leisure"
 msgid "track"
-msgstr ""
+msgstr "pista de corridas não motorizadas"
 
 msgctxt "building"
 msgid "industrial"
@@ -16779,10 +16900,10 @@ msgid "concrete"
 msgstr "cimento"
 
 msgid "concrete:plates"
-msgstr ""
+msgstr "placas de cimento"
 
 msgid "concrete:lanes"
-msgstr ""
+msgstr "faixas de cimento"
 
 msgid "paving_stones"
 msgstr "blocos de cimento ou argamassa"
@@ -16977,6 +17098,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr "não"
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr "Tipo de serviço"
 
@@ -16997,7 +17122,7 @@ msgstr "Eletrificado"
 
 msgctxt "electrified"
 msgid "contact_line"
-msgstr ""
+msgstr "catenária"
 
 msgctxt "electrified"
 msgid "no"
@@ -17009,7 +17134,7 @@ msgstr "sim"
 
 msgctxt "electrified"
 msgid "rail"
-msgstr ""
+msgstr "3º carril eletrificado"
 
 msgid "Voltage in Volts (V)"
 msgstr "Voltagem em Volts (V)"
@@ -17127,7 +17252,7 @@ msgid "sushi"
 msgstr "sushi"
 
 msgid "steak_house"
-msgstr ""
+msgstr "churrasqueira"
 
 msgid "fish_and_chips"
 msgstr "peixe e batatas fritas"
@@ -17377,11 +17502,11 @@ msgstr "skate"
 
 msgctxt "sport"
 msgid "ice_skating"
-msgstr ""
+msgstr "patinagem no gelo"
 
 msgctxt "sport"
 msgid "roller_skating"
-msgstr ""
+msgstr "patins de rodas"
 
 msgctxt "sport"
 msgid "soccer"
@@ -18221,7 +18346,7 @@ msgid "Ford"
 msgstr "Vau (ponto de passagem num curso de água baixo)"
 
 msgid "stepping_stones"
-msgstr ""
+msgstr "Poldra (ponte de pedras espaçadas p/passar a pé)"
 
 msgid "Ways"
 msgstr "Caminhos"
@@ -18236,31 +18361,33 @@ msgid "grade1"
 msgstr "grau1"
 
 msgid "Solid: paved or heavily compacted hardcore surface"
-msgstr ""
+msgstr "Sólido: superfície pavimentada ou bastante compactada"
 
 msgid "grade2"
 msgstr "grau2"
 
 msgid "Mostly Solid: gravel/rock with some soft material mixed in"
-msgstr ""
+msgstr "Na Maioria Sólido: cascalho ou pedras com algum material mais macio"
 
 msgid "grade3"
 msgstr "grau3"
 
 msgid "Even mixture of hard and soft materials"
-msgstr ""
+msgstr "Superfície mista entre materiais sólidos e macios"
 
 msgid "grade4"
 msgstr "grau4"
 
 msgid "Mostly Soft: soil/sand/grass with some hard material mixed in"
 msgstr ""
+"Na Maioria Macio: superfície como solo, areia ou ervas misturada com algum "
+"material sólido"
 
 msgid "grade5"
 msgstr "grau5"
 
 msgid "Soft: soil/sand/grass"
-msgstr ""
+msgstr "Macio: solo, areia ou ervas"
 
 msgid "MTB Scale"
 msgstr "Escala MTB"
@@ -18307,6 +18434,9 @@ msgid ""
 "sometimes need for hand use to get ahead. Terrain quite exposed, precarious "
 "grassy acclivities, jagged rocks, facile snow-free glaciers"
 msgstr ""
+"Às vezes é preciso usar as mãos para avançar. Terreno bastante exposto, "
+"inclinações instáveis com gramíneas, rochas irregulares, glaciares sem neve "
+"fáceis"
 
 msgid "T5 - difficult alpine trail with climbing"
 msgstr "T5 - trilho alpino difícil que requer escalada"
@@ -18315,6 +18445,8 @@ msgid ""
 "single plainly climbing up to second grade. Exposed, demanding terrain, "
 "jagged rocks, few dangerous glacier and snow"
 msgstr ""
+"Muitas vezes sem caminho definido, subindo para o segundo grau. Terreno "
+"exposto e exigente, pedras irregulares, poucos glaciares perigosos e neve"
 
 msgid "T6 - hazardous alpine trail with climbing"
 msgstr "T5 - trilho alpino perigoso que requer escalada"
@@ -18323,6 +18455,9 @@ msgid ""
 "climbing up to second grade. Often very exposed, precarious jagged rocks, "
 "glacier with danger to slip and fall"
 msgstr ""
+"Quase sempre sem um caminho definido subindo até o segundo grau. Terreno "
+"geralmente muito exposto, pedras irregulares e perigosas, glaciares com "
+"perigo de escorregamento e queda"
 
 msgid "Visibility"
 msgstr "Visibilidade do caminho"
@@ -18609,7 +18744,7 @@ msgstr "Lomba de velocidade (2-4m, convexa)"
 
 msgctxt "traffic_calming"
 msgid "Island"
-msgstr "Ilha no mei da via"
+msgstr "Ilha no meio da via"
 
 msgid "Rumble strip"
 msgstr "Faixas sonoras"
@@ -18862,7 +18997,7 @@ msgid "River"
 msgstr "Rio"
 
 msgid "Lock"
-msgstr ""
+msgstr "Eclusa"
 
 msgid "Canal"
 msgstr "Canal"
@@ -18912,7 +19047,7 @@ msgid "evaporator"
 msgstr "evaporador"
 
 msgid "tailings"
-msgstr ""
+msgstr "resíduos"
 
 msgid "water_storage"
 msgstr "armazenamento de água"
@@ -18937,7 +19072,7 @@ msgid "lake"
 msgstr "lago"
 
 msgid "lagoon"
-msgstr "lagoa"
+msgstr "laguna"
 
 msgid "oxbow"
 msgstr "lago em ferradura / braço morto"
@@ -18952,10 +19087,10 @@ msgid "river"
 msgstr "rio"
 
 msgid "lock"
-msgstr ""
+msgstr "eclusa"
 
 msgid "wastewater"
-msgstr ""
+msgstr "águas residuais"
 
 msgid "Salt Water"
 msgstr "Água Salgada"
@@ -19004,13 +19139,13 @@ msgid "mangrove"
 msgstr "mangal / manguezal"
 
 msgid "wet_meadow"
-msgstr ""
+msgstr "prado encharcado"
 
 msgid "string_bog"
 msgstr ""
 
 msgid "saltern"
-msgstr ""
+msgstr "salina"
 
 msgid "Mud"
 msgstr "Lamaçal"
@@ -19034,9 +19169,9 @@ msgid "Bay"
 msgstr "Baía"
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
-"Um grande corpo de água quase totalmente rodeado por terra mas com uma boca."
 
 msgid "Shipping"
 msgstr "Transporte Marítimo"
@@ -19562,7 +19697,7 @@ msgid "Wash"
 msgstr "Lavagem"
 
 msgid "Self Service"
-msgstr ""
+msgstr "Auto-Serviço (self-service)"
 
 msgid "Car Dealer"
 msgstr "Loja de Automóveis"
@@ -19587,10 +19722,10 @@ msgid "repair"
 msgstr ""
 
 msgid "parts"
-msgstr ""
+msgstr "peças"
 
 msgid "tyres"
-msgstr ""
+msgstr "pneus"
 
 msgid "Parts"
 msgstr "Peças"
@@ -19876,7 +20011,7 @@ msgid "Taxiway"
 msgstr "Via de Circulação (Taxiway)"
 
 msgid "Holding Position"
-msgstr ""
+msgstr "Ponto de Espera"
 
 msgid "Helipad"
 msgstr "Heliponto (ponto de aterrarem/descolagem)"
@@ -19900,7 +20035,7 @@ msgstr "sim"
 
 msgctxt "airmark"
 msgid "Beacon"
-msgstr ""
+msgstr "Radio-farol"
 
 msgid "Navigationaid"
 msgstr ""
@@ -19937,7 +20072,7 @@ msgid "Motel"
 msgstr "Motel"
 
 msgid "Guest House/Bed & Breakfast"
-msgstr ""
+msgstr "Hospedagem Domiciliar / Casa de Hóspedes"
 
 msgid "Apartment"
 msgstr "Apartamento"
@@ -20250,7 +20385,7 @@ msgid "Fishing"
 msgstr "Pesca"
 
 msgid "Bird Hide"
-msgstr ""
+msgstr "Cabana para Observação de Aves"
 
 msgid "Night Club"
 msgstr "Discoteca"
@@ -20592,7 +20727,7 @@ msgid "Located inside a building?"
 msgstr "Localizado dentro de um edifício"
 
 msgid "Last check date (YYYY-MM-DD)"
-msgstr "Data da última inspeção (AAAA-MM-DD)"
+msgstr "Data de Verificado (YYYY-MM-DD)"
 
 msgid "Last check note"
 msgstr "Nota de última verificação"
@@ -20814,7 +20949,7 @@ msgid "Telephone cards"
 msgstr "Cartões de chamadas telefónicas"
 
 msgid "Internet Cafe"
-msgstr ""
+msgstr "Cibercafé"
 
 msgid "Internet Access"
 msgstr "Acesso à Internet"
@@ -20862,7 +20997,7 @@ msgid "Shows humidity"
 msgstr "Mostra a humidade"
 
 msgid "Photo booth"
-msgstr ""
+msgstr "Cabine de fotografia instantânea"
 
 msgid "Recycling Container"
 msgstr "Contentor de Reciclagem"
@@ -20977,10 +21112,10 @@ msgid "Lockable"
 msgstr ""
 
 msgid "Water Point"
-msgstr ""
+msgstr "Ponto de Água (para abastecer Caravanas / Barcos)"
 
 msgid "Animal watering place"
-msgstr ""
+msgstr "Bebedouro para animais"
 
 msgid "Compressed Air"
 msgstr "Ar Comprimido"
@@ -21053,7 +21188,7 @@ msgid "Hole"
 msgstr "Buraco"
 
 msgid "Par"
-msgstr ""
+msgstr "Par"
 
 msgid "Handicap rating"
 msgstr ""
@@ -21173,13 +21308,13 @@ msgid "fitness_centre"
 msgstr "ginásio privado"
 
 msgid "Ice Skating"
-msgstr ""
+msgstr "Patinagem no Gelo"
 
 msgid "ice_rink"
 msgstr "curling bávaro"
 
 msgid "Roller Skating"
-msgstr ""
+msgstr "Patins sobre Rodas"
 
 msgid "Skateboard"
 msgstr "Skate"
@@ -21222,7 +21357,7 @@ msgstr "Grau de Dificuldate"
 
 msgctxt "piste:difficulty"
 msgid "novice"
-msgstr ""
+msgstr "principiante"
 
 msgctxt "piste:difficulty"
 msgid "easy"
@@ -21541,7 +21676,7 @@ msgstr "público"
 
 msgctxt "building"
 msgid "ruins"
-msgstr ""
+msgstr "ruínas"
 
 msgctxt "building"
 msgid "Levels"
@@ -21572,7 +21707,7 @@ msgstr "cabana"
 
 msgctxt "building"
 msgid "bungalow"
-msgstr ""
+msgstr "bangaló"
 
 msgctxt "building"
 msgid "dormitory"
@@ -21629,7 +21764,7 @@ msgstr "escadaria"
 
 msgctxt "entrance"
 msgid "home"
-msgstr ""
+msgstr "casa"
 
 msgid "Entrance number"
 msgstr "Número de porta"
@@ -21653,7 +21788,7 @@ msgid "Flagpole"
 msgstr "Mastro de Bandeira"
 
 msgid "Cross"
-msgstr ""
+msgstr "Cruz"
 
 msgid "Works"
 msgstr "Área industrial / Fábrica"
@@ -21683,7 +21818,7 @@ msgstr "estrume"
 
 msgctxt "content"
 msgid "oil"
-msgstr ""
+msgstr "petróleo"
 
 msgctxt "content"
 msgid "sewage"
@@ -21695,7 +21830,7 @@ msgstr "cereais"
 
 msgctxt "content"
 msgid "slurry"
-msgstr ""
+msgstr "chorume (esterco líquido)"
 
 msgctxt "content"
 msgid "water"
@@ -21832,7 +21967,7 @@ msgstr "Farol"
 
 msgctxt "man_made"
 msgid "Beacon"
-msgstr ""
+msgstr "Almenara / Sinalizador"
 
 msgid "Street Lamp"
 msgstr "Poste de Iluminação"
@@ -22799,7 +22934,7 @@ msgid "Castle"
 msgstr "Castelo"
 
 msgid "stately"
-msgstr ""
+msgstr "château / majestuoso (sem fortificações)"
 
 msgid "defensive"
 msgstr "defensivo"
@@ -22808,7 +22943,7 @@ msgid "fortress"
 msgstr "fortaleza"
 
 msgid "manor"
-msgstr ""
+msgstr "solar"
 
 msgid "palace"
 msgstr "palácio"
@@ -22817,19 +22952,19 @@ msgid "Archaeological Site"
 msgstr "Sítio Arqueológico"
 
 msgid "tumulus"
-msgstr ""
+msgstr "túmulo"
 
 msgid "megalith"
-msgstr ""
+msgstr "megálito"
 
 msgid "fortification"
-msgstr ""
+msgstr "fortificação"
 
 msgid "settlement"
-msgstr ""
+msgstr "povoamento"
 
 msgid "necropolis"
-msgstr ""
+msgstr "necrópole"
 
 msgid "Battlefield"
 msgstr "Campo de Batalha"
@@ -22911,10 +23046,10 @@ msgid "Seafood"
 msgstr "Peixaria"
 
 msgid "Dairy"
-msgstr ""
+msgstr "Laticínios"
 
 msgid "Cheese"
-msgstr ""
+msgstr "Queijaria"
 
 msgid "Deli (Fine Food)"
 msgstr "Loja de Gourmet"
@@ -22923,7 +23058,7 @@ msgid "Pastry"
 msgstr "Pastelaria"
 
 msgid "Confectionery"
-msgstr ""
+msgstr "Confeitaria"
 
 msgid "Tea"
 msgstr "Chá"
@@ -23151,7 +23286,7 @@ msgid "Variety Store"
 msgstr "Loja de Descontos (Lojas 1,99; preço único)"
 
 msgid "Charity"
-msgstr ""
+msgstr "Loja de Caridade"
 
 msgid "Bookmaker"
 msgstr "Casa de Apostas"
@@ -23178,10 +23313,10 @@ msgid "Vending products"
 msgstr "Produtos à venda"
 
 msgid "admission_tickets"
-msgstr ""
+msgstr "ingressos / bilhetes"
 
 msgid "animal_feed"
-msgstr ""
+msgstr "comida para animais"
 
 msgid "bicycle_tube"
 msgstr "pneus de bicicleta"
@@ -23190,7 +23325,7 @@ msgid "cigarettes"
 msgstr "cigarros"
 
 msgid "coffee"
-msgstr ""
+msgstr "café"
 
 msgid "condoms"
 msgstr "preservativos"
@@ -23199,7 +23334,7 @@ msgid "drinks"
 msgstr "bebidas"
 
 msgid "elongated_coin"
-msgstr ""
+msgstr "moedas alongadas"
 
 msgid "excrement_bags"
 msgstr "sacos para excrementos"
@@ -23399,7 +23534,7 @@ msgid "tax"
 msgstr "impostos"
 
 msgid "register_office"
-msgstr ""
+msgstr "conservatória do registo civil"
 
 msgctxt "office"
 msgid "Insurance"
@@ -23812,13 +23947,14 @@ msgid "Scree"
 msgstr "Escarpa de Rochas Soltas"
 
 msgid "An accumulation of loose angular rocks."
-msgstr ""
+msgstr "Uma acumulação de pedras pontiagudas soltas."
 
 msgid "Shingle"
-msgstr ""
+msgstr "Seixal (praia ou margem de rio com seixos)"
 
 msgid "An accumulation of loose rounded rocks on a beach or riverbed."
 msgstr ""
+"Uma acumulação de pedras roliças soltas em uma praia ou leito de rio."
 
 msgid "Fell"
 msgstr ""
@@ -23977,13 +24113,13 @@ msgid "Plant Nursery"
 msgstr "Viveiro de Plantas"
 
 msgid "Aquaculture"
-msgstr ""
+msgstr "Aquacultura"
 
 msgid "shrimp"
-msgstr ""
+msgstr "camarão"
 
 msgid "mussels"
-msgstr ""
+msgstr "mexilhão"
 
 msgid "Allotments"
 msgstr "Horta Urbana / Comunitária"
@@ -24029,75 +24165,75 @@ msgstr "Área Industrial"
 
 msgctxt "industrial"
 msgid "bakery"
-msgstr ""
+msgstr "panificadora industrial"
 
 msgctxt "industrial"
 msgid "brewery"
-msgstr ""
+msgstr "cervejeira industrial"
 
 msgctxt "industrial"
 msgid "brickyard"
-msgstr ""
+msgstr "fábrica de tijolos"
 
 msgctxt "industrial"
 msgid "depot"
-msgstr ""
+msgstr "depósito de veículos (bombeiros, comboios...)"
 
 msgctxt "industrial"
 msgid "distributor"
-msgstr ""
+msgstr "distribuidor (grossista)"
 
 msgctxt "industrial"
 msgid "factory"
-msgstr ""
+msgstr "fábrica"
 
 msgctxt "industrial"
 msgid "grinding_mill"
-msgstr ""
+msgstr "fábrica de moagens"
 
 msgctxt "industrial"
 msgid "heating_station"
-msgstr ""
+msgstr "central de aquecimento urbano"
 
 msgctxt "industrial"
 msgid "machine_shop"
-msgstr ""
+msgstr "oficina mecânica"
 
 msgctxt "industrial"
 msgid "mine"
-msgstr ""
+msgstr "mina"
 
 msgctxt "industrial"
 msgid "oil"
-msgstr ""
+msgstr "petróleo"
 
 msgctxt "industrial"
 msgid "port"
-msgstr ""
+msgstr "porto marítimo/fluvial"
 
 msgctxt "industrial"
 msgid "salt_pond"
-msgstr ""
+msgstr "salina"
 
 msgctxt "industrial"
 msgid "sawmill"
-msgstr ""
+msgstr "serração"
 
 msgctxt "industrial"
 msgid "scrap_yard"
-msgstr ""
+msgstr "indústria de sucatas"
 
 msgctxt "industrial"
 msgid "shipyard"
-msgstr ""
+msgstr "estaleiro naval"
 
 msgctxt "industrial"
 msgid "slaughterhouse"
-msgstr ""
+msgstr "matadouro"
 
 msgctxt "industrial"
 msgid "warehouse"
-msgstr ""
+msgstr "armazém"
 
 msgid "Garages"
 msgstr "Área de Garagens"
@@ -24172,7 +24308,7 @@ msgid "Country code"
 msgstr "Código do país"
 
 msgid "Unit/Suite"
-msgstr ""
+msgstr "Unidade/Suite"
 
 msgid "House name"
 msgstr "Nome da casa"
@@ -24471,16 +24607,16 @@ msgid "Label point"
 msgstr "Nó onde aparecerá o nome"
 
 msgid "Outline of building"
-msgstr ""
+msgstr "Contorno do edifício"
 
 msgid "Inner segment"
-msgstr ""
+msgstr "Segmento de dentro"
 
 msgid "Roof ridge"
-msgstr ""
+msgstr "Cumeeira do telhado"
 
 msgid "Roof edge"
-msgstr ""
+msgstr "Borda do telhado"
 
 msgid "Building level"
 msgstr ""
@@ -24588,10 +24724,10 @@ msgid "Bicycle Route"
 msgstr "Rota de Ciclismo"
 
 msgid "national"
-msgstr ""
+msgstr "nacional"
 
 msgid "local"
-msgstr ""
+msgstr "local"
 
 msgid "Mountain Biking Route"
 msgstr "Rota de Ciclismo de Montanha"
@@ -24606,10 +24742,10 @@ msgid "natural"
 msgstr "natural"
 
 msgid "Walking Route"
-msgstr ""
+msgstr "Rota de Caminhada"
 
 msgid "Riding Route"
-msgstr ""
+msgstr "Rota de Equitação"
 
 msgid "Piste Route"
 msgstr "Rota de pista na neve (esqui, downhill, trenó, snowboard...)"
@@ -24785,25 +24921,33 @@ msgid "Mapbox Satellite"
 msgstr "Satélite Mapbox"
 
 msgid "DigitalGlobe Premium Imagery"
-msgstr ""
+msgstr "DigitalGlobe Premium Imagery"
 
 msgid ""
 "DigitalGlobe-Premium is a mosaic composed of DigitalGlobe basemap with "
 "select regions filled with +Vivid or custom area of interest imagery, 50cm "
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
+"DigitalGlobe-Premium é um mosaico composto pelo mapa base DigitalGlobe com "
+"regiões selecionadas preenchidas com +Vivid ou imagens de áreas de "
+"interesse, com  resolução 50cm ou superior, e atualizada com mais frequência "
+"."
 
 msgid "DigitalGlobe Standard Imagery"
-msgstr ""
+msgstr "DigitalGlobe Standard Imagery"
 
 msgid ""
 "DigitalGlobe-Standard is a curated set of imagery covering 86% of the "
 "earth’s landmass, with 30-60cm or resolution where available, backfilled by "
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
+"DigitalGlobe-Standard é um conjunto de imagens aéreas curadas cobrindo 86% "
+"da massa terrestre, com resoluções entre 30 a 60cm quando disponíveis e nas "
+"outras com imagens do Landsat. A idade média das imagens é de 2.31 anos, com "
+"algumas áreas atualizadas 2 vezes por ano."
 
 msgid "Esri World Imagery"
-msgstr ""
+msgstr "Esri World Imagery"
 
 msgid "OpenCycleMap"
 msgstr "OpenCycleMap"
@@ -24833,7 +24977,7 @@ msgid "OpenStreetMap GPS Traces"
 msgstr "Trilhos GPS no OpenStreetMap"
 
 msgid "Public GPS traces uploaded to OpenStreetMap."
-msgstr ""
+msgstr "Trilhos GPS públicos enviados para o OpenStreetMap."
 
 msgid "Public Transport (ÖPNV)"
 msgstr "Transportes Públicos (ÖPNV)"
@@ -24889,6 +25033,9 @@ msgstr "Waymarked Trails: Corridas de Cavalos"
 msgid "Waymarked Trails: Winter Sports"
 msgstr "Waymarked Trails: Desportos de Inverno"
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr "OSM Inspector: Geometria"
 
@@ -24914,167 +25061,190 @@ msgid "OSM Inspector: Coastline (EU)"
 msgstr "OSM Inspector: Linha costeira (EU)"
 
 msgid "imagico.de OSM images for mapping: Prokletije Mountains"
-msgstr ""
+msgstr "imagico.de imagens OSM para mapear: Montanhas Prokletije"
 
 msgid ""
 "Late summer imagery where usual sources are severely limited by clouds and "
 "snow (true color)"
 msgstr ""
+"Imagens aéreas dos fins do Verão onde as fontes habituais são bastante "
+"afetadas por nuvens e neve (cor verdadeira)"
 
 msgid "imagico.de OSM images for mapping: Southern Transantarctic Mountains"
-msgstr ""
+msgstr "imagico.de imagens OSM para mapear: Montes Transantárticos do Sul"
 
 msgid ""
 "Outside regular Landsat coverage and therefore not in LIMA and Bing/Mapbox "
 "(true color)"
 msgstr ""
+"Fora da cobertura do Landsat e por isso que não estão no LIMA e no "
+"Bing/Mapbox (cor verdadeira)"
 
 msgid "imagico.de OSM images for mapping: Pensacola Mountains"
-msgstr ""
+msgstr "imagico.de imagens OSM para mapear: Montanhas Pensacola"
 
 msgid "imagico.de OSM images for mapping: Elephant Island/Clarence Island"
-msgstr ""
+msgstr "imagico.de imagens OSM para mapear: Ilha Elefante/Ilha Clarence"
 
 msgid "Fairly clear up-to-date image for updating glacier edges (true color)"
 msgstr ""
+"Imagem bastante recente para atualizar orlas de glaciares (cor verdadeira)"
 
 msgid "imagico.de OSM images for mapping: Enderby Land and Kemp Coast"
-msgstr ""
+msgstr "imagico.de imagens OSM para mapear: Terra de Enderby e Costa de Kemp"
 
 msgid "Sentinel-2 images of Enderby Land and Kemp Coast (true color)"
 msgstr ""
+"Imagens do Sentinel-2 da Terra de Enderby e Costa de Kemp (cor verdadeira)"
 
 msgid "IGN topographical map (TMS)"
+msgstr "IGN mapa topográfico (TMS)"
+
+msgid "IGN topographical map (WMTS)"
 msgstr ""
 
 msgid "IGN topographical map (WMS)"
-msgstr ""
+msgstr "IGN mapa topográfico (WMS)"
 
 msgid "IGN orthophoto AMBA a (WMTS)"
-msgstr ""
+msgstr "IGN ortofoto AMBA a (WMTS)"
 
 msgid "IGN orthophoto AMBA b (WMTS)"
-msgstr ""
+msgstr "IGN ortofoto AMBA b (WMTS)"
 
 msgid "IGN orthophoto AMBA c (WMTS)"
-msgstr ""
+msgstr "IGN ortofoto AMBA c (WMTS)"
 
 msgid "IGN orthophoto AMBA d (WMTS)"
-msgstr ""
+msgstr "IGN ortofoto AMBA d (WMTS)"
 
 msgid "IGN orthophoto AMBA e (WMTS)"
-msgstr ""
+msgstr "IGN ortofoto AMBA e (WMTS)"
 
 msgid "IGN orthophoto AMBA f (WMTS)"
-msgstr ""
+msgstr "IGN ortofoto AMBA f (WMTS)"
 
 msgid "IGN orthophoto AMBA 4 (WMTS)"
-msgstr ""
+msgstr "IGN ortofoto AMBA 4 (WMTS)"
 
 msgid "IGN orthophoto AMBA 5 (WMTS)"
-msgstr ""
+msgstr "IGN ortofoto AMBA 5 (WMTS)"
 
 msgid "IGN orthophoto AMBA 6 (WMTS)"
-msgstr ""
+msgstr "IGN ortofoto AMBA 6 (WMTS)"
 
 msgid "IGN orthophoto AMBA 7 (WMTS)"
-msgstr ""
+msgstr "IGN ortofoto AMBA 7 (WMTS)"
 
 msgid "IGN orthophoto Barranqueras (WMTS)"
-msgstr ""
+msgstr "IGN ortofoto Barranqueras (WMTS)"
 
 msgid "IGN orthophoto Catamarca (WMTS)"
-msgstr ""
+msgstr "IGN ortofoto Catamarca (WMTS)"
 
 msgid "IGN orthophoto Córdoba (WMTS)"
-msgstr ""
+msgstr "IGN ortofoto Córdoba (WMTS)"
 
 msgid "IGN orthophoto El Calafate (WMTS)"
-msgstr ""
+msgstr "IGN ortofoto El Calafate (WMTS)"
 
 msgid "IGN orthophoto El Rodeo (WMTS)"
-msgstr ""
+msgstr "IGN ortofoto El Rodeo (WMTS)"
 
 msgid "IGN orthophoto Jujuy (WMTS)"
-msgstr ""
+msgstr "IGN ortofoto Jujuy (WMTS)"
 
 msgid "IGN orthophoto La Rioja (WMTS)"
-msgstr ""
+msgstr "IGN ortofoto La Rioja (WMTS)"
 
 msgid "IGN orthophoto Mendoza (WMTS)"
-msgstr ""
+msgstr "IGN ortofoto Mendoza (WMTS)"
 
 msgid "IGN orthophoto Neuquén (WMTS)"
-msgstr ""
+msgstr "IGN ortofoto Neuquén (WMTS)"
 
 msgid "IGN orthophoto Posadas (WMTS)"
-msgstr ""
+msgstr "IGN ortofoto Posadas (WMTS)"
 
 msgid "IGN orthophoto Resistencia (WMTS)"
-msgstr ""
+msgstr "IGN ortofoto Resistencia (WMTS)"
 
 msgid "IGN orthophoto Río Gallegos (WMTS)"
-msgstr ""
+msgstr "IGN ortofoto Río Gallegos (WMTS)"
 
 msgid "IGN orthophoto Río Grande (WMTS)"
-msgstr ""
+msgstr "IGN ortofoto Río Grande (WMTS)"
 
 msgid "IGN orthophoto Río Paraná A (WMTS)"
-msgstr ""
+msgstr "IGN ortofoto Río Paraná A (WMTS)"
 
 msgid "IGN orthophoto Río Paraná B (WMTS)"
-msgstr ""
+msgstr "IGN ortofoto Río Paraná B (WMTS)"
 
 msgid "IGN orthophoto Rosario (WMTS)"
+msgstr "IGN ortofoto Rosario (WMTS)"
+
+msgid "IGN orthophoto Salta (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Salto Grande (WMTS)"
+msgid "IGN orthophoto Salta 1 (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto San Juan (WMTS)"
+msgid "IGN orthophoto Salta 2 (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto San Luis (WMTS)"
+msgid "IGN orthophoto Salta 3 (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Santa Cruz III (WMTS)"
+msgid "IGN orthophoto Salta 4 (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salto Grande (WMTS)"
+msgstr "IGN ortofoto Salto Grande (WMTS)"
+
+msgid "IGN orthophoto San Juan (WMTS)"
+msgstr "IGN ortofoto San Juan (WMTS)"
+
+msgid "IGN orthophoto San Luis (WMTS)"
+msgstr "IGN ortofoto San Luis (WMTS)"
+
+msgid "IGN orthophoto Santa Cruz III (WMTS)"
+msgstr "IGN ortofoto Santa Cruz III (WMTS)"
+
 msgid "IGN orthophoto Santa Cruz IV (WMTS)"
-msgstr ""
+msgstr "IGN ortofoto Santa Cruz IV (WMTS)"
 
 msgid "IGN orthophoto Santa Cruz VI (WMTS)"
-msgstr ""
+msgstr "IGN ortofoto Santa Cruz VI (WMTS)"
 
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
-msgstr ""
-
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
+msgstr "IGN ortofoto Santa Fe e Paraná (WMTS)"
 
 msgid "IGN orthophoto Tucumán (WMTS)"
-msgstr ""
+msgstr "IGN ortofoto Tucumán (WMTS)"
 
 msgid "IGN orthophoto Ushuaia (WMTS)"
-msgstr ""
+msgstr "IGN ortofoto Ushuaia (WMTS)"
 
 msgid "Educational map (WMS)"
-msgstr ""
+msgstr "Mapa educacional (WMS)"
 
 msgid "Ministry of Agroindustry (WMS)"
-msgstr ""
+msgstr "Ministério da agro-indústria (WMS)"
 
 msgid "Ministry of Energy and Mining (WMS)"
-msgstr ""
+msgstr "Ministério da Energia e Minas (WMS)"
 
 msgid "imagico.de OSM images for mapping: Bahía Blanca (low tide)"
 msgstr ""
+"imagico.de imagens OSM para mapear: Bahía Blanca - Argentina (maré baixa)"
 
 msgid "Tidal flats and islands at the coast (true color)"
-msgstr ""
+msgstr "Lodaçais e ilhas na costa (cor verdadeira)"
 
 msgid "imagico.de OSM images for mapping: Bahía Blanca (high tide)"
 msgstr ""
+"imagico.de imagens OSM para mapear: Bahía Blanca - Argentina (maré alta)"
 
 msgid "AGRI black-and-white 2.5m"
 msgstr "AGRI preto e branco 2.5m"
@@ -25107,31 +25277,34 @@ msgid "LPI NSW Administrative Boundaries NPWS Reserve"
 msgstr "LPI NSW Fronteiras Administrativas - Subúrbio - Reserva NPWS"
 
 msgid "imagico.de OSM images for mapping: Northwest Heard Island"
-msgstr ""
+msgstr "imagico.de imagens OSM para mapear: Noroeste da Ilha Heard"
 
 msgid ""
 "Glaciers of Northwest Heard Island (mapped meanwhile) (false color IR)"
 msgstr ""
+"Glaciares do Noroeste da Ilha Heard (entretanto mapeado) (cor falsa IR)"
 
 msgid "imagico.de OSM images for mapping: Heard Island coast"
-msgstr ""
+msgstr "imagico.de imagens OSM para mapear: Costa da Ilha Heard"
 
 msgid ""
 "Recent image of Heard island with interior mostly cloud covered but mostly "
 "well visible coast (true color)"
 msgstr ""
+"Imagens recentes da Ilha Heard com o interior maioritariamente coberto de "
+"nuvens mas geralmente com costa bem visível (cor verdadeira)"
 
 msgid "basemap.at"
 msgstr "basemap.at"
 
 msgid "Basemap of Austria, based on goverment data."
-msgstr ""
+msgstr "Mapa base da Áustria, baseado em dados do governo"
 
 msgid "basemap.at Orthofoto"
 msgstr "basemap.at Ortofoto"
 
 msgid "Orthofoto layer provided by basemap.at. "
-msgstr ""
+msgstr "Camada ortofoto fornecida por basemap.at. "
 
 msgid "Geoimage.at MaxRes"
 msgstr "Geoimage.at MaxRes"
@@ -25149,10 +25322,10 @@ msgid "Tiris: contour lines"
 msgstr "Tiris: linhas de contorno"
 
 msgid "Tiris: orthophoto"
-msgstr ""
+msgstr "Tiris: ortofoto"
 
 msgid "Tiris: orthophoto infrared"
-msgstr ""
+msgstr "Tiris: ortofoto infravermelhos"
 
 msgid "Vienna: Mehrzweckkarte (general purpose)"
 msgstr "Viena: Mehrzweckkarte (usos gerais)"
@@ -25179,7 +25352,7 @@ msgid "VoGIS: Höhen und Gelände"
 msgstr "VoGIS: Höhen und Gelände"
 
 msgid "imagico.de OSM images for mapping: Rila and Pirin Mountains"
-msgstr ""
+msgstr "imagico.de imagens OSM para mapear: Montanhas Rila e Pirin"
 
 msgid "OpenStreetMap (Belgian Style)"
 msgstr "OpenStreetMap (Estilo Belga)"
@@ -25197,25 +25370,25 @@ msgid "Orthophoto IGN-NGI"
 msgstr "Ortofoto IGN-NGI"
 
 msgid "AGIV Flanders most recent aerial imagery"
-msgstr ""
+msgstr "AGIV Flandres imagens aéreas mais recentes"
 
 msgid "AGIV Flanders 2013-2015 aerial imagery 10cm"
-msgstr ""
+msgstr "AGIV Flandres 2013-2015 imagens aéreas 10cm"
 
 msgid "AGIV Flanders GRB"
-msgstr ""
+msgstr "AGIV Flandres GRB"
 
 msgid "URBISfr numerical imagery (2013)"
 msgstr "URBISfr imagens numéricas (2013)"
 
 msgid "URBISfr numerical imagery"
-msgstr ""
+msgstr "URBISfr imagens numéricas"
 
 msgid "URBISnl numerical imagery (2013)"
 msgstr "URBISnl imagens numéricas (2013)"
 
 msgid "URBISnl numerical imagery"
-msgstr ""
+msgstr "URBISnl imagens numéricas"
 
 msgid "URBIS 2009 aerial imagery"
 msgstr "URBIS 2009 imagens aéreas"
@@ -25230,13 +25403,13 @@ msgid "URBIS 2015 aerial imagery"
 msgstr "URBIS 2015 imagens aéreas"
 
 msgid "URBIS 2016 aerial imagery"
-msgstr ""
+msgstr "URBIS 2016 imagens aéreas"
 
 msgid "SPW(allonie) PICC numerical imagery"
 msgstr "SPW(allonie) PICC numerical imagery"
 
 msgid "SPW(allonie) most recent aerial imagery"
-msgstr ""
+msgstr "SPW(allonie) imagens aéreas mais recentes"
 
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr "SPW(allonie) 2015 imagens aéreas"
@@ -25248,37 +25421,41 @@ msgid "SPW(allonie) 2009-2010 aerial imagery"
 msgstr "SPW(allonie) 2009-2010 imagens aéreas"
 
 msgid "TEC bus lines"
-msgstr ""
+msgstr "TEC linhas de autocarros"
 
 msgid "TEC bus stops"
-msgstr ""
+msgstr "TEC paragens de autocarros"
 
 msgid "Benin: Cotonou Pleiade 2016"
-msgstr ""
+msgstr "Benin: Cotonou Pleiade 2016"
 
 msgid "imagico.de OSM images for mapping: Cotonou"
-msgstr ""
+msgstr "imagico.de imagens OSM para mapear: Cotonou"
 
 msgid "Patchy and partly cloudy coverage in usual sources (true color)"
 msgstr ""
+"Cobertura incompleta e parcialmente coberta de nuvens nas fontes habituais "
+"(cor verdadeira)"
 
 msgid "imagico.de OSM images for mapping: Bouvet Island"
-msgstr ""
+msgstr "imagico.de imagens OSM para mapear: Ilha Bouvet"
 
 msgid "For more accurate coastline and glacier mapping (true color)"
 msgstr ""
+"Para mapeamento mais preciso de linha costeira e de glaciares (cor "
+"verdadeira)"
 
 msgid "IBGE Map of urban areas"
-msgstr ""
+msgstr "IBGE Brasil - Mapa de áreas urbanas"
 
 msgid "IBGE Map of rural areas"
-msgstr ""
+msgstr "IBGE Brasil - Mapa de áreas rurais"
 
 msgid "IBGE federal district"
-msgstr ""
+msgstr "IBGE Brasil - Distritos federais"
 
 msgid "Addresses data from IBGE"
-msgstr ""
+msgstr "IBGE Brasil - Dados de endereços"
 
 msgid "Rio Mosaic 2013"
 msgstr "Rio Mosaic 2013"
@@ -25293,79 +25470,79 @@ msgid "SIG Santa Catarina OrtoRGB 2012"
 msgstr "SIG Santa Catarina OrtoRGB 2012"
 
 msgid "Arapiraca AL"
-msgstr ""
+msgstr "Arapiraca AL"
 
 msgid "Branquinha AL"
-msgstr ""
+msgstr "Branquinha AL"
 
 msgid "Cajueiro AL"
-msgstr ""
+msgstr "Cajueiro AL"
 
 msgid "Campo Alegre AL"
-msgstr ""
+msgstr "Campo Alegre AL"
 
 msgid "Capela AL"
-msgstr ""
+msgstr "Capela AL"
 
 msgid "Delmiro Gouveia AL"
-msgstr ""
+msgstr "Delmiro Gouveia AL"
 
 msgid "Estrela de Alagoas"
-msgstr ""
+msgstr "Estrela de Alagoas"
 
 msgid "Girau do Ponciano"
-msgstr ""
+msgstr "Girau do Ponciano"
 
 msgid "Major Isidoro AL"
-msgstr ""
+msgstr "Major Isidoro AL"
 
 msgid "Mar Vermelho AL"
-msgstr ""
+msgstr "Mar Vermelho AL"
 
 msgid "Minador do Negrão"
-msgstr ""
+msgstr "Minador do Negrão"
 
 msgid "Olho d’Agua do Casado AL"
-msgstr ""
+msgstr "Olho d’Agua do Casado AL"
 
 msgid "Palestina AL"
-msgstr ""
+msgstr "Palestina AL"
 
 msgid "Palmeira dos Indios AL"
-msgstr ""
+msgstr "Palmeira dos Índios AL"
 
 msgid "Pão de Açucar AL"
-msgstr ""
+msgstr "Pão de Açúcar AL"
 
 msgid "Piranhas AL"
-msgstr ""
+msgstr "Piranhas AL"
 
 msgid "Poço das Trincheiras AL"
-msgstr ""
+msgstr "Poço das Trincheiras AL"
 
 msgid "Santana do Ipanema AL"
-msgstr ""
+msgstr "Santana do Ipanema AL"
 
 msgid "São Miguel dos Campos AL"
-msgstr ""
+msgstr "São Miguel dos Campos AL"
 
 msgid "Teotonio Vilela AL"
-msgstr ""
+msgstr "Teotónio Vilela AL"
 
 msgid "União dos Palmares AL"
-msgstr ""
+msgstr "União dos Palmares AL"
 
 msgid "Viçosa AL"
-msgstr ""
+msgstr "Viçosa AL"
 
 msgid "Alagoas coast 2006"
-msgstr ""
+msgstr "Alagoas costa 2006"
 
 msgid "DER-ES"
-msgstr ""
+msgstr "DER-ES"
 
 msgid "IBGE-BC250 Isolated Rural Location"
-msgstr ""
+msgstr "IBGE-BC250 Brasil - Localização Rural Isolada"
 
 msgid "IBGE-BC250 Landing strip"
 msgstr ""
@@ -25377,22 +25554,22 @@ msgid "IBGE-BC250 Highways stretches"
 msgstr ""
 
 msgid "IBGE-BC250 Indigenous Lands"
-msgstr ""
+msgstr "IBGE-BC250 Solo Indígena"
 
 msgid "IBGE-BC250 Public Land (Military)"
-msgstr ""
+msgstr "IBGE-BC250 Solo Público (Militar)"
 
 msgid "IBGE-BC250 Units of Sustainable Use - APA"
-msgstr ""
+msgstr "IBGE-BC250 Unidades de Uso Sustentável - APA"
 
 msgid "IBGE-BC250 Villages"
 msgstr ""
 
 msgid "IBGE-BCIM Stations for Electrical Power Generation"
-msgstr ""
+msgstr "IBGE-BCIM Estações para Geração de Energia Elétrica"
 
 msgid "IBGE-BCIM Municipalities"
-msgstr ""
+msgstr "IBGE-BCIM Municípios"
 
 msgid "Geobase Hydrography"
 msgstr "Geobase - Hidrografia"
@@ -25407,61 +25584,70 @@ msgid "British Columbia Mosaic"
 msgstr "British Columbia Mosaic"
 
 msgid "Latest southwest British Columbia Landsat"
-msgstr ""
+msgstr "Últimas do Landsat no sudoeste da Colúmbia Britânica"
 
 msgid ""
 "Recent lower-resolution landsat imagery for southwest British Columbia"
 msgstr ""
+"Imagens aéreas recentes em baixa resolução do sudoeste da Colúmbia Britânica"
 
 msgid "Kelowna 2012"
 msgstr "Kelowna (Canadá) 2012"
 
 msgid "High quality aerial imagery taken for the City of Kelowna"
-msgstr ""
+msgstr "Imagens aéreas de alta qualidade da Cidade de Kelowna"
 
 msgid "Kelowna Roads overlay"
 msgstr "Kelowna (Canadá) Estradas sobrepostas"
 
 msgid "imagico.de OSM images for mapping: Eastern Devon Island coast"
-msgstr ""
+msgstr "imagico.de imagens OSM para mapear: costa leste da Ilha de Devon"
 
 msgid "Coastline mostly mapped meanwhile (false color IR)"
-msgstr ""
+msgstr "Linha costeira entretanto mapeada na maioria (cor falsa IR)"
 
 msgid "imagico.de OSM images for mapping: Northern Ellesmere Island"
-msgstr ""
+msgstr "imagico.de imagens OSM para mapear: ilha setentrional de Ellesmere"
 
 msgid ""
 "Assembled from July 2012 ASTER imagery (true color with estimated blue)"
 msgstr ""
+"Imagens recolhidas de Julho de 2012 pelo ASTER (cor verdadeira com azul "
+"estimado)"
 
 msgid ""
 "imagico.de OSM images for mapping: Northern Ellesmere Island July 2016"
 msgstr ""
+"imagico.de imagens OSM para mapear: ilha setentrional de Ellesmere em Julho "
+"de 2016"
 
 msgid ""
 "Assembled from July 2016 ASTER imagery (true color with estimated blue)"
 msgstr ""
+"Recolhidas de Julho de 2017 pelo ASTER (cor verdadeira com azul estimado)"
 
 msgid "imagico.de OSM images for mapping: Fogo, Cape Verde"
-msgstr ""
+msgstr "imagico.de imagens OSM para mapear: Ilha do FOgo, Cabo Verde"
 
 msgid "Image from after the 2014/2015 eruption (true color)"
-msgstr ""
+msgstr "Imagens depois do erupção de 2014/2015 (cor verdadeira)"
 
 msgid "imagico.de OSM images for mapping: Isla Londonderry"
-msgstr ""
+msgstr "imagico.de imagens OSM para mapear: Ilha Londonderry"
 
 msgid ""
 "A lot of very coarse coastlines could be improved here, much snow cover "
 "though so no use for glacier mapping (false color IR)"
 msgstr ""
+"Podiam ser melhoradas bastantes linhas costeiras pouco precisas aqui, mas "
+"tem bastante neve por isso não serve para mapeamento de glaciares (cor falsa "
+"IR)"
 
 msgid "imagico.de OSM images for mapping: Volcán Calbuco"
-msgstr ""
+msgstr "imagico.de imagens OSM para mapear: Vulcão Calbuco"
 
 msgid "Image from after the 2015 eruption (true color)"
-msgstr ""
+msgstr "Imagens depois da erupção de 2015 (cor verdadeira)"
 
 msgid "Czech CUZK:KM"
 msgstr "Checoslováquia - CUZK:KM"
@@ -25479,16 +25665,16 @@ msgid "Praha IPR latest orthophoto"
 msgstr ""
 
 msgid "Praha IPR low-vegetation orthophoto"
-msgstr ""
+msgstr "Praga IPR ortofoto de vegetação rasteira"
 
 msgid "SDFE aerial imagery"
-msgstr ""
+msgstr "SDFE imagens aéreas"
 
 msgid "SDFE Cadastral Parcels INSPIRE View"
-msgstr ""
+msgstr "SDFE Vista INSPIRE Parcelas Cadastrais"
 
 msgid "SDFE DTK Kort25"
-msgstr ""
+msgstr "SDFE DTK Kort25"
 
 msgid "SDFE Terrain Shadow Map (40 cm)"
 msgstr ""
@@ -25497,13 +25683,13 @@ msgid "SDFE Surface Shadow Map (40 cm)"
 msgstr ""
 
 msgid "SDFE Skærmkort"
-msgstr ""
+msgstr "SDFE Skærmkort"
 
 msgid "Stevns"
-msgstr ""
+msgstr "Stevns"
 
 msgid "Vejmidte"
-msgstr ""
+msgstr "Vejmidte"
 
 msgid "imagico.de OSM images for mapping: El Altar"
 msgstr ""
@@ -25648,6 +25834,9 @@ msgstr "Berlim aerial photograph 2015"
 msgid "Berlin aerial photograph 2016"
 msgstr "Berlim fotografias aéreas 2016"
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -26062,6 +26251,9 @@ msgstr "Luxembourg Inspire Water"
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Delta do Níger Outubro 2012 Landsat"
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -26505,6 +26697,9 @@ msgstr "NLSC Dados Abertos WMTS"
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr "Mapas MSR - Topográfico"
 
@@ -27317,7 +27512,7 @@ msgid "Landsat 233055"
 msgstr "Landsat 233055"
 
 msgid "Recent Landsat imagery"
-msgstr ""
+msgstr "Imagens aéreas recentes do Landsat"
 
 msgid "Even housenumber in odd address interpolation."
 msgstr "Número de porta PAR na interpolação de endereços"
@@ -27333,6 +27528,8 @@ msgid ""
 "Object has no {0}, however, it has {1} and {2} whose value looks like a "
 "housenumber."
 msgstr ""
+"O objeto não tem {0}, no entanto tem {1} e {2} cujos valores parecem um "
+"número de porta."
 
 msgid "Same value of {0} and {1}"
 msgstr "O mesmo valor de {0} e {1}"
@@ -27410,7 +27607,7 @@ msgid "{0} together with {1} and {2}. Remove {1} and {2}"
 msgstr "{0} junto com {1} e {2}. Remover {1} e {2}"
 
 msgid "Different number of lanes in the keys {0} and {1}"
-msgstr ""
+msgstr "Números de faixas diferentes nas chaves {0} e {1}"
 
 msgid "possibly missing {0} tag"
 msgstr "possível falta da etiqueta {0}"
@@ -27608,7 +27805,7 @@ msgstr ""
 "{2}."
 
 msgid "node connects highway and building"
-msgstr ""
+msgstr "nó ligado a uma estrada/rua e edifício"
 
 msgid ""
 "Object at Position 0.00E 0.00N. There is nothing at this position except an "
@@ -27637,7 +27834,7 @@ msgid "highway without a reference"
 msgstr "estrada sem etiqueta de referência (ref)"
 
 msgid "Unspecific highway type"
-msgstr ""
+msgstr "Tipo de estrada/rua não especificada"
 
 msgid "{0} used with {1}"
 msgstr "{0} usada em simultâneo com {1}"
@@ -27722,6 +27919,7 @@ msgstr "valor incomum de  {0}"
 
 msgid "{0} must be a numeric value, in meters and without units"
 msgstr ""
+"{0} tem de ser um valor numérico, em metros e sem a unidade de medida"
 
 msgid "relation without type"
 msgstr "relação sem a etiqueta \"type\" (tipo de relação)"
@@ -27729,6 +27927,9 @@ msgstr "relação sem a etiqueta \"type\" (tipo de relação)"
 msgid "{0} relation without {0} tag"
 msgstr "{0} relação sem a etiqueta {0}"
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr "religion religião sem etiqueta denomination (denominação religiosa)"
 
@@ -27768,16 +27969,16 @@ msgid ""
 msgstr ""
 
 msgid "wikipedia tag has an unknown language prefix"
-msgstr ""
+msgstr "etiqueta wikipedia com prefixo de idioma desconhecido"
 
 msgid "wikipedia tag format is deprecated"
-msgstr ""
+msgstr "etiqueta wikipedia com formato em desuso"
 
 msgid "''wikipedia''=''language:page title''"
 msgstr "''wikipedia''=''língua:página''"
 
 msgid "wikipedia ''{0}'' language is obsolete, use ''{1}'' instead"
-msgstr ""
+msgstr "idioma em wikipedia ''{0}'' em desuso, usar antes ''{1}''"
 
 msgid "wikipedia ''{0}'' language is invalid, use ''{1}'' instead"
 msgstr ""
@@ -27797,12 +27998,15 @@ msgstr ""
 msgid ""
 "wikipedia page title should have spaces instead of underscores (''_''→'' '')"
 msgstr ""
+"nome da página da Wikipédia deve ter espaços e não traços inferiores "
+"(''_''→'' '')"
 
 msgid "wikipedia language seems to be duplicated, e.g. en:en:Foo"
 msgstr ""
+"prefixo do idioma da Wikipédia parece estar duplicado, por.ex. pt:pt:Página"
 
 msgid "wikidata tag must be in Qnnnn format, where n is a digit"
-msgstr ""
+msgstr "a etiqueta wikidata tem de ser no formato Qxxxx onde x é um dígito"
 
 msgid ""
 "wikipedia tag is set, but there is no wikidata tag. Wikipedia plugin might "
@@ -27929,10 +28133,6 @@ msgid "Customization of public public transport stops."
 msgstr ""
 
 msgid ""
-"Creating and handling address nodes and buildings within Czech Republic."
-msgstr "Criação e manipulação de endereços e edifícios na República Checa."
-
-msgid ""
 "Allows to import various file formats into JOSM directly. Currently "
 "supported: TangoGPS, Garmin Trainings Center TCX."
 msgstr ""
@@ -27994,9 +28194,6 @@ msgstr ""
 "Converse com outras pessoas que estejam a editar nas redondezas do local que "
 "está a editar (necessário que usem o JOSM e este módulo)."
 
-msgid "Allows you to view a GeoJSON file as a layer."
-msgstr "Permite ver um ficheiro GeoJSON numa camada."
-
 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."
@@ -28479,13 +28676,6 @@ msgstr ""
 "geo-referenciado com um trilho GPS, facilitando a identificação de elementos "
 "a incluir no mapeamento."
 
-msgid ""
-"Supports downloading tiled, scanned maps from walking-papers.org. This "
-"plugin is still under early development and may be buggy."
-msgstr ""
-"Permite descarregar mapas OSM digitalizados com anotações do walking-"
-"papers.org Este módulo ainda está em desenvolvimento e pode ter alguns erros."
-
 msgid "Easy downloading along a long set of interconnected ways"
 msgstr ""
 "Facilita o descarregamento de objetos ao longo de um conjunto de linhas "
@@ -29121,25 +29311,28 @@ msgid "Mapillary layer"
 msgstr "Camada Mapillary"
 
 msgid "{0} sequences, each containing between {1} and {2} images (ø {3})"
-msgstr ""
+msgstr "{0} sequências, cada uma contendo entre {1} e {2} imagens (ø {3})"
 
 msgid "{0} imported images"
-msgstr ""
+msgstr "{0} imagens importadas"
 
 msgid "{0} downloaded images"
-msgstr ""
+msgstr "{0} imagens descarregadas"
 
 msgid "{0} images in total"
-msgstr ""
+msgstr "{0} de imagens no total"
 
 msgid "{0} images in {1} sequences"
-msgstr ""
+msgstr "{0} imagens em {1} sequências"
 
 msgid "Mapillary object layer"
-msgstr ""
+msgstr "Camada de objetos Mapillary"
 
 msgid "Displays the layer displaying the map objects detected by Mapillary"
-msgstr ""
+msgstr "Mostra a camada com os objetos do mapa detetados pelo Mapillary"
+
+msgid "Start Mapillary layer"
+msgstr "Começar camada Mapillary"
 
 msgid "Mapillary"
 msgstr "Mapillary"
@@ -29147,9 +29340,6 @@ msgstr "Mapillary"
 msgid "Create Mapillary layer"
 msgstr "Criar camada Mapillary"
 
-msgid "Start Mapillary layer"
-msgstr "Começar camada Mapillary"
-
 msgid "Download Mapillary images in current view"
 msgstr "Descarrregar imagens Mapillary na vista atual"
 
@@ -29187,16 +29377,17 @@ msgid "Submit the current changeset to Mapillary"
 msgstr "Enviar conjunto de alterações atual para o Mapillary"
 
 msgid "rejected"
-msgstr ""
+msgstr "regeitado"
 
 msgid "pending"
 msgstr "pendente"
 
 msgid "approved"
-msgstr ""
+msgstr "aprovado"
 
 msgid "{0} images submitted, Changeset key: {1}, State: {2}"
 msgstr ""
+"{0} imagens submetidas, Chave do Conjunto de Alterações: {1}, Estado: {2}"
 
 msgid "Changeset upload failed with {0} error ''{1} {2}''!"
 msgstr "O envio do conjunto de alterações falhou com {0} erro ''{1} {2}''!"
@@ -29329,7 +29520,7 @@ msgid "No image selected"
 msgstr "Nenhuma imagem selecionada"
 
 msgid "Press \"{0}\" to download images"
-msgstr ""
+msgstr "Carregue em \"{0}\" para descarregar as imagens"
 
 msgid "Mapillary picture"
 msgstr "Imagem Mapillary"
@@ -29389,10 +29580,10 @@ msgid "Preview images when hovering its icon"
 msgstr "Pré-visualizar imagens ao passar com o cursor sobre o ícone"
 
 msgid "Cut off sequences at download bounds"
-msgstr ""
+msgstr "Cortar sequências nos limites do descarregamento"
 
 msgid "Enable experimental beta-features (might be unstable)"
-msgstr ""
+msgstr "Ativar funcionalidades experimentais beta (pode ser instável)"
 
 msgid "Download mode"
 msgstr "Modo de descarregamento"
@@ -29429,47 +29620,48 @@ msgid "Go forward"
 msgstr "Avançar"
 
 msgid "Which image layers do you want to import into the Mapillary layer?"
-msgstr ""
+msgstr "Que camadas de imagens quer importar para a camada Mapillary?"
 
 msgid "Import"
 msgstr "Importar"
 
 msgid "Could not import a geotagged image to the Mapillary layer!"
 msgstr ""
+"Não foi possível importar a imagem geo-referenciada para a camada Mapillary!"
 
 msgid "{0} ({1} images)"
-msgstr ""
+msgstr "{0} ({1} imagens)"
 
 msgid ""
 "From which source do you want to import images to the Mapillary layer?"
-msgstr ""
+msgstr "De que fontes quer importar as imagens para a camada Mapillary?"
 
 msgid "There are currently no layers with geotagged images!"
-msgstr ""
+msgstr "Não existem neste momento camadas com imagens geo-referenciadas!"
 
 msgid "Images from my file system"
-msgstr ""
+msgstr "Imagens do meu computador"
 
 msgid "Select the images you want to import"
-msgstr ""
+msgstr "Selecione as imagens que quer importar"
 
 msgid "All images in a directory"
-msgstr ""
+msgstr "Todas as imagens de uma pasta"
 
 msgid "Select directory to import images from"
-msgstr ""
+msgstr "Selecione a pasta com imagens a importar"
 
 msgid "From existing image layer"
 msgstr ""
 
 msgid "Import exception"
-msgstr ""
+msgstr "Erro de importação"
 
 msgid "Could not import the image ''{0}''!"
-msgstr ""
+msgstr "Não foi possível importar a imagem ''{0}''!"
 
 msgid "Could not import the directory ''{0}''!"
-msgstr ""
+msgstr "Não foi possível importar a pasta ''{0}''!"
 
 msgid ""
 "A tag with key <i>{0}</i> is already present on the selected OSM object."
@@ -29512,10 +29704,10 @@ msgid "Show detections on top of image"
 msgstr ""
 
 msgid "View in browser"
-msgstr ""
+msgstr "Ver no navegador"
 
 msgid "Copy key"
-msgstr ""
+msgstr "Copiar chave"
 
 msgid "Add Mapillary tag"
 msgstr "Adicionar etiqueta Mapillary"
@@ -29539,7 +29731,7 @@ msgid "image has no key"
 msgstr ""
 
 msgid "unknown user"
-msgstr ""
+msgstr "utilizador desconhecido"
 
 msgid "sequence has no key"
 msgstr ""
@@ -29548,19 +29740,19 @@ msgid "Could not open the URL {0} in a browser"
 msgstr "Não foi possível abrir o URL {0} no navegador de internet"
 
 msgid "Downloading map objects…"
-msgstr ""
+msgstr "A descarregar objetos do mapa..."
 
 msgid "All map objects loaded."
-msgstr ""
+msgstr "Todos os objetos do mapa carregados."
 
 msgid "Too many map objects, zoom in to see all."
 msgstr ""
 
 msgid "Downloading map objects failed!"
-msgstr ""
+msgstr "Não foi possível descarregar objetos do mapa!"
 
 msgid "Mapillary objects"
-msgstr ""
+msgstr "Objetos Mapillary"
 
 msgid "Displays objects detected by Mapillary from their street view imagery"
 msgstr ""
@@ -29592,13 +29784,16 @@ msgid "2 images unjoined"
 msgstr "2 imagens separadas"
 
 msgid "Could not read from URL {0}!"
-msgstr ""
+msgstr "Não foi possível ler do URL {0}!"
 
 msgid ""
 "{0}\n"
 "Could not read map objects from URL\n"
 "{1}!"
 msgstr ""
+"{0}\n"
+"Não foi possível ler os objetos do mapa do URL\n"
+"{1}!"
 
 msgid "everything in the visible area"
 msgstr "tudo na área visível"
@@ -30268,13 +30463,13 @@ msgid "Tags:"
 msgstr "Etiquetas:"
 
 msgid "Source:"
-msgstr ""
+msgstr "Origem:"
 
 msgid "Name:"
 msgstr "Nome:"
 
 msgid "update building info"
-msgstr ""
+msgstr "atializar informação do edifício"
 
 msgid "Tag Element"
 msgstr "Etiquetar Elemento"
@@ -30298,18 +30493,18 @@ msgid "Area Selector"
 msgstr "Selecionador de Área"
 
 msgid "Trying to detect an area at:"
-msgstr ""
+msgstr "A tentar detetar uma área em:"
 
 msgid "create building"
-msgstr ""
+msgstr "criar edifício"
 
 msgid "replace building"
-msgstr ""
+msgstr "substituir edifício"
 
 msgid "Add address"
 msgid_plural "Add addresses"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Adicionar endereço"
+msgstr[1] "Adicionar endereços"
 
 msgid "Unable to detect a polygon where you clicked."
 msgstr "Não foi possível detetar um polígono onde clicou."
@@ -30413,10 +30608,10 @@ msgid ""
 msgstr ""
 
 msgid "Replace existing buildings"
-msgstr ""
+msgstr "Substituir edifícios existentes"
 
 msgid "Replace an existing building with the new one."
-msgstr ""
+msgstr "Substituir um edifício existente por um novo."
 
 msgid "Debug"
 msgstr "Depuração (debug)"
@@ -30425,7 +30620,7 @@ msgid "Debugging mode will write images for each processing step."
 msgstr "O modo de depuração grava imagens para cada passo do processamento"
 
 msgid "Please choose the address type"
-msgstr ""
+msgstr "Por favor escolha o tipo de endereço"
 
 msgid ""
 "<html>We could not automatically determine whether <strong>{0}</strong> "
@@ -30460,16 +30655,16 @@ msgid "No address type selected. Aborting."
 msgstr ""
 
 msgid "Successfully added address to selected object:"
-msgstr ""
+msgstr "Foi adicionado com sucesso o endereço ao objeto selecionado:"
 
 msgid "Distance between building center and address coordinates:"
-msgstr ""
+msgstr "Distância entre o centro do edifício e as coordenadas do endereço:"
 
 msgid "No address was found for this object."
-msgstr ""
+msgstr "Não foi encontrado um endereço para este objeto."
 
 msgid "An unexpected exception occurred:"
-msgstr ""
+msgstr "Ocorreu um erro de exceção inesperado:"
 
 msgid "Building Generalization"
 msgstr ""
@@ -30484,7 +30679,7 @@ msgid "There is no frame loaded !"
 msgstr ""
 
 msgid "Alert Message"
-msgstr ""
+msgstr "Mensagem de Alerta"
 
 msgid "Street Name:"
 msgstr "Nome da Rua:"
@@ -30574,6 +30769,163 @@ msgstr[1] "Existes {0} edifícios com conflitos nos endereços"
 msgid "No address nodes inside buildings found"
 msgstr "Não foram encontrados nós com endereços dentro de edifícios"
 
+msgid "Auto sourcing"
+msgstr "Anexar fonte (source) automaticamente"
+
+msgid ""
+"Please enable at least two WMS layers in the cadastre-fr plugin "
+"configuration.\n"
+"Layers ''Building'' and ''Parcel'' added by default."
+msgstr ""
+"Por favor ative pelo menos 2 camadas WMS na configuração do módulo cadastre-"
+"fr\n"
+"As Camadas ''Building'' (Edifício) e ''Parcel'' (Parcela) foram adicionadas "
+"por defeito."
+
+msgid ""
+"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+msgstr ""
+"Aviso: não foi possível mostrar o painel de opções sempre visível no topo. "
+"Exceção: {0}"
+
+msgid ""
+"To enable the cadastre WMS plugin, change\n"
+"the current projection to one of the cadastre\n"
+"projections and retry"
+msgstr ""
+"Para ativar o módulo de cadastro francês WMS,\n"
+"altere a projeção atual para uma das projeções\n"
+"disponíveis e tente novamente"
+
+msgid "Change the current projection"
+msgstr "Alterar a projeção atual"
+
+msgid "Extract commune boundary"
+msgstr "Extrair fronteira de comuna"
+
+msgid "Only on vectorized layers"
+msgstr "Apenas em camadas vetorizadas"
+
+msgid "Cancel current grab"
+msgstr "Anular o descarregamento"
+
+msgid "Cancel current grab (only vector images)"
+msgstr "Anular o descarregamento (apenas imagens vetoriais)"
+
+msgid "Cadastre grab"
+msgstr "Descarregar o cadastro"
+
+msgid "Download Image from French Cadastre WMS"
+msgstr "Descarregar imagem do WMS de Cadastro francês"
+
+msgid "Cadastre: {0}"
+msgstr "Cadastro: {0}"
+
+msgid "Georeference an image"
+msgstr "Geo-referenciar uma imagem"
+
+msgid "Grab non-georeferenced image"
+msgstr "Descarregar uma imagem não geo-referenciada"
+
+msgid "Georeferencing interrupted"
+msgstr "Geo-referenciamento interrompido"
+
+msgid ""
+"This image contains georeference data.\n"
+"Do you want to use them ?"
+msgstr ""
+"Esta imagem contém dados geo-referenciados.\n"
+"Quer usá-los ?"
+
+msgid "Load layer from cache"
+msgstr "Carregar camada da cache"
+
+msgid "Load location from cache (only if cache is enabled)"
+msgstr "Carregar localização da cache (apenas se a cache estiver ativada)"
+
+msgid "{0} not allowed with the current projection"
+msgstr "{0} não permitido na projeção atual"
+
+msgid ""
+"Cannot load cache {0} which is not compatible with current projection zone"
+msgstr ""
+"Não foi possível carregar a cache {0} porque não é compatível com a zona "
+"atual de projeção"
+
+msgid ""
+"Selected file {0} is not a cache file from this plugin (invalid extension)"
+msgstr ""
+"O ficheiro selecionado {0} não é um ficheiro de cache deste módulo (extensão "
+"de ficheiro não válida)"
+
+msgid "The location {0} is already on screen. Cache not loaded."
+msgstr "A localização {0} já está no ecrã. A cache não foi carregada."
+
+msgid "(optional)"
+msgstr "(opcional)"
+
+msgid "Change location"
+msgstr "Alterar localização"
+
+msgid "Set a new location for the next request"
+msgstr "Definir uma nova localização para o próximo pedido"
+
+msgid "Add a new municipality layer"
+msgstr "Adicionar uma nova camada de município"
+
+msgid "Commune"
+msgstr "Comuna"
+
+msgid ""
+"<html>Enter the town,village or city name.<br>Use the syntax and punctuation "
+"known by www.cadastre.gouv.fr .</html>"
+msgstr ""
+"<html>Introduza o nome da aldeia, vila ou cidade.<br>Utilize a sintaxe e "
+"pontuação reconhecidas pelo www.cadastre.gouv.fr .</html>"
+
+msgid "Departement"
+msgstr "Departamento"
+
+msgid "<html>Departement number (optional)</html>"
+msgstr "<html>Número de Departamento (opcional)</html>"
+
+msgid "Add new layer"
+msgstr "Adicionar camada nova"
+
+msgid "Open Cadastre Preferences"
+msgstr ""
+
+msgid "Refine georeferencing"
+msgstr "Melhorar georreferenciação"
+
+msgid "Improve georeferencing (only raster images)"
+msgstr "Melhorar a georreferenciação (apenas imagens raster/em píxeis)"
+
+msgid "Reset cookie"
+msgstr "Limpar cookie"
+
+msgid "Get a new cookie (session timeout)"
+msgstr "Obter um cookie novo (limite de tempo da sessão excedido)"
+
+msgid "Save image as..."
+msgstr "Salvar imagem como..."
+
+msgid "PNG files (*.png)"
+msgstr "Ficheiros PNG (*.png)"
+
+msgid "GeoTiff files (*.tif)"
+msgstr "Fiecheiros GeoTiff (*.tif)"
+
+msgid "Export image (only raster images)"
+msgstr "Exportar imagem (apenas imagens raster/em píxeis)"
+
+msgid ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+"Existe mais do que uma camada WMS\n"
+"Selecione primeiro uma delas e tente de novo"
+
 msgid "on polygon"
 msgstr "no polígono"
 
@@ -30589,96 +30941,85 @@ msgstr "Número seguinte:"
 msgid "Enter addresses"
 msgstr "Introduzir endereços"
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
+msgstr "Alinhar WMS"
+
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
-"Localização \"{0}\" encontrada na cache.\n"
-"Carregar a cache primeiro ?\n"
-"(Não = nova cache)"
+"Alinhar a posição da camada WMS (alinhamento guardado apenas em imagens "
+"raster)"
 
-msgid "Select Feuille"
-msgstr "Selecione uma camada de cadastro"
+msgid "Add \"source=...\" to elements?"
+msgstr "Adicionar \"source=...\" aos objetos?"
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Download from Cadastre"
 msgstr ""
-"Ocorreu um erro ao carregar o ficheiro.\n"
-"Provavelmente é uma versão antiga do ficheiro de cache."
 
-msgid "Lambert Zone {0} cache file (.{0})"
-msgstr "Zona Lambert {0} ficheiro de cache (.{0})"
+msgid "Objects:"
+msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
-msgstr "Zona Lambert CC9 {0} ficheiro de cache (.CC{0})"
+msgid "Select to download buildings in the selected download area."
+msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
-msgstr "Ficheiro de cache Guadeloupe Fort Marigot (.UTM1)"
+msgid "address"
+msgstr "endereço"
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
-msgstr "Ficheiro de cache Guadeloupe Sainte-Anne (.UTM2)"
+msgid "Select to download addresses in the selected download area."
+msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
-msgstr "Ficheiro de cache Martinique Fort Desaix (.UTM3)"
+msgid "symbol"
+msgstr "símbolo"
 
-msgid "Reunion RGR92 cache file (.UTM4)"
-msgstr "Ficheiro de cache Reunion RGR92 (.UTM4)"
+msgid "Select to download symbols in the selected download area."
+msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download water bodies in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "parcel"
+msgstr "parcela"
+
+msgid "Select to download cadastral parcels in the selected download area."
 msgstr ""
-"Não é possível abrir uma nova sessão.\n"
-"O servidor está em manutenção ou temporariamente sobrecarregado."
+
+msgid "parcel number"
+msgstr "número de parcela"
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
-"Vila/cidade {0} não encontrada ou não disponível\n"
-"ou ação cancelada"
 
-msgid "Choose from..."
-msgstr "Escolha"
+msgid "section"
+msgstr "secção"
 
-msgid "Select commune"
-msgstr "Selecionar comuna"
+msgid "Select to download cadastral sections in the selected download area."
+msgstr ""
 
-msgid "Auto sourcing"
-msgstr "Anexar fonte (source) automaticamente"
+msgid "locality"
+msgstr "localidade"
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
 msgstr ""
-"Por favor ative pelo menos 2 camadas WMS na configuração do módulo cadastre-"
-"fr\n"
-"As Camadas ''Building'' (Edifício) e ''Parcel'' (Parcela) foram adicionadas "
-"por defeito."
+
+msgid "commune"
+msgstr "comuna"
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
-"Aviso: não foi possível mostrar o painel de opções sempre visível no topo. "
-"Exceção: {0}"
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
-"Para ativar o módulo de cadastro francês WMS,\n"
-"altere a projeção atual para uma das projeções\n"
-"disponíveis e tente novamente"
 
-msgid "Change the current projection"
-msgstr "Alterar a projeção atual"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
+msgstr ""
 
 msgid "Replace original background by JOSM background color."
 msgstr "Substituir fundo original pela cor de fundo do JOSM."
@@ -30729,27 +31070,6 @@ msgstr "médio"
 msgid "low"
 msgstr "baixo"
 
-msgid "symbol"
-msgstr "símbolo"
-
-msgid "parcel"
-msgstr "parcela"
-
-msgid "parcel number"
-msgstr "número de parcela"
-
-msgid "address"
-msgstr "endereço"
-
-msgid "locality"
-msgstr "localidade"
-
-msgid "section"
-msgstr "secção"
-
-msgid "commune"
-msgstr "comuna"
-
 msgid "Enable automatic caching."
 msgstr "Ativar cache automática."
 
@@ -30912,8 +31232,65 @@ msgstr "Ativar isto para usar a etiqueta \"add:street\" em nós."
 msgid "Unexpected file extension. {0}"
 msgstr "Extensão de ficheiro inesperada. {0}"
 
-msgid "Add \"source=...\" to elements?"
-msgstr "Adicionar \"source=...\" aos objetos?"
+msgid ""
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
+msgstr ""
+"Localização \"{0}\" encontrada na cache.\n"
+"Carregar a cache primeiro ?\n"
+"(Não = nova cache)"
+
+msgid "Select Feuille"
+msgstr "Selecione uma camada de cadastro"
+
+msgid ""
+"Error loading file.\n"
+"Probably an old version of the cache file."
+msgstr ""
+"Ocorreu um erro ao carregar o ficheiro.\n"
+"Provavelmente é uma versão antiga do ficheiro de cache."
+
+msgid "Lambert Zone {0} cache file (.{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})"
+
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgstr "Ficheiro de cache Guadeloupe Fort Marigot (.UTM1)"
+
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgstr "Ficheiro de cache Guadeloupe Sainte-Anne (.UTM2)"
+
+msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgstr "Ficheiro de cache Martinique Fort Desaix (.UTM3)"
+
+msgid "Reunion RGR92 cache file (.UTM4)"
+msgstr "Ficheiro de cache Reunion RGR92 (.UTM4)"
+
+msgid "CadastreGrabber: Illegal url."
+msgstr ""
+
+msgid ""
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
+msgstr ""
+"Não é possível abrir uma nova sessão.\n"
+"O servidor está em manutenção ou temporariamente sobrecarregado."
+
+msgid ""
+"Town/city {0} not found or not available\n"
+"or action canceled"
+msgstr ""
+"Vila/cidade {0} não encontrada ou não disponível\n"
+"ou ação cancelada"
+
+msgid "Choose from..."
+msgstr "Escolha"
+
+msgid "Select commune"
+msgstr "Selecionar comuna"
 
 msgid "Downloading {0}"
 msgstr "A descarregar {0}"
@@ -30963,125 +31340,6 @@ msgstr ""
 "Esta comuna não está vetorizada.\n"
 "Por favor use a outra opção do menu para geo-referenciar uma imagem"
 
-msgid "Extract commune boundary"
-msgstr "Extrair fronteira de comuna"
-
-msgid "Only on vectorized layers"
-msgstr "Apenas em camadas vetorizadas"
-
-msgid "Cancel current grab"
-msgstr "Anular o descarregamento"
-
-msgid "Cancel current grab (only vector images)"
-msgstr "Anular o descarregamento (apenas imagens vetoriais)"
-
-msgid "Cadastre grab"
-msgstr "Descarregar o cadastro"
-
-msgid "Download Image from French Cadastre WMS"
-msgstr "Descarregar imagem do WMS de Cadastro francês"
-
-msgid "Cadastre: {0}"
-msgstr "Cadastro: {0}"
-
-msgid "Georeference an image"
-msgstr "Geo-referenciar uma imagem"
-
-msgid "Grab non-georeferenced image"
-msgstr "Descarregar uma imagem não geo-referenciada"
-
-msgid "Georeferencing interrupted"
-msgstr "Geo-referenciamento interrompido"
-
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
-msgstr ""
-"Esta imagem contém dados geo-referenciados.\n"
-"Quer usá-los ?"
-
-msgid "Load layer from cache"
-msgstr "Carregar camada da cache"
-
-msgid "Load location from cache (only if cache is enabled)"
-msgstr "Carregar localização da cache (apenas se a cache estiver ativada)"
-
-msgid "{0} not allowed with the current projection"
-msgstr "{0} não permitido na projeção atual"
-
-msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
-msgstr ""
-"Não foi possível carregar a cache {0} porque não é compatível com a zona "
-"atual de projeção"
-
-msgid ""
-"Selected file {0} is not a cache file from this plugin (invalid extension)"
-msgstr ""
-"O ficheiro selecionado {0} não é um ficheiro de cache deste módulo (extensão "
-"de ficheiro não válida)"
-
-msgid "The location {0} is already on screen. Cache not loaded."
-msgstr "A localização {0} já está no ecrã. A cache não foi carregada."
-
-msgid "(optional)"
-msgstr "(opcional)"
-
-msgid "Change location"
-msgstr "Alterar localização"
-
-msgid "Set a new location for the next request"
-msgstr "Definir uma nova localização para o próximo pedido"
-
-msgid "Add a new municipality layer"
-msgstr "Adicionar uma nova camada de município"
-
-msgid "Commune"
-msgstr "Comuna"
-
-msgid ""
-"<html>Enter the town,village or city name.<br>Use the syntax and punctuation "
-"known by www.cadastre.gouv.fr .</html>"
-msgstr ""
-"<html>Introduza o nome da aldeia, vila ou cidade.<br>Utilize a sintaxe e "
-"pontuação reconhecidas pelo www.cadastre.gouv.fr .</html>"
-
-msgid "Departement"
-msgstr "Departamento"
-
-msgid "<html>Departement number (optional)</html>"
-msgstr "<html>Número de Departamento (opcional)</html>"
-
-msgid "Add new layer"
-msgstr "Adicionar camada nova"
-
-msgid "Open Cadastre Preferences"
-msgstr ""
-
-msgid "Refine georeferencing"
-msgstr "Melhorar georreferenciação"
-
-msgid "Improve georeferencing (only raster images)"
-msgstr "Melhorar a georreferenciação (apenas imagens raster/em píxeis)"
-
-msgid "Reset cookie"
-msgstr "Limpar cookie"
-
-msgid "Get a new cookie (session timeout)"
-msgstr "Obter um cookie novo (limite de tempo da sessão excedido)"
-
-msgid "Save image as..."
-msgstr "Salvar imagem como..."
-
-msgid "PNG files (*.png)"
-msgstr "Ficheiros PNG (*.png)"
-
-msgid "GeoTiff files (*.tif)"
-msgstr "Fiecheiros GeoTiff (*.tif)"
-
-msgid "Export image (only raster images)"
-msgstr "Exportar imagem (apenas imagens raster/em píxeis)"
-
 msgid ""
 "Click first corner for image cropping\n"
 "(two points required)"
@@ -31137,21 +31395,6 @@ msgstr "Clique no segundo canto para recortar a imagem"
 msgid "Click second Lambert crosspiece for georeferencing"
 msgstr "Clique na segunda cruz Lambert para geo-referenciar"
 
-msgid "Adjust WMS"
-msgstr "Alinhar WMS"
-
-msgid "Adjust the position of the WMS layer (saved for raster images only)"
-msgstr ""
-"Alinhar a posição da camada WMS (alinhamento guardado apenas em imagens "
-"raster)"
-
-msgid ""
-"More than one WMS layer present\n"
-"Select one of them first, then retry"
-msgstr ""
-"Existe mais do que uma camada WMS\n"
-"Selecione primeiro uma delas e tente de novo"
-
 msgid "Reset offset"
 msgstr "Limpar alinhamento"
 
@@ -31258,7 +31501,7 @@ msgid "Remove selected matches"
 msgstr "Remover correspondências selecionadas"
 
 msgid "Remove ({0})"
-msgstr ""
+msgstr "Remover ({0})"
 
 msgid "Conflate"
 msgstr "Fundir dados"
@@ -31285,16 +31528,16 @@ msgid "Select the primitives currently selected in the list"
 msgstr "Selecione os objetos atualmente selecionados na lista"
 
 msgid "Generating matches"
-msgstr ""
+msgstr "Gerar correspondências"
 
 msgid "Finding matches"
-msgstr ""
+msgstr "Encontrar correspondências"
 
 msgid "Sorting scores"
 msgstr ""
 
 msgid "Discarding inferior matches"
-msgstr ""
+msgstr "Descartar correspondências inferiores"
 
 msgid "Subject"
 msgstr "Sujeito a fusão"
@@ -31327,10 +31570,10 @@ msgid "Interrupted Sequence ({0}/{1}): {2}"
 msgstr ""
 
 msgid " Max: "
-msgstr ""
+msgstr " Máx: "
 
 msgid "Filter by area. Min: "
-msgstr ""
+msgstr "Filtrar por área. Mín: "
 
 msgid "Filter by window. Buffer: "
 msgstr ""
@@ -31345,25 +31588,25 @@ msgid "Weight"
 msgstr "Tipo"
 
 msgid "Standard Distance"
-msgstr ""
+msgstr "Distância Padrão"
 
 msgid "below"
 msgstr ""
 
 msgid "Maximum Distance"
-msgstr ""
+msgstr "Distância Máxima"
 
 msgid "Centroid Distance"
-msgstr ""
+msgstr "Distância Centróide"
 
 msgid "Hausdorff Distance (Centroids Aligned)"
 msgstr ""
 
 msgid "Symmetric Difference"
-msgstr ""
+msgstr "Diferença Simétrica"
 
 msgid "Symmetric Difference (Centroids Aligned)"
-msgstr ""
+msgstr "Diferença Simétrica (Centróides Alinhados)"
 
 msgid "Compactness"
 msgstr ""
@@ -31433,13 +31676,13 @@ msgid ""
 msgstr ""
 
 msgid "Simple Example"
-msgstr ""
+msgstr "Exemplo Simples"
 
 msgid "Advanced Example"
-msgstr ""
+msgstr "Exemplo Avançado"
 
 msgid "<Please select data>"
-msgstr ""
+msgstr "<Por favor selecione os dados>"
 
 msgid "Configure conflation settings"
 msgstr "Configurar definições de fusão"
@@ -31484,34 +31727,34 @@ msgid "Empty selection"
 msgstr "Seleção vazia"
 
 msgid "Freeze reference selection"
-msgstr ""
+msgstr "Congelar seleção de referência"
 
 msgid "Reference and subject sets should better be different."
 msgstr ""
 
 msgid "Relations are not supported yet, please do not select them."
-msgstr ""
+msgstr "Ainda não são suportadas relações, por favor não as selecione."
 
 msgid "Disambiguating"
-msgstr ""
+msgstr "Desambiguação"
 
 msgid "One to One"
-msgstr ""
+msgstr "Um para Um"
 
 msgid "Distance"
-msgstr ""
+msgstr "Distância"
 
 msgid "Standard"
-msgstr ""
+msgstr "Padrão"
 
 msgid "Centroid"
-msgstr ""
+msgstr "Centróide"
 
 msgid "Hausdorff"
-msgstr ""
+msgstr "Hausdorff"
 
 msgid "List of tags to match (default: none)"
-msgstr ""
+msgstr "Lista de etiquetas a corresponder (padrão: nenhuma)"
 
 msgid "Download OSM data continuously"
 msgstr "Descarregar dados do OpenStreetMap continuadamente"
@@ -31554,14 +31797,18 @@ msgstr "Ligações simultâneas"
 
 msgid "Maximum number of boxes to download for each pan/zoom."
 msgstr ""
+"Número máximo de caixas a descarregar em cada arrasto/aproximar/afastar"
 
 msgid "Max download boxes"
-msgstr ""
+msgstr "Máximo de caixas de descarregamento"
 
 msgid ""
 "Time in milliseconds after a pan/zoom before it starts downloading. "
 "Additional changes in the viewport in the waiting time will reset the timer."
 msgstr ""
+"Tempo em milissegundos após um arrasto/aproximar/afastar antes de começar a "
+"descarregar. Alterações adicionais na janela de visualização no tempo de "
+"espera irão alterar o contador de tempo."
 
 msgid "Wait time (milliseconds)"
 msgstr "Tempo de espera (milissegundos)"
@@ -31570,6 +31817,8 @@ msgid ""
 "How much extra area around the viewport is it going to download. Setting "
 "this to 0 will not download any extra data."
 msgstr ""
+"Quantidade de área extra em torno da janela de visualização que será "
+"descarregada. Aplicar 0 aqui não irá descarregar áreas extra."
 
 msgid "Extra download area"
 msgstr "Área de descarregamento extra"
@@ -31578,12 +31827,15 @@ msgid ""
 "Max area to download in degrees^2. Increasing this number will cause the "
 "plugin to download areas when you are zoomed far out."
 msgstr ""
+"Área máxima a descarregar em graus^2. Aumentar este número fará com que o "
+"módulo descarregue áreas quando tem o enquadramento muito afastado."
 
 msgid "Max download area"
 msgstr "Área máxima de descarregamento"
 
 msgid "The strategy for finding what areas to request from the server."
 msgstr ""
+"A estratégia para encontrar as áreas que devem ser pedidas ao servidor."
 
 msgid "Download strategy"
 msgstr "Estratégia de descarregamento"
@@ -31593,20 +31845,9 @@ msgid ""
 "is selected there is no indication that something is being done, and no way "
 "to cancel the download."
 msgstr ""
-
-msgid "Split area"
-msgstr "Dividir área"
-
-msgid "Splits an area by an untagged way."
-msgstr "Divide uma área com uma linha sem etiquetas"
-
-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 ""
-"A área selecionada não pode ser dividida porque é membro de uma relação.\n"
-"Remova a área da relação antes de dividi-la."
+"Não mostrar o progresso que é mostrado quando está a descarregar. Se esta "
+"opção for ativada não há nenhuma indicação de que algo está a ser feito e "
+"não há forma de cancelar o descarregamento."
 
 msgid "TangoGPS Files (*.log)"
 msgstr "Ficheiros TangoGPS (*.log)"
@@ -32637,7 +32878,7 @@ msgid "POWER"
 msgstr ""
 
 msgid "Activates the plug-in"
-msgstr ""
+msgstr "Ativa o módulo"
 
 msgid "Working Level"
 msgstr ""
@@ -32826,12 +33067,14 @@ msgid "generate all combinations from entrie/exit candidates"
 msgstr ""
 
 msgid "Check the direction"
-msgstr ""
+msgstr "Verificar a direção"
 
 msgid ""
 "Check the direction of the selected stream/river. Is it correct?\n"
 " Progress: "
 msgstr ""
+"Verifique a direção do rio/ribeiro selecionado. Está correta?\n"
+" Progresso: "
 
 msgid "Correct"
 msgstr "Correto"
@@ -32840,37 +33083,37 @@ msgid "Wrong"
 msgstr "Errado"
 
 msgid "<HTML><U>C</U>orrect direction</HTML>"
-msgstr ""
+msgstr "<HTML>Direção <U>C</U>correta</HTML>"
 
 msgid "Direction of river is correct."
-msgstr ""
+msgstr "A direção do rio está correta."
 
 msgid "<HTML><U>W</U>rong dirrection</HTML>"
-msgstr ""
+msgstr "<HTML>Direção <U>E</U>rrada</HTML>"
 
 msgid "Direction of river is wrong."
-msgstr ""
+msgstr "A direção do rio está errada."
 
 msgid "<HTML><U>I</U>gnore this way</HTML>"
-msgstr ""
+msgstr "<HTML><U>I</U>gnorar esta linha</HTML>"
 
 msgid "Ignore direction of this way."
-msgstr ""
+msgstr "Ignorar direção desta linha."
 
 msgid "Check direction of streams"
-msgstr ""
+msgstr "Verificar direção de ribeiros"
 
 msgid "Check direction of streams and rivers"
-msgstr ""
+msgstr "Verificar direção de ribeiros e rios"
 
 msgid "No more directions to check!"
-msgstr ""
+msgstr "Não há mais direções a verificar!"
 
 msgid "Replace way"
-msgstr ""
+msgstr "Substituir via"
 
 msgid "Replace way of selected way with a new way"
-msgstr ""
+msgstr "Substituir via da via selecionada por uma nova via."
 
 msgid ""
 "This tool replaces coastline of one way with another, and so requires "
@@ -34163,10 +34406,10 @@ msgid "Writing position information to image files..."
 msgstr "A gravar a informação de geo-localização nas imagens..."
 
 msgid "Retry"
-msgstr ""
+msgstr "Tentar novamente"
 
 msgid "Unable to process file ''{0}'':"
-msgstr ""
+msgstr "Não foi possível processar o ficheiro ''{0}'':"
 
 msgid "File could not be deleted!"
 msgstr "Não foi possível eliminar o ficheiro!"
@@ -34331,7 +34574,7 @@ msgid "Saves calibration data to a world file"
 msgstr ""
 
 msgid "New picture layer from clipboard"
-msgstr "Nova camada de imagem da área de transferência"
+msgstr "Nova camada de imagem colada da área de transferência"
 
 msgid "Supported image files, *.zip, *.kml"
 msgstr "Ficheiros de imagem suportados, *.zip, *.kml"
@@ -34593,19 +34836,20 @@ msgid ""
 msgstr ""
 
 msgid "Incomplete Members"
-msgstr ""
+msgstr "Membros Incompletos"
 
 msgid "Do you want to make the roundabout round?"
-msgstr ""
+msgstr "Quer tornar a rotunda circular?"
 
 msgid "Roundabout round"
-msgstr ""
+msgstr "Rotunda circular"
 
 msgid "Do you want to download referrers of platforms and stop positions?"
 msgstr ""
 
 msgid "Remember my choice and do not ask me again in this session"
 msgstr ""
+"Lembrar a minha escolha e não perguntar novamente durante esta sessão"
 
 msgid "PT_Assistant Fetch Request"
 msgstr ""
@@ -34617,7 +34861,7 @@ msgid ""
 msgstr ""
 
 msgid "Download incomplete route relation members"
-msgstr ""
+msgstr "Descarregar membros incompletos da relação de rota"
 
 msgid "Include stop_area tests"
 msgstr ""
@@ -34627,16 +34871,16 @@ msgstr ""
 
 msgid "{0} direction error"
 msgid_plural "{0} direction errors"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} erro de direção"
+msgstr[1] "{0} erros de direção"
 
 msgid "{0} road type error"
 msgid_plural "{0} road type errors"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} erro de tipo de estrada"
+msgstr[1] "{0} erros de tipo de estrada"
 
 msgid "How do you want to proceed?"
-msgstr ""
+msgstr "Como quer continuar?"
 
 msgid "PT_Assistant Proceed Request"
 msgstr ""
@@ -35002,7 +35246,7 @@ msgid "Public Transport: Edit waypoint name"
 msgstr "Transporte Público: Editar nome do ponto de trilho"
 
 msgid "Distance between stops"
-msgstr ""
+msgstr "Distância entre paragens"
 
 msgid "A valid public_transport:version=2 route is required"
 msgstr ""
@@ -35276,7 +35520,7 @@ msgstr ""
 "alterações na posição ({1},{2}). A ignorar."
 
 msgid "Create Roundabout"
-msgstr ""
+msgstr "Criar Rotunda"
 
 msgid "Roundabout Expander"
 msgstr ""
@@ -36021,10 +36265,10 @@ msgid "Tasks"
 msgstr ""
 
 msgid "Config"
-msgstr ""
+msgstr "Config"
 
 msgid "Activation"
-msgstr ""
+msgstr "Ativação"
 
 msgid "tofix:Skip item"
 msgstr ""
@@ -36052,10 +36296,10 @@ msgid "Something went wrong, try again"
 msgstr "Algo correu mal, tente de novo"
 
 msgid "No change to upload!"
-msgstr ""
+msgstr "Nenhuma alteração a enviar!"
 
 msgid "The bounding box is too big."
-msgstr ""
+msgstr "A caixa de limites é demasiado grande."
 
 msgid "Cannot place a node outside of the world."
 msgstr "Não é possível colocar um nó fora do mundo."
@@ -36515,7 +36759,7 @@ msgid "Both way"
 msgstr ""
 
 msgid "Number of lanes"
-msgstr ""
+msgstr "Número de faixas"
 
 msgid "Directional"
 msgstr ""
@@ -36851,7 +37095,7 @@ msgid "Bicycles"
 msgstr "Bicicletas"
 
 msgid "Mopeds"
-msgstr ""
+msgstr "Ciclomotores"
 
 msgid "Use standard exceptions"
 msgstr "Usar exceções padrão"
@@ -37244,7 +37488,7 @@ msgid "Internal error: number of nodes is {0}."
 msgstr "Erro: o número de nós é {0}."
 
 msgid "Copy all tags of selected objects to paste buffer."
-msgstr ""
+msgstr "Copiar todas as etiquetas dos objetos selecionados."
 
 msgid "Extract node"
 msgstr "Extrair nó (com histórico de autores)"
@@ -37835,32 +38079,6 @@ msgstr "repetir"
 msgid "mute"
 msgstr "silenciar"
 
-msgid "Walking Papers Scanned Map"
-msgstr "Mapa Digitalizado do Walking Papers"
-
-msgid ""
-"Display a map that was previously scanned and uploaded to walking-papers.org"
-msgstr ""
-"Mostra um mapa OSM com notas que foi previamente digitalizado e enviado para "
-"walking-papers.org"
-
-msgid ""
-"Enter a walking-papers.org URL or ID (the bit after the ?id= in the URL)"
-msgstr ""
-"Introduza o endereço web completo do mapa ou o ID (o número a seguir a ?id=) "
-"de walking-papers.org"
-
-msgid "Could not read information from walking-papers.org the id \"{0}\""
-msgstr ""
-"Não foi possível obter o mapa no site walking-papers.org com o ID \"{0}\". "
-"Verifique o endereço e tente de novo."
-
-msgid "Walking Papers: {0}"
-msgstr "Walking Papers: {0}"
-
-msgid "Walking Papers layer ({0}) in zoom {1}"
-msgstr "Camada Walking Papers ({0}) no enquadramento {1}"
-
 msgid "Way Download"
 msgstr "Descarregar Nó Final da Estrada"
 
@@ -37972,19 +38190,21 @@ msgstr "Copiar predefinição {0}"
 msgid "Overwrite ''{0}'' tag {1} from {2} with new value ''{3}''?"
 msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
+"Substituir valor na etiqueta ''{0}'' {1} em {2} pelo novo valor ''{3}''?"
 msgstr[1] ""
+"Substituir valores na etiqueta ''{0}'' {1} em {2} pelo novo valor ''{3}''?"
 
 msgid "Search Wikidata items"
-msgstr ""
+msgstr "Procurar por itens Wikidata"
 
 msgid "Target key: "
-msgstr ""
+msgstr "Chave da etiqueta a usar: "
 
 msgid "Search Wikipedia category"
-msgstr ""
+msgstr "Procurar categoria da Wikipédia"
 
 msgid "Load category"
-msgstr ""
+msgstr "Carregar categoria"
 
 msgid "Fetch Wikipedia articles with coordinates"
 msgstr "Procurar artigos da Wikipédia com coordenadas"
@@ -38006,13 +38226,13 @@ msgid "Not linked yet"
 msgstr "Nenhum objeto no mapa local com esta etiqueta da Wikipédia"
 
 msgid "{0}: {1}"
-msgstr ""
+msgstr "{0}: {1}"
 
 msgid "Wikidata"
 msgstr "Wikidata"
 
 msgid "Fetches all coordinates from Wikidata in the current view"
-msgstr ""
+msgstr "Obtém todas as coordenadas do Wikidata no enquadramento atual"
 
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
@@ -38054,6 +38274,26 @@ msgstr ""
 "Adiciona aos objetos selecionados a etiqueta  ''wikipedia'' com a página "
 "correspondente"
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "The Ultimate WMS Super-speed Turbo Challenge II"
 
diff --git a/i18n/po/pt_BR.po b/i18n/po/pt_BR.po
index a8ebd27..cb22daa 100644
--- a/i18n/po/pt_BR.po
+++ b/i18n/po/pt_BR.po
@@ -8,16 +8,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-02 22:59+0200\n"
-"PO-Revision-Date: 2017-09-03 01:47+0000\n"
-"Last-Translator: Nelson A. de Oliveira <naoliv at debian.org>\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
+"PO-Revision-Date: 2017-09-27 01:35+0000\n"
+"Last-Translator: André Marcelo Alvarenga <andrealvarenga at gmx.net>\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: 2017-09-03 05:05+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 05:04+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: pt_BR\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -405,6 +405,45 @@ msgstr "Excluir"
 msgid "Delete selected objects."
 msgstr "Excluir os objetos selecionados."
 
+msgid "Delete confirmation"
+msgstr "Apagar confirmação"
+
+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 ""
+"Você está a ponto de apagar nós fora da área que fez download de "
+"dados.<br>Isto pode causar problemas, já que outros objetos que você não "
+"pode ver podem estar usando estes pontos.<br>Deseja realmente apagar?"
+
+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 ""
+"Você irá apagar objetos incompletos.<br>Isto irá causar problemas pelo fato "
+"de você não ver o objeto real.<br>Você realmente deseja apagar?"
+
+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] ""
+"Você está próximo de deletar {0} relação: {1}<br/>Esta etapa é raramente "
+"necessária e não pode ser desfeita facilmente depois de ser atualizada para "
+"o servidor:<br/>Você realmente quer deletá-la?"
+msgstr[1] ""
+"Você está próximo de deletar {0} relações: {1}<br/>Esta etapa é raramente "
+"necessária e não pode ser desfeita facilmente depois de ser atualizada para "
+"o servidor:<br/>Você realmente quer deletá-las?"
+
+msgid "Delete relation?"
+msgstr "Deletar relação?"
+
 msgid "Delete Layer"
 msgstr "Excluir Camada"
 
@@ -1410,35 +1449,14 @@ msgstr " [id: {0}]"
 msgid "Segment {0}: {1}"
 msgstr "Segmento {0}: {1}"
 
-msgid "You must select two or more nodes to split a circular way."
-msgstr ""
-"Você precisa selecionar dois ou mais nós para dividir um caminho circular."
-
-msgid ""
-"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
-"middle of the way.)"
-msgstr ""
-"O caminho não pode ser dividido nos nós selecionados. (Dica: Selecione nós "
-"no meio do caminho.)"
-
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
-msgstr ""
-"Uma regra de agrupamento de relações foi copiada para todas as novas "
-"vias.<br>Você deve verificá-las e corrigi-las onde for necessário."
+msgid "Search preset"
+msgstr "Buscar predefinição"
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
-msgstr ""
-"Um agrupamento de relação foi copiada para todas as novas vias.<br>Você deve "
-"verificá-las e corrigi-las onde for necessário."
+msgid "Show preset search dialog"
+msgstr "Mostrar tela de busca de pré-definições"
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] "Divide a via {0} em {1} parte"
-msgstr[1] "Divide a via {0} em {1} partes"
+msgid "Search presets"
+msgstr "Buscar predefinição"
 
 msgid "Discourage upload"
 msgstr ""
@@ -2956,45 +2974,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] "Apagar {0} relação"
 msgstr[1] "apagar {0} relação"
 
-msgid "Delete confirmation"
-msgstr "Apagar confirmação"
-
-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 ""
-"Você está a ponto de apagar nós fora da área que fez download de "
-"dados.<br>Isto pode causar problemas, já que outros objetos que você não "
-"pode ver podem estar usando estes pontos.<br>Deseja realmente apagar?"
-
-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 ""
-"Você irá apagar objetos incompletos.<br>Isto irá causar problemas pelo fato "
-"de você não ver o objeto real.<br>Você realmente deseja apagar?"
-
-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] ""
-"Você está próximo de deletar {0} relação: {1}<br/>Esta etapa é raramente "
-"necessária e não pode ser desfeita facilmente depois de ser atualizada para "
-"o servidor:<br/>Você realmente quer deletá-la?"
-msgstr[1] ""
-"Você está próximo de deletar {0} relações: {1}<br/>Esta etapa é raramente "
-"necessária e não pode ser desfeita facilmente depois de ser atualizada para "
-"o servidor:<br/>Você realmente quer deletá-las?"
-
-msgid "Delete relation?"
-msgstr "Deletar relação?"
-
 msgid "Move {0} node"
 msgid_plural "Move {0} nodes"
 msgstr[0] "Mover {0} nó"
@@ -3026,6 +3005,36 @@ msgstr[1] "{0} objetos selecionados"
 msgid "Sequence: {0}"
 msgstr "Sequência: {0}"
 
+msgid "You must select two or more nodes to split a circular way."
+msgstr ""
+"Você precisa selecionar dois ou mais nós para dividir um caminho circular."
+
+msgid ""
+"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
+"middle of the way.)"
+msgstr ""
+"O caminho não pode ser dividido nos nós selecionados. (Dica: Selecione nós "
+"no meio do caminho.)"
+
+msgid ""
+"A role based relation membership was copied to all new ways.<br>You should "
+"verify this and correct it when necessary."
+msgstr ""
+"Uma regra de agrupamento de relações foi copiada para todas as novas "
+"vias.<br>Você deve verificá-las e corrigi-las onde for necessário."
+
+msgid ""
+"A relation membership was copied to all new ways.<br>You should verify this "
+"and correct it when necessary."
+msgstr ""
+"Um agrupamento de relação foi copiada para todas as novas vias.<br>Você deve "
+"verificá-las e corrigi-las onde for necessário."
+
+msgid "Split way {0} into {1} part"
+msgid_plural "Split way {0} into {1} parts"
+msgstr[0] "Divide a via {0} em {1} parte"
+msgstr[1] "Divide a via {0} em {1} partes"
+
 msgid "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] "Transformar {0} nó"
@@ -3159,6 +3168,18 @@ msgstr "Valor de latitude ilegal ''{0}''"
 msgid "Illegal longitude value ''{0}''"
 msgstr "Valor de longitude ilegal ''{0}''"
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr "Falha ao criar diretório de cache ausente: {0}"
 
@@ -3292,6 +3313,10 @@ msgstr "Imperial"
 msgid "Nautical Mile"
 msgstr "Milhas náuticas"
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+"Era esperado um valor não-vazio para o parâmetro ''{0}'', mas recebi ''{1}''"
+
 msgid "UNKNOWN"
 msgstr "DESCONHECIDO"
 
@@ -3336,6 +3361,9 @@ msgctxt "compass"
 msgid "E"
 msgstr "L"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr "Data das imagens: {0}"
 
@@ -4032,6 +4060,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr "Projeção personalizada"
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr "Descrição"
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr "Mostrar essa ajuda"
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr "Exemplos"
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr "GRS80"
 
@@ -5114,10 +5196,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr "Deslocamento"
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-"Era esperado um valor não-vazio para o parâmetro ''{0}'', mas recebi ''{1}''"
-
 msgid "Outdated Java version"
 msgstr "Versão desatualizada do Java"
 
@@ -5167,6 +5245,9 @@ msgstr "Inicializando dados internos de limites"
 msgid "Initializing OSM API"
 msgstr "Inicializando a API do OSM"
 
+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 "Initializing internal traffic data"
 msgstr "Inicializando dados internos de tráfego"
 
@@ -5188,9 +5269,6 @@ msgstr "uso"
 msgid "options"
 msgstr "opções"
 
-msgid "Show this help"
-msgstr "Mostrar essa ajuda"
-
 msgid "Standard unix geometry argument"
 msgstr "Argumento padrão de geometria unix"
 
@@ -5421,6 +5499,14 @@ msgstr ""
 "devido a uma configuração de proxy ausente.<br>Você gostaria de mudar suas "
 "configurações de proxy agora?"
 
+msgid "You have {0} unread message."
+msgid_plural "You have {0} unread messages."
+msgstr[0] "Você tem {0} mensagem não lida."
+msgstr[1] "Você tem {0} mensagens não lidas."
+
+msgid "Click here to see your inbox."
+msgstr "Clique aqui para ver sua caixa de entrada."
+
 msgctxt "menu"
 msgid "File"
 msgstr "Arquivo"
@@ -5684,6 +5770,10 @@ msgstr "Por favor digite o índice do tile"
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr "O valor atual não é um índice de tile válido para este nível de zoom"
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr "Você encontrou um bug no JOSM"
 
@@ -7622,6 +7712,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr "Atualiza o changeset a partir do servidor do OSM"
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7892,9 +7985,6 @@ msgstr ""
 "Por favor digite ou cole uma URL para buscar conjuntos de alterações da API "
 "do OSM."
 
-msgid "Examples"
-msgstr "Exemplos"
-
 msgid ""
 "Note that changeset queries are currently always submitted to ''{0}'', "
 "regardless of the host, port and path of the URL entered below."
@@ -8388,8 +8478,9 @@ msgid ""
 "object ''{0}''<br><br>Do you really want to add another relation "
 "member?</html>"
 msgstr ""
-"<html>Essa relação já tem um ou mais membros referindo ao <br>objteto "
-"''{0}''<br><br>Você realmente quer adicionar outro membro de relação?</html>"
+"<html>Esta relação já tem um ou mais membros fazendo referência ao "
+"<br>objeto ''{0}''<br><br>Você realmente quer adicionar outro membro de "
+"relação?</html>"
 
 msgid "Multiple members referring to same object."
 msgstr "Vários membros referentes ao mesmo objeto."
@@ -8902,15 +8993,15 @@ msgstr "Área para baixar ok, possivelmente será aceito pelo servidor"
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8939,33 +9030,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr "história"
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -9089,6 +9153,33 @@ msgstr "Slippy map"
 msgid "Tile Numbers"
 msgstr "Número de quadros"
 
+msgid "history"
+msgstr "história"
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr "Navegador de Help do JOSM"
 
@@ -9244,6 +9335,12 @@ msgstr "Visualizar esse nó na camada de dados atual"
 msgid "Open a history browser with the history of this node"
 msgstr "Abrir um navegador de histórico com a história desse nó"
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr "Caminho {0}"
 
@@ -9253,6 +9350,9 @@ msgstr "Relação {0}"
 msgid "Object"
 msgstr "Objeto"
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr "Comentário do Changeset"
 
@@ -9423,6 +9523,9 @@ msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 "Marque \"Salvar\" para salvar a camada no arquivo especificado à esquerda."
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "Faça um comentário breve sobre as mudanças que está enviando:"
 
@@ -10598,9 +10701,6 @@ msgid_plural "{0} tracks"
 msgstr[0] "{0} trilha"
 msgstr[1] "{0} trilhas"
 
-msgid "Description"
-msgstr "Descrição"
-
 msgid "Timespan"
 msgstr "Vigência"
 
@@ -11932,7 +12032,8 @@ msgid "Save the preferences and close the dialog"
 msgstr "Salva as preferências e fecha a janela"
 
 msgid "You have to restart JOSM for some settings to take effect."
-msgstr "Você precicar reiniciar JOSM para aplicar mudanças."
+msgstr ""
+"Você precisa reiniciar o JOSM para que algumas modificações tenham efeito"
 
 msgid "Would you like to restart now?"
 msgstr "Deseja reiniciar agora?"
@@ -14070,15 +14171,6 @@ msgstr "Elemento sub da predefinição, sem pai"
 msgid "Error parsing {0}: "
 msgstr "Erro analisando {0}: "
 
-msgid "Search preset"
-msgstr "Buscar predefinição"
-
-msgid "Show preset search dialog"
-msgstr "Mostrar tela de busca de pré-definições"
-
-msgid "Search presets"
-msgstr "Buscar predefinição"
-
 msgid "Presets"
 msgstr "Predefinições"
 
@@ -14197,6 +14289,9 @@ msgstr "Todos os arquivos (*.*)"
 msgid "Received error page:"
 msgstr "Recebido erro da página:"
 
+msgid "{0}... [please type its number]"
+msgstr "{0} ... [por favor digite o seu número]"
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -14502,14 +14597,6 @@ msgstr "O modo {0} é desconhecido."
 msgid "get number of unread messages"
 msgstr "obter o número de mensagens não lidas"
 
-msgid "You have {0} unread message."
-msgid_plural "You have {0} unread messages."
-msgstr[0] "Você tem {0} mensagem não lida."
-msgstr[1] "Você tem {0} mensagens não lidas."
-
-msgid "Click here to see your inbox."
-msgstr "Clique aqui para ver sua caixa de entrada."
-
 msgid "Message notifier"
 msgstr "Notificador de mensagens"
 
@@ -14578,9 +14665,6 @@ msgstr ""
 "Ela suporta a versão 0.6 do protocolo, enquanto o servidor diz que suporta "
 "{0} para {1}."
 
-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 respondido pelo servidor. Obtido ''{0}''."
 
@@ -16050,9 +16134,6 @@ msgstr ""
 "http://forum.openstreetmap.org/viewtopic.php?id=25677).\n"
 "Atualmente você tem {1,number,#}MB de memória alocada para o JOSM"
 
-msgid "{0}... [please type its number]"
-msgstr "{0} ... [por favor digite o seu número]"
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -16168,10 +16249,6 @@ msgid "Failed to load XML schema."
 msgstr "Falhou ao carregar esquema XML."
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -16773,6 +16850,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr "não"
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr "Tipo de serviço"
 
@@ -18763,7 +18844,7 @@ msgid "lock"
 msgstr "eclusa"
 
 msgid "wastewater"
-msgstr "residual"
+msgstr "águas residuais"
 
 msgid "Salt Water"
 msgstr "Água salgada"
@@ -18839,10 +18920,9 @@ msgid "Bay"
 msgstr "Baía"
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
-"Uma grande massa de água parcialmente cercada por terra, mas com uma "
-"embocadura larga."
 
 msgid "Shipping"
 msgstr "Navegação"
@@ -22648,11 +22728,11 @@ msgid "Monument"
 msgstr "Monumento"
 
 msgid "Memorial"
-msgstr "Monumento comemorativo"
+msgstr "Memorial/monumento"
 
 msgctxt "memorial"
 msgid "statue"
-msgstr "estatua"
+msgstr "estátua"
 
 msgctxt "memorial"
 msgid "bust"
@@ -23798,10 +23878,10 @@ msgid "mussels"
 msgstr "mexilhão"
 
 msgid "Allotments"
-msgstr "Hortas comunitárias"
+msgstr "Horta urbana"
 
 msgid "Garden"
-msgstr "Jardim"
+msgstr "Jardim/Horta comunitária"
 
 msgid "Grass"
 msgstr "Grama"
@@ -23893,7 +23973,7 @@ msgstr ""
 
 msgctxt "industrial"
 msgid "sawmill"
-msgstr ""
+msgstr "serraria"
 
 msgctxt "industrial"
 msgid "scrap_yard"
@@ -23905,7 +23985,7 @@ msgstr ""
 
 msgctxt "industrial"
 msgid "slaughterhouse"
-msgstr ""
+msgstr "abatedouro"
 
 msgctxt "industrial"
 msgid "warehouse"
@@ -24698,6 +24778,9 @@ msgstr "Waymarked Trails: Horse Riding"
 msgid "Waymarked Trails: Winter Sports"
 msgstr "Waymarked Trails: Winter Sports"
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr "OSM Inspector: Geometria"
 
@@ -24756,6 +24839,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -24837,6 +24923,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -24858,9 +24959,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -25457,6 +25555,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -25869,6 +25970,9 @@ msgstr "Luxembourg Inspire Water"
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Niger Delta Oct 2012 Landsat"
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -26312,6 +26416,9 @@ msgstr "NLSC Open Data WMTS"
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr "MSR Maps Topo"
 
@@ -27535,6 +27642,9 @@ msgstr "relações sem tipo"
 msgid "{0} relation without {0} tag"
 msgstr "{0} relação sem {0} tag"
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr "religião sem denominação"
 
@@ -27739,11 +27849,6 @@ msgid "Customization of public public transport stops."
 msgstr ""
 
 msgid ""
-"Creating and handling address nodes and buildings within Czech Republic."
-msgstr ""
-"Criação e manipulação de endereço de nós e edifícios na República Checa."
-
-msgid ""
 "Allows to import various file formats into JOSM directly. Currently "
 "supported: TangoGPS, Garmin Trainings Center TCX."
 msgstr ""
@@ -27802,9 +27907,6 @@ msgstr ""
 "Converse com os usuários que estão editando o mapa próximo, ser notificado "
 "quando alguém chegar perto."
 
-msgid "Allows you to view a GeoJSON file as a layer."
-msgstr "Permite visualizar um arquivo GeoJSON como uma camada."
-
 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."
@@ -28237,13 +28339,6 @@ msgstr ""
 "georreferenciado contra uma trilha GPS, para usá-lo para identificar os "
 "objetos visíveis."
 
-msgid ""
-"Supports downloading tiled, scanned maps from walking-papers.org. This "
-"plugin is still under early development and may be buggy."
-msgstr ""
-"Suporta o download de quadras, mapas digitalizados de walking-papers.org. "
-"Este plugin ainda está em desenvolvimento e pode ser buggy."
-
 msgid "Easy downloading along a long set of interconnected ways"
 msgstr "Download fácil ao longo de uma longa série de formas interligadas"
 
@@ -28889,15 +28984,15 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
+msgid "Start Mapillary layer"
+msgstr "Iniciar camada do Mapillary"
+
 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"
 
@@ -30317,6 +30412,163 @@ msgstr[1] "Há {0} edifícios com conflitos de endereços"
 msgid "No address nodes inside buildings found"
 msgstr "Nenhum nó de endereços encontrados no interior de edifícios"
 
+msgid "Auto sourcing"
+msgstr "Auto-abastecimento"
+
+msgid ""
+"Please enable at least two WMS layers in the cadastre-fr plugin "
+"configuration.\n"
+"Layers ''Building'' and ''Parcel'' added by default."
+msgstr ""
+"Por favor, habilite pelo menos duas camadas WMS na configuração do plugin "
+"cadastre-fr.\n"
+"Camadas ''Construção'' e ''Pacote'' adicionadas por padrão."
+
+msgid ""
+"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+msgstr ""
+"Aviso: falha ao colocar o diálogo das opções do painel acima das outras. A "
+"exceção foi: {0}"
+
+msgid ""
+"To enable the cadastre WMS plugin, change\n"
+"the current projection to one of the cadastre\n"
+"projections and retry"
+msgstr ""
+"Para ativar o plugin cadastre WMS , mude\n"
+"a projeção atual para uma do cadastro\n"
+"e tente novamente"
+
+msgid "Change the current projection"
+msgstr "Mudar projeção atual"
+
+msgid "Extract commune boundary"
+msgstr "Extrai o limite do município"
+
+msgid "Only on vectorized layers"
+msgstr "Apenas em camadas vetorizadas"
+
+msgid "Cancel current grab"
+msgstr "Cancelar apanhamento atual"
+
+msgid "Cancel current grab (only vector images)"
+msgstr "Cancelar apanhamento atual (apenas imagens vetoriais)"
+
+msgid "Cadastre grab"
+msgstr "Cadastre grab"
+
+msgid "Download Image from French Cadastre WMS"
+msgstr "Baixar imagem de Cadastro francês WMS"
+
+msgid "Cadastre: {0}"
+msgstr "Cadastrar:{0}"
+
+msgid "Georeference an image"
+msgstr "Georreferenciar uma imagem"
+
+msgid "Grab non-georeferenced image"
+msgstr "Agarre imagem não georreferenciada"
+
+msgid "Georeferencing interrupted"
+msgstr "Georreferenciamento interrompido"
+
+msgid ""
+"This image contains georeference data.\n"
+"Do you want to use them ?"
+msgstr ""
+"Esta imagem contém dados georeferenciados.\n"
+"Você quer usá-los?"
+
+msgid "Load layer from cache"
+msgstr "Carregar camada do cache"
+
+msgid "Load location from cache (only if cache is enabled)"
+msgstr ""
+"Localização da carga de cache (somente se o cache estiver habilitado)"
+
+msgid "{0} not allowed with the current projection"
+msgstr "{0} não permitido com a projeção atual"
+
+msgid ""
+"Cannot load cache {0} which is not compatible with current projection zone"
+msgstr ""
+"Não é possível carregar o cache {0}, pois ele não é compatível com a zona de "
+"projeção atual"
+
+msgid ""
+"Selected file {0} is not a cache file from this plugin (invalid extension)"
+msgstr ""
+"Arquivo selecionado {0} não é um arquivo de cache deste plugin (extensão "
+"inválida)"
+
+msgid "The location {0} is already on screen. Cache not loaded."
+msgstr "O local {0} já está na tela. Cache não carregado."
+
+msgid "(optional)"
+msgstr "(opcional)"
+
+msgid "Change location"
+msgstr "Alterar localidade"
+
+msgid "Set a new location for the next request"
+msgstr "Definir um novo local para o próximo pedido"
+
+msgid "Add a new municipality layer"
+msgstr "Adiciona uma nova camada do município"
+
+msgid "Commune"
+msgstr "Comum:"
+
+msgid ""
+"<html>Enter the town,village or city name.<br>Use the syntax and punctuation "
+"known by www.cadastre.gouv.fr .</html>"
+msgstr ""
+"<html>Digite a cidade, vila ou o nome da cidade.<br>Use a sintaxe e "
+"pontuação conhecido por www.cadastre.gouv.fr.</html>"
+
+msgid "Departement"
+msgstr "Departamento"
+
+msgid "<html>Departement number (optional)</html>"
+msgstr "<html>Distrito do número (opcional)</html>"
+
+msgid "Add new layer"
+msgstr "Adicionar nova camada"
+
+msgid "Open Cadastre Preferences"
+msgstr "Abrir Preferências de Cadastro"
+
+msgid "Refine georeferencing"
+msgstr "Limitar georreferenciamento"
+
+msgid "Improve georeferencing (only raster images)"
+msgstr "Melhorar georreferenciamento (apenas imagens raster)"
+
+msgid "Reset cookie"
+msgstr "Resetar cookie"
+
+msgid "Get a new cookie (session timeout)"
+msgstr "Obtenha um novo cookie (a sessão expirou)"
+
+msgid "Save image as..."
+msgstr "Salvar imagem como..."
+
+msgid "PNG files (*.png)"
+msgstr "Arquivos PNG (*.png)"
+
+msgid "GeoTiff files (*.tif)"
+msgstr "Arquivos GeoTiff (*.tif)"
+
+msgid "Export image (only raster images)"
+msgstr "Exportar imagem (apenas imagens raster)"
+
+msgid ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+"Existe mais de uma camada WMS\n"
+"Primeiro selecione uma delas, então repita"
+
 msgid "on polygon"
 msgstr "no polígono"
 
@@ -30332,95 +30584,83 @@ msgstr "Próximo"
 msgid "Enter addresses"
 msgstr "Insira o endereçõ"
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
+msgstr "Ajustar WMS"
+
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
+msgstr "Ajusta a posição da camada WMS (salvo para imagens raster apenas)"
+
+msgid "Add \"source=...\" to elements?"
+msgstr "Adicionar \"source=...\" para elementos?"
+
+msgid "Download from Cadastre"
 msgstr ""
-"Localização \"{0}\" encontrada no cache.\n"
-"Caregar do cache primeiro?\n"
-"(Não = novo cache)"
 
-msgid "Select Feuille"
-msgstr "Selecionar Feuille"
+msgid "Objects:"
+msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Select to download buildings in the selected download area."
 msgstr ""
-"Erro ao carregar arquivo.\n"
-"Provavelmente uma versão antiga do arquivo de cache."
 
-msgid "Lambert Zone {0} cache file (.{0})"
-msgstr "Zona Lamber {0} arquivo cache (.{0})"
+msgid "address"
+msgstr "endereço"
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
-msgstr "Zona Lambert CC9 {0} arquivo cache (.CC {0})"
+msgid "Select to download addresses in the selected download area."
+msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
-msgstr "Arquivo de cache Guadalupe Fort-Marigot (.UTM1)"
+msgid "symbol"
+msgstr "símbolo"
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
-msgstr "Arquivo de cache Guadeloupe Ste-Anne (.UTM2)"
+msgid "Select to download symbols in the selected download area."
+msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
-msgstr "Arquivo de cache Martinique Fort Desaix (.UTM3)"
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
-msgstr "Arquivo de cache do Reunion RGR92(.UTM4)"
+msgid "parcel"
+msgstr "encomenda"
 
-msgid "CadastreGrabber: Illegal url."
-msgstr "CadastreGrabber: url ilegal."
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
+msgstr "número da encomenda"
 
 msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
-"Não é possível abrir uma nova sessão do cliente.\n"
-"Servidor em manutenção ou temporáriamente sobrecarregado."
 
-msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+msgid "section"
+msgstr "seção"
+
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
-"Cidade {0} não foi encontrada ou não está disponível\n"
-"ou a ação foi cancelada"
 
-msgid "Choose from..."
-msgstr "Escolha entre..."
+msgid "locality"
+msgstr "localidade"
 
-msgid "Select commune"
-msgstr "Selecionar município"
+msgid "Select to download localities in the selected download area."
+msgstr ""
 
-msgid "Auto sourcing"
-msgstr "Auto-abastecimento"
+msgid "commune"
+msgstr "vila"
 
 msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+"Select to download municipality boundary in the selected download area."
 msgstr ""
-"Por favor, habilite pelo menos duas camadas WMS na configuração do plugin "
-"cadastre-fr.\n"
-"Camadas ''Construção'' e ''Pacote'' adicionadas por padrão."
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
-"Aviso: falha ao colocar o diálogo das opções do painel acima das outras. A "
-"exceção foi: {0}"
 
-msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+msgid "Recipient"
 msgstr ""
-"Para ativar o plugin cadastre WMS , mude\n"
-"a projeção atual para uma do cadastro\n"
-"e tente novamente"
 
-msgid "Change the current projection"
-msgstr "Mudar projeção atual"
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
+msgstr ""
 
 msgid "Replace original background by JOSM background color."
 msgstr "Substui o plano de fundo original por cor."
@@ -30470,27 +30710,6 @@ msgstr "médio"
 msgid "low"
 msgstr "baixa"
 
-msgid "symbol"
-msgstr "símbolo"
-
-msgid "parcel"
-msgstr "encomenda"
-
-msgid "parcel number"
-msgstr "número da encomenda"
-
-msgid "address"
-msgstr "endereço"
-
-msgid "locality"
-msgstr "localidade"
-
-msgid "section"
-msgstr "seção"
-
-msgid "commune"
-msgstr "vila"
-
 msgid "Enable automatic caching."
 msgstr "Habilitar cache automático"
 
@@ -30653,8 +30872,65 @@ msgstr "Habilite isso para usar a etiqueta\"\"add:street\" nos nós."
 msgid "Unexpected file extension. {0}"
 msgstr "Extensão de arquivo não esperada: {0}"
 
-msgid "Add \"source=...\" to elements?"
-msgstr "Adicionar \"source=...\" para elementos?"
+msgid ""
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
+msgstr ""
+"Localização \"{0}\" encontrada no cache.\n"
+"Caregar do cache primeiro?\n"
+"(Não = novo cache)"
+
+msgid "Select Feuille"
+msgstr "Selecionar Feuille"
+
+msgid ""
+"Error loading file.\n"
+"Probably an old version of the cache file."
+msgstr ""
+"Erro ao carregar arquivo.\n"
+"Provavelmente uma versão antiga do arquivo de cache."
+
+msgid "Lambert Zone {0} cache file (.{0})"
+msgstr "Zona Lamber {0} arquivo cache (.{0})"
+
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgstr "Zona Lambert CC9 {0} arquivo cache (.CC {0})"
+
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgstr "Arquivo de cache Guadalupe Fort-Marigot (.UTM1)"
+
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgstr "Arquivo de cache Guadeloupe Ste-Anne (.UTM2)"
+
+msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgstr "Arquivo de cache Martinique Fort Desaix (.UTM3)"
+
+msgid "Reunion RGR92 cache file (.UTM4)"
+msgstr "Arquivo de cache do Reunion RGR92(.UTM4)"
+
+msgid "CadastreGrabber: Illegal url."
+msgstr "CadastreGrabber: url ilegal."
+
+msgid ""
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
+msgstr ""
+"Não é possível abrir uma nova sessão do cliente.\n"
+"Servidor em manutenção ou temporáriamente sobrecarregado."
+
+msgid ""
+"Town/city {0} not found or not available\n"
+"or action canceled"
+msgstr ""
+"Cidade {0} não foi encontrada ou não está disponível\n"
+"ou a ação foi cancelada"
+
+msgid "Choose from..."
+msgstr "Escolha entre..."
+
+msgid "Select commune"
+msgstr "Selecionar município"
 
 msgid "Downloading {0}"
 msgstr "Baixando {0}"
@@ -30706,126 +30982,6 @@ msgstr ""
 "Por favor, use a outra entrada do menu para georreferenciar o \"Plano de "
 "imagem\""
 
-msgid "Extract commune boundary"
-msgstr "Extrai o limite do município"
-
-msgid "Only on vectorized layers"
-msgstr "Apenas em camadas vetorizadas"
-
-msgid "Cancel current grab"
-msgstr "Cancelar apanhamento atual"
-
-msgid "Cancel current grab (only vector images)"
-msgstr "Cancelar apanhamento atual (apenas imagens vetoriais)"
-
-msgid "Cadastre grab"
-msgstr "Cadastre grab"
-
-msgid "Download Image from French Cadastre WMS"
-msgstr "Baixar imagem de Cadastro francês WMS"
-
-msgid "Cadastre: {0}"
-msgstr "Cadastrar:{0}"
-
-msgid "Georeference an image"
-msgstr "Georreferenciar uma imagem"
-
-msgid "Grab non-georeferenced image"
-msgstr "Agarre imagem não georreferenciada"
-
-msgid "Georeferencing interrupted"
-msgstr "Georreferenciamento interrompido"
-
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
-msgstr ""
-"Esta imagem contém dados georeferenciados.\n"
-"Você quer usá-los?"
-
-msgid "Load layer from cache"
-msgstr "Carregar camada do cache"
-
-msgid "Load location from cache (only if cache is enabled)"
-msgstr ""
-"Localização da carga de cache (somente se o cache estiver habilitado)"
-
-msgid "{0} not allowed with the current projection"
-msgstr "{0} não permitido com a projeção atual"
-
-msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
-msgstr ""
-"Não é possível carregar o cache {0}, pois ele não é compatível com a zona de "
-"projeção atual"
-
-msgid ""
-"Selected file {0} is not a cache file from this plugin (invalid extension)"
-msgstr ""
-"Arquivo selecionado {0} não é um arquivo de cache deste plugin (extensão "
-"inválida)"
-
-msgid "The location {0} is already on screen. Cache not loaded."
-msgstr "O local {0} já está na tela. Cache não carregado."
-
-msgid "(optional)"
-msgstr "(opcional)"
-
-msgid "Change location"
-msgstr "Alterar localidade"
-
-msgid "Set a new location for the next request"
-msgstr "Definir um novo local para o próximo pedido"
-
-msgid "Add a new municipality layer"
-msgstr "Adiciona uma nova camada do município"
-
-msgid "Commune"
-msgstr "Comum:"
-
-msgid ""
-"<html>Enter the town,village or city name.<br>Use the syntax and punctuation "
-"known by www.cadastre.gouv.fr .</html>"
-msgstr ""
-"<html>Digite a cidade, vila ou o nome da cidade.<br>Use a sintaxe e "
-"pontuação conhecido por www.cadastre.gouv.fr.</html>"
-
-msgid "Departement"
-msgstr "Departamento"
-
-msgid "<html>Departement number (optional)</html>"
-msgstr "<html>Distrito do número (opcional)</html>"
-
-msgid "Add new layer"
-msgstr "Adicionar nova camada"
-
-msgid "Open Cadastre Preferences"
-msgstr "Abrir Preferências de Cadastro"
-
-msgid "Refine georeferencing"
-msgstr "Limitar georreferenciamento"
-
-msgid "Improve georeferencing (only raster images)"
-msgstr "Melhorar georreferenciamento (apenas imagens raster)"
-
-msgid "Reset cookie"
-msgstr "Resetar cookie"
-
-msgid "Get a new cookie (session timeout)"
-msgstr "Obtenha um novo cookie (a sessão expirou)"
-
-msgid "Save image as..."
-msgstr "Salvar imagem como..."
-
-msgid "PNG files (*.png)"
-msgstr "Arquivos PNG (*.png)"
-
-msgid "GeoTiff files (*.tif)"
-msgstr "Arquivos GeoTiff (*.tif)"
-
-msgid "Export image (only raster images)"
-msgstr "Exportar imagem (apenas imagens raster)"
-
 msgid ""
 "Click first corner for image cropping\n"
 "(two points required)"
@@ -30881,19 +31037,6 @@ msgstr "Clique no segundo canto para cortar a imagem"
 msgid "Click second Lambert crosspiece for georeferencing"
 msgstr "Clique na segunda travessa Lambert para georreferenciamento"
 
-msgid "Adjust WMS"
-msgstr "Ajustar WMS"
-
-msgid "Adjust the position of the WMS layer (saved for raster images only)"
-msgstr "Ajusta a posição da camada WMS (salvo para imagens raster apenas)"
-
-msgid ""
-"More than one WMS layer present\n"
-"Select one of them first, then retry"
-msgstr ""
-"Existe mais de uma camada WMS\n"
-"Primeiro selecione uma delas, então repita"
-
 msgid "Reset offset"
 msgstr "Resetar deslocamento"
 
@@ -31333,7 +31476,7 @@ msgstr "Área máxima de download"
 
 msgid "The strategy for finding what areas to request from the server."
 msgstr ""
-"A estratégia para encontrar que áreas devem ser solicitada ao servidor."
+"A estratégia para encontrar as áreas que devem ser solicitadas ao servidor."
 
 msgid "Download strategy"
 msgstr "Estratégia de download"
@@ -31347,21 +31490,6 @@ msgstr ""
 "opção for selecionada não há nenhuma indicação de que algo está sendo feito, "
 "e não há maneira de cancelar o download."
 
-msgid "Split area"
-msgstr "Dividir área"
-
-msgid "Splits an area by an untagged way."
-msgstr "Divide uma área por um caminho não marcado."
-
-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 ""
-"A área selecionada não pode ser dividida, porque é um membro de alguma "
-"relação.\n"
-"Remova a área a partir da relação antes de dividi-la."
-
 msgid "TangoGPS Files (*.log)"
 msgstr "Arquivos TangoGPS (*.log)"
 
@@ -37535,29 +37663,6 @@ msgstr "loop"
 msgid "mute"
 msgstr "mudo"
 
-msgid "Walking Papers Scanned Map"
-msgstr "Walking Papers Scanned Map"
-
-msgid ""
-"Display a map that was previously scanned and uploaded to walking-papers.org"
-msgstr ""
-"Exibe um mapa que foi anteriormente escaneado e enviado para o walking- "
-"papers.org"
-
-msgid ""
-"Enter a walking-papers.org URL or ID (the bit after the ?id= in the URL)"
-msgstr ""
-"Informe uma URL ou ID do walking-papers (a parte depois de ?id= na URL)"
-
-msgid "Could not read information from walking-papers.org the id \"{0}\""
-msgstr "Não é possível ler informações do walking-papers.org a id \"{0}\""
-
-msgid "Walking Papers: {0}"
-msgstr "Walking Papers: {0}"
-
-msgid "Walking Papers layer ({0}) in zoom {1}"
-msgstr "Camada Walking Papers ({0}) no zoom {1}"
-
 msgid "Way Download"
 msgstr "Baixar via"
 
@@ -37745,6 +37850,26 @@ msgstr ""
 "Adiciona uma etiqueta ''wikipedia'' correspondente a este artigo aos objetos "
 "selecionados"
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "The Ultimate WMS Super-speed Turbo Challenge II"
 
diff --git a/i18n/po/rm.po b/i18n/po/rm.po
index d50ff30..d4d62c9 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+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: 2017-09-03 04:57+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:56+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -387,6 +387,34 @@ msgstr ""
 msgid "Delete selected objects."
 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 "Delete Layer"
 msgstr ""
 
@@ -1293,29 +1321,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2724,34 +2738,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2783,6 +2769,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2902,6 +2911,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3009,6 +3030,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr ""
 
@@ -3052,6 +3076,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3688,6 +3715,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4728,9 +4809,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4776,6 +4854,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr ""
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4797,9 +4878,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -5000,6 +5078,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5252,6 +5338,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7034,6 +7124,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7256,9 +7349,6 @@ 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."
@@ -8186,15 +8276,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8223,33 +8313,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8373,6 +8436,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8506,6 +8596,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8515,6 +8611,9 @@ msgstr ""
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8659,6 +8758,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9698,9 +9800,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12837,15 +12936,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -12951,6 +13041,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13200,14 +13293,6 @@ 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 ""
 
@@ -13271,9 +13356,6 @@ msgid ""
 "{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 ""
 
@@ -14505,9 +14587,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14604,10 +14683,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15195,6 +15270,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17232,7 +17311,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23058,6 +23138,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23116,6 +23199,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23197,6 +23283,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23218,9 +23319,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23815,6 +23913,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24226,6 +24327,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24669,6 +24773,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25872,6 +25979,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26052,10 +26162,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26103,9 +26209,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26449,11 +26552,6 @@ msgid ""
 "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 ""
 
@@ -27064,13 +27162,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28367,6 +28465,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28382,77 +28618,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28503,27 +28744,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28664,160 +28884,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28867,17 +29024,6 @@ 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 ""
 
@@ -29314,18 +29460,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35071,26 +35205,6 @@ 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 ""
 
@@ -35259,6 +35373,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/ro.po b/i18n/po/ro.po
index b1e88bf..e64e4d2 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+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: 2017-09-03 04:57+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:56+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "X-Poedit-Country: ROMANIA\n"
 "Language: ro\n"
 "X-Poedit-Language: Romanian\n"
@@ -415,6 +415,34 @@ msgstr "Șterge"
 msgid "Delete selected objects."
 msgstr "Șterge obiectele selectate."
 
+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 "Delete Layer"
 msgstr ""
 
@@ -1343,29 +1371,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2776,34 +2790,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2835,6 +2821,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2954,6 +2963,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3061,6 +3082,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr "NECUNOSCUT"
 
@@ -3104,6 +3128,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3742,6 +3769,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr "Arată acest ajutor"
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4782,9 +4863,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4830,6 +4908,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr "Inițializare API OSM"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4851,9 +4932,6 @@ msgstr "utilizare"
 msgid "options"
 msgstr "opţiuni"
 
-msgid "Show this help"
-msgstr "Arată acest ajutor"
-
 msgid "Standard unix geometry argument"
 msgstr "Argument geometrie unix standard"
 
@@ -5054,6 +5132,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5306,6 +5392,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7090,6 +7180,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7312,9 +7405,6 @@ 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."
@@ -8242,15 +8332,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8279,33 +8369,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8429,6 +8492,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8562,6 +8652,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8571,6 +8667,9 @@ msgstr ""
 msgid "Object"
 msgstr "Obiect"
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8715,6 +8814,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9754,9 +9856,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12900,15 +12999,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr "Eroare la prelucrarea {0}: "
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -13014,6 +13104,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13263,14 +13356,6 @@ 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 ""
 
@@ -13334,9 +13419,6 @@ msgid ""
 "{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 ""
 
@@ -14568,9 +14650,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14667,10 +14746,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15258,6 +15333,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17295,7 +17374,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23121,6 +23201,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23179,6 +23262,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23260,6 +23346,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23281,9 +23382,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23878,6 +23976,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24289,6 +24390,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24732,6 +24836,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25935,6 +26042,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26115,10 +26225,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26166,9 +26272,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26512,11 +26615,6 @@ msgid ""
 "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 ""
 
@@ -27127,13 +27225,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28430,6 +28528,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28445,77 +28681,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28566,27 +28807,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28727,160 +28947,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28930,17 +29087,6 @@ 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 ""
 
@@ -29377,18 +29523,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35134,26 +35268,6 @@ msgstr ""
 msgid "mute"
 msgstr "dezactivați sunetul"
 
-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 ""
 
@@ -35322,6 +35436,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/ru.po b/i18n/po/ru.po
index 5311b02..d080de4 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: 2017-09-02 22:59+0200\n"
-"PO-Revision-Date: 2017-09-01 12:04+0000\n"
-"Last-Translator: Nkolay Parukhin <parukhin at gmail.com>\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
+"PO-Revision-Date: 2017-10-02 08:06+0000\n"
+"Last-Translator: Aleksey Kabanov <Unknown>\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: 2017-09-03 04:58+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-10-03 04:34+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: ru_RU\n"
 
 msgid "Use OAuth"
@@ -418,6 +418,50 @@ msgstr "Удалить"
 msgid "Delete selected objects."
 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 ""
+"Вы собираетесь удалить точки, находящиеся за пределами скачанной "
+"зоны.<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 "
+"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] ""
+"Вы собираетесь удалить {0} отношение: {1}<br/>Это действие требуется редко и "
+"не может быть легко отменено после того, как данные переданы на сервер. "
+"<br/> Вы действительно хотите продолжить?"
+msgstr[1] ""
+"Вы собираетесь удалить {0} отношения: {1}<br/>Это действие требуется редко и "
+"не может быть легко отменено после того, как данные переданы на сервер. "
+"<br/> Вы действительно хотите продолжить?"
+msgstr[2] ""
+"Вы собираетесь удалить {0} отношений: {1}<br/>Это действие требуется редко и "
+"не может быть легко отменено после того, как данные переданы на сервер. "
+"<br/> Вы действительно хотите продолжить?"
+
+msgid "Delete relation?"
+msgstr "Удалить отношение?"
+
 msgid "Delete Layer"
 msgstr "Удалить слой"
 
@@ -1430,35 +1474,14 @@ msgstr " [id: {0}]"
 msgid "Segment {0}: {1}"
 msgstr "Сегмент {0}: {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 ""
-"Участие в отношении, основанном на ролях, скопировано во все новые "
-"линии.<br>Проверьте его и, при необходимости, исправьте."
+msgid "Search preset"
+msgstr "Найти заготовку..."
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
-msgstr ""
-"Участие в отношении скопировано во все новые линии.<br>Проверьте его и, при "
-"необходимости, исправьте."
+msgid "Show preset search dialog"
+msgstr "Показать диалог поиска заготовок"
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] "Разбить линию {0} на {1} часть"
-msgstr[1] "Разбить линию {0} на {1} части"
-msgstr[2] "Разбить линию {0} на {1} частей"
+msgid "Search presets"
+msgstr "Поиск заготовок"
 
 msgid "Discourage upload"
 msgstr "Препятствовать передаче на сервер"
@@ -3009,50 +3032,6 @@ msgstr[0] "Удалить {0} отношение"
 msgstr[1] "Удалить {0} отношения"
 msgstr[2] "Удалить {0} отношений"
 
-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 ""
-"Вы собираетесь удалить точки, находящиеся за пределами скачанной "
-"зоны.<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 "
-"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] ""
-"Вы собираетесь удалить {0} отношение: {1}<br/>Это действие требуется редко и "
-"не может быть легко отменено после того, как данные переданы на сервер. "
-"<br/> Вы действительно хотите продолжить?"
-msgstr[1] ""
-"Вы собираетесь удалить {0} отношения: {1}<br/>Это действие требуется редко и "
-"не может быть легко отменено после того, как данные переданы на сервер. "
-"<br/> Вы действительно хотите продолжить?"
-msgstr[2] ""
-"Вы собираетесь удалить {0} отношений: {1}<br/>Это действие требуется редко и "
-"не может быть легко отменено после того, как данные переданы на сервер. "
-"<br/> Вы действительно хотите продолжить?"
-
-msgid "Delete relation?"
-msgstr "Удалить отношение?"
-
 msgid "Move {0} node"
 msgid_plural "Move {0} nodes"
 msgstr[0] "Переместить {0} точку"
@@ -3089,6 +3068,36 @@ msgstr[2] "Выделены {0} объектов"
 msgid "Sequence: {0}"
 msgstr "Последовательность: {0}"
 
+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 ""
+"Участие в отношении, основанном на ролях, скопировано во все новые "
+"линии.<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] "Разбить линию {0} на {1} часть"
+msgstr[1] "Разбить линию {0} на {1} части"
+msgstr[2] "Разбить линию {0} на {1} частей"
+
 msgid "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] "Трансформировать {0} точку"
@@ -3228,6 +3237,21 @@ msgstr "Неправильное значение широты ''{0}''"
 msgid "Illegal longitude value ''{0}''"
 msgstr "Неправильное значение долготы ''{0}''"
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr "Не удалось создать отсутсвовавший каталог настроек: {0}"
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+"<html>Не удалось создать отсутствовавший каталог настроек: {0}</html>"
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr "Не удалось создать отсутствовавший каталог данных пользователя: {0}"
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+"<html>Не удалось создать отсутствовавший каталог данных пользователя: "
+"{0}</html>"
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr "Не удалось создать отсутствующий каталог кэша: {0}"
 
@@ -3356,6 +3380,9 @@ msgstr "Английская система мер"
 msgid "Nautical Mile"
 msgstr "Морская миля"
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr "Ожидалось непустое значение для параметра ''{0}'', получено ''{1}''"
+
 msgid "UNKNOWN"
 msgstr "НЕИЗВЕСТНО"
 
@@ -3400,6 +3427,9 @@ msgctxt "compass"
 msgid "E"
 msgstr "В"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr "Невозможно разобрать значение координаты: ''{0}''"
+
 msgid "Date of imagery: {0}"
 msgstr "Дата снимка: {0}"
 
@@ -4083,6 +4113,65 @@ msgstr ""
 msgid "Custom Projection"
 msgstr "Пользовательская проекция"
 
+msgid "Error: {0}"
+msgstr "Ошибка: {0}"
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr "Описание"
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr "Преобразует координаты из одной системы координат в другую."
+
+msgid "Options"
+msgstr "Параметры"
+
+msgid "Show this help"
+msgstr "Показать эту справку"
+
+msgid "Switch input and output crs"
+msgstr "Поменять местами входной и выходной crs-файлы"
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr "Поменять порядок входных координат (восток/север,  долг/шир)"
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr "Поменять порядок выходных координат (восток/север,  долг/шир)"
+
+msgid "<crs>"
+msgstr "<crs>"
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+"Формат входной и выходной систем координат подобен формату программы PROJ.4."
+
+msgid "[file]"
+msgstr "[файл]"
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+"Читает входные данные из одного или нескольких файлов, указанных в качестве "
+"аргументов. Если файлы не заданы или указано имя файла \"-\", то данные "
+"читаются из стандартного потока ввода."
+
+msgid "Examples"
+msgstr "Примеры"
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+"Ожидались две координаты, разделённые пробелом, получены {0} в ''{1}''"
+
+msgid "Unable to parse number ''{0}''"
+msgstr "Невозможно разобрать число ''{0}''"
+
 msgid "GRS80"
 msgstr "GRS80"
 
@@ -5167,9 +5256,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr "Смещение"
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr "Ожидалось непустое значение для параметра ''{0}'', получено ''{1}''"
-
 msgid "Outdated Java version"
 msgstr "Устаревшая версия Java"
 
@@ -5221,6 +5307,9 @@ msgstr "Инициализация внутренних данных о гран
 msgid "Initializing OSM API"
 msgstr "Инициализация API OSM"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr "Слой {0} удалён, т.к. запрещён к использованию."
+
 msgid "Initializing internal traffic data"
 msgstr "Инициализация внутренних данных о дорожном движении"
 
@@ -5242,9 +5331,6 @@ msgstr "использование"
 msgid "options"
 msgstr "опции"
 
-msgid "Show this help"
-msgstr "Показать эту справку"
-
 msgid "Standard unix geometry argument"
 msgstr "Стандартный параметр геометрии unix"
 
@@ -5479,6 +5565,15 @@ msgstr ""
 "удалось</b> из-за следующих ошибок сети:<br>{1}Возможно, причина в "
 "отсутствии конфигурации прокси.<br>Хотите изменить настройки прокси сейчас?"
 
+msgid "You have {0} unread message."
+msgid_plural "You have {0} unread messages."
+msgstr[0] "У вас {0} непрочтённое сообщение."
+msgstr[1] "У вас {0} непрочтённых сообщения."
+msgstr[2] "У вас {0} непрочтённых сообщений."
+
+msgid "Click here to see your inbox."
+msgstr "Щёлкните здесь для просмотра входящих сообщений."
+
 msgctxt "menu"
 msgid "File"
 msgstr "Файл"
@@ -5746,6 +5841,12 @@ msgstr ""
 "Текущее значение не является правильным индексом квадрата для данного уровня "
 "масштабирования"
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+"Не удалось открыть отчёт об ошибке. Пожалуйста, сообщите о ней вручную на "
+"этом веб-сайте:"
+
 msgid "You have encountered a bug in JOSM"
 msgstr "Вы столкнулись с ошибкой в JOSM"
 
@@ -7702,6 +7803,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr "Обновить пакет правок с сервера OSM"
 
+msgid "View changeset"
+msgstr "Посмотреть пакет правок"
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7961,9 +8065,6 @@ msgid "Please enter or paste an URL to retrieve changesets from the OSM API."
 msgstr ""
 "Пожалуйста, введите или вставьте URL для получения пакетов правок из OSM API."
 
-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."
@@ -8980,12 +9081,6 @@ msgstr "Область для скачивания приемлема по пл
 msgid "Download from Overpass API"
 msgstr "Скачать с Overpass API"
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
-msgstr "Составить запрос Overpass с помощью мастера запросов Overpass Turbo"
-
-msgid "Query Wizard"
-msgstr "Мастер запросов"
-
 msgid ""
 "Place your Overpass query below or generate one using the Overpass Turbo "
 "Query Wizard"
@@ -8993,6 +9088,12 @@ msgstr ""
 "Введите запрос Overpass ниже или создайте его с помощью мастера запросов "
 "Overpass Turbo"
 
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgstr "Составить запрос Overpass с помощью мастера запросов Overpass Turbo"
+
+msgid "Query Wizard"
+msgstr "Мастер запросов"
+
 msgid "Your saved queries:"
 msgstr "Сохранённые запросы:"
 
@@ -9020,33 +9121,6 @@ msgstr "Удалить выделенный фрагмент"
 msgid "Edit selected snippet"
 msgstr "Изменить выделенный фрагмент"
 
-msgid "history"
-msgstr "история"
-
-msgid "Please select an item first"
-msgstr "Сначала выберите элемент"
-
-msgid "Edit item"
-msgstr "Редактировать элемент"
-
-msgid "Add snippet"
-msgstr "Добавить фрагмент"
-
-msgid "Query cannot be empty"
-msgstr "Запрос не может быть пустым"
-
-msgid "This name can be used for the item"
-msgstr "Данное название может быть использовано для элемента"
-
-msgid "Item with this name already exists"
-msgstr "Элемент с таким названием уже существует"
-
-msgid "The item cannot be created with provided name"
-msgstr "Элемент не может быть создан с указанным названием"
-
-msgid "The item cannot be created with an empty query"
-msgstr "Элемент не может быть создан с пустым запросом"
-
 msgid "Overpass Turbo Query Wizard"
 msgstr "Мастер запросов Overpass Turbo"
 
@@ -9185,6 +9259,33 @@ msgstr "Карта"
 msgid "Tile Numbers"
 msgstr "Номера квадратов"
 
+msgid "history"
+msgstr "история"
+
+msgid "Please select an item first"
+msgstr "Сначала выберите элемент"
+
+msgid "Edit item"
+msgstr "Редактировать элемент"
+
+msgid "Add snippet"
+msgstr "Добавить фрагмент"
+
+msgid "Query cannot be empty"
+msgstr "Запрос не может быть пустым"
+
+msgid "This name can be used for the item"
+msgstr "Данное название может быть использовано для элемента"
+
+msgid "Item with this name already exists"
+msgstr "Элемент с таким названием уже существует"
+
+msgid "The item cannot be created with provided name"
+msgstr "Элемент не может быть создан с указанным названием"
+
+msgid "The item cannot be created with an empty query"
+msgstr "Элемент не может быть создан с пустым запросом"
+
 msgid "JOSM Help Browser"
 msgstr "Браузер справки JOSM"
 
@@ -9341,6 +9442,12 @@ msgstr "Приблизиться к этой точке в текущем сло
 msgid "Open a history browser with the history of this node"
 msgstr "Открыть историю этой точки с помощью браузера"
 
+msgid "View changeset in web browser"
+msgstr "Посмотреть пакет правок в браузере"
+
+msgid "Open {0}"
+msgstr "Открыть {0}"
+
 msgid "Way {0}"
 msgstr "Линия {0}"
 
@@ -9350,6 +9457,9 @@ msgstr "Отношение {0}"
 msgid "Object"
 msgstr "Объект"
 
+msgid "Open Changeset Manager"
+msgstr "Открыть менеджер пакетов правок"
+
 msgid "Changeset comment"
 msgstr "Комментарий к пакету правок"
 
@@ -9525,6 +9635,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr "Включите \"Сохранить\" для сохранения слоя в указанный слева файл."
 
+msgid "I would like someone to review my edits."
+msgstr "Я хочу, чтобы кто-нибудь проверил мои правки."
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "Прокомментируйте данные, передаваемые на сервер:"
 
@@ -10743,9 +10856,6 @@ msgstr[0] "{0} трек"
 msgstr[1] "{0} трека"
 msgstr[2] "{0} треков"
 
-msgid "Description"
-msgstr "Описание"
-
 msgid "Timespan"
 msgstr "Период"
 
@@ -14224,15 +14334,6 @@ msgstr "Заготовка вложенного элемента без роди
 msgid "Error parsing {0}: "
 msgstr "Ошибка при разборе {0}: "
 
-msgid "Search preset"
-msgstr "Найти заготовку..."
-
-msgid "Show preset search dialog"
-msgstr "Показать диалог поиска заготовок"
-
-msgid "Search presets"
-msgstr "Поиск заготовок"
-
 msgid "Presets"
 msgstr "Заготовки"
 
@@ -14351,6 +14452,9 @@ msgstr "Все файлы (*.*)"
 msgid "Received error page:"
 msgstr "Полученная страница сообщения об ошибке:"
 
+msgid "{0}... [please type its number]"
+msgstr "{0}... [пожалуйста, введите его номер]"
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -14653,15 +14757,6 @@ msgstr "Неизвестный режим {0}."
 msgid "get number of unread messages"
 msgstr "получить число непрочитанных сообщений"
 
-msgid "You have {0} unread message."
-msgid_plural "You have {0} unread messages."
-msgstr[0] "У вас {0} непрочтённое сообщение."
-msgstr[1] "У вас {0} непрочтённых сообщения."
-msgstr[2] "У вас {0} непрочтённых сообщений."
-
-msgid "Click here to see your inbox."
-msgstr "Щёлкните здесь для просмотра входящих сообщений."
-
 msgid "Message notifier"
 msgstr "Message notifier"
 
@@ -14730,9 +14825,6 @@ msgstr ""
 "Поддерживается протокол версии 0.6, в то время как сервер сказал, что он "
 "поддерживает {0} до {1}."
 
-msgid "Removed layer {0} because it is not allowed by the configured API."
-msgstr "Слой {0} удалён, т.к. запрещён к использованию."
-
 msgid "Unexpected format of ID replied by the server. Got ''{0}''."
 msgstr "сервер вернул неожиданный формат id, текущее значение \"{0}\""
 
@@ -16246,9 +16338,6 @@ msgstr ""
 "http://forum.openstreetmap.org/viewtopic.php?id=25677).\n"
 "Сейчас JOSM выделено {1,number,#}МБ"
 
-msgid "{0}... [please type its number]"
-msgstr "{0}... [пожалуйста, введите его номер]"
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -16363,12 +16452,6 @@ msgid "Failed to load XML schema."
 msgstr "Невозможно загрузить XML схему."
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-"Не удалось открыть отчёт об ошибке. Пожалуйста, сообщите о ней вручную на "
-"этом веб-сайте:"
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -16970,6 +17053,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr "нет"
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr "отдельный"
+
 msgid "Service type"
 msgstr "Тип служебного пути"
 
@@ -19035,10 +19122,11 @@ msgid "Bay"
 msgstr "Бухта"
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
-"Часть крупного водоёма, глубоко вдающаяся в сушу, но имеющая свободный "
-"водообмен с основной частью водоёма."
+"Часть крупного водоёма, вдающаяся в сушу и имеющая свободный водообмен с "
+"основной его частью."
 
 msgid "Shipping"
 msgstr "Судоходство"
@@ -24897,6 +24985,9 @@ msgstr "Waymarked Trails: верховая езда"
 msgid "Waymarked Trails: Winter Sports"
 msgstr "Waymarked Trails: зимние виды спорта"
 
+msgid "Wikimedia Map"
+msgstr "Карта Викимедиа"
+
 msgid "OSM Inspector: Geometry"
 msgstr "OSM Inspector: геометрия"
 
@@ -24962,6 +25053,9 @@ msgstr "Sentinel-2 - снимки Земли Эндерби и Берега Ке
 msgid "IGN topographical map (TMS)"
 msgstr "IGN - топографическая карта (TMS)"
 
+msgid "IGN topographical map (WMTS)"
+msgstr "IGN - топографическая карта (WMTS)"
+
 msgid "IGN topographical map (WMS)"
 msgstr "IGN - топографическая карта (WMS)"
 
@@ -25043,6 +25137,21 @@ msgstr "IGN - ортоснимки Параны B (WMTS)"
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr "IGN - ортоснимки Росарио (WMTS)"
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr "IGN - ортоснимки Сальты (WMTS)"
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr "IGN - ортоснимки Сальты 1 (WMTS)"
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr "IGN - ортоснимки Сальты 2 (WMTS)"
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr "IGN - ортоснимки Сальты 3 (WMTS)"
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr "IGN - ортоснимки Сальты 4 (WMTS)"
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr "IGN - ортоснимки Сальто-Гранде (WMTS)"
 
@@ -25064,9 +25173,6 @@ msgstr "IGN - ортоснимки Санта-Крус VI (WMTS)"
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr "IGN - ортоснимки Санта-Фе и Параны (WMTS)"
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr "IGN - ортоснимки Трелью (WMTS)"
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr "IGN - ортоснимки Тукумана (WMTS)"
 
@@ -25592,7 +25698,7 @@ msgid "French land registry"
 msgstr "Реестр земель Франции"
 
 msgid "CRAIG - Auvergne 2016 - 25 cm"
-msgstr ""
+msgstr "CRAIG - Овернь 2016 - 25 см"
 
 msgid "CRAIG - Auvergne 2013 - 25 cm"
 msgstr "CRAIG - Овернь 2013 - 25 см"
@@ -25680,6 +25786,9 @@ msgstr "Берлин - аэрофотосъёмка 2015"
 msgid "Berlin aerial photograph 2016"
 msgstr "Берлин - аэрофотосъёмка 2016"
 
+msgid "Berlin aerial photograph 2017"
+msgstr "Берлин - аэрофотосъёмка 2017"
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr "Deutsche Bahn - ж/д линии VzG, ноябрь 2013"
 
@@ -26119,6 +26228,9 @@ msgstr "Luxembourg Inspire: водная карта"
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Дельта Нигера, окт. 2012 Landsat"
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr "INEGI - цифровая карта Мексики (WMS)"
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr "Аэрофотосъёмка PDOK с Beeldmateriaal.nl 25 см"
 
@@ -26589,6 +26701,9 @@ msgstr "NLSC Open Data WMTS"
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr "Снимки с imagico.de: гора Килиманджаро, 2016"
 
+msgid "Aşgabat (high resolution)"
+msgstr "Ашхабад (высокое разрешение)"
+
 msgid "MSR Maps Topo"
 msgstr "MSR Maps Topo"
 
@@ -28017,6 +28132,9 @@ msgstr "отношение без типа"
 msgid "{0} relation without {0} tag"
 msgstr "{0} отношение без тега {0}"
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr "линия с {0} - часть отношения веломаршрута"
+
 msgid "religion without denomination"
 msgstr "тег religion без тега denomination"
 
@@ -28233,11 +28351,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -28297,9 +28410,6 @@ msgstr ""
 "Пообщаться с пользователями, редактирующими карту поблизости, получать "
 "уведомления, когда кто-нибудь окажется рядом."
 
-msgid "Allows you to view a GeoJSON file as a layer."
-msgstr "Позволяет загрузить файл GeoJSON как слой."
-
 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."
@@ -28747,13 +28857,6 @@ 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 "Быстрое скачивание вдоль большого набора соединённых линий"
 
@@ -29402,15 +29505,15 @@ msgstr "Слой объектов Mapillary"
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr "Отображает слой с объектами карты, обнаруженными Mapillary"
 
+msgid "Start Mapillary layer"
+msgstr "Создать слой Mapillary"
+
 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 в текущей области"
 
@@ -30869,6 +30972,160 @@ msgstr[2] "{0} зданий с конфликтами адресов"
 msgid "No address nodes inside buildings found"
 msgstr "Адресные точки внутри зданий не найдены"
 
+msgid "Auto sourcing"
+msgstr "Авто источники"
+
+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 "Изменить текущую проекцию"
+
+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 "Скачать изображение с WMS французского кадастра"
+
+msgid "Cadastre: {0}"
+msgstr "Кадастр: {0}"
+
+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 ""
+"Это изображение содержит данные геоссылок.\n"
+"Вы хотите воспользоваться ими?"
+
+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 "{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 "Положение {0} уже на экране. Кэш не загружен."
+
+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 ""
+"<html> Введите название села, деревни или города. <br> Используйте синтаксис "
+"и пунктуацию, опубликованную на www.cadastre.gouv.fr </html>"
+
+msgid "Departement"
+msgstr "Департамент"
+
+msgid "<html>Departement number (optional)</html>"
+msgstr "<html>Номер департамента (не обязательно)</html>"
+
+msgid "Add new layer"
+msgstr "Добавить новый слой"
+
+msgid "Open Cadastre Preferences"
+msgstr "Настройки Open Cadastre"
+
+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 "Файлы PNG (*.png)"
+
+msgid "GeoTiff files (*.tif)"
+msgstr "Файлы GeoTiff (*.tif)"
+
+msgid "Export image (only raster images)"
+msgstr "Экспортировать изображение (только растровые изображения)"
+
+msgid ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+"Присутствует больше, чем один слой WMS.\n"
+"Выберите сначала один из них, а затем повторите."
+
 msgid "on polygon"
 msgstr "на полигоне"
 
@@ -30884,95 +31141,85 @@ msgstr "Следующий №"
 msgid "Enter addresses"
 msgstr "Ввести адреса"
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
+msgstr "Подстроить WMS"
+
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
-"Положение \"{0}\" найдено в кэше.\n"
-"Сначала загрузить кэш?\n"
-"(Нет = новый кэш)"
+"Настроить позицию WMS слоя (сохраняется только для растровых изображений)"
 
-msgid "Select Feuille"
-msgstr "Выбрать Feuille (слой??)"
+msgid "Add \"source=...\" to elements?"
+msgstr "Добавить \"source=...\" к элементам?"
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Download from Cadastre"
 msgstr ""
-"Ошибка загрузки файла.\n"
-"Возможно в кэше старая версия файла."
 
-msgid "Lambert Zone {0} cache file (.{0})"
-msgstr "Файл кэша (.{0}) зоны Lambert {0}"
+msgid "Objects:"
+msgstr "Объекты:"
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
-msgstr "Файл кэша  (.CC{0}) зоны Lambert CC9 {0}"
+msgid "Select to download buildings in the selected download area."
+msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
-msgstr "Файл кэша Guadeloupe Fort-Marigot (.UTM1)"
+msgid "address"
+msgstr "адрес"
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
-msgstr "Файл кэша Guadeloupe Ste-Anne (.UTM2)"
+msgid "Select to download addresses in the selected download area."
+msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
-msgstr "Файл кэша Martinique Fort Desaix (.UTM3)"
+msgid "symbol"
+msgstr "символ"
 
-msgid "Reunion RGR92 cache file (.UTM4)"
-msgstr "Файл кэша Reunion RGR92 (.UTM4)"
+msgid "Select to download symbols in the selected download area."
+msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
-msgstr "CadastreGrabber: Неправильная ссылка"
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "parcel"
+msgstr "участок"
+
+msgid "Select to download cadastral parcels in the selected download area."
 msgstr ""
-"Не удается открыть новую сессию клиента.\n"
-"Сервер на обслуживании или временно перегружен."
+
+msgid "parcel number"
+msgstr "номер участка"
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
-"Город {0} не найден или недоступен\n"
-"или действие отменено"
 
-msgid "Choose from..."
-msgstr "Выбрать из..."
+msgid "section"
+msgstr "раздел"
 
-msgid "Select commune"
-msgstr "Выберите общее"
+msgid "Select to download cadastral sections in the selected download area."
+msgstr ""
 
-msgid "Auto sourcing"
-msgstr "Авто источники"
+msgid "locality"
+msgstr "район"
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
 msgstr ""
-"Пожалуйста, включите не менее двух WMS слоев в настройках модуля cadastre-"
-"fr.\n"
-"Слои ''Building''и ''Parcel''добавляются по умолчанию."
+
+msgid "commune"
+msgstr "коммуна"
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
-"Предупреждение: Не удалось вывести наверх дополнительную панель. Текст "
-"ошибки: {0}"
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
-"Чтобы включить модуль кадастра WMS,\n"
-"смените проекцию на одну из кадастровых\n"
-"проекций и попытайтесь ещё раз"
+"<html>Ничего не выбрано.<br>Выберите что-нибудь для скачивания.</html>"
 
-msgid "Change the current projection"
-msgstr "Изменить текущую проекцию"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
+msgstr ""
 
 msgid "Replace original background by JOSM background color."
 msgstr "Поменять оригинальный фон на цвет фона JOSM."
@@ -31024,27 +31271,6 @@ msgstr "среднее"
 msgid "low"
 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 "Включить автоматическое кэширование."
 
@@ -31203,8 +31429,65 @@ msgstr "Позволить при этом использовать тег \"add
 msgid "Unexpected file extension. {0}"
 msgstr "Непредвиденное расширение файла. {0}"
 
-msgid "Add \"source=...\" to elements?"
-msgstr "Добавить \"source=...\" к элементам?"
+msgid ""
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
+msgstr ""
+"Положение \"{0}\" найдено в кэше.\n"
+"Сначала загрузить кэш?\n"
+"(Нет = новый кэш)"
+
+msgid "Select Feuille"
+msgstr "Выбрать Feuille (слой??)"
+
+msgid ""
+"Error loading file.\n"
+"Probably an old version of the cache file."
+msgstr ""
+"Ошибка загрузки файла.\n"
+"Возможно в кэше старая версия файла."
+
+msgid "Lambert Zone {0} cache file (.{0})"
+msgstr "Файл кэша (.{0}) зоны Lambert {0}"
+
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgstr "Файл кэша  (.CC{0}) зоны Lambert CC9 {0}"
+
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgstr "Файл кэша Guadeloupe Fort-Marigot (.UTM1)"
+
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgstr "Файл кэша Guadeloupe Ste-Anne (.UTM2)"
+
+msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgstr "Файл кэша Martinique Fort Desaix (.UTM3)"
+
+msgid "Reunion RGR92 cache file (.UTM4)"
+msgstr "Файл кэша Reunion RGR92 (.UTM4)"
+
+msgid "CadastreGrabber: Illegal url."
+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 "Выбрать из..."
+
+msgid "Select commune"
+msgstr "Выберите общее"
 
 msgid "Downloading {0}"
 msgstr "Скачивается {0}"
@@ -31254,123 +31537,6 @@ msgstr ""
 "Эта коммуна не векторизована.\n"
 "Пожалуйста, используйте другое меню для привязки \"Плана-схемы\""
 
-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 "Скачать изображение с WMS французского кадастра"
-
-msgid "Cadastre: {0}"
-msgstr "Кадастр: {0}"
-
-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 ""
-"Это изображение содержит данные геоссылок.\n"
-"Вы хотите воспользоваться ими?"
-
-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 "{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 "Положение {0} уже на экране. Кэш не загружен."
-
-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 ""
-"<html> Введите название села, деревни или города. <br> Используйте синтаксис "
-"и пунктуацию, опубликованную на www.cadastre.gouv.fr </html>"
-
-msgid "Departement"
-msgstr "Департамент"
-
-msgid "<html>Departement number (optional)</html>"
-msgstr "<html>Номер департамента (не обязательно)</html>"
-
-msgid "Add new layer"
-msgstr "Добавить новый слой"
-
-msgid "Open Cadastre Preferences"
-msgstr "Настройки Open Cadastre"
-
-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 "Файлы PNG (*.png)"
-
-msgid "GeoTiff files (*.tif)"
-msgstr "Файлы GeoTiff (*.tif)"
-
-msgid "Export image (only raster images)"
-msgstr "Экспортировать изображение (только растровые изображения)"
-
 msgid ""
 "Click first corner for image cropping\n"
 "(two points required)"
@@ -31426,20 +31592,6 @@ msgstr "Отметьте второй угол для обрезки изобр
 msgid "Click second Lambert crosspiece for georeferencing"
 msgstr "Отметьте вторую поперечину Lambert для геопривязки"
 
-msgid "Adjust WMS"
-msgstr "Подстроить WMS"
-
-msgid "Adjust the position of the WMS layer (saved for raster images only)"
-msgstr ""
-"Настроить позицию WMS слоя (сохраняется только для растровых изображений)"
-
-msgid ""
-"More than one WMS layer present\n"
-"Select one of them first, then retry"
-msgstr ""
-"Присутствует больше, чем один слой WMS.\n"
-"Выберите сначала один из них, а затем повторите."
-
 msgid "Reset offset"
 msgstr "Сброс смещения"
 
@@ -31906,21 +32058,6 @@ 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 ""
-"Выделенный полигон не может быть разрезан, потому что он является участником "
-"отношений.\n"
-"Удалите полигон из отношения, прежде чем разрезать его."
-
 msgid "TangoGPS Files (*.log)"
 msgstr "TangoGPS Файлы (*.log)"
 
@@ -38125,29 +38262,6 @@ msgstr "циклически"
 msgid "mute"
 msgstr "отключить звук"
 
-msgid "Walking Papers Scanned Map"
-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 "Введите 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 "Walking Papers: {0}"
-
-msgid "Walking Papers layer ({0}) in zoom {1}"
-msgstr "Слой ({0}) Walking Papers в масштабе {1}"
-
 msgid "Way Download"
 msgstr "Скачать линию"
 
@@ -38338,6 +38452,28 @@ msgid ""
 msgstr ""
 "Добавляет тег «wikipedia», соответствующий этой статье, выбранным объектам"
 
+msgid "Download from Wikosm API"
+msgstr "Скачать из Wikosm API"
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+"Поиск образовательных учреждений в пределах от 2 до 3 км от центра "
+"выделенной области"
+
+msgid "Show/hide Wikosm snippet list"
+msgstr "Показать/скрыть список фрагментов запросов Wikosm"
+
+msgid "help"
+msgstr "Справка"
+
+msgid "Server: "
+msgstr "Сервер: "
+
+msgid "Wikidata+OSM server"
+msgstr "Сервер Wikidata+OSM"
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "Окончательный WMS Супер-скорость Турбо вызов II"
 
diff --git a/i18n/po/sk.po b/i18n/po/sk.po
index 9c34bda..7845c97 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: 2017-09-02 22:59+0200\n"
-"PO-Revision-Date: 2017-08-26 10:42+0000\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
+"PO-Revision-Date: 2017-09-27 15:47+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: 2017-09-03 04:59+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:58+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: sk\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -411,6 +411,49 @@ msgstr "Odstrániť"
 msgid "Delete selected objects."
 msgstr "Zmazať zvolené objekty."
 
+msgid "Delete confirmation"
+msgstr "Potvrdiť odstránenie"
+
+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 ""
+"Chystáte sa zmazať body mimo Vami stiahnutú oblasť.<br>Toto môže spôsobiť "
+"problém iným objektom (nevidíte ich), ktoré môžu používať tieto "
+"body.<br>Naozaj ich chcete zmazať?"
+
+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 ""
+"Chystáte sa zmazať neúplné objekty.<br>To spôsobí problémy, pretože ste "
+"nevideli reálny objekt. <br>Naozaj ich chcete zmazať?"
+
+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] ""
+"Chystáte sa zmazať {0} relácií: {1}<br/>Tento krok je málokedy potrebný a po "
+"nahratí na server sa nedá tak ľahko navrátiť.<br/>Naozaj chcete pokračovať "
+"so zmazaním?"
+msgstr[1] ""
+"Chystáte sa zmazať {0} reláciu: {1}<br/>Tento krok je málokedy potrebný a po "
+"nahratí na server sa nedá tak ľahko navrátiť.<br/>Naozaj chcete pokračovať "
+"so zmazaním?"
+msgstr[2] ""
+"Chystáte sa zmazať {0} relácie: {1}<br/>Tento krok je málokedy potrebný a po "
+"nahratí na server sa nedá tak ľahko navrátiť.<br/>Naozaj chcete pokračovať "
+"so zmazaním?"
+
+msgid "Delete relation?"
+msgstr "Zmazať reláciu?"
+
 msgid "Delete Layer"
 msgstr "Odstrániť vrstvu"
 
@@ -1403,35 +1446,14 @@ msgstr " [id: {0}]"
 msgid "Segment {0}: {1}"
 msgstr "Úsek {0}: {1}"
 
-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."
-
-msgid ""
-"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
-"middle of the way.)"
-msgstr ""
-"Cesta nemôže byť rozdelená vo zvolených bodoch. (Tip: Zvoľte body uprostred "
-"cesty.)"
-
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
-msgstr ""
-"Členstvo v relácii, založené na roli, bolo skopírované do všetkých nových "
-"ciest.<br>Mali by ste to skontrolovať a v prípade potreby opraviť."
+msgid "Search preset"
+msgstr "Hľadať predvoľby"
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
-msgstr ""
-"Členstvo v relácii bolo skopírované do všetkých nových ciest.<br>Mali by ste "
-"to skontrolovať a v prípade potreby opraviť."
+msgid "Show preset search dialog"
+msgstr "Zobraziť vyhľadávací dialóg predvolieb"
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] "Rozdeliť cestu {0} na {1} častí"
-msgstr[1] "Rozdeliť cestu {0} na {1} časť"
-msgstr[2] "Rozdeliť cestu {0} na {1} časti"
+msgid "Search presets"
+msgstr "Hľadať predvoľby"
 
 msgid "Discourage upload"
 msgstr "Varovať pred odoslaním"
@@ -2964,49 +2986,6 @@ msgstr[0] "Zmazať {0} relácií"
 msgstr[1] "Zmazať {0} reláciu"
 msgstr[2] "Zmazať {0} relácie"
 
-msgid "Delete confirmation"
-msgstr "Potvrdiť odstránenie"
-
-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 ""
-"Chystáte sa zmazať body mimo Vami stiahnutú oblasť.<br>Toto môže spôsobiť "
-"problém iným objektom (nevidíte ich), ktoré môžu používať tieto "
-"body.<br>Naozaj ich chcete zmazať?"
-
-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 ""
-"Chystáte sa zmazať neúplné objekty.<br>To spôsobí problémy, pretože ste "
-"nevideli reálny objekt. <br>Naozaj ich chcete zmazať?"
-
-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] ""
-"Chystáte sa zmazať {0} relácií: {1}<br/>Tento krok je málokedy potrebný a po "
-"nahratí na server sa nedá tak ľahko navrátiť.<br/>Naozaj chcete pokračovať "
-"so zmazaním?"
-msgstr[1] ""
-"Chystáte sa zmazať {0} reláciu: {1}<br/>Tento krok je málokedy potrebný a po "
-"nahratí na server sa nedá tak ľahko navrátiť.<br/>Naozaj chcete pokračovať "
-"so zmazaním?"
-msgstr[2] ""
-"Chystáte sa zmazať {0} relácie: {1}<br/>Tento krok je málokedy potrebný a po "
-"nahratí na server sa nedá tak ľahko navrátiť.<br/>Naozaj chcete pokračovať "
-"so zmazaním?"
-
-msgid "Delete relation?"
-msgstr "Zmazať reláciu?"
-
 msgid "Move {0} node"
 msgid_plural "Move {0} nodes"
 msgstr[0] "Posun {0} bodov"
@@ -3043,6 +3022,36 @@ msgstr[2] "Vybraných {0} objektov"
 msgid "Sequence: {0}"
 msgstr "Poradie: {0}"
 
+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."
+
+msgid ""
+"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
+"middle of the way.)"
+msgstr ""
+"Cesta nemôže byť rozdelená vo zvolených bodoch. (Tip: Zvoľte body uprostred "
+"cesty.)"
+
+msgid ""
+"A role based relation membership was copied to all new ways.<br>You should "
+"verify this and correct it when necessary."
+msgstr ""
+"Členstvo v relácii, založené na roli, bolo skopírované do všetkých nových "
+"ciest.<br>Mali by ste to skontrolovať a v prípade potreby opraviť."
+
+msgid ""
+"A relation membership was copied to all new ways.<br>You should verify this "
+"and correct it when necessary."
+msgstr ""
+"Členstvo v relácii bolo skopírované do všetkých nových ciest.<br>Mali by ste "
+"to skontrolovať a v prípade potreby opraviť."
+
+msgid "Split way {0} into {1} part"
+msgid_plural "Split way {0} into {1} parts"
+msgstr[0] "Rozdeliť cestu {0} na {1} častí"
+msgstr[1] "Rozdeliť cestu {0} na {1} časť"
+msgstr[2] "Rozdeliť cestu {0} na {1} časti"
+
 msgid "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] "Transformácia {0} bodov"
@@ -3181,6 +3190,22 @@ msgstr "Chybná hodnota zemepisnej šírky ''{0}''"
 msgid "Illegal longitude value ''{0}''"
 msgstr "Chybná hodnota zemepisnej dĺžky ''{0}''"
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr "Nepodarilo sa vytvoriť chýbajúci priečinok pre nastavenia: {0}"
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+"<html>Nepodarilo sa vytvoriť chýbajúci priečinok pre nastavenia: {0}</html>"
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+"Nepodarilo sa vytvoriť chýbajúci priečinok pre používateľské dáta: {0}"
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+"<html>Nepodarilo sa vytvoriť chýbajúci priečinok pre používateľské dáta: "
+"{0}</html>"
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr "Nepodarilo sa vytvoriť chýbajúci cache adresár: {0}"
 
@@ -3312,6 +3337,11 @@ msgstr "Britský"
 msgid "Nautical Mile"
 msgstr "Námorné míle"
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+"Očakávaná neprázdna hodnota pre parameter \"{0}\", obdržaná hodnota je "
+"\"{1}\""
+
 msgid "UNKNOWN"
 msgstr "NEZNÁMA"
 
@@ -3355,6 +3385,9 @@ msgctxt "compass"
 msgid "E"
 msgstr "V"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr "Nepodarilo sa prečítať hodnotu súradníc: \"{0}\""
+
 msgid "Date of imagery: {0}"
 msgstr "Dátum snímky: {0}"
 
@@ -3440,7 +3473,7 @@ msgstr "Poznámka"
 
 msgid "Failed to retrieve OAuth Access Token from credential manager"
 msgstr ""
-"Nepodarilo sa získať OAuth autorizačný prístup zo správcu prihlasovacích "
+"Nepodarilo sa získať prístupový reťazec OAuth zo správcu prihlasovacích "
 "údajov"
 
 msgid "Current credential manager is of type ''{0}''"
@@ -3448,7 +3481,7 @@ msgstr "Aktuálny správca prihlasovacích údajov je typu ''{0}''"
 
 msgid "Failed to store OAuth Access Token to credentials manager"
 msgstr ""
-"Nepodarilo sa uložiť OAuth autorizačný prístup do správcu prihlasovacích "
+"Nepodarilo sa uložiť prístupový reťazec OAuth do správcu prihlasovacích "
 "údajov"
 
 msgid "ID > 0 expected. Got {0}."
@@ -3739,7 +3772,7 @@ msgid "Failed to parse MapCSS selector"
 msgstr "Nepodarilo sa načítať identifikátor MapCSS."
 
 msgid "Unexpected token: {0}"
-msgstr "Neočakávaný symbol: {0}"
+msgstr "Neočakávaný reťazec: {0}"
 
 msgid "Missing parameter for OR"
 msgstr "Chýbajúci parameter pre OR"
@@ -3751,7 +3784,7 @@ msgid "Missing operator for NOT"
 msgstr "Chýbajúci operátor pre NOT"
 
 msgid "Unexpected token. Expected {0}, found {1}"
-msgstr "Neočakávaný symbol. Očakávaný {0}, nájdený {1}"
+msgstr "Neočakávaný reťazec. Očakávaný {0}, nájdený {1}"
 
 msgctxt "search"
 msgid "CS"
@@ -4051,6 +4084,66 @@ msgstr ""
 msgid "Custom Projection"
 msgstr "Vlastná projekcia"
 
+msgid "Error: {0}"
+msgstr "Chyba: {0}"
+
+msgid "JOSM projection command line interface"
+msgstr "Rozhranie príkazového riadka pre projekcie JOSM"
+
+msgid "Description"
+msgstr "Popis"
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr "Konvertuje súradnice z jedného referenčného systému do iného."
+
+msgid "Options"
+msgstr "Možnosti"
+
+msgid "Show this help"
+msgstr "Zobraziť tohto pomocníka"
+
+msgid "Switch input and output crs"
+msgstr "Vymeniť vstupné a výstupné súr."
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr "Vymeniť poradie vstupných súradníc (východ/sever, dĺžka/šírka)"
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr "Vymeniť poradie výstupných súradníc (východ/sever, dĺžka/šírka)"
+
+msgid "<crs>"
+msgstr "<súr.>"
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+"Formát pre referenčný systém vstupných a výstupných súradníc je podobný ako "
+"v programe PROJ.4."
+
+msgid "[file]"
+msgstr "[súbor]"
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+"Načíta vstupné údaje z jedného alebo viacerých súborov zadaných ako "
+"parametre. Ak nie sú zadané žiadne súbory, alebo je názov súboru \"-\", "
+"údaje sa prečítajú zo štandardného vstupu."
+
+msgid "Examples"
+msgstr "Príklady"
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+"Boli očakávané 2 súradnice oddelené medzerou, avšak našli sa {0} v \"{1}\""
+
+msgid "Unable to parse number ''{0}''"
+msgstr "Nepodarilo sa prečítať číslo \"{0}\""
+
 msgid "GRS80"
 msgstr "GRS80"
 
@@ -4572,7 +4665,7 @@ msgid "Unexpected token in weekday range:"
 msgstr "Neočakávaný reťazec v rozsahu dní v týždni:"
 
 msgid "Unexpected token in month range:"
-msgstr "Neočakávaný reťazec v rozsah mesiacov:"
+msgstr "Neočakávaný reťazec v rozsahu mesiacov:"
 
 msgid "Unexpected token in year range:"
 msgstr "Neočakávaný reťazec v rozsahu rokov:"
@@ -5134,11 +5227,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr "Posun"
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-"Očakávaná neprázdna hodnota pre parameter \"{0}\", obdržaná hodnota je "
-"\"{1}\""
-
 msgid "Outdated Java version"
 msgstr "Zastaralá verzia Java"
 
@@ -5189,6 +5277,10 @@ msgstr "Inicializujem interné údaje hraníc"
 msgid "Initializing OSM API"
 msgstr "Inicializujem OSM API"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+"Odstránená vrstva {0}, pretože to nie je povolený nakonfigurovaný API."
+
 msgid "Initializing internal traffic data"
 msgstr "Inicializujem interné údaje hraníc"
 
@@ -5210,9 +5302,6 @@ msgstr "použitie"
 msgid "options"
 msgstr "Možnosti"
 
-msgid "Show this help"
-msgstr "Zobraziť tohto pomocníka"
-
 msgid "Standard unix geometry argument"
 msgstr "Štandardný UNIXový parameter pre geometriou"
 
@@ -5439,6 +5528,15 @@ msgstr ""
 "dôsledkom chýbajúcich nastavení proxy servera.<br>Chcete zmeniť nastavenia "
 "proxy teraz?"
 
+msgid "You have {0} unread message."
+msgid_plural "You have {0} unread messages."
+msgstr[0] "Máte {0} neprečítaných správ."
+msgstr[1] "Máte {0} neprečítanú správu."
+msgstr[2] "Máte {0} neprečítané správy."
+
+msgid "Click here to see your inbox."
+msgstr "Kliknite sem pre zobrazenie prijatých správ."
+
 msgctxt "menu"
 msgid "File"
 msgstr "Súbor"
@@ -5702,6 +5800,11 @@ msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 "Aktuálna hodnota nie je platným indexom dlaždice pre danú úroveň zväčšenia"
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+"Otvorenie hlásenia o chybe sa nepodarilo. Prosím nahláste ručne na stránke:"
+
 msgid "You have encountered a bug in JOSM"
 msgstr "Narazili ste na chybu v programe JOSM"
 
@@ -7656,6 +7759,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr "Aktualizovať zmenový súbor z OSM servera"
 
+msgid "View changeset"
+msgstr "Zobraziť sadu zmien"
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7918,9 +8024,6 @@ msgid "Please enter or paste an URL to retrieve changesets from the OSM API."
 msgstr ""
 "Prosím vložte, alebo skopírujte URL na získanie zmenových súborov z OSM API."
 
-msgid "Examples"
-msgstr "Príklady"
-
 msgid ""
 "Note that changeset queries are currently always submitted to ''{0}'', "
 "regardless of the host, port and path of the URL entered below."
@@ -8925,13 +9028,6 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr "Stiahnuť z Overpass API"
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
-msgstr ""
-"Vytvoriť vyhľadávací reťazec pre Overpass pomocou pomocníka Overpass Turbo"
-
-msgid "Query Wizard"
-msgstr "Pomocník pre vyhľadávanie"
-
 msgid ""
 "Place your Overpass query below or generate one using the Overpass Turbo "
 "Query Wizard"
@@ -8939,6 +9035,13 @@ msgstr ""
 "Zadajte dolu vyhľadávací reťazec alebo ho vygenerujte pomocou pomocníka "
 "Overpass Turbo"
 
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgstr ""
+"Vytvoriť vyhľadávací reťazec pre Overpass pomocou pomocníka Overpass Turbo"
+
+msgid "Query Wizard"
+msgstr "Pomocník pre vyhľadávanie"
+
 msgid "Your saved queries:"
 msgstr "Uložené vyhľadávania:"
 
@@ -8967,33 +9070,6 @@ msgstr "Odstrániť vybraný úryvok"
 msgid "Edit selected snippet"
 msgstr "Upraviť vybraný úryvok"
 
-msgid "history"
-msgstr "história"
-
-msgid "Please select an item first"
-msgstr "Prosím najprv zvoľte položku"
-
-msgid "Edit item"
-msgstr "Upraviť položku"
-
-msgid "Add snippet"
-msgstr "Pridať úryvok"
-
-msgid "Query cannot be empty"
-msgstr "Reťazec nesmie byť prázdny"
-
-msgid "This name can be used for the item"
-msgstr "Tento názov môže byť pre položku použitý"
-
-msgid "Item with this name already exists"
-msgstr "Položka s týmto názvom už existuje"
-
-msgid "The item cannot be created with provided name"
-msgstr "Položka nemože byť vytvorené so zadaným názvom"
-
-msgid "The item cannot be created with an empty query"
-msgstr "Položka nemôže byť vytvorená s prázdnym reťazcom"
-
 msgid "Overpass Turbo Query Wizard"
 msgstr "Pomocník Overpass Turbo"
 
@@ -9132,6 +9208,33 @@ msgstr "Posúvacia mapa"
 msgid "Tile Numbers"
 msgstr "Čísla dlaždíc"
 
+msgid "history"
+msgstr "história"
+
+msgid "Please select an item first"
+msgstr "Prosím najprv zvoľte položku"
+
+msgid "Edit item"
+msgstr "Upraviť položku"
+
+msgid "Add snippet"
+msgstr "Pridať úryvok"
+
+msgid "Query cannot be empty"
+msgstr "Reťazec nesmie byť prázdny"
+
+msgid "This name can be used for the item"
+msgstr "Tento názov môže byť pre položku použitý"
+
+msgid "Item with this name already exists"
+msgstr "Položka s týmto názvom už existuje"
+
+msgid "The item cannot be created with provided name"
+msgstr "Položka nemože byť vytvorené so zadaným názvom"
+
+msgid "The item cannot be created with an empty query"
+msgstr "Položka nemôže byť vytvorená s prázdnym reťazcom"
+
 msgid "JOSM Help Browser"
 msgstr "Prehliadač pomocníka JOSM"
 
@@ -9287,6 +9390,12 @@ msgstr "Priblížiť k tomuto bodu v aktuálnej vrstve"
 msgid "Open a history browser with the history of this node"
 msgstr "Otvor prehliadač histórie, s históriou tohto bodu"
 
+msgid "View changeset in web browser"
+msgstr "Zobraziť sadu zmien vo webovom prehliadači"
+
+msgid "Open {0}"
+msgstr "Otvoriť {0}"
+
 msgid "Way {0}"
 msgstr "Cesta {0}"
 
@@ -9296,6 +9405,9 @@ msgstr "Relácia {0}"
 msgid "Object"
 msgstr "Objekt"
 
+msgid "Open Changeset Manager"
+msgstr "Otvoriť správcu sád zmien"
+
 msgid "Changeset comment"
 msgstr "Komentár k súboru zmien"
 
@@ -9467,6 +9579,9 @@ msgstr "Zvoľte \"Nahrať\" pre odoslanie zmien na server OSM."
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr "Zvoľte \"Uložiť\" pre uloženie vrstvy do súboru zadaného vľavo."
 
+msgid "I would like someone to review my edits."
+msgstr "Bol by som rád, keby niekto skontroloval moje zmeny."
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "Doplniť krátky komentár k nahrávaným zmenám:"
 
@@ -10490,7 +10605,7 @@ msgid "Open OSM file"
 msgstr "Otvoriť OSM súbor"
 
 msgid "Validation Error Files"
-msgstr ""
+msgstr "Súbory s chybami validátora"
 
 msgid "WMS Files (*.wms)"
 msgstr "WMS Súbory (*.wms)"
@@ -10656,9 +10771,6 @@ msgstr[0] "{0} stôp(track)"
 msgstr[1] "{0} stopa(track)"
 msgstr[2] "{0} stopy(track)"
 
-msgid "Description"
-msgstr "Popis"
-
 msgid "Timespan"
 msgstr "Časový interval"
 
@@ -10744,7 +10856,7 @@ msgid "Changes need uploading?"
 msgstr "Vyžadujú zmeny odoslanie?"
 
 msgid "Save Note file"
-msgstr ""
+msgstr "Uložiť súbor poznámok"
 
 msgid "outside downloaded area"
 msgstr "mimo ukladanej oblasti"
@@ -10823,7 +10935,7 @@ msgid "No validation errors"
 msgstr "Žiadne chyby na overenie"
 
 msgid "Save Validation errors file"
-msgstr ""
+msgstr "Uložiť súbor s chybami validátora"
 
 msgid "Set WMS Bookmark"
 msgstr "Nastaviť WMS Záložku"
@@ -11488,21 +11600,21 @@ msgid "Failed to locate image ''{0}''"
 msgstr "Zlyhala lokalizácia obrázku ''{0}''"
 
 msgid "Save Access Token in preferences"
-msgstr "Uložiť autorizačný prístup v nastaveniach"
+msgstr "Uložiť prístupový reťazec v nastaveniach"
 
 msgid "Access Token Key:"
-msgstr "Kľúč autorizačného prístupu:"
+msgstr "Kľúč prístupového reťazca:"
 
 msgid "Access Token Secret:"
-msgstr "Heslo autorizačného prístupu:"
+msgstr "Heslo prístupového reťazca:"
 
 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>Vybrať na uloženie autorizačný prístup v JOSM "
-"nastaveniach.<br>Pozastaviť používanie autorizačného prístupu iba v tomto "
-"spustení programu JOSM.</html>"
+"<html>Vyberte pre uloženie prístupového reťazca v nastaveniach "
+"JOSM.<br>Zrušte pre používanie prístupového reťazca iba v tomto spustení "
+"programu JOSM.</html>"
 
 msgid "Use default settings"
 msgstr "Použiť štandardné nastavenia"
@@ -11514,10 +11626,10 @@ msgid "Consumer Secret:"
 msgstr "Používateľské heslo:"
 
 msgid "Request Token URL:"
-msgstr "URL požiadavky prístupu:"
+msgstr "URL reťazca požiadavky:"
 
 msgid "Access Token URL:"
-msgstr "URL autorizačného prístupu:"
+msgstr "URL prístupového reťazca:"
 
 msgid "Authorize URL:"
 msgstr "Autorizačná URL:"
@@ -11559,10 +11671,10 @@ msgid ""
 "fully<br>automatically authorizes the user and retrieves an Access "
 "Token.</html>"
 msgstr ""
-"<html>Spustiť plne automatický postup na získanie autorizačného prístupu z "
+"<html>Spustiť plne automatický postup na získanie prístupového reťazca z "
 "webových stránok OSM.<br>JOSM pristupuje na OSM webové stránky s menom "
 "používateľa JOSM, plne<br>automaticky oprávňuje používateľa a získa "
-"autorizačný prístup.</html>"
+"prístupové reťazec.</html>"
 
 msgid ""
 "<html>Run a semi-automatic procedure to get an access token from the OSM "
@@ -11571,18 +11683,18 @@ msgid ""
 "external browser<br>to authenticate itself and to accept the request token "
 "submitted by JOSM.</html>"
 msgstr ""
-"<html>Beh polo-automatického postupu získať autorizačný prístup z webových "
-"stránok OSM.<br>JOSM podá štandardné OAuth žiadosti o získanie povolenia "
-"prístupu cez<br>autorizačný prístup. Používateľ zašle na webové stránky OSM "
-"v externom prehliadači<br>overí sám a prijme žiadosť pre prístup predloženú "
-"programom JOSM.</html>"
+"<html>Beh polo-automatického postupu na získanie prístupového reťazca z "
+"webových stránok OSM.<br>JOSM podá štandardné žiadosti OAuth o získanie "
+"reťazca požiadavky a<br>prístupový reťazec. Používateľ bude presmerovaný na "
+"webové stránky OSM v externom prehliadači,<br>kde preukáže identitu a prijme "
+"reťazec požiadavky predložený programom JOSM.</html>"
 
 msgid ""
 "<html>Enter an Access Token manually if it was generated and retrieved "
 "outside<br>of JOSM.</html>"
 msgstr ""
-"<html>Zadajte autorizačný prístup ručne, ak bol vygenerovaný a získaný "
-"externe<br>na JOSM.</html>"
+"<html>Zadajte prístupový reťazec ručne, ak bol vygenerovaný a získaný "
+"mimo<br>JOSM.</html>"
 
 msgid ""
 "Please enter your OSM user name and password. The password will "
@@ -11608,16 +11720,16 @@ msgid "Advanced OAuth properties"
 msgstr "Pokročilé vlastnosti OAuth"
 
 msgid "Accept Access Token"
-msgstr "Prijať autorizačný prístup"
+msgstr "Prijať prístupový reťazec"
 
 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>Úspešne ste získal OAuth autorizačný prístup z webových stránok OSM. "
-"Kliknite na <strong>{0}</strong> prijatý prístup. JOSM sa bude používať pri "
-"následných žiadostiach získať prístup k OSM API.</html>"
+"<html>Úspešne ste získali prístupový reťazec OAuth z webových stránok OSM. "
+"Kliknite na <strong>{0}</strong> pre prijatie reťazca. JOSM ho bude používať "
+"pri následných žiadostiach o získanie prístupu k OSM API.</html>"
 
 msgid "Authorize now"
 msgstr "Povoliť teraz"
@@ -11633,7 +11745,7 @@ msgid "Run the automatic authorization steps again"
 msgstr "Opätovný chod automatických autorizačných krokov"
 
 msgid "Test Access Token"
-msgstr "Test autorizačného prístupu"
+msgstr "Test prístupového reťazca"
 
 msgid "Please enter your OSM password"
 msgstr "Prosím vložte vaše OSM heslo"
@@ -11649,7 +11761,7 @@ msgid ""
 "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>Automatický proces pre získanie OAuth autorizačného prístupu<br>z OSM "
+"<html>Automatický proces pre získanie prístupového reťazca OAuth<br>z OSM "
 "servera prebehol neúspešne.<br><br>Skúste prosím znovu, alebo vyberte iný "
 "druh autorizačného procesu,<br>to je poloautomatickou, alebo manuálnou "
 "autorizáciou.</html>"
@@ -11663,10 +11775,10 @@ msgid ""
 "from the OAuth Authorize Endpoint URL ''{0}''.<br><br>Please check your "
 "advanced setting and try again.</html>"
 msgstr ""
-"<html>Automatický proces pre získanie OAuth autorizačného prístupu<br>z OSM "
-"servera prebehol neúspešne pretože JOSM nie je schopný vytvoriť<br>platné "
-"URL prihlásenie z OAuth autorizačným URL koncovým bodom "
-"''{0}''.<br><br>Skontrolujte prosím vaše rozšírené nastavenia a skúste "
+"<html>Automatický proces pre získanie prístupového reťazca OAuth<br>z OSM "
+"servera prebehol neúspešne, pretože JOSM nie je schopný vytvoriť<br>platné "
+"URL pre prihlásenie z URL autorizačného koncového bodu OAuth "
+"\"{0}\".<br><br>Skontrolujte prosím vaše rozšírené nastavenia a skúste "
 "znovu.</html>"
 
 msgid ""
@@ -11674,8 +11786,8 @@ msgid ""
 "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>Automatický proces pre získanie OAuth autorizačného prístupu<br>z OSM "
-"servera prebehol neúspešne. JOSM neúspešne vstúpil do záznamu {0}<br>pre "
+"<html>Automatický proces pre získanie prístupového reťazca OAuth<br>z OSM "
+"servera prebehol neúspešne. JOSM sa nepodarilo prihlásiť do {0}<br>pre "
 "používateľa {1}.<br><br>Skontrolujte meno a heslo používateľa a skúste "
 "znovu.</html>"
 
@@ -11683,17 +11795,17 @@ msgid ""
 "Please enter an OAuth Access Token which is authorized to access the OSM "
 "server ''{0}''."
 msgstr ""
-"Zadajte prosím OAuth autorizačný prístup, ktorý je oprávnený k prístupu k "
-"serveru OSM ''{0}''."
+"Zadajte prosím prístupový reťazec OAuth, ktorý je oprávnený k prístupu k "
+"serveru OSM \"{0}\"."
 
 msgid "Access Token"
-msgstr "Autorizačný prístup"
+msgstr "Prístupový reťazec"
 
 msgid "Advanced OAuth parameters"
 msgstr "Rozšírené OAuth parametre"
 
 msgid "Enter the OAuth Access Token"
-msgstr "Vložte OAuth autorizačný prístup"
+msgstr "Vložte prístupový reťazec OAuth"
 
 msgid "Enter advanced OAuth properties"
 msgstr "Zadajte pokročilé OAuth vlastnosti"
@@ -11702,30 +11814,30 @@ msgid ""
 "<html><body>Please enter an OAuth Access Token which is authorized to access "
 "the OSM server ''{0}''.</body></html>"
 msgstr ""
-"<html><body>Zadajte prosím OAuth autorizačný prístup, ktorý je oprávnený k "
-"prístupu k serveru OSM ''{0}''.</body></html>"
+"<html><body>Zadajte prosím prístupový reťazec OAuth, ktorý je oprávnený na "
+"prístup k serveru OSM \"{0}\".</body></html>"
 
 msgid "Please enter an Access Token Key"
-msgstr "Prosím, zadajte Kľúč autorizačného prístupu"
+msgstr "Prosím zadajte kľúč prístupového reťazca"
 
 msgid ""
 "The Access Token Key must not be empty. Please enter an Access Token Key"
 msgstr ""
-"Kľúč autorizačného prístupu nesmie byť prázdny. Prosím, zadajte kľúč "
-"autorizačného prístupu"
+"Kľúč prístupového reťazca nesmie byť prázdny. Prosím zadajte kľúč "
+"prístupového reťazca"
 
 msgid "Please enter an Access Token Secret"
-msgstr "Prosím, zadajte Heslo autorizačného prístupu"
+msgstr "Prosím zadajte heslo prístupového reťazca"
 
 msgid ""
 "The Access Token Secret must not be empty. Please enter an Access Token "
 "Secret"
 msgstr ""
-"Heslo autorizačného prístupu nesmie byť prázdne. Prosím, zadajte heslo "
-"autorizačného prístupu"
+"Heslo prístupového reťazca nesmie byť prázdne. Prosím zadajte heslo "
+"prístupového reťazca"
 
 msgid "Click to test the Access Token"
-msgstr "Kliknite na Autorizačný prístup"
+msgstr "Kliknite pre otestovanie prístupového reťazca"
 
 msgid ""
 "With OAuth you grant JOSM the right to upload map data and GPS tracks on "
@@ -11747,19 +11859,19 @@ msgstr ""
 "OAuth</i>."
 
 msgid "Get an Access Token for ''{0}''"
-msgstr "Získať autorizačný prístup pre ''{0}''"
+msgstr "Získať prístupový reťazec pre \"{0}\""
 
 msgid "Close the dialog and cancel authorization"
 msgstr "Zatvorte dialóg a zrušiť povolenie"
 
 msgid "Close the dialog and accept the Access Token"
-msgstr "Zatvorte dialóg a prijmite autorizačný prístup"
+msgstr "Zatvorte dialóg a prijmite prístupový reťazec"
 
 msgid "Retrieving OAuth Request Token from ''{0}''"
-msgstr "Získavam OAuth žiadosť prístupu z ''{0}''"
+msgstr "Získavam reťazec žiadosti OAuth z \"{0}\""
 
 msgid "Retrieving OAuth Access Token from ''{0}''"
-msgstr "Získavam OAuth autorizačný prístup z ''{0}''"
+msgstr "Získavam prístupový reťazec OAuth z \"{0}\""
 
 msgid "OSM website did not return a session cookie in response to ''{0}'',"
 msgstr "OSM stránka nevrátila session cookie v reakcii na ''{0}'',"
@@ -11773,7 +11885,7 @@ msgid "Failed to authorize OAuth request  ''{0}''"
 msgstr "Nepodarilo sa povoliť OAuth žiadosť ''{0}''"
 
 msgid "Authorizing OAuth Request token ''{0}'' at the OSM website ..."
-msgstr "Povoľujem OAuth žiadosť prístupu ''{0}'' na stránkach OSM ..."
+msgstr "Povoľujem reťazec požiadavky OAuth \"{0}\" na stránkach OSM ..."
 
 msgid "Initializing a session at the OSM website..."
 msgstr "Inicializujem sedenie na internetovej stránke OSM ..."
@@ -11782,7 +11894,7 @@ msgid "Authenticating the session for user ''{0}''..."
 msgstr "Overovanie sedenia pre používateľa ''{0}'' ..."
 
 msgid "Authorizing request token ''{0}''..."
-msgstr "Povoľujem žiadosť prístupu ''{0}''..."
+msgstr "Povoľujem reťazec žiadosti \"{0}\"..."
 
 msgid "Logging out session ''{0}''..."
 msgstr "Odhlásujem sedenie ''{0}''..."
@@ -11830,42 +11942,42 @@ msgid "Select to grant JOSM the right to modify notes on your behalf"
 msgstr "Povolenie umožní JOSM meniť poznámky podľa Vašich pokynov"
 
 msgid "Retrieving OAuth Access Token..."
-msgstr "Získavam OAuth autorizačný prístup ..."
+msgstr "Získavam prístupový reťazec OAuth ..."
 
 msgid "<html>Retrieving an OAuth Access Token from ''{0}'' failed.</html>"
 msgstr ""
-"<html>Získavanie OAuth autorizačnýho prístupu z ''{0}'' zlyhalo.</html>"
+"<html>Získavanie prístupového reťazca OAuth z \"{0}\" zlyhalo.</html>"
 
 msgid "Request Failed"
 msgstr "Požiadavka neúspešná"
 
 msgid "Retrieving OAuth Request Token..."
-msgstr "Získavam OAuth žiadosť prístupu ..."
+msgstr "Získavam prístupový reťazec OAuth ..."
 
 msgid "<html>Retrieving an OAuth Request Token from ''{0}'' failed.</html>"
-msgstr "<html>Získavanie OAuth žiadosti prístupu z ''{0}'' zlyhalo.</html>"
+msgstr "<html>Získavanie prístupového reťazca OAuth \"{0}\" zlyhalo.</html>"
 
 msgid "Display Advanced OAuth Parameters"
 msgstr "Zobraziť pokročilé parametre OAuth"
 
 msgid "Retrieve Request Token"
-msgstr "Načítať autorizačný prístup"
+msgstr "Získať reťazec požiadavky"
 
 msgid ""
 "<html>Please click on <strong>{0}</strong> to retrieve an OAuth Request "
 "Token from ''{1}''.</html>"
 msgstr ""
-"<html>Kliknite prosím na <strong>{0}</strong> načítať OAuth žiadosť prístupu "
-"z ''{1}''.</html>"
+"<html>Kliknite prosím na <strong>{0}</strong> pre získanie reťazca "
+"požiadavky OAuth z \"{1}\".</html>"
 
 msgid "<html>Step 1/3: Retrieve an OAuth Request Token</html>"
-msgstr "<html>Krok 1 / 3: Nahrať OAuth žiadosť prístupu</html>"
+msgstr "<html>Krok 1 / 3: Nahrať reťazec požiadavky OAuth</html>"
 
 msgid "<html>Step 2/3: Authorize and retrieve an Access Token</html>"
-msgstr "<html>Krok 2 / 3: povoliť a získať autorizačný prístup</html>"
+msgstr "<html>Krok 2 / 3: povoliť a získať prístupový reťazec</html>"
 
 msgid "Request Access Token"
-msgstr "Požiadať o autorizačný prístup"
+msgstr "Požiadať o prístupový reťazec"
 
 msgid ""
 "<html>JOSM successfully retrieved a Request Token. JOSM is now launching an "
@@ -11876,11 +11988,11 @@ msgid ""
 "copy the following authorize URL and paste it into the address field of your "
 "browser.</html>"
 msgstr ""
-"<html>JOSM úspešne získal žiadosť prístupu. JOSM teraz spúšťa registračnú "
+"<html>JOSM úspešne získal reťazec požiadavky. JOSM teraz spúšťa registračnú "
 "stránku v externom prehliadači. Prosím, prihláste sa svojím OSM "
-"používateľským meno a heslom a postupujte podľa pokynov ako povoliť žiadosť "
+"používateľským menom a heslom a postupujte podľa pokynov ako povoliť žiadosť "
 "prístupu. Potom sa prepnite späť do dialógu a kliknite na "
-"<strong>{0}</strong><br><br>Ak spustenie externého prehliadača sa nedarí, "
+"<strong>{0}</strong><br><br>Ak sa spustenie externého prehliadača nedarí, "
 "môžete skopírovať nasledujúcu povoľovaciu URL a vložte ju do adresného "
 "riadku prehliadača.</html>"
 
@@ -11888,47 +12000,47 @@ msgid "Go back to step 1/3"
 msgstr "Vráťte sa na krok 1 / 3"
 
 msgid "<html>Step 3/3: Successfully retrieved an Access Token</html>"
-msgstr "<html>Krok 3 / 3: Úspešne získaný autorizačný prístup</html>"
+msgstr "<html>Krok 3 / 3: Úspešne získaný prístupový reťazec</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 úspešne získal autorizačný prístup. Teraz môžete prijať tento "
-"prístup. JOSM ho bude používať v budúcnosti pre autentifikáciu a autorizáciu "
-"na server OSM.<br>Autorizačný prístup je:</html>"
+"<html>JOSM úspešne získal prístupový reťazec. Teraz môžete prijať tento "
+"reťazec. JOSM ho bude používať v budúcnosti pre autentifikáciu a autorizáciu "
+"na server OSM.<br>Prístupový reťazec:</html>"
 
 msgid "Click to retrieve a Request Token"
-msgstr "Kliknite na tlačidlo pre načítanie žiadosti o prístup"
+msgstr "Kliknite na tlačidlo pre načítanie reťazca žiadosti"
 
 msgid "Retrieve Access Token"
-msgstr "Načítať autorizačný prístup"
+msgstr "Načítať prístupový reťazec"
 
 msgid "Click to retrieve an Access Token"
-msgstr "Kliknite na tlačidlo pre načítanie autorizačného prístupu"
+msgstr "Kliknite pre načítanie prístupového reťazca"
 
 msgid "Testing OAuth Access Token"
-msgstr "Testovanie OAuth autorizačného prístupu"
+msgstr "Testovanie prístupového reťazca OAuth"
 
 msgid "Retrieving user details with Access Token Key ''{0}'' was rejected."
 msgstr ""
-"Získavam detaily používateľa s kľúčom autorizačného prístupu''{0}'', ktorý "
-"bol zamietnutý."
+"Získanie detailov používateľa pomocou kľúča prístupového reťazca \"{0}\" "
+"bolo zamietnuté."
 
 msgid "Retrieving user details with Access Token Key ''{0}'' was forbidden."
 msgstr ""
-"Získavam detaily používateľa s kľúčom autorizačného prístupu''{0}'', bol "
-"zakázaný."
+"Získanie detailov používateľa pomocou kľúča prístupového reťazca \"{0}\" "
+"bolo zakázané."
 
 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>Úspešne použitý autorizačný prístup ''{0}'' pre<br>prístup OSM server "
-"na ''{1}'' .<br>Pristupujete na OSM server ako používateľ ''{2}'' s id "
-"''{3}''.</html>"
+"<html>Úspešne bol použitý prístupový reťazec \"{0}\" pre<br>prístup na OSM "
+"server \"{1}\" .<br>Pristupujete na OSM server ako používateľ \"{2}\" s id "
+"\"{3}\".</html>"
 
 msgid "Success"
 msgstr "Hotovo"
@@ -11939,8 +12051,8 @@ msgid ""
 "not<br>be able to access any protected resource on this server using this "
 "token.</html>"
 msgstr ""
-"<html>Nepodaril sa prístup na OSM server ''{0}''<br>s autorizačným prístupom "
-"''{1}''.<br>Server zamietol autorizačný prístup ako neautorizovaný. Nebudete "
+"<html>Nepodaril sa prístup na OSM server \"{0}\"<br>s prístupovým reťazcom "
+"\"{1}\".<br>Server zamietol prístupový reťazec ako neautorizovaný. Nebudete "
 "môcť<br>pristupovať k žiadnemu chránenému obsahu na tomto serveri.</html>"
 
 msgid "Test failed"
@@ -11953,14 +12065,14 @@ msgid ""
 "nevertheless use it<br>to upload data, upload GPS traces, and/or access "
 "other protected resources.</html>"
 msgstr ""
-"<html>Autorizačný prístup ''{1}'' je serveru OSM ''{0}'' známy.<br>Napriek "
+"<html>Prístupový reťazec \"{1}\" je serveru OSM \"{0}\" známy.<br>Napriek "
 "tomu sa test načítania používateľských údajov pre tento prístup "
-"nepodaril.<br>V závislosti na tom, aké sú poskytnuté práva na tento prístup, "
-"môžete ho použiť<br>na vkladanie dát, nahrávanie GPS stopy, a / alebo získať "
-"prístup k ďalším chráneným zdrojom.</html>"
+"nepodaril.<br>V závislosti na tom, aké sú poskytnuté práva na tento reťazec, "
+"ho môžete použiť<br>na vkladanie dát, nahrávanie GPS stôp, a / alebo "
+"získanie prístupu k ďalším chráneným zdrojom.</html>"
 
 msgid "Token allows restricted access"
-msgstr "Prístup umožňuje iba obmedzený prístup"
+msgstr "Reťazec umožňuje iba obmedzený prístup"
 
 msgid ""
 "<html>Failed to retrieve information about the current user from the OSM "
@@ -11969,17 +12081,16 @@ msgid ""
 "Carefully check the server<br>URL and your Internet connection.</html>"
 msgstr ""
 "<html>Nepodarilo sa získať informácie o aktuálnom používateľovi z OSM "
-"servera ''{0}''.<br> To asi nie je problém spôsobený testovaním "
+"servera \"{0}\".<br> To asi nie je problém spôsobený testovaním "
 "autorizačného prístupu, ale<br>skôr problém s konfiguráciou servera. "
-"Starostlivo skontrolujte URL servera<br> a vaše pripojenie k "
-"internetu.</html>"
+"Starostlivo skontrolujte URL servera<br>a vaše pripojenie k internetu.</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>Nepodarilo sa podpísať žiadosť pre OSMserver ''{0}'' s prístupom "
-"''{1}''.<br>Prístup je pravdepodobne neplatný.</html>"
+"<html>Nepodarilo sa podpísať žiadosť pre OSM server \"{0}\" s reťazcom "
+"\"{1}\".<br>Reťazec je pravdepodobne neplatný.</html>"
 
 msgid ""
 "<html>The test failed because the server responded with an internal "
@@ -11987,7 +12098,7 @@ msgid ""
 "later.</html>"
 msgstr ""
 "<html>Test sa nepodaril, pretože server odpovedal s internou chybou.<br>JOSM "
-"nemohol rozhodnúť, či prístup je platný. Skúste to znova neskôr.</html>"
+"nemohol rozhodnúť, či je reťazec platný. Skúste to znova neskôr.</html>"
 
 msgid "Retrieving user info..."
 msgstr "Získavam informácie o používateľovi ..."
@@ -12107,7 +12218,7 @@ msgid "Parameter value"
 msgstr "Hodnota parametra"
 
 msgid "Toolbar action without name: {0}"
-msgstr "Akcia panela nástrojou bez mena: {0}"
+msgstr "Akcia panela nástrojov bez názvu: {0}"
 
 msgid "Strange toolbar value: {0}"
 msgstr "Podivná hodnota panela nástrojov: {0}"
@@ -13807,29 +13918,29 @@ msgid ""
 "You do not have an Access Token yet to access the OSM server using OAuth. "
 "Please authorize first."
 msgstr ""
-"Nemáte ešte autorizačný prístup pre prístup k OSM serveru pomocou OAuth. "
+"Nemáte ešte prístupový reťazec pre prístup k OSM serveru pomocou OAuth. "
 "Prosím najskôr sa autorizujte."
 
 msgid ""
 "You already have an Access Token to access the OSM server using OAuth."
-msgstr "Už máte autorizačný prístup pre prístup k OSM serveru pomocou OAuth."
+msgstr "Už máte prístupový reťazec pre prístup k OSM serveru pomocou OAuth."
 
 msgid "Click to step through the OAuth authorization process"
 msgstr "Kliknite pre krokovanie celým procesom schvaľovania OAuth"
 
 msgid "New Access Token"
-msgstr "Nový autorizačný prístup"
+msgstr "Nový prístupový reťazec"
 
 msgid ""
 "Click to step through the OAuth authorization process and generate a new "
 "Access Token"
 msgstr ""
-"Kliknite na krok v rámci povoľovacieho procesu OAuth a vytvorte nový "
-"autorizačný prístup"
+"Kliknite pre pokračovanie v krokoch autorizačného procesu OAuth a vytvorte "
+"nový prístupový reťazec"
 
 msgid "Click test access to the OSM server with the current access token"
 msgstr ""
-"Kliknite na test prístup k serveru OSM so súčasným autorizačným prístupom"
+"Kliknite na test prístupu k serveru OSM so súčasným prístupovým reťazcom"
 
 msgid "<html>Use the default OSM server URL (<strong>{0}</strong>)</html>"
 msgstr ""
@@ -14135,15 +14246,6 @@ msgstr "Prednastavený sub prvok bez materských"
 msgid "Error parsing {0}: "
 msgstr "Chyba rozkladania(parsovania) {0}: "
 
-msgid "Search preset"
-msgstr "Hľadať predvoľby"
-
-msgid "Show preset search dialog"
-msgstr "Zobraziť vyhľadávací dialóg predvolieb"
-
-msgid "Search presets"
-msgstr "Hľadať predvoľby"
-
 msgid "Presets"
 msgstr "Predvoľby"
 
@@ -14261,6 +14363,9 @@ msgstr "Všetky súbory (*.*)"
 msgid "Received error page:"
 msgstr "Obdržaná chybová stránka:"
 
+msgid "{0}... [please type its number]"
+msgstr "{0}... [prosím, zadajte svoje číslo]"
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -14567,15 +14672,6 @@ msgstr "Neznámy mód {0}."
 msgid "get number of unread messages"
 msgstr "získať počet neprečítaných správ"
 
-msgid "You have {0} unread message."
-msgid_plural "You have {0} unread messages."
-msgstr[0] "Máte {0} neprečítaných správ."
-msgstr[1] "Máte {0} neprečítanú správu."
-msgstr[2] "Máte {0} neprečítané správy."
-
-msgid "Click here to see your inbox."
-msgstr "Kliknite sem pre zobrazenie prijatých správ."
-
 msgid "Message notifier"
 msgstr "Oznamovanie správ"
 
@@ -14647,10 +14743,6 @@ msgid ""
 msgstr ""
 "Podporuje protokol verzie 0.6, zatiaľ čo server uvádza podporu {0} do {1}."
 
-msgid "Removed layer {0} because it is not allowed by the configured API."
-msgstr ""
-"Odstránená vrstva {0}, pretože to nie je povolený nakonfigurovaný API."
-
 msgid "Unexpected format of ID replied by the server. Got ''{0}''."
 msgstr ""
 "Neočakávaný formát ID v odpovedi zo servera. Obdržaná hodnota je \"{0}\"."
@@ -15733,10 +15825,10 @@ msgid ""
 "configured.<br>Please open the Preferences Dialog and generate or enter an "
 "Access Token.</html>"
 msgstr ""
-"<html>Nepodarilo sa overiť na serveri OSM ''{0}''.<br>Používate OAuth na "
-"overenie, ale v súčasnej dobe neexistuje žiadny<br>nakonfigurovaný OAuth "
-"autorizačný prístup.<br>Prosím, otvorte dialógové okno nastavení a vytvorte  "
-"alebo zadajte autorizačný prístup.</html>"
+"<html>Nepodarilo sa overiť na serveri OSM \"{0}\".<br>Používate OAuth na "
+"overenie, ale v súčasnej dobe neexistuje žiadny<br>nakonfigurovaný "
+"prístupový reťazec OAuth.<br>Prosím, otvorte dialógové okno nastavení a "
+"vytvorte alebo zadajte prístupový reťazec.</html>"
 
 msgid ""
 "<strong>Failed</strong> to delete <strong>node {0}</strong>. It is still "
@@ -15950,8 +16042,9 @@ msgid ""
 "failed.<br>Please launch the preferences dialog and retrieve another OAuth "
 "token.</html>"
 msgstr ""
-"<html>Overenie na OSM serveri s OAuth prístupom ''{0}'' zlyhal.<br>Prosím "
-"otvorte dialóg nastavení a získajte ďalší OAuth prístup.</html>"
+"<html>Overenie na OSM serveri s prístupovým reťazcom OAuth \"{0}\" "
+"zlyhalo.<br>Prosím otvorte dialóg nastavení a získajte ďalší reťazec pre "
+"OAuth.</html>"
 
 msgid ""
 "<html>Authorisation at the OSM server failed.<br>The server reported the "
@@ -15969,9 +16062,9 @@ msgid ""
 "resource<br>''{1}''.<br>Please launch the preferences dialog and retrieve "
 "another OAuth token.</html>"
 msgstr ""
-"<html>Overenie na serveri OSM s OAuth prístupom ''{0}'' zlyhalo.<br>Pre "
-"overenie nie je povolený prístup k chránenému zdroju <br>''{1}''.<br>Prosím "
-"otvorte dialóg nastavení a získajte ďalší OAuth prístup.</html>"
+"<html>Overenie na serveri OSM s OAuth reťazcom \"{0}\" zlyhalo.<br>Pre "
+"overenie nie je povolený prístup k chránenému zdroju <br>\"{1}\".<br>Prosím "
+"otvorte dialóg nastavení a získajte ďalší reťazec pre OAuth.</html>"
 
 msgid ""
 "<html>Communication with the OSM server ''{0}'' timed out. Please retry "
@@ -16169,9 +16262,6 @@ msgstr ""
 "http://forum.openstreetmap.org/viewtopic.php?id=25677).\n"
 "V súčasnosti je pre JOSM vyhradených {1,number,#}MB pamäte"
 
-msgid "{0}... [please type its number]"
-msgstr "{0}... [prosím, zadajte svoje číslo]"
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -16284,11 +16374,6 @@ msgid "Failed to load XML schema."
 msgstr "Nepodarilo sa načítať XML schémy."
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-"Otvorenie hlásenia o chybe sa nepodarilo. Prosím nahláste ručne na stránke:"
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -16317,10 +16402,10 @@ msgstr ""
 "elementy"
 
 msgid "Unexpected token ({0}) on position {1}"
-msgstr "Neočakávaný znak ({0}) na pozícii {1}"
+msgstr "Neočakávaný reťazec ({0}) na pozícii {1}"
 
 msgid "Unexpected token on position {0}. Expected {1}, found {2}"
-msgstr "Neočakávaný znak na pozícii {0}. Očakávané {1}, našiel {2}"
+msgstr "Neočakávaný reťazec na pozícii {0}. Očakávaný {1}, nájdený {2}"
 
 msgid "Error while parsing search expression on position {0}"
 msgstr "Chyba pri analýze hľadaného výrazu na pozícii {0}"
@@ -16889,6 +16974,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr "žiadny"
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr "zakreslený samostatne"
+
 msgid "Service type"
 msgstr "Využitie"
 
@@ -18956,8 +19045,11 @@ msgid "Bay"
 msgstr "Záliv"
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
-msgstr "Veľký objem vody čiastočne obkolesený pevninou ale so širokým ústím."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
+msgstr ""
+"Oblasť vodnej plochy väčšinou obklopená pevninou, avšak priamo napojená na "
+"oceán alebo jazero."
 
 msgid "Shipping"
 msgstr "Lodná doprava"
@@ -24718,7 +24810,7 @@ msgid ""
 msgstr ""
 
 msgid "Esri World Imagery"
-msgstr ""
+msgstr "Esri snímky sveta"
 
 msgid "OpenCycleMap"
 msgstr "OpenCycleMap"
@@ -24804,6 +24896,9 @@ msgstr "Značené trasy: Jazda na koni"
 msgid "Waymarked Trails: Winter Sports"
 msgstr "Značené trasy: Zimné športy"
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr "OSM Inspector: Geometria"
 
@@ -24863,6 +24958,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -24944,6 +25042,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -24965,9 +25078,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -25564,6 +25674,9 @@ msgstr "Berlín letecké fotografie 2015"
 msgid "Berlin aerial photograph 2016"
 msgstr "Berlín letecké fotografie 2016"
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr "Deutsche Bahn VzG linky Nov 2013"
 
@@ -25979,6 +26092,9 @@ msgstr "Luxembourg Inspire Water"
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Delta Nigeru Okt 2012 Landsat"
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -26424,6 +26540,9 @@ msgstr "NLSC Open Data WMTS"
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr "MSR Mapy Topo"
 
@@ -27666,6 +27785,9 @@ msgstr "relácia bez \"type\""
 msgid "{0} relation without {0} tag"
 msgstr "relácia {0} bez značky {0}"
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr "\"religion\" bez \"denomination\""
 
@@ -27882,10 +28004,6 @@ msgid "Customization of public public transport stops."
 msgstr "Úpravy zastávok hromadnej dopravy."
 
 msgid ""
-"Creating and handling address nodes and buildings within Czech Republic."
-msgstr "Vytvorenie a správa adresných bodov a budov vrámci Českej Republiky."
-
-msgid ""
 "Allows to import various file formats into JOSM directly. Currently "
 "supported: TangoGPS, Garmin Trainings Center TCX."
 msgstr ""
@@ -27943,9 +28061,6 @@ msgstr ""
 "Porozprávajte sa s používateľmi, ktorí upravujú mapu vo Vašej blízkosti a "
 "buďte informovaní keď sa niekto priblíži."
 
-msgid "Allows you to view a GeoJSON file as a layer."
-msgstr "Umožňuje zobraziť súbor GeoJSON ako vrstvu."
-
 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."
@@ -28374,13 +28489,6 @@ msgstr ""
 "(Tento plugin je v štádiu rozpracovania!!!) Prepojí a synchronizuje video s "
 "geopolohou voči GPS stope, aby bolo možné identifikovať viditeľné objekty."
 
-msgid ""
-"Supports downloading tiled, scanned maps from walking-papers.org. This "
-"plugin is still under early development and may be buggy."
-msgstr ""
-"Podpora sťahovaných dlaždíc, skenovaných máp z walking-papers.org. Tento "
-"plugin je stále v rannom vývoji a môže obsahovať chyby."
-
 msgid "Easy downloading along a long set of interconnected ways"
 msgstr ""
 "Jednoduché sťahovanie pozdĺž dlhej spojenej(set of interconnected) cesty"
@@ -29015,15 +29123,15 @@ msgstr "Mapillary - vrstva objektov"
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr "Zobrazí vrstvu s mapovými objektami, ktoré identifikoval Mapillary"
 
+msgid "Start Mapillary layer"
+msgstr "Začať vrstvu Mapillary"
+
 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"
 
@@ -30349,6 +30457,158 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+msgstr "Automatické získavanie"
+
+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 ""
+"Varovanie: neúspešná voľba umiestniť panel dialógu vždy na vrchu. Výnimky "
+"boli: {0}"
+
+msgid ""
+"To enable the cadastre WMS plugin, change\n"
+"the current projection to one of the cadastre\n"
+"projections and retry"
+msgstr ""
+"Zapnúť the cadastre WMS plugin, zmena\n"
+"aktuálnej projekcie na jednu z the cadastre\n"
+"projekcií a opakovať"
+
+msgid "Change the current projection"
+msgstr ""
+
+msgid "Extract commune boundary"
+msgstr "Vybrať hranice obce(samosprávy)"
+
+msgid "Only on vectorized layers"
+msgstr "Iba na vektorizované vrstvy"
+
+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 "Stiahnuť obrázok z francúzkeho Cadastre WMS"
+
+msgid "Cadastre: {0}"
+msgstr "Cadastre: {0}"
+
+msgid "Georeference an image"
+msgstr ""
+
+msgid "Grab non-georeferenced image"
+msgstr "Zachytený obrázok bez zemepisných súradníc"
+
+msgid "Georeferencing interrupted"
+msgstr "Určovanie zemepisných súradníc prerušené"
+
+msgid ""
+"This image contains georeference data.\n"
+"Do you want to use them ?"
+msgstr ""
+"Tento obrázok obsahuje georeferenčné dáta.\n"
+"Chcete ich použiť?"
+
+msgid "Load layer from cache"
+msgstr ""
+
+msgid "Load location from cache (only if cache is enabled)"
+msgstr "Načítať polohu z cache (iba ak je cache zapnutá)"
+
+msgid "{0} not allowed with the current projection"
+msgstr "{0} nepovolený s aktuálnou projekciou"
+
+msgid ""
+"Cannot load cache {0} which is not compatible with current projection zone"
+msgstr ""
+"Nemôžem načítať cache {0} ktorá nie je kompatabilná s aktuálnou zónou "
+"projekcie"
+
+msgid ""
+"Selected file {0} is not a cache file from this plugin (invalid extension)"
+msgstr ""
+"Vybratý súbor {0} nieje cache súborom tohto pluginu (chybné rozšírenie)"
+
+msgid "The location {0} is already on screen. Cache not loaded."
+msgstr "Poloha {0} je práve na obrazovke. Cache nie je načítaná."
+
+msgid "(optional)"
+msgstr "(voliteľný)"
+
+msgid "Change location"
+msgstr "Zmeniť umiestnenie"
+
+msgid "Set a new location for the next request"
+msgstr "Nastavenie nového miesta pre ďalšiu požiadavku"
+
+msgid "Add a new municipality layer"
+msgstr "Pridať novú vrstvu obce"
+
+msgid "Commune"
+msgstr "Obec"
+
+msgid ""
+"<html>Enter the town,village or city name.<br>Use the syntax and punctuation "
+"known by www.cadastre.gouv.fr .</html>"
+msgstr ""
+"<html>Zapíšte názov mesta, dediny.<br>Použite syntax a interpunkciu podľa "
+"www.cadastre.gouv.fr .</html>"
+
+msgid "Departement"
+msgstr ""
+
+msgid "<html>Departement number (optional)</html>"
+msgstr ""
+
+msgid "Add new layer"
+msgstr "Pridať novú vrstvu"
+
+msgid "Open Cadastre Preferences"
+msgstr ""
+
+msgid "Refine georeferencing"
+msgstr ""
+
+msgid "Improve georeferencing (only raster images)"
+msgstr ""
+
+msgid "Reset cookie"
+msgstr "Vymazať cookie"
+
+msgid "Get a new cookie (session timeout)"
+msgstr "Získať nové cookie (časový limit na súčasné sedenie)"
+
+msgid "Save image as..."
+msgstr ""
+
+msgid "PNG files (*.png)"
+msgstr "PNG súbory (*.png)"
+
+msgid "GeoTiff files (*.tif)"
+msgstr ""
+
+msgid "Export image (only raster images)"
+msgstr ""
+
+msgid ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+"Je prítomná viac ako jedna WMS vrstva\n"
+"Najskôr vyberte jednu z nich a potom zopakujte"
+
 msgid "on polygon"
 msgstr ""
 
@@ -30364,91 +30624,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
+msgstr "Nastaviť WMS"
+
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
-"Umiestnenie \"{0}\" vyhľadané v cache.\n"
-"Najskôr načítať cache?\n"
-"(Nie = nová cache)"
 
-msgid "Select Feuille"
-msgstr "Vybrať Feuille"
+msgid "Add \"source=...\" to elements?"
+msgstr "Pridať \"source=...\" do položiek?"
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Download from Cadastre"
 msgstr ""
-"Chybne načítaný súbor.\n"
-"Pravdepodobne nejaká stará verzia z cache súboru."
 
-msgid "Lambert Zone {0} cache file (.{0})"
-msgstr "Lambert Zone {0} cache súbor (.{0})"
+msgid "Objects:"
+msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
-msgstr "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Select to download buildings in the selected download area."
+msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
-msgstr "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "address"
+msgstr "adresa"
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
-msgstr "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "Select to download addresses in the selected download area."
+msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
-msgstr "Martinique Fort Desaix cache file (.UTM3)"
+msgid "symbol"
+msgstr "symbol"
 
-msgid "Reunion RGR92 cache file (.UTM4)"
-msgstr "Reunion RGR92 cache file (.UTM4)"
+msgid "Select to download symbols in the selected download area."
+msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
-msgstr "CadastreGrabber: Nedovolená url."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "parcel"
+msgstr "parcela"
+
+msgid "Select to download cadastral parcels in the selected download area."
 msgstr ""
-"Nemožno otvoriť nové sedenie klienta.\n"
-"Server je v údržbe alebo dočasne preťažený."
+
+msgid "parcel number"
+msgstr "číslo parcely"
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
-"Mesto/miesto {0} sa nenašlo, alebo je nedostupné\n"
-"alebo ja akcia zrušená"
 
-msgid "Choose from..."
-msgstr "Vybrať z..."
+msgid "section"
+msgstr "kraj"
 
-msgid "Select commune"
-msgstr "Vybrať hranice obce(samosprávy)"
+msgid "Select to download cadastral sections in the selected download area."
+msgstr ""
 
-msgid "Auto sourcing"
-msgstr "Automatické získavanie"
+msgid "locality"
+msgstr "lokalita"
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
 msgstr ""
 
+msgid "commune"
+msgstr "obec"
+
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
-"Varovanie: neúspešná voľba umiestniť panel dialógu vždy na vrchu. Výnimky "
-"boli: {0}"
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
-"Zapnúť the cadastre WMS plugin, zmena\n"
-"aktuálnej projekcie na jednu z the cadastre\n"
-"projekcií a opakovať"
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -30500,27 +30751,6 @@ msgstr "stredné"
 msgid "low"
 msgstr "nízke"
 
-msgid "symbol"
-msgstr "symbol"
-
-msgid "parcel"
-msgstr "parcela"
-
-msgid "parcel number"
-msgstr "číslo parcely"
-
-msgid "address"
-msgstr "adresa"
-
-msgid "locality"
-msgstr "lokalita"
-
-msgid "section"
-msgstr "kraj"
-
-msgid "commune"
-msgstr "obec"
-
 msgid "Enable automatic caching."
 msgstr "Povoliť automatické cachovanie."
 
@@ -30674,8 +30904,65 @@ msgstr ""
 msgid "Unexpected file extension. {0}"
 msgstr ""
 
-msgid "Add \"source=...\" to elements?"
-msgstr "Pridať \"source=...\" do položiek?"
+msgid ""
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
+msgstr ""
+"Umiestnenie \"{0}\" vyhľadané v cache.\n"
+"Najskôr načítať cache?\n"
+"(Nie = nová cache)"
+
+msgid "Select Feuille"
+msgstr "Vybrať Feuille"
+
+msgid ""
+"Error loading file.\n"
+"Probably an old version of the cache file."
+msgstr ""
+"Chybne načítaný súbor.\n"
+"Pravdepodobne nejaká stará verzia z cache súboru."
+
+msgid "Lambert Zone {0} cache file (.{0})"
+msgstr "Lambert Zone {0} cache súbor (.{0})"
+
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgstr "Lambert CC9 Zone {0} cache file (.CC{0})"
+
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgstr "Guadeloupe Fort-Marigot cache file (.UTM1)"
+
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgstr "Guadeloupe Ste-Anne cache file (.UTM2)"
+
+msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgstr "Martinique Fort Desaix cache file (.UTM3)"
+
+msgid "Reunion RGR92 cache file (.UTM4)"
+msgstr "Reunion RGR92 cache file (.UTM4)"
+
+msgid "CadastreGrabber: Illegal url."
+msgstr "CadastreGrabber: Nedovolená url."
+
+msgid ""
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
+msgstr ""
+"Nemožno otvoriť nové sedenie klienta.\n"
+"Server je v údržbe alebo dočasne preťažený."
+
+msgid ""
+"Town/city {0} not found or not available\n"
+"or action canceled"
+msgstr ""
+"Mesto/miesto {0} sa nenašlo, alebo je nedostupné\n"
+"alebo ja akcia zrušená"
+
+msgid "Choose from..."
+msgstr "Vybrať z..."
+
+msgid "Select commune"
+msgstr "Vybrať hranice obce(samosprávy)"
 
 msgid "Downloading {0}"
 msgstr "Sťahujem {0}"
@@ -30723,124 +31010,6 @@ msgid ""
 "Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
-msgid "Extract commune boundary"
-msgstr "Vybrať hranice obce(samosprávy)"
-
-msgid "Only on vectorized layers"
-msgstr "Iba na vektorizované vrstvy"
-
-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 "Stiahnuť obrázok z francúzkeho Cadastre WMS"
-
-msgid "Cadastre: {0}"
-msgstr "Cadastre: {0}"
-
-msgid "Georeference an image"
-msgstr ""
-
-msgid "Grab non-georeferenced image"
-msgstr "Zachytený obrázok bez zemepisných súradníc"
-
-msgid "Georeferencing interrupted"
-msgstr "Určovanie zemepisných súradníc prerušené"
-
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
-msgstr ""
-"Tento obrázok obsahuje georeferenčné dáta.\n"
-"Chcete ich použiť?"
-
-msgid "Load layer from cache"
-msgstr ""
-
-msgid "Load location from cache (only if cache is enabled)"
-msgstr "Načítať polohu z cache (iba ak je cache zapnutá)"
-
-msgid "{0} not allowed with the current projection"
-msgstr "{0} nepovolený s aktuálnou projekciou"
-
-msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
-msgstr ""
-"Nemôžem načítať cache {0} ktorá nie je kompatabilná s aktuálnou zónou "
-"projekcie"
-
-msgid ""
-"Selected file {0} is not a cache file from this plugin (invalid extension)"
-msgstr ""
-"Vybratý súbor {0} nieje cache súborom tohto pluginu (chybné rozšírenie)"
-
-msgid "The location {0} is already on screen. Cache not loaded."
-msgstr "Poloha {0} je práve na obrazovke. Cache nie je načítaná."
-
-msgid "(optional)"
-msgstr "(voliteľný)"
-
-msgid "Change location"
-msgstr "Zmeniť umiestnenie"
-
-msgid "Set a new location for the next request"
-msgstr "Nastavenie nového miesta pre ďalšiu požiadavku"
-
-msgid "Add a new municipality layer"
-msgstr "Pridať novú vrstvu obce"
-
-msgid "Commune"
-msgstr "Obec"
-
-msgid ""
-"<html>Enter the town,village or city name.<br>Use the syntax and punctuation "
-"known by www.cadastre.gouv.fr .</html>"
-msgstr ""
-"<html>Zapíšte názov mesta, dediny.<br>Použite syntax a interpunkciu podľa "
-"www.cadastre.gouv.fr .</html>"
-
-msgid "Departement"
-msgstr ""
-
-msgid "<html>Departement number (optional)</html>"
-msgstr ""
-
-msgid "Add new layer"
-msgstr "Pridať novú vrstvu"
-
-msgid "Open Cadastre Preferences"
-msgstr ""
-
-msgid "Refine georeferencing"
-msgstr ""
-
-msgid "Improve georeferencing (only raster images)"
-msgstr ""
-
-msgid "Reset cookie"
-msgstr "Vymazať cookie"
-
-msgid "Get a new cookie (session timeout)"
-msgstr "Získať nové cookie (časový limit na súčasné sedenie)"
-
-msgid "Save image as..."
-msgstr ""
-
-msgid "PNG files (*.png)"
-msgstr "PNG súbory (*.png)"
-
-msgid "GeoTiff files (*.tif)"
-msgstr ""
-
-msgid "Export image (only raster images)"
-msgstr ""
-
 msgid ""
 "Click first corner for image cropping\n"
 "(two points required)"
@@ -30896,19 +31065,6 @@ msgstr ""
 "Zvoľte druhý Lambert priečnik(crosspiece) pre určovanie zemepisnej "
 "polohy(georeferencing)"
 
-msgid "Adjust WMS"
-msgstr "Nastaviť WMS"
-
-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 ""
-"Je prítomná viac ako jedna WMS vrstva\n"
-"Najskôr vyberte jednu z nich a potom zopakujte"
-
 msgid "Reset offset"
 msgstr ""
 
@@ -31349,20 +31505,6 @@ msgid ""
 "to cancel the download."
 msgstr ""
 
-msgid "Split area"
-msgstr "Rozdeliť oblasť"
-
-msgid "Splits an area by an untagged way."
-msgstr "Rozdeliť oblasť podľa neoznačenej cesty"
-
-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 ""
-"Zvolená oblasť nemôže byť rozdelená, pretože je členom relácie.\n"
-"Odstráňte oblasť z relácie pred jej rozdelením."
-
 msgid "TangoGPS Files (*.log)"
 msgstr "TangoGPS Súbory (*.log)"
 
@@ -35461,64 +35603,67 @@ msgid "Terrace"
 msgstr "Rad (Terrace)"
 
 msgid "Pass over element without marking it"
-msgstr ""
+msgstr "Preskočiť objekt bez jeho označenia"
 
 msgid "Mark element done"
-msgstr ""
+msgstr "Označiť objekt ako vybavený"
 
 msgid "Todo list"
-msgstr ""
+msgstr "Zásobník práce"
 
 msgid "Open the todo list."
-msgstr ""
+msgstr "Otvoriť zásobník práce."
 
 msgid "Zoom to the selected item in the todo list."
-msgstr ""
+msgstr "Priblížiť na zvolenú položku v zásobníku práce"
 
 msgid "Select all Unmarked and Zoom"
-msgstr ""
+msgstr "Zvoliť všetky neoznačené a priblížiť"
 
 msgid "Select and zoom to all of the unmarked items in the todo list."
-msgstr ""
+msgstr "Zvoliť a priblížiť všetky neoznačené položky v zásobníku práce."
 
 msgid "Pass"
-msgstr ""
+msgstr "Preskočiť"
 
 msgid "Moves on to the next item but leaves this item in the todo list. ([)."
 msgstr ""
+"Presunie sa na ďalšiu položku, ale ponechá túto v zásobníku práce. ([)."
 
 msgid "Add the selected items to the todo list."
-msgstr ""
+msgstr "Pridať vybraný objekt do zásobníka práce."
 
 msgid "Mark selected"
-msgstr ""
+msgstr "Označiť vybrané"
 
 msgid "Mark the selected items (on the map) as done in the todo list."
-msgstr ""
+msgstr "Označiť vybrané objekty (na mape) ako vybavené v zásobníku práce."
 
 msgid "Mark the selected item in the todo list as done. (])."
-msgstr ""
+msgstr "Označiť vybrané položky v zásobníku práce ako vybavené. (])."
 
 msgid "Mark all"
-msgstr ""
+msgstr "Označiť všetky"
 
 msgid "Mark all items in the todo list as done."
-msgstr ""
+msgstr "Označiť všetky položky v zásobníku práce ako vybavené."
 
 msgid "Unmark all"
-msgstr ""
+msgstr "Odznačiť všetky"
 
 msgid "Unmark all items in the todo list that have been marked as done."
 msgstr ""
+"Odznačiť všetky položky v zásobníku práce, ktoré boli označené ako vybavené."
 
 msgid "Clear the todo list"
-msgstr ""
+msgstr "Vymazať zásobník práce"
 
 msgid "Remove all items (marked and unmarked) from the todo list."
 msgstr ""
+"Odstrániť všetky položky (označené aj neoznačené) zo zásobníku práce."
 
 msgid "Todo list {0}/{1} ({2}%)"
-msgstr ""
+msgstr "Zásobník práce {0}/{1} ({2}%)"
 
 msgid "To-fix"
 msgstr ""
@@ -37310,28 +37455,6 @@ msgstr "slučka"
 msgid "mute"
 msgstr "stlmiť"
 
-msgid "Walking Papers Scanned Map"
-msgstr "Skenovaná mapa Walking Papers"
-
-msgid ""
-"Display a map that was previously scanned and uploaded to walking-papers.org"
-msgstr ""
-"Zobraz mapu, ktorá bola predtým skenovaná a nahraj na walking-papers.org"
-
-msgid ""
-"Enter a walking-papers.org URL or ID (the bit after the ?id= in the URL)"
-msgstr ""
-"Vložiť do walking-papers.org URL or ID (the bit after the ?id= in the URL)"
-
-msgid "Could not read information from walking-papers.org the id \"{0}\""
-msgstr "Nemôžem čítať informácie z walking-papers.org the id \"{0}\""
-
-msgid "Walking Papers: {0}"
-msgstr "Walking Papers: {0}"
-
-msgid "Walking Papers layer ({0}) in zoom {1}"
-msgstr "Walking Papers vrstva ({0}) vo zväčšení {1}"
-
 msgid "Way Download"
 msgstr "Way Download (Sťahovanie cesty)"
 
@@ -37515,6 +37638,26 @@ msgid ""
 msgstr ""
 "Pridá do vybratých objektov značku \"wikipedia\" zodpovedajúcu tomuto článku"
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/sl.po b/i18n/po/sl.po
index 361f6e5..e79377d 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
 "PO-Revision-Date: 2015-11-07 17:38+0000\n"
 "Last-Translator: Joško Horvat <Unknown>\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: 2017-09-03 05:00+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:58+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: sl\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -390,6 +390,34 @@ msgstr "Izbriši"
 msgid "Delete selected objects."
 msgstr "Izbriši izbrane predmete."
 
+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 "Delete Layer"
 msgstr ""
 
@@ -1303,31 +1331,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-msgid "You must select two or more nodes to split a circular way."
-msgstr "Za razdelitev krožne poti izberite dve ali več vozlišč."
-
-msgid ""
-"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
-"middle of the way.)"
+msgid "Search preset"
 msgstr ""
-"Poti se ne da razdeliti pri izbranih vozliščih. (Namig: Izberite vozlišča na "
-"sredini poti.)"
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2740,34 +2752,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2799,6 +2783,31 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+msgid "You must select two or more nodes to split a circular way."
+msgstr "Za razdelitev krožne poti izberite dve ali več vozlišč."
+
+msgid ""
+"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
+"middle of the way.)"
+msgstr ""
+"Poti se ne da razdeliti pri izbranih vozliščih. (Namig: Izberite vozlišča na "
+"sredini poti.)"
+
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2918,6 +2927,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3025,6 +3046,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr "NEZNANO"
 
@@ -3068,6 +3092,9 @@ msgctxt "compass"
 msgid "E"
 msgstr "V"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3714,6 +3741,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr "Opis"
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr "Prikaži to pomoč"
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4758,9 +4839,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4806,6 +4884,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr "Inicializacija OSM API"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4827,9 +4908,6 @@ msgstr "uporaba"
 msgid "options"
 msgstr "možnosti"
 
-msgid "Show this help"
-msgstr "Prikaži to pomoč"
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -5030,6 +5108,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5282,6 +5368,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7064,6 +7154,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7286,9 +7379,6 @@ 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."
@@ -8224,15 +8314,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8261,33 +8351,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8411,6 +8474,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr "Številke ploščic"
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8544,6 +8634,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8553,6 +8649,9 @@ msgstr ""
 msgid "Object"
 msgstr "Predmet"
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8697,6 +8796,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "Vpišite kratek opis sprememb, ki jih pošiljate:"
 
@@ -9748,9 +9850,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr "Opis"
-
 msgid "Timespan"
 msgstr ""
 
@@ -12895,15 +12994,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr "Prednastavitve"
 
@@ -13009,6 +13099,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13258,14 +13351,6 @@ 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 ""
 
@@ -13329,9 +13414,6 @@ msgid ""
 "{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 ""
 
@@ -14569,9 +14651,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14668,10 +14747,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15259,6 +15334,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17296,7 +17375,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23122,6 +23202,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23180,6 +23263,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23261,6 +23347,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23282,9 +23383,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23879,6 +23977,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24290,6 +24391,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24733,6 +24837,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25936,6 +26043,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26116,10 +26226,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26167,9 +26273,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26513,11 +26616,6 @@ msgid ""
 "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 ""
 
@@ -27128,13 +27226,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28431,6 +28529,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28446,77 +28682,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28567,27 +28808,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28728,160 +28948,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28931,17 +29088,6 @@ 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 ""
 
@@ -29378,18 +29524,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35139,26 +35273,6 @@ 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 ""
 
@@ -35329,6 +35443,26 @@ msgstr ""
 "Izbranjim objektom doda ''wikipedia'' oznako, ki ustreza povezavi do "
 "izbranega členka"
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/sq.po b/i18n/po/sq.po
index 82d0442..225f0de 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+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: 2017-09-03 04:33+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:31+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -387,6 +387,34 @@ msgstr ""
 msgid "Delete selected objects."
 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 "Delete Layer"
 msgstr ""
 
@@ -1293,29 +1321,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2724,34 +2738,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2783,6 +2769,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2902,6 +2911,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3009,6 +3030,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr "E PANJOHUR"
 
@@ -3052,6 +3076,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3688,6 +3715,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4728,9 +4809,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4776,6 +4854,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr ""
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4797,9 +4878,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -5000,6 +5078,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5252,6 +5338,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7034,6 +7124,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7256,9 +7349,6 @@ 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."
@@ -8186,15 +8276,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8223,33 +8313,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8373,6 +8436,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8506,6 +8596,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8515,6 +8611,9 @@ msgstr ""
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8659,6 +8758,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9698,9 +9800,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12837,15 +12936,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -12951,6 +13041,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13200,14 +13293,6 @@ 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 ""
 
@@ -13271,9 +13356,6 @@ msgid ""
 "{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 ""
 
@@ -14505,9 +14587,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14604,10 +14683,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15195,6 +15270,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17232,7 +17311,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23058,6 +23138,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23116,6 +23199,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23197,6 +23283,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23218,9 +23319,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23815,6 +23913,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24226,6 +24327,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24669,6 +24773,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25872,6 +25979,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26052,10 +26162,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26103,9 +26209,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26449,11 +26552,6 @@ msgid ""
 "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 ""
 
@@ -27064,13 +27162,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28367,6 +28465,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28382,77 +28618,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28503,27 +28744,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28664,160 +28884,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28867,17 +29024,6 @@ 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 ""
 
@@ -29314,18 +29460,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35071,26 +35205,6 @@ 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 ""
 
@@ -35259,6 +35373,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/sr.po b/i18n/po/sr.po
index 2177d0d..4ade5cf 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+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: 2017-09-03 04:58+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:57+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: sr\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -388,6 +388,34 @@ msgstr "Уклони"
 msgid "Delete selected objects."
 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 "Delete Layer"
 msgstr ""
 
@@ -1294,29 +1322,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2725,34 +2739,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2784,6 +2770,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2903,6 +2912,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3010,6 +3031,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr "НЕПОЗНАТО"
 
@@ -3053,6 +3077,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3689,6 +3716,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4729,9 +4810,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4777,6 +4855,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr "Иницијализација ОСМ АПИ-ја"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4798,9 +4879,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -5001,6 +5079,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5253,6 +5339,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7035,6 +7125,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7257,9 +7350,6 @@ 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."
@@ -8187,15 +8277,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8224,33 +8314,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8374,6 +8437,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8507,6 +8597,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8516,6 +8612,9 @@ msgstr ""
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8661,6 +8760,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9700,9 +9802,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12839,15 +12938,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -12953,6 +13043,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13202,14 +13295,6 @@ 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 ""
 
@@ -13273,9 +13358,6 @@ msgid ""
 "{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 ""
 
@@ -14507,9 +14589,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14606,10 +14685,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15197,6 +15272,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17234,7 +17313,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23060,6 +23140,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23118,6 +23201,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23199,6 +23285,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23220,9 +23321,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23817,6 +23915,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24228,6 +24329,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24671,6 +24775,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25874,6 +25981,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26054,10 +26164,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26105,9 +26211,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26451,11 +26554,6 @@ msgid ""
 "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 ""
 
@@ -27066,13 +27164,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28369,6 +28467,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28384,77 +28620,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28505,27 +28746,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28666,160 +28886,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28869,17 +29026,6 @@ 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 ""
 
@@ -29316,18 +29462,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35073,26 +35207,6 @@ 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 ""
 
@@ -35261,6 +35375,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/sv.po b/i18n/po/sv.po
index a67b0eb..6656bed 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: 2017-09-02 22:59+0200\n"
-"PO-Revision-Date: 2017-02-22 12:40+0000\n"
-"Last-Translator: Erik <Unknown>\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
+"PO-Revision-Date: 2017-09-29 07:08+0000\n"
+"Last-Translator: Tomas Marklund <tomasmarklund75 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: 2017-09-03 05:01+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 04:59+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: sv\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -401,6 +401,45 @@ msgstr "Radera"
 msgid "Delete selected objects."
 msgstr "Radera markerade objekt."
 
+msgid "Delete confirmation"
+msgstr "Bekräfta borttagning"
+
+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 ""
+"Du håller på att ta bort noder utanför det område som du har hämtat hem.<br> "
+"Detta kan leda till problem eftersom andra objekt (som du inte ser) kanske "
+"använder dem.<br> Vill du verkligen ta bort dem?"
+
+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 ""
+"Du håller på att radera ofärdiga objekt.<br>Detta kommer att orsaka problem "
+"då du inte kan se det färdiga objektet.<br>Vill du verkligen radera?"
+
+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] ""
+"Du håller på att radera {0} relation: {1}<br/>Detta steg är sällan "
+"nödvändigt och kan inte enkelt återställas efter att ha blivit uppladdat "
+"till servern.<br/>Är du säker på att du vill radera?"
+msgstr[1] ""
+"Du håller på att radera {0} relationer: {1}<br/>Detta steg är sällan "
+"nödvändigt och kan inte enkelt återställas efter att ha blivit uppladdat "
+"till servern.<br/>Är du säker på att du vill radera?"
+
+msgid "Delete relation?"
+msgstr "Radera relation"
+
 msgid "Delete Layer"
 msgstr "Radera lager"
 
@@ -1384,34 +1423,14 @@ msgstr " [id: {0}]"
 msgid "Segment {0}: {1}"
 msgstr "Segment {0}: {1}"
 
-msgid "You must select two or more nodes to split a circular way."
-msgstr "Du måste välja två eller fler noder för att dela en sluten sträcka."
-
-msgid ""
-"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
-"middle of the way.)"
-msgstr ""
-"Sträckan kan inte delas vid de valda noderna. (Tips: Välj noder mitt på "
-"sträckan.)"
-
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
-msgstr ""
-"En roll baserad på ett relationsmedlemsskap kopieras till de nya vägarna. "
-"<br>Du borde verifiera detta och korrigera det om nödvändigt."
+msgid "Search preset"
+msgstr "Sök snabbval"
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
-"Ett relationsmedlemsskap kopierades till alla nya vägar.<br>Du borde "
-"verifiera detta och korrigera om nödvändigt."
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] "Dela linjen {0} till {1} del"
-msgstr[1] "Dela linjen {0} till {1} delar"
+msgid "Search presets"
+msgstr "Sök snabbval"
 
 msgid "Discourage upload"
 msgstr ""
@@ -2925,45 +2944,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] "Ta bort {0} relation"
 msgstr[1] "Ta bort {0} relationer"
 
-msgid "Delete confirmation"
-msgstr "Bekräfta borttagning"
-
-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 ""
-"Du håller på att ta bort noder utanför det område som du har hämtat hem.<br> "
-"Detta kan leda till problem eftersom andra objekt (som du inte ser) kanske "
-"använder dem.<br> Vill du verkligen ta bort dem?"
-
-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 ""
-"Du håller på att radera ofärdiga objekt.<br>Detta kommer att orsaka problem "
-"då du inte kan se det färdiga objektet.<br>Vill du verkligen radera?"
-
-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] ""
-"Du håller på att radera {0} relation: {1}<br/>Detta steg är sällan "
-"nödvändigt och kan inte enkelt återställas efter att ha blivit uppladdat "
-"till servern.<br/>Är du säker på att du vill radera?"
-msgstr[1] ""
-"Du håller på att radera {0} relationer: {1}<br/>Detta steg är sällan "
-"nödvändigt och kan inte enkelt återställas efter att ha blivit uppladdat "
-"till servern.<br/>Är du säker på att du vill radera?"
-
-msgid "Delete relation?"
-msgstr "Radera relation"
-
 msgid "Move {0} node"
 msgid_plural "Move {0} nodes"
 msgstr[0] "Flytta {0} nod"
@@ -2995,6 +2975,35 @@ msgstr[1] "Valde {0} objekt"
 msgid "Sequence: {0}"
 msgstr "Sekvens: {0}"
 
+msgid "You must select two or more nodes to split a circular way."
+msgstr "Du måste välja två eller fler noder för att dela en sluten sträcka."
+
+msgid ""
+"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
+"middle of the way.)"
+msgstr ""
+"Sträckan kan inte delas vid de valda noderna. (Tips: Välj noder mitt på "
+"sträckan.)"
+
+msgid ""
+"A role based relation membership was copied to all new ways.<br>You should "
+"verify this and correct it when necessary."
+msgstr ""
+"En roll baserad på ett relationsmedlemsskap kopieras till de nya vägarna. "
+"<br>Du borde verifiera detta och korrigera det om nödvändigt."
+
+msgid ""
+"A relation membership was copied to all new ways.<br>You should verify this "
+"and correct it when necessary."
+msgstr ""
+"Ett relationsmedlemsskap kopierades till alla nya vägar.<br>Du borde "
+"verifiera detta och korrigera om nödvändigt."
+
+msgid "Split way {0} into {1} part"
+msgid_plural "Split way {0} into {1} parts"
+msgstr[0] "Dela linjen {0} till {1} del"
+msgstr[1] "Dela linjen {0} till {1} delar"
+
 msgid "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] "Transformera en nod"
@@ -3130,6 +3139,18 @@ msgstr "Ogiltigt latitud-värde ''{0}''"
 msgid "Illegal longitude value ''{0}''"
 msgstr "Ogiltigt longitud-värde ''{0}''"
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr "Misslyckades med att skapa saknad cache-katalog: {0}"
 
@@ -3256,6 +3277,9 @@ msgstr "Imperisk"
 msgid "Nautical Mile"
 msgstr "Sjömil"
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr "Förväntade ett Ej tomt värde för parametern ''{0}'', fick ''{1}''"
+
 msgid "UNKNOWN"
 msgstr "OKÄND"
 
@@ -3299,6 +3323,9 @@ msgctxt "compass"
 msgid "E"
 msgstr "Ö"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr "Datum av bakgrund: {0}"
 
@@ -3957,6 +3984,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr "Beskrivning"
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr "Visa denna hjälptext"
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr "Exempel"
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr "GRS80"
 
@@ -5031,9 +5112,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr "Förskjutning"
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr "Förväntade ett Ej tomt värde för parametern ''{0}'', fick ''{1}''"
-
 msgid "Outdated Java version"
 msgstr "Föråldrad Java-version"
 
@@ -5083,6 +5161,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr "Initierar OSM-API"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -5104,9 +5185,6 @@ msgstr "användning"
 msgid "options"
 msgstr "alternativ"
 
-msgid "Show this help"
-msgstr "Visa denna hjälptext"
-
 msgid "Standard unix geometry argument"
 msgstr "Standard unix-geometri-argument"
 
@@ -5315,6 +5393,14 @@ msgid ""
 "now?"
 msgstr ""
 
+msgid "You have {0} unread message."
+msgid_plural "You have {0} unread messages."
+msgstr[0] "Du har {0} oläst meddelande."
+msgstr[1] "Du har {0} olästa meddelanden."
+
+msgid "Click here to see your inbox."
+msgstr ""
+
 msgctxt "menu"
 msgid "File"
 msgstr "Arkiv"
@@ -5571,6 +5657,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr "Du har stött på en bugg i JOSM"
 
@@ -7388,6 +7478,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr "Uppdatera ändringsuppsättningen från OSM-servern"
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7614,9 +7707,6 @@ msgstr "URL: "
 msgid "Please enter or paste an URL to retrieve changesets from the OSM API."
 msgstr ""
 
-msgid "Examples"
-msgstr "Exempel"
-
 msgid ""
 "Note that changeset queries are currently always submitted to ''{0}'', "
 "regardless of the host, port and path of the URL entered below."
@@ -8525,7 +8615,7 @@ msgid "Download referrers (parent relations and ways)"
 msgstr ""
 
 msgid "Download from OSM"
-msgstr ""
+msgstr "Ladda ner från OSM"
 
 msgid "Data Sources and Types:"
 msgstr "Datakällor och -typer"
@@ -8566,6 +8656,11 @@ msgstr ""
 "Hämtningsområdets storlek är ok, kommer troligen accepteras av servern."
 
 msgid "Download from Overpass API"
+msgstr "Ladda ner från Overpass API"
+
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
 msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
@@ -8574,11 +8669,6 @@ msgstr ""
 msgid "Query Wizard"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
-msgstr ""
-
 msgid "Your saved queries:"
 msgstr ""
 
@@ -8605,33 +8695,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr "historiskt"
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8755,6 +8818,33 @@ msgstr "Glidande karta"
 msgid "Tile Numbers"
 msgstr "Rutnummer"
 
+msgid "history"
+msgstr "historiskt"
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8888,6 +8978,12 @@ msgstr "Zooma till den här noden i det nuvarande datalagret"
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr "Sträcka {0}"
 
@@ -8897,6 +8993,9 @@ msgstr "Relation {0}"
 msgid "Object"
 msgstr "Objekt"
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -9057,6 +9156,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "Ge en kort kommentar till de ändringar som du skickar in:"
 
@@ -10131,9 +10233,6 @@ msgid_plural "{0} tracks"
 msgstr[0] "{0} spår"
 msgstr[1] "{0} spår"
 
-msgid "Description"
-msgstr "Beskrivning"
-
 msgid "Timespan"
 msgstr ""
 
@@ -13303,7 +13402,7 @@ msgid "This preset also sets: {0}"
 msgstr ""
 
 msgid "Edit also …"
-msgstr ""
+msgstr "Redigera även ..."
 
 msgid "Apply Preset"
 msgstr "Tillämpa snabbval"
@@ -13360,15 +13459,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr "Fel vid tolkning {0}: "
 
-msgid "Search preset"
-msgstr "Sök snabbval"
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr "Sök snabbval"
-
 msgid "Presets"
 msgstr "Snabbval"
 
@@ -13474,6 +13564,9 @@ msgstr "Alla filer (*.*)"
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13728,14 +13821,6 @@ msgstr ""
 msgid "get number of unread messages"
 msgstr ""
 
-msgid "You have {0} unread message."
-msgid_plural "You have {0} unread messages."
-msgstr[0] "Du har {0} oläst meddelande."
-msgstr[1] "Du har {0} olästa meddelanden."
-
-msgid "Click here to see your inbox."
-msgstr ""
-
 msgid "Message notifier"
 msgstr ""
 
@@ -13799,9 +13884,6 @@ msgid ""
 "{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 ""
 
@@ -15123,9 +15205,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -15222,10 +15301,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15817,6 +15892,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -15830,14 +15909,14 @@ msgid "spur"
 msgstr "stickspår"
 
 msgid "crossover"
-msgstr ""
+msgstr "korsning"
 
 msgid "Electrified"
 msgstr "Elektrifierad"
 
 msgctxt "electrified"
 msgid "contact_line"
-msgstr ""
+msgstr "kontaktledning"
 
 msgctxt "electrified"
 msgid "no"
@@ -15852,10 +15931,10 @@ msgid "rail"
 msgstr ""
 
 msgid "Voltage in Volts (V)"
-msgstr ""
+msgstr "Spänning i volt (V)"
 
 msgid "Frequency in Hertz (Hz)"
-msgstr ""
+msgstr "Frekvens i Hertz (Hz)"
 
 msgid "16.67"
 msgstr ""
@@ -15865,7 +15944,7 @@ msgstr "16.7"
 
 msgctxt "railway"
 msgid "Tracks"
-msgstr ""
+msgstr "Spår"
 
 msgid "Gauge (mm)"
 msgstr "Spårvidd (mm)"
@@ -16173,7 +16252,7 @@ msgstr ""
 
 msgctxt "sport"
 msgid "motocross"
-msgstr ""
+msgstr "motocross"
 
 msgctxt "sport"
 msgid "motor"
@@ -17268,7 +17347,7 @@ msgstr "trottoar"
 
 msgctxt "footway"
 msgid "crossing"
-msgstr ""
+msgstr "korsning"
 
 msgid "Steps"
 msgstr "Trappsteg"
@@ -17388,7 +17467,7 @@ msgid "Button operated"
 msgstr ""
 
 msgid "Sound signals"
-msgstr ""
+msgstr "Ljudsignaler"
 
 msgid "Crossing attendant"
 msgstr ""
@@ -17409,7 +17488,7 @@ msgid "Give Way"
 msgstr "Väjningsplikt"
 
 msgid "Mini-Roundabout"
-msgstr ""
+msgstr "Mini-cirkulationsplats"
 
 msgid "clockwise"
 msgstr "medurs"
@@ -17464,13 +17543,13 @@ msgid "Turning Loop"
 msgstr "Vändslinga"
 
 msgid "City Limit Sign"
-msgstr ""
+msgstr "Skylt för stadsgräns"
 
 msgid "Second Name"
 msgstr "Andra namn"
 
 msgid "Speed Limit Sign"
-msgstr ""
+msgstr "Skylt för hastighetsbegränsning"
 
 msgid "Speed Camera"
 msgstr "Hastighetskamera"
@@ -17479,14 +17558,14 @@ msgid "Traffic Mirror"
 msgstr "Trafikspegel"
 
 msgid "Highway milestone"
-msgstr ""
+msgstr "Milsten"
 
 msgid "Distance (kilometers)"
 msgstr ""
 
 msgctxt "junction=yes"
 msgid "Named Junction"
-msgstr ""
+msgstr "Namngiven korsning"
 
 msgid ""
 "Used in some countries for a named road junction who’s name serves for local "
@@ -17593,7 +17672,7 @@ msgid "Retaining Wall"
 msgstr "Stödmur"
 
 msgid "Jersey Barrier"
-msgstr ""
+msgstr "Barriär"
 
 msgctxt "Barrier"
 msgid "Ditch"
@@ -17606,7 +17685,7 @@ msgid "Tactile paving"
 msgstr ""
 
 msgid "Entrance (Barrier Opening)"
-msgstr ""
+msgstr "Ingång (öppning)"
 
 msgid "Gate"
 msgstr "Grind"
@@ -17632,7 +17711,7 @@ msgid "Bump Gate"
 msgstr "Fösgrind"
 
 msgid "Kissing Gate"
-msgstr "Manshål"
+msgstr ""
 
 msgid "Chain"
 msgstr "Kedja"
@@ -17662,7 +17741,7 @@ msgid "Building Passage"
 msgstr "Passage i byggnad"
 
 msgid "Arcade"
-msgstr ""
+msgstr "Arkad"
 
 msgid "Open on left side"
 msgstr ""
@@ -17671,7 +17750,7 @@ msgid "Open on right side"
 msgstr ""
 
 msgid "Colonnade"
-msgstr ""
+msgstr "Pelargång"
 
 msgid "Avalanche Protector"
 msgstr "Lavinskydd"
@@ -17720,10 +17799,10 @@ msgid "Dam"
 msgstr "Damm"
 
 msgid "Groyne"
-msgstr "Vågbrytare"
+msgstr "Vågbrytare (mindre)"
 
 msgid "Breakwater"
-msgstr ""
+msgstr "Vågbrytare"
 
 msgid "Culvert"
 msgstr ""
@@ -17757,7 +17836,7 @@ msgstr "Täckt reservoar"
 
 msgctxt "natural"
 msgid "Water"
-msgstr ""
+msgstr "Vatten"
 
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
@@ -17866,7 +17945,8 @@ msgid "Bay"
 msgstr "Bukt"
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -17911,7 +17991,7 @@ msgid "public"
 msgstr "offentlig"
 
 msgid "Marine Fuel"
-msgstr ""
+msgstr "Båtmack"
 
 msgid "Agip"
 msgstr ""
@@ -18076,7 +18156,7 @@ msgid "tourism"
 msgstr "turism"
 
 msgid "freight"
-msgstr ""
+msgstr "gods"
 
 msgid "Narrow Gauge Rail"
 msgstr "Smalspår"
@@ -18112,10 +18192,10 @@ msgid "Level Crossing"
 msgstr "Plankorsning"
 
 msgid "Traffic lights"
-msgstr "Trafikljus"
+msgstr "Ljussignaler"
 
 msgid "Barrier"
-msgstr "Barriär"
+msgstr "Bommar"
 
 msgctxt "crossing:barrier"
 msgid "yes"
@@ -18127,15 +18207,15 @@ msgstr "nej"
 
 msgctxt "crossing:barrier"
 msgid "half"
-msgstr "halv"
+msgstr "halvbommar"
 
 msgctxt "crossing:barrier"
 msgid "full"
-msgstr "full"
+msgstr "helbommar"
 
 msgctxt "crossing:barrier"
 msgid "double_half"
-msgstr "double_half"
+msgstr "dubbla halvbommar"
 
 msgid "Crossing"
 msgstr "Järnvägsövergång"
@@ -18156,7 +18236,7 @@ msgid "Railway Signal"
 msgstr ""
 
 msgid "Railway milestone"
-msgstr ""
+msgstr "Kilometertavla"
 
 msgid "Aerialway"
 msgstr "Linbana"
@@ -18771,10 +18851,10 @@ msgid "Guest House/Bed & Breakfast"
 msgstr ""
 
 msgid "Apartment"
-msgstr ""
+msgstr "Lägenhet"
 
 msgid "Number of apartments"
-msgstr ""
+msgstr "Antal lägenheter"
 
 msgid "Chalet"
 msgstr "Fäbod"
@@ -20481,7 +20561,7 @@ msgid "Flagpole"
 msgstr "Flaggstång"
 
 msgid "Cross"
-msgstr ""
+msgstr "Kors"
 
 msgid "Works"
 msgstr "Fabrik"
@@ -20534,7 +20614,7 @@ msgid "wine"
 msgstr "vin"
 
 msgid "Bunker Silo"
-msgstr "bunkersilo"
+msgstr "Bunkersilo"
 
 msgid "Crane"
 msgstr "Kran"
@@ -21738,10 +21818,10 @@ msgid "Seafood"
 msgstr "Skaldjur"
 
 msgid "Dairy"
-msgstr ""
+msgstr "Mjölkprodukter"
 
 msgid "Cheese"
-msgstr ""
+msgstr "Ost"
 
 msgid "Deli (Fine Food)"
 msgstr ""
@@ -21750,13 +21830,13 @@ msgid "Pastry"
 msgstr ""
 
 msgid "Confectionery"
-msgstr ""
+msgstr "Konfektyr"
 
 msgid "Tea"
 msgstr ""
 
 msgid "Coffee"
-msgstr ""
+msgstr "Kaffe"
 
 msgid "Public Market"
 msgstr ""
@@ -21855,7 +21935,7 @@ msgid "Kitchen"
 msgstr "Kök"
 
 msgid "Houseware"
-msgstr ""
+msgstr "Husgeråd"
 
 msgid "Curtain"
 msgstr "Gardiner"
@@ -21900,7 +21980,7 @@ msgid "Chemist"
 msgstr "Hygien"
 
 msgid "Cosmetics"
-msgstr ""
+msgstr "Kosmetika"
 
 msgid "Perfumery"
 msgstr ""
@@ -21909,7 +21989,7 @@ msgid "Beauty"
 msgstr "Skönhet"
 
 msgid "Tobacco"
-msgstr ""
+msgstr "Tobak"
 
 msgid "Hairdresser/Barber"
 msgstr "Frisör"
@@ -21999,7 +22079,7 @@ msgid "Funeral Directors"
 msgstr ""
 
 msgid "Vending Machine"
-msgstr ""
+msgstr "Varuautomat"
 
 msgid "Vending products"
 msgstr "Varor till försäljning"
@@ -22017,7 +22097,7 @@ msgid "cigarettes"
 msgstr "cigaretter"
 
 msgid "coffee"
-msgstr ""
+msgstr "kaffe"
 
 msgid "condoms"
 msgstr "kondomer"
@@ -22174,7 +22254,7 @@ msgstr "Kontor"
 
 msgctxt "office"
 msgid "Accountant"
-msgstr ""
+msgstr "Revisor"
 
 msgctxt "office"
 msgid "Administrative"
@@ -22524,7 +22604,7 @@ msgid "Cave Entrance"
 msgstr "Grottöppning"
 
 msgid "The entrance to a cave."
-msgstr ""
+msgstr "Öppningen till en grotta."
 
 msgid "Island"
 msgstr "Ö"
@@ -23204,7 +23284,7 @@ msgid "potential"
 msgstr ""
 
 msgid "Contact (Common Schema)"
-msgstr ""
+msgstr "Kontaktinformation"
 
 msgid "Email Address"
 msgstr "E-postadress"
@@ -23216,7 +23296,7 @@ msgid "Image"
 msgstr "Bild"
 
 msgid "Contact (Schema with ''contact:*'' Prefix)"
-msgstr ""
+msgstr "Kontaktinformation (med contact:* -prefix)"
 
 msgctxt "description=*"
 msgid "A short text with additional information."
@@ -23705,6 +23785,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23763,6 +23846,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23844,6 +23930,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23865,9 +23966,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -24462,6 +24560,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24873,6 +24974,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -25316,6 +25420,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -26492,7 +26599,7 @@ msgid ""
 msgstr ""
 
 msgid "voltage should be in volts with no units/delimiter/spaces"
-msgstr ""
+msgstr "spänning skall anges i volt utan enhet/avgränsare/mellanslag"
 
 msgid "unusual {0} specification"
 msgstr ""
@@ -26521,6 +26628,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26703,10 +26813,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26754,9 +26860,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -27110,11 +27213,6 @@ msgid ""
 "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 "Enkel hämtning längs med en lång kedja av sammanbundna sträckor"
 
@@ -27400,7 +27498,7 @@ msgid "Gain"
 msgstr ""
 
 msgid "Tracks"
-msgstr ""
+msgstr "Spår"
 
 msgid "Elevation profile for track ''{0}''."
 msgstr ""
@@ -27725,13 +27823,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -29029,6 +29127,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr "Inga adressnoder hittades inuti några byggnader"
 
+msgid "Auto sourcing"
+msgstr "Automatkälla"
+
+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 "Extract commune boundary"
+msgstr "Extrahera commune-gränser"
+
+msgid "Only on vectorized layers"
+msgstr "Endast vektoriserade lager"
+
+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 "Hämta bild från den franska Cadastre-WMS:en"
+
+msgid "Cadastre: {0}"
+msgstr "Cadastre: {0}"
+
+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 "Läs in lager från cache"
+
+msgid "Load location from cache (only if cache is enabled)"
+msgstr "Hämta plats från cachen (enbart om cache är aktiverad)"
+
+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 "Byt plats"
+
+msgid "Set a new location for the next request"
+msgstr "Ange en ny plats för nästa förfrågan"
+
+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 "Lägg till ett nytt lager"
+
+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 "Hämta ny cookie (sessions-timeout)"
+
+msgid "Save image as..."
+msgstr "Spara bild som..."
+
+msgid "PNG files (*.png)"
+msgstr "PNG-filer (*.png)"
+
+msgid "GeoTiff files (*.tif)"
+msgstr "GeoTiff-filer (*.tif)"
+
+msgid "Export image (only raster images)"
+msgstr ""
+
+msgid ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -29044,77 +29280,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
+msgstr "Justera WMS"
+
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Add \"source=...\" to elements?"
+msgstr "Lägg \"source=...\" till objekt?"
+
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Objects:"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "address"
+msgstr "adress"
+
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "symbol"
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download water bodies in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "parcel"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
-msgstr "CadastreGrabber: Ogiltig URL."
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
-msgstr "Välj en av..."
+msgid "section"
+msgstr ""
 
-msgid "Select commune"
-msgstr "Välj commune"
+msgid "Select to download cadastral sections in the selected download area."
+msgstr ""
 
-msgid "Auto sourcing"
-msgstr "Automatkälla"
+msgid "locality"
+msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -29165,27 +29406,6 @@ msgstr ""
 msgid "low"
 msgstr "låg"
 
-msgid "symbol"
-msgstr ""
-
-msgid "parcel"
-msgstr ""
-
-msgid "parcel number"
-msgstr ""
-
-msgid "address"
-msgstr "adress"
-
-msgid "locality"
-msgstr ""
-
-msgid "section"
-msgstr ""
-
-msgid "commune"
-msgstr ""
-
 msgid "Enable automatic caching."
 msgstr "Aktivera automatisk cachning."
 
@@ -29330,160 +29550,97 @@ msgstr ""
 msgid "Unexpected file extension. {0}"
 msgstr ""
 
-msgid "Add \"source=...\" to elements?"
-msgstr "Lägg \"source=...\" till objekt?"
-
-msgid "Downloading {0}"
-msgstr "Hämtar {0}"
-
-msgid "Contacting WMS Server..."
-msgstr "Kontaktar WMS-servern..."
-
-msgid "Create buildings"
-msgstr "Skapa byggnader"
-
 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 "Extrahera den gräns som passar bäst..."
-
-msgid "Create boundary"
-msgstr "Skapa gräns"
-
-msgid "Contacting cadastre WMS ..."
-msgstr ""
-
-msgid "Image already loaded"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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 "Extrahera commune-gränser"
-
-msgid "Only on vectorized layers"
-msgstr "Endast vektoriserade lager"
-
-msgid "Cancel current grab"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Cancel current grab (only vector images)"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Cadastre grab"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Download Image from French Cadastre WMS"
-msgstr "Hämta bild från den franska Cadastre-WMS:en"
-
-msgid "Cadastre: {0}"
-msgstr "Cadastre: {0}"
-
-msgid "Georeference an image"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "Load layer from cache"
-msgstr "Läs in lager från cache"
-
-msgid "Load location from cache (only if cache is enabled)"
-msgstr "Hämta plats från cachen (enbart om cache är aktiverad)"
-
-msgid "{0} not allowed with the current projection"
-msgstr ""
+msgid "CadastreGrabber: Illegal url."
+msgstr "CadastreGrabber: Ogiltig URL."
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
-msgstr ""
+msgid "Choose from..."
+msgstr "Välj en av..."
 
-msgid "Change location"
-msgstr "Byt plats"
+msgid "Select commune"
+msgstr "Välj commune"
 
-msgid "Set a new location for the next request"
-msgstr "Ange en ny plats för nästa förfrågan"
+msgid "Downloading {0}"
+msgstr "Hämtar {0}"
 
-msgid "Add a new municipality layer"
-msgstr ""
+msgid "Contacting WMS Server..."
+msgstr "Kontaktar WMS-servern..."
 
-msgid "Commune"
-msgstr ""
+msgid "Create buildings"
+msgstr "Skapa byggnader"
 
 msgid ""
-"<html>Enter the town,village or city name.<br>Use the syntax and punctuation "
-"known by www.cadastre.gouv.fr .</html>"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Departement"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "<html>Departement number (optional)</html>"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Add new layer"
-msgstr "Lägg till ett nytt lager"
+msgid "Extract best fitting boundary..."
+msgstr "Extrahera den gräns som passar bäst..."
 
-msgid "Open Cadastre Preferences"
-msgstr ""
+msgid "Create boundary"
+msgstr "Skapa gräns"
 
-msgid "Refine georeferencing"
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "Reset cookie"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
-msgstr "Hämta ny cookie (sessions-timeout)"
-
-msgid "Save image as..."
-msgstr "Spara bild som..."
-
-msgid "PNG files (*.png)"
-msgstr "PNG-filer (*.png)"
-
-msgid "GeoTiff files (*.tif)"
-msgstr "GeoTiff-filer (*.tif)"
-
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -29535,17 +29692,6 @@ msgstr "Klicka på det andra hörnet för bildbeskärning"
 msgid "Click second Lambert crosspiece for georeferencing"
 msgstr ""
 
-msgid "Adjust WMS"
-msgstr "Justera WMS"
-
-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 ""
 
@@ -29984,20 +30130,6 @@ msgid ""
 "to cancel the download."
 msgstr ""
 
-msgid "Split area"
-msgstr ""
-
-msgid "Splits an area by an untagged way."
-msgstr "Delar upp en yta med hjälp av en otaggad sträcka."
-
-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 ""
-"Den valda ytan kan inte delas upp eftersom den är medlem i en relation.\n"
-"Ta bort ytan från relationen innan du delar den."
-
 msgid "TangoGPS Files (*.log)"
 msgstr ""
 
@@ -30029,7 +30161,7 @@ msgid "Please select 1 or more ways to download along"
 msgstr "Välj en eller fler sträckor att hämta data längs med"
 
 msgid "Download from OSM along selected ways"
-msgstr ""
+msgstr "Ladda ner från OSM längs valda sträckor"
 
 msgid "{0} intermediate nodes to download."
 msgstr "{0} mellanliggande noder att hämta"
@@ -33161,13 +33293,13 @@ msgid "Select GPX file"
 msgstr ""
 
 msgid "The GPX file contained no tracks or waypoints."
-msgstr ""
+msgstr "GPX-filen innehåll inga spår eller waypoints"
 
 msgid "Create Stops from GPX"
 msgstr ""
 
 msgid "Tracks in this GPX file:"
-msgstr ""
+msgstr "Spår i denna GPX-fil:"
 
 msgid "Detach"
 msgstr ""
@@ -35554,22 +35686,23 @@ msgid "Range of attached ways count"
 msgstr ""
 
 msgid "Adjacent nodes"
-msgstr ""
+msgstr "Närliggande noder"
 
 msgid "Select adjacent nodes"
-msgstr ""
+msgstr "Välj närliggande noder"
 
 msgid "Adjacent ways"
-msgstr ""
+msgstr "Närliggande sträckor"
 
 msgid "Adjacent ways will be selected. Nodes will be deselected."
 msgstr ""
+"Närliggande sträckor kommer att bli markerade. Noder kommer att avmarkeras."
 
 msgid "All connected ways"
-msgstr ""
+msgstr "Alla kopplade vägar"
 
 msgid "Select all connected ways"
-msgstr ""
+msgstr "Välj alla kopplade vägar"
 
 msgid "Intersecting ways"
 msgstr ""
@@ -35602,10 +35735,10 @@ msgid "Too many ways are added: {0}!"
 msgstr ""
 
 msgid "All inside [testing]"
-msgstr ""
+msgstr "Alla inom [test]"
 
 msgid "Select all inside selected polygons"
-msgstr ""
+msgstr "Välj allt inom valda polygoner"
 
 msgid ""
 "Nothing found. Please select some closed ways or multipolygons to find all "
@@ -35633,16 +35766,16 @@ msgid "Please select one or two ways for this action"
 msgstr ""
 
 msgid "Select last modified nodes"
-msgstr ""
+msgstr "Välj senast modifierade noder"
 
 msgid "Select last modified ways"
-msgstr ""
+msgstr "Välj senast modifierade sträckor"
 
 msgid "Select Way Nodes"
-msgstr ""
+msgstr "Välj noder inom sträcka"
 
 msgid "Select all nodes of a selected way."
-msgstr ""
+msgstr "Välj alla noder tillhörande en val sträcka."
 
 msgid "Undo selection"
 msgstr ""
@@ -35651,7 +35784,7 @@ msgid "Reselect last added object or selection form history"
 msgstr ""
 
 msgid "Unselect nodes"
-msgstr ""
+msgstr "Avmarkera noder"
 
 msgid "Removes all nodes from selection"
 msgstr "Tar bort alla noder från urval"
@@ -35776,26 +35909,6 @@ msgstr "upprepa"
 msgid "mute"
 msgstr "ljud av"
 
-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 "Walking Papers: {0}"
-
-msgid "Walking Papers layer ({0}) in zoom {1}"
-msgstr "Walking Papers-lager ({0}) på zoom {1}"
-
 msgid "Way Download"
 msgstr "Sträckhämtning"
 
@@ -35976,6 +36089,26 @@ msgstr ""
 "Lägger till en ''wikipedia'' tagg till de valda objekten angående denna "
 "artikel"
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "Den ultimata WMS Supersnabba Turbo Utmaningen II"
 
diff --git a/i18n/po/ta.po b/i18n/po/ta.po
index 60451fe..00387a0 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
 "PO-Revision-Date: 2017-06-06 01:06+0000\n"
 "Last-Translator: Stephane <Unknown>\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: 2017-09-03 05:01+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 05:00+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "X-Poedit-Country: INDIA\n"
 "Language: ta\n"
 "X-Poedit-Language: Tamil\n"
@@ -395,6 +395,34 @@ msgstr "நீக்கு"
 msgid "Delete selected objects."
 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 "Delete Layer"
 msgstr "அடுக்கை நீக்கு"
 
@@ -1324,32 +1352,15 @@ msgstr " [id: {0}]"
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
-"தேர்ந்தெடுத்த புள்ளிகளில் வழியை பிரிக்க முடியாது. (நினைவுக்கு: வழி "
-"நடுவிலுள்ள புள்ளிகளைத் தேர்ந்தெடு)"
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2760,34 +2771,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2819,6 +2802,32 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2938,6 +2947,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3045,6 +3066,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr "அறியாத"
 
@@ -3088,6 +3112,9 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3724,6 +3751,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr "இந்த உதவியை காண்பி"
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4764,9 +4845,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4812,6 +4890,9 @@ msgstr "உள்கட்டமைக்கப்பட்ட தரவு த
 msgid "Initializing OSM API"
 msgstr "OSM API துவக்குகிறது"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr "உள் நடைபாட்டு தரவுகள் ஆரம்பம்"
 
@@ -4833,9 +4914,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr "இந்த உதவியை காண்பி"
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -5036,6 +5114,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5288,6 +5374,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7070,6 +7160,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7293,9 +7386,6 @@ 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."
@@ -8223,15 +8313,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8260,33 +8350,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8410,6 +8473,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8543,6 +8633,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8552,6 +8648,9 @@ msgstr ""
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8696,6 +8795,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9735,9 +9837,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12876,15 +12975,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -12990,6 +13080,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13239,14 +13332,6 @@ 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 ""
 
@@ -13310,9 +13395,6 @@ msgid ""
 "{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 ""
 
@@ -14544,9 +14626,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14643,10 +14722,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15234,6 +15309,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17271,7 +17350,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23097,6 +23177,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23155,6 +23238,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23236,6 +23322,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23257,9 +23358,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23854,6 +23952,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24265,6 +24366,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24708,6 +24812,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25911,6 +26018,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26091,10 +26201,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26142,9 +26248,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26488,11 +26591,6 @@ msgid ""
 "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 ""
 
@@ -27103,13 +27201,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28406,6 +28504,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28421,77 +28657,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28542,27 +28783,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28703,160 +28923,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28906,17 +29063,6 @@ 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 ""
 
@@ -29353,18 +29499,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35116,26 +35250,6 @@ 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 ""
 
@@ -35304,6 +35418,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/te.po b/i18n/po/te.po
index c1bfd50..f24def5 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+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: 2017-09-03 05:02+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 05:00+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: te\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -387,6 +387,34 @@ msgstr ""
 msgid "Delete selected objects."
 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 "Delete Layer"
 msgstr ""
 
@@ -1293,29 +1321,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2724,34 +2738,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2783,6 +2769,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2902,6 +2911,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3009,6 +3030,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr ""
 
@@ -3052,6 +3076,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3688,6 +3715,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4728,9 +4809,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4776,6 +4854,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr ""
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4797,9 +4878,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -5000,6 +5078,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5252,6 +5338,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7034,6 +7124,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7256,9 +7349,6 @@ 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."
@@ -8186,15 +8276,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8223,33 +8313,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8373,6 +8436,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8506,6 +8596,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8515,6 +8611,9 @@ msgstr ""
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8659,6 +8758,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9698,9 +9800,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12837,15 +12936,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -12951,6 +13041,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13200,14 +13293,6 @@ 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 ""
 
@@ -13271,9 +13356,6 @@ msgid ""
 "{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 ""
 
@@ -14505,9 +14587,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14604,10 +14683,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15195,6 +15270,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17232,7 +17311,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23058,6 +23138,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23116,6 +23199,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23197,6 +23283,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23218,9 +23319,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23815,6 +23913,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24226,6 +24327,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24669,6 +24773,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25872,6 +25979,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26052,10 +26162,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26103,9 +26209,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26449,11 +26552,6 @@ msgid ""
 "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 ""
 
@@ -27064,13 +27162,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28367,6 +28465,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28382,77 +28618,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28503,27 +28744,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28664,160 +28884,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28867,17 +29024,6 @@ 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 ""
 
@@ -29314,18 +29460,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35071,26 +35205,6 @@ 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 ""
 
@@ -35259,6 +35373,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/th.po b/i18n/po/th.po
index 7528f95..dac0ca9 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+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: 2017-09-03 05:02+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 05:01+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: th\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -387,6 +387,34 @@ msgstr ""
 msgid "Delete selected objects."
 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 "Delete Layer"
 msgstr ""
 
@@ -1293,29 +1321,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2724,34 +2738,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2783,6 +2769,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2902,6 +2911,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3009,6 +3030,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr ""
 
@@ -3052,6 +3076,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3688,6 +3715,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4728,9 +4809,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4776,6 +4854,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr ""
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4797,9 +4878,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -5000,6 +5078,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5252,6 +5338,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7034,6 +7124,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7256,9 +7349,6 @@ 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."
@@ -8186,15 +8276,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8223,33 +8313,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8373,6 +8436,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8506,6 +8596,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8515,6 +8611,9 @@ msgstr ""
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8659,6 +8758,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9698,9 +9800,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12837,15 +12936,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -12951,6 +13041,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13200,14 +13293,6 @@ 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 ""
 
@@ -13271,9 +13356,6 @@ msgid ""
 "{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 ""
 
@@ -14505,9 +14587,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14604,10 +14683,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15195,6 +15270,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17232,7 +17311,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23058,6 +23138,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23116,6 +23199,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23197,6 +23283,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23218,9 +23319,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23815,6 +23913,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24226,6 +24327,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24669,6 +24773,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25872,6 +25979,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26052,10 +26162,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26103,9 +26209,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26449,11 +26552,6 @@ msgid ""
 "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 ""
 
@@ -27064,13 +27162,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28367,6 +28465,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28382,77 +28618,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28503,27 +28744,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28664,160 +28884,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28867,17 +29024,6 @@ 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 ""
 
@@ -29314,18 +29460,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35071,26 +35205,6 @@ 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 ""
 
@@ -35259,6 +35373,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/tr.po b/i18n/po/tr.po
index b6ae6ac..487da2a 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
 "PO-Revision-Date: 2017-02-06 01:25+0000\n"
 "Last-Translator: Ferhad Fidan <ferhad at f-blog.info>\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: 2017-09-03 05:02+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 05:01+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -395,6 +395,36 @@ msgstr "Sil"
 msgid "Delete selected objects."
 msgstr "Seçili Objeleri Sil."
 
+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 ""
+"İndirdiğiniz alan dışındaki bir kavşağı sileceksiniz.<br>Göremediğiniz başka "
+"objeler onu kullanıyor olabilir. <br>Gerçekten silmek istiyormusunuz?"
+
+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 "Delete Layer"
 msgstr ""
 
@@ -1326,31 +1356,14 @@ msgstr " [id: {0}]"
 msgid "Segment {0}: {1}"
 msgstr ""
 
-msgid "You must select two or more nodes to split a circular way."
-msgstr "Dairesel bir yolu bölmek için iki veya fazla kavşak seçiniz."
-
-msgid ""
-"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
-"middle of the way.)"
-msgstr ""
-"Yol seçili kavşaktan bölünemez. (İpucu: Yolun ortasından kavşak seçiniz)"
-
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
-msgstr ""
-"Rol temelinde, bir üyelik tüm yeni yollara kopyalandı<br/>Bunu gerektiğinde "
-"kopyalayıp düzeltmelisiniz."
+msgid "Search preset"
+msgstr "Ön tanımlarında ara"
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
+msgid "Search presets"
+msgstr "Ön tanımlarında ara"
 
 msgid "Discourage upload"
 msgstr ""
@@ -2770,36 +2783,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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 ""
-"İndirdiğiniz alan dışındaki bir kavşağı sileceksiniz.<br>Göremediğiniz başka "
-"objeler onu kullanıyor olabilir. <br>Gerçekten silmek istiyormusunuz?"
-
-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] ""
@@ -2831,6 +2814,32 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+msgid "You must select two or more nodes to split a circular way."
+msgstr "Dairesel bir yolu bölmek için iki veya fazla kavşak seçiniz."
+
+msgid ""
+"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
+"middle of the way.)"
+msgstr ""
+"Yol seçili kavşaktan bölünemez. (İpucu: Yolun ortasından kavşak seçiniz)"
+
+msgid ""
+"A role based relation membership was copied to all new ways.<br>You should "
+"verify this and correct it when necessary."
+msgstr ""
+"Rol temelinde, bir üyelik tüm yeni yollara kopyalandı<br/>Bunu gerektiğinde "
+"kopyalayıp düzeltmelisiniz."
+
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2950,6 +2959,18 @@ msgstr "enlem değeri ''{0}'' geçerli değil"
 msgid "Illegal longitude value ''{0}''"
 msgstr "boylam değeri ''{0}'' geçerli değil"
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3057,6 +3078,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr "BİLİNMEYEN"
 
@@ -3100,6 +3124,9 @@ msgctxt "compass"
 msgid "E"
 msgstr "D"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3739,6 +3766,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr "Bu Yardımı Göster"
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr "GRS80"
 
@@ -4793,9 +4874,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4841,6 +4919,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr "OSM API başlatılıyor"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4862,9 +4943,6 @@ msgstr "kullanım"
 msgid "options"
 msgstr "seçenekler"
 
-msgid "Show this help"
-msgstr "Bu Yardımı Göster"
-
 msgid "Standard unix geometry argument"
 msgstr "Standart unix geometry argümanı"
 
@@ -5065,6 +5143,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5317,6 +5403,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7098,6 +7188,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7320,9 +7413,6 @@ 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."
@@ -8252,15 +8342,15 @@ msgstr "Seçilen alan uygun, server kabul edecektir"
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8289,33 +8379,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr "tarih"
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8439,6 +8502,33 @@ msgstr "Hareketli Harita"
 msgid "Tile Numbers"
 msgstr "Pafta Numarası"
 
+msgid "history"
+msgstr "tarih"
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8572,6 +8662,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8581,6 +8677,9 @@ msgstr ""
 msgid "Object"
 msgstr "Obje"
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8725,6 +8824,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "Yaptığınız yükleme için kısa bir bilgi yazınız:"
 
@@ -9768,9 +9870,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12933,15 +13032,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr "İşleme Hatası {0}: "
 
-msgid "Search preset"
-msgstr "Ön tanımlarında ara"
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr "Ön tanımlarında ara"
-
 msgid "Presets"
 msgstr "Ayarlanmış"
 
@@ -13047,6 +13137,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13296,14 +13389,6 @@ 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 ""
 
@@ -13367,9 +13452,6 @@ msgid ""
 "{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 ""
 
@@ -14606,9 +14688,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14705,10 +14784,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15300,6 +15375,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17337,7 +17416,8 @@ msgid "Bay"
 msgstr "Koy"
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23163,6 +23243,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23221,6 +23304,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23302,6 +23388,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23323,9 +23424,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23920,6 +24018,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24331,6 +24432,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24774,6 +24878,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25977,6 +26084,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26157,10 +26267,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26208,9 +26314,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26554,11 +26657,6 @@ msgid ""
 "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 ""
 
@@ -27169,13 +27267,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28472,6 +28570,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28487,77 +28723,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
+msgstr "WMS ayarla"
+
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "address"
+msgstr "adres"
+
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "symbol"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "Select to download water bodies in the selected download area."
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "parcel"
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28608,27 +28849,6 @@ msgstr ""
 msgid "low"
 msgstr "alçak"
 
-msgid "symbol"
-msgstr ""
-
-msgid "parcel"
-msgstr ""
-
-msgid "parcel number"
-msgstr ""
-
-msgid "address"
-msgstr "adres"
-
-msgid "locality"
-msgstr ""
-
-msgid "section"
-msgstr ""
-
-msgid "commune"
-msgstr ""
-
 msgid "Enable automatic caching."
 msgstr ""
 
@@ -28769,160 +28989,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28972,17 +29129,6 @@ msgstr ""
 msgid "Click second Lambert crosspiece for georeferencing"
 msgstr ""
 
-msgid "Adjust WMS"
-msgstr "WMS ayarla"
-
-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 ""
 
@@ -29419,18 +29565,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35188,26 +35322,6 @@ msgstr "döngü"
 msgid "mute"
 msgstr "sessiz"
 
-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 ""
 
@@ -35376,6 +35490,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/ug.po b/i18n/po/ug.po
index 6e29cbd..b237e27 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+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: 2017-09-03 05:03+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 05:01+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -387,6 +387,34 @@ msgstr ""
 msgid "Delete selected objects."
 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 "Delete Layer"
 msgstr ""
 
@@ -1293,29 +1321,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2724,34 +2738,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2783,6 +2769,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2902,6 +2911,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3009,6 +3030,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr ""
 
@@ -3052,6 +3076,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3688,6 +3715,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4728,9 +4809,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4776,6 +4854,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr ""
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4797,9 +4878,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -5000,6 +5078,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5252,6 +5338,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7034,6 +7124,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7256,9 +7349,6 @@ 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."
@@ -8186,15 +8276,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8223,33 +8313,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8373,6 +8436,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8506,6 +8596,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8515,6 +8611,9 @@ msgstr ""
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8659,6 +8758,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9698,9 +9800,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12837,15 +12936,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -12951,6 +13041,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13200,14 +13293,6 @@ 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 ""
 
@@ -13271,9 +13356,6 @@ msgid ""
 "{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 ""
 
@@ -14505,9 +14587,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14604,10 +14683,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15195,6 +15270,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17232,7 +17311,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23058,6 +23138,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23116,6 +23199,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23197,6 +23283,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23218,9 +23319,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23815,6 +23913,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24226,6 +24327,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24669,6 +24773,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25872,6 +25979,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26052,10 +26162,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26103,9 +26209,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26449,11 +26552,6 @@ msgid ""
 "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 ""
 
@@ -27064,13 +27162,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28367,6 +28465,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28382,77 +28618,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28503,27 +28744,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28664,160 +28884,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28867,17 +29024,6 @@ 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 ""
 
@@ -29314,18 +29460,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35071,26 +35205,6 @@ 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 ""
 
@@ -35259,6 +35373,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/uk.po b/i18n/po/uk.po
index 7ed2589..6afd3c4 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: 2017-09-02 22:59+0200\n"
-"PO-Revision-Date: 2017-08-28 20:31+0000\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
+"PO-Revision-Date: 2017-09-15 14:49+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: 2017-09-03 05:03+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 05:02+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: uk\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -413,6 +413,49 @@ msgstr "Вилучити"
 msgid "Delete selected objects."
 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 ""
+"Ви збираєтеся вилучити точки, що знаходяться за межами завантаженої "
+"ділянки.<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 "
+"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] ""
+"Ви збираєтесь вилучити {0} зв’язок: {1}<br/>Потреба в цьому виникає дуже "
+"рідко, але скасувати вилучення після завантаження даних на сервер може бути "
+"не легко.<br/>Ви дійсно бажаєте вилучити зв’язок?"
+msgstr[1] ""
+"Ви збираєтесь вилучити {0} зв’язки: {1}<br/>Потреба в цьому виникає дуже "
+"рідко, але скасувати вилучення після завантаження даних на сервер може бути "
+"не легко.<br/>Ви дійсно бажаєте вилучити зв’язки?"
+msgstr[2] ""
+"Ви збираєтесь вилучити {0} зв’язків: {1}<br/>Потреба в цьому виникає дуже "
+"рідко, але скасувати вилучення після завантаження даних на сервер може бути "
+"не легко.<br/>Ви дійсно бажаєте вилучити зв’язки?"
+
+msgid "Delete relation?"
+msgstr "Вилучити зв’язок?"
+
 msgid "Delete Layer"
 msgstr "Вилучити шар"
 
@@ -1422,35 +1465,14 @@ msgstr " [id: {0}]"
 msgid "Segment {0}: {1}"
 msgstr "Відрізок {0}: {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 ""
-"Роль члену зв’язку була скопійована на всі нові лінії.<br>У разі потреби вам "
-"треба перевірити їх та виправити."
+msgid "Search preset"
+msgstr "Пошук заготовок"
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
-msgstr ""
-"Нові лінії також будуть членами зв’язку.<br>У разі потреби вам треба "
-"перевірити їх та виправити."
+msgid "Show preset search dialog"
+msgstr "Показати вікно із заготовками пошуку"
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] "Розділити лінію {0} на {1} частину"
-msgstr[1] "Розділити лінію {0} на {1} частини"
-msgstr[2] "Розділити лінію {0} на {1} частин"
+msgid "Search presets"
+msgstr "Пошук заготовок"
 
 msgid "Discourage upload"
 msgstr "Небажане надсилання даних"
@@ -2997,49 +3019,6 @@ msgstr[0] "Вилучити {0} зв’язок"
 msgstr[1] "Вилучити {0} зв’язки"
 msgstr[2] "Вилучити {0} зв’язків"
 
-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 ""
-"Ви збираєтеся вилучити точки, що знаходяться за межами завантаженої "
-"ділянки.<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 "
-"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] ""
-"Ви збираєтесь вилучити {0} зв’язок: {1}<br/>Потреба в цьому виникає дуже "
-"рідко, але скасувати вилучення після завантаження даних на сервер може бути "
-"не легко.<br/>Ви дійсно бажаєте вилучити зв’язок?"
-msgstr[1] ""
-"Ви збираєтесь вилучити {0} зв’язки: {1}<br/>Потреба в цьому виникає дуже "
-"рідко, але скасувати вилучення після завантаження даних на сервер може бути "
-"не легко.<br/>Ви дійсно бажаєте вилучити зв’язки?"
-msgstr[2] ""
-"Ви збираєтесь вилучити {0} зв’язків: {1}<br/>Потреба в цьому виникає дуже "
-"рідко, але скасувати вилучення після завантаження даних на сервер може бути "
-"не легко.<br/>Ви дійсно бажаєте вилучити зв’язки?"
-
-msgid "Delete relation?"
-msgstr "Вилучити зв’язок?"
-
 msgid "Move {0} node"
 msgid_plural "Move {0} nodes"
 msgstr[0] "Перемістити {0} точку"
@@ -3076,6 +3055,36 @@ msgstr[2] "Виділено {0} об’єктів"
 msgid "Sequence: {0}"
 msgstr "Послідовність: {0}"
 
+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 ""
+"Роль члену зв’язку була скопійована на всі нові лінії.<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] "Розділити лінію {0} на {1} частину"
+msgstr[1] "Розділити лінію {0} на {1} частини"
+msgstr[2] "Розділити лінію {0} на {1} частин"
+
 msgid "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] "Трансформувати {0} точку"
@@ -3215,6 +3224,20 @@ msgstr "Неправильне значення широти — ''{0}''"
 msgid "Illegal longitude value ''{0}''"
 msgstr "Неправильне значення довготи — ''{0}''"
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr "Збій створення теки для налаштувань, що була відсутня: {0}"
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+"<html>Збій створення теки для налаштувань, що була відсутня: {0}</html>"
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr "Збій створення теки для даних користувача, що була відсутня: {0}"
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+"<html>Збій створення теки для даних користувача, що була відсутня: {0}</html>"
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr "Не вдалося створити відсутню теку для кешу: {0}"
 
@@ -3345,6 +3368,10 @@ msgstr "Імперська"
 msgid "Nautical Mile"
 msgstr "Морська миля"
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+"Очікувалось непорожнє значення для параметру ''{0}'', отримано ''{1}''"
+
 msgid "UNKNOWN"
 msgstr "НЕВІДОМО"
 
@@ -3388,6 +3415,9 @@ msgctxt "compass"
 msgid "E"
 msgstr "Сх"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr "Неможливо розібрати значення координат: ''{0}''"
+
 msgid "Date of imagery: {0}"
 msgstr "Дата знімка: {0}"
 
@@ -4074,6 +4104,67 @@ msgstr "Неможливо обробити значення ''{1}''параме
 msgid "Custom Projection"
 msgstr "Власна проекція"
 
+msgid "Error: {0}"
+msgstr "Помилка: {0}"
+
+msgid "JOSM projection command line interface"
+msgstr "Інтерфейс командного рядка роботи з проекціями в JOSM"
+
+msgid "Description"
+msgstr "Опис"
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr "Виконує перетворення однієї системи координат в іншу."
+
+msgid "Options"
+msgstr "Параметри"
+
+msgid "Show this help"
+msgstr "Показати цю довідку"
+
+msgid "Switch input and output crs"
+msgstr "Поміняти місцями вхідну та вихідну CRS"
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+"Змінити порядок значень вхідних координат (схід/північ, довгота/широта)"
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+"Змінити порядок значень вихідних координат (схід/північ, довгота/широта)"
+
+msgid "<crs>"
+msgstr "<crs>"
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+"Вхідний та вихідний формат референсної системи координат подібний до PROJ.4."
+
+msgid "[file]"
+msgstr "[файл]"
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+"Зчитує вхідні дані з одного або кількох файлів перелічених в аргументах. "
+"Якщо не вказано жодного файлу або замість імені файлу стоїть символ "
+"підставлення \"-\" – дані читаються зі стандартного буфера введення."
+
+msgid "Examples"
+msgstr "Приклади"
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+"Очікувались дві координати, розділені пробілом, отримано {0} у ''{1}''"
+
+msgid "Unable to parse number ''{0}''"
+msgstr "Неможливо обробити число ''{0}''"
+
 msgid "GRS80"
 msgstr "GRS80"
 
@@ -5161,10 +5252,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr "Положення"
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-"Очікувалось непорожнє значення для параметру ''{0}'', отримано ''{1}''"
-
 msgid "Outdated Java version"
 msgstr "Застаріла версія Java"
 
@@ -5216,6 +5303,9 @@ msgstr "Ініціалізація даних про внутрішні межі
 msgid "Initializing OSM API"
 msgstr "Ініціалізація OSM API"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr "Шар {0} вилучено, тому що його заборонено в налаштуваннях API."
+
 msgid "Initializing internal traffic data"
 msgstr "Ініціалізація даних про внутрішні правила дорожнього руху"
 
@@ -5237,9 +5327,6 @@ msgstr "використання"
 msgid "options"
 msgstr "параметри"
 
-msgid "Show this help"
-msgstr "Показати цю довідку"
-
 msgid "Standard unix geometry argument"
 msgstr "Стандартний аргумент геометрії unix"
 
@@ -5477,6 +5564,15 @@ msgstr ""
 "відбулось завдяки відсутності налаштувань проксі.<br>Бажаєте змінити "
 "налаштування проксі-сервера зараз?"
 
+msgid "You have {0} unread message."
+msgid_plural "You have {0} unread messages."
+msgstr[0] "Маєте {0} непрочитане повідомлення."
+msgstr[1] "Маєте {0} непрочитаних повідомлень."
+msgstr[2] "Маєте {0} непрочитаних повідомлень."
+
+msgid "Click here to see your inbox."
+msgstr "Натисніть тут, щоб перейти до вхідних повідомлень."
+
 msgctxt "menu"
 msgid "File"
 msgstr "Файл"
@@ -5741,6 +5837,12 @@ msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 "Поточне значення не є правильним індексом для цього рівня масштабування"
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+"Збій створення повідомлення про помилку. Будь ласка, створіть повідомлення "
+"самі на цьому сайті:"
+
 msgid "You have encountered a bug in JOSM"
 msgstr "Ви зіткнулися з помилкою в JOSM"
 
@@ -7693,6 +7795,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr "Оновлення набору змін з сервера OSM"
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7952,9 +8057,6 @@ msgid "Please enter or paste an URL to retrieve changesets from the OSM API."
 msgstr ""
 "Будь ласка, введіть або вставте URL, щоб отримати набори змін від OSM API."
 
-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."
@@ -8959,18 +9061,18 @@ msgstr "Розмір ділянки для завантаження прийня
 msgid "Download from Overpass API"
 msgstr "Завантажити з Overpass API"
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
-msgstr "Будує запити Overpass за допомогою Майстра запитів до Overpass Turbo"
-
-msgid "Query Wizard"
-msgstr "Майстер запитів"
-
 msgid ""
 "Place your Overpass query below or generate one using the Overpass Turbo "
 "Query Wizard"
 msgstr ""
 "Додайте ваш запит нижче або скористайтесь Майстром запитів до Overpass Turbo"
 
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgstr "Будує запити Overpass за допомогою Майстра запитів до Overpass Turbo"
+
+msgid "Query Wizard"
+msgstr "Майстер запитів"
+
 msgid "Your saved queries:"
 msgstr "Ваші збережені запити:"
 
@@ -8998,33 +9100,6 @@ msgstr "Вилучити виділений фрагмент"
 msgid "Edit selected snippet"
 msgstr "Редагувати виділений фрагмент"
 
-msgid "history"
-msgstr "історична довідка"
-
-msgid "Please select an item first"
-msgstr "Спочатку виділіть елемент"
-
-msgid "Edit item"
-msgstr "Редегувати елемент"
-
-msgid "Add snippet"
-msgstr "Додати фрагмент"
-
-msgid "Query cannot be empty"
-msgstr "Запит не може бути порожнім"
-
-msgid "This name can be used for the item"
-msgstr "Ця назва може бути використана для елемента"
-
-msgid "Item with this name already exists"
-msgstr "Елемент з такою назвою вже є"
-
-msgid "The item cannot be created with provided name"
-msgstr "Неможливо створити елемент з такою назвою"
-
-msgid "The item cannot be created with an empty query"
-msgstr "Неможливо створити елемент з порожнім запитом"
-
 msgid "Overpass Turbo Query Wizard"
 msgstr "Майстер запитів Overpass Turbo"
 
@@ -9047,58 +9122,73 @@ msgid ""
 "Allows you to interact with <i>Overpass API</i> by writing declarative, "
 "human-readable terms."
 msgstr ""
+"Дозволяє взаємодіяти з <i>Overpass API</i>, написавши декларативні, "
+"зрозумілі для людини терміни."
 
 msgid ""
 "The <i>Query Wizard</i> tool will transform those to a valid overpass query."
 msgstr ""
+"<I>Майстер запитів</i> перетворює їх у відповідно оформлені запити Overpass."
 
 msgid "For more detailed description see "
-msgstr ""
+msgstr "Докладний опис дивись у "
 
 msgid "<a href=\"{0}\">OSM Wiki</a>."
-msgstr ""
+msgstr "<a href=\"{0}\">Вікі OSM</a>."
 
 msgid "Hints"
-msgstr ""
+msgstr "Підказки"
 
 msgid "Download objects of a certain type."
-msgstr ""
+msgstr "Завантажити обʼєкти потрібного типу"
 
 msgid "Download object by specifying a specific location. For example,"
-msgstr ""
+msgstr "Завантажити обʼєкти вказуючи потрібне місце. Наприклад:"
 
 msgid "{0} all objects having {1} as attribute are downloaded."
-msgstr ""
+msgstr "{0} всі обʼєкти з параметрами {1} будуть завантажені."
 
 msgid ""
 "{0} all object with the corresponding key/value pair located around Berlin. "
 "Note, the default value for radius is set to 1000m, but it can be changed in "
 "the generated query."
 msgstr ""
+"{0} всі обʼєкти з відповідною парою ключ/значення, розташовані навколо "
+"Берліну. Зверніть увагу, типово радіус дорівнює 1000 м, але його можна "
+"змінити після створення запиту."
 
 msgid ""
 "{0} all objects within the current selection that have {1} as attribute."
-msgstr ""
+msgstr "{0} всі обʼєкти з поточної виділеної ділянки з параметрами {1}."
 
 msgid ""
 "Instead of <i>location</i> any valid place name can be used like address, "
 "city, etc."
 msgstr ""
+"Замість <i>location</i> можна використовувати будь-яку назву, місто, адресу "
+"та т.і."
 
 msgid ""
 "<span>Download objects that have some concrete key/value pair, only the key "
 "with any contents for the value, the value matching some regular expression. "
 "\"Not equal\" operators are supported as well.</span>"
 msgstr ""
+"<span>Завантажити обʼєкти, що мають вказану пару ключ/значення, тільки "
+"зазначений ключ з будь-яким значенням, значення,\r\n"
+" що збігається з регулярним виразом. Також підтримуються оператори \"не "
+"дорівнює\".</span>"
 
 msgid "<i>expression1 {0} expression2</i>"
-msgstr ""
+msgstr "<i>вираз1 {0} вираз2</i>"
 
 msgid ""
 "Basic logical operators can be used to create more sophisticated queries. "
 "Instead of \"or\" - \"|\", \"||\" can be used, and instead of \"and\" - "
 "\"&\", \"&&\"."
 msgstr ""
+"Основні логічні оператори можуть бути використані для створення більш "
+"складних запитів. Можна використовувати \"|\",\"||\" замість \"OR\" та "
+"\"&\", \"&&\" замість \"AND\"."
 
 msgid "Class Type"
 msgstr "Тип класу"
@@ -9148,6 +9238,33 @@ msgstr "Рухома мапа"
 msgid "Tile Numbers"
 msgstr "Номери Клітинок"
 
+msgid "history"
+msgstr "історична довідка"
+
+msgid "Please select an item first"
+msgstr "Спочатку виділіть елемент"
+
+msgid "Edit item"
+msgstr "Редегувати елемент"
+
+msgid "Add snippet"
+msgstr "Додати фрагмент"
+
+msgid "Query cannot be empty"
+msgstr "Запит не може бути порожнім"
+
+msgid "This name can be used for the item"
+msgstr "Ця назва може бути використана для елемента"
+
+msgid "Item with this name already exists"
+msgstr "Елемент з такою назвою вже є"
+
+msgid "The item cannot be created with provided name"
+msgstr "Неможливо створити елемент з такою назвою"
+
+msgid "The item cannot be created with an empty query"
+msgstr "Неможливо створити елемент з порожнім запитом"
+
 msgid "JOSM Help Browser"
 msgstr "Оглядач довідки JOSM"
 
@@ -9304,6 +9421,12 @@ msgstr "Масштабувати до цієї точки в поточному
 msgid "Open a history browser with the history of this node"
 msgstr "Відкрити історію цієї точки в оглядачі історії"
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr "Лінія {0}"
 
@@ -9313,6 +9436,9 @@ msgstr "Зв’язок {0}"
 msgid "Object"
 msgstr "Об’єкт"
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr "Коментар набору змін"
 
@@ -9487,6 +9613,9 @@ msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 "Позначте \"Зберегти\" для збереження шару у файл, зазначений ліворуч."
 
+msgid "I would like someone to review my edits."
+msgstr "Я хотів би, щоб хтось перевірив мої правки."
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "Додайте стислі пояснення для змін, які ви завантажуєте:"
 
@@ -10520,7 +10649,7 @@ msgid "Open OSM file"
 msgstr "Відкрити файл OSM"
 
 msgid "Validation Error Files"
-msgstr ""
+msgstr "Файл помилок валідатора"
 
 msgid "WMS Files (*.wms)"
 msgstr "Файли WMS (*.wms)"
@@ -10689,9 +10818,6 @@ msgstr[0] "{0} трек"
 msgstr[1] "{0} треки"
 msgstr[2] "{0} треків"
 
-msgid "Description"
-msgstr "Опис"
-
 msgid "Timespan"
 msgstr "Період"
 
@@ -10777,7 +10903,7 @@ msgid "Changes need uploading?"
 msgstr "Надіслати зміни?"
 
 msgid "Save Note file"
-msgstr ""
+msgstr "Зберегти файл нотаток"
 
 msgid "outside downloaded area"
 msgstr "поза межами завантаженої ділянки"
@@ -10856,7 +10982,7 @@ msgid "No validation errors"
 msgstr "Перевірка не виявила помилок"
 
 msgid "Save Validation errors file"
-msgstr ""
+msgstr "Зберегти файл помилок валідатора"
 
 msgid "Set WMS Bookmark"
 msgstr "Встановити закладку WMS"
@@ -14161,15 +14287,6 @@ msgstr "Вкладені елементи заготовок без батькі
 msgid "Error parsing {0}: "
 msgstr "Помилка синтаксичного аналізу: {0} "
 
-msgid "Search preset"
-msgstr "Пошук заготовок"
-
-msgid "Show preset search dialog"
-msgstr "Показати вікно із заготовками пошуку"
-
-msgid "Search presets"
-msgstr "Пошук заготовок"
-
 msgid "Presets"
 msgstr "Заготовки"
 
@@ -14289,6 +14406,9 @@ msgstr "Усі файли (*.*)"
 msgid "Received error page:"
 msgstr "Отримано сторінку помилки:"
 
+msgid "{0}... [please type its number]"
+msgstr "{0}… [вкажіть номер]"
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -14589,15 +14709,6 @@ msgstr "Невідомий режим {0}."
 msgid "get number of unread messages"
 msgstr "отримати кількість непрочитаних повідомлень"
 
-msgid "You have {0} unread message."
-msgid_plural "You have {0} unread messages."
-msgstr[0] "Маєте {0} непрочитане повідомлення."
-msgstr[1] "Маєте {0} непрочитаних повідомлень."
-msgstr[2] "Маєте {0} непрочитаних повідомлень."
-
-msgid "Click here to see your inbox."
-msgstr "Натисніть тут, щоб перейти до вхідних повідомлень."
-
 msgid "Message notifier"
 msgstr "Повідомлення"
 
@@ -14667,9 +14778,6 @@ msgstr ""
 "Підтримується протокол версії 0.6, а сервер говорить, що підтримує версії "
 "{0} - {1}"
 
-msgid "Removed layer {0} because it is not allowed by the configured API."
-msgstr "Шар {0} вилучено, тому що його заборонено в налаштуваннях API."
-
 msgid "Unexpected format of ID replied by the server. Got ''{0}''."
 msgstr ""
 "Сервер повернув неочікуваний формат ідентифікатора. Отримано ''{0}''."
@@ -16190,9 +16298,6 @@ msgstr ""
 "http://forum.openstreetmap.org/viewtopic.php?id=25677).\n"
 "Зараз для JOSM виділено {1,number,#}МБ"
 
-msgid "{0}... [please type its number]"
-msgstr "{0}… [вкажіть номер]"
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -16305,12 +16410,6 @@ msgid "Failed to load XML schema."
 msgstr "Помилка завантаження XML схеми"
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-"Збій створення повідомлення про помилку. Будь ласка, створіть повідомлення "
-"самі на цьому сайті:"
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -16912,6 +17011,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr "немає"
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr "окремо"
+
 msgid "Service type"
 msgstr "Тип"
 
@@ -18974,9 +19077,11 @@ msgid "Bay"
 msgstr "Затока"
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
-"Велика водна ділянка, що частково обмежена сушею, але має широке гирло"
+"Водні ділянки переважно оточені сушею, але зʼєднуються з океанами або "
+"озерами."
 
 msgid "Shipping"
 msgstr "Судноплавство"
@@ -20644,7 +20749,7 @@ msgid "Nursing Home"
 msgstr "Будинок престарілих"
 
 msgid "Nursing Home (Legacy)"
-msgstr ""
+msgstr "Будинок для людей похилого віку (застаріле)"
 
 msgid "Group Home"
 msgstr "Будинок групового мешкання"
@@ -23089,7 +23194,7 @@ msgid "Variety Store"
 msgstr "Універсам"
 
 msgid "Charity"
-msgstr ""
+msgstr "Благодійність"
 
 msgid "Bookmaker"
 msgstr "Букмекер"
@@ -23974,75 +24079,75 @@ msgstr "Промзона"
 
 msgctxt "industrial"
 msgid "bakery"
-msgstr ""
+msgstr "пекарня"
 
 msgctxt "industrial"
 msgid "brewery"
-msgstr ""
+msgstr "пивоварня"
 
 msgctxt "industrial"
 msgid "brickyard"
-msgstr ""
+msgstr "цегельний завод"
 
 msgctxt "industrial"
 msgid "depot"
-msgstr ""
+msgstr "депо"
 
 msgctxt "industrial"
 msgid "distributor"
-msgstr ""
+msgstr "дистриб''ютор"
 
 msgctxt "industrial"
 msgid "factory"
-msgstr ""
+msgstr "фабрика"
 
 msgctxt "industrial"
 msgid "grinding_mill"
-msgstr ""
+msgstr "млин"
 
 msgctxt "industrial"
 msgid "heating_station"
-msgstr ""
+msgstr "опалювальна станція"
 
 msgctxt "industrial"
 msgid "machine_shop"
-msgstr ""
+msgstr "механічні майстерні"
 
 msgctxt "industrial"
 msgid "mine"
-msgstr ""
+msgstr "шахта"
 
 msgctxt "industrial"
 msgid "oil"
-msgstr ""
+msgstr "нафтопромисловість"
 
 msgctxt "industrial"
 msgid "port"
-msgstr ""
+msgstr "порт"
 
 msgctxt "industrial"
 msgid "salt_pond"
-msgstr ""
+msgstr "видобування солі"
 
 msgctxt "industrial"
 msgid "sawmill"
-msgstr ""
+msgstr "лісопильня"
 
 msgctxt "industrial"
 msgid "scrap_yard"
-msgstr ""
+msgstr "авто розборка"
 
 msgctxt "industrial"
 msgid "shipyard"
-msgstr ""
+msgstr "верф"
 
 msgctxt "industrial"
 msgid "slaughterhouse"
-msgstr ""
+msgstr "скотобійня"
 
 msgctxt "industrial"
 msgid "warehouse"
-msgstr ""
+msgstr "склад"
 
 msgid "Garages"
 msgstr "Гаражі"
@@ -24746,9 +24851,13 @@ msgid ""
 "earth’s landmass, with 30-60cm or resolution where available, backfilled by "
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
+"DigitalGlobe-Standard – впорядкований набір знімків, що покривають 86% "
+"поверхні земної суші з роздільчою здатністю 30-60 см, в залежності від "
+"місця, доповнені знімками Landsat. Середній вік знімків 2.31 роки, в деяких "
+"районах знімки оновлюються двічі на рік."
 
 msgid "Esri World Imagery"
-msgstr ""
+msgstr "Esri World Imagery"
 
 msgid "OpenCycleMap"
 msgstr "OpenCycleMap"
@@ -24834,6 +24943,9 @@ msgstr "Waymarked Trails: Верхова їзда"
 msgid "Waymarked Trails: Winter Sports"
 msgstr "Waymarked Trails: Зимові види спорту"
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr "OSM Inspector: Геометрія"
 
@@ -24894,136 +25006,151 @@ msgid "Sentinel-2 images of Enderby Land and Kemp Coast (true color)"
 msgstr "Sentinel-2 - знімки Землі Ендербі та Берега Кемпа (true color)"
 
 msgid "IGN topographical map (TMS)"
+msgstr "IGN топографічна мапа (TMS)"
+
+msgid "IGN topographical map (WMTS)"
 msgstr ""
 
 msgid "IGN topographical map (WMS)"
-msgstr ""
+msgstr "IGN топографічна мапа (WMS)"
 
 msgid "IGN orthophoto AMBA a (WMTS)"
-msgstr ""
+msgstr "IGN ортофото AMBA a (WMTS)"
 
 msgid "IGN orthophoto AMBA b (WMTS)"
-msgstr ""
+msgstr "IGN ортофото AMBA b (WMTS)"
 
 msgid "IGN orthophoto AMBA c (WMTS)"
-msgstr ""
+msgstr "IGN ортофото AMBA c (WMTS)"
 
 msgid "IGN orthophoto AMBA d (WMTS)"
-msgstr ""
+msgstr "IGN ортофото AMBA d (WMTS)"
 
 msgid "IGN orthophoto AMBA e (WMTS)"
-msgstr ""
+msgstr "IGN ортофото AMBA e (WMTS)"
 
 msgid "IGN orthophoto AMBA f (WMTS)"
-msgstr ""
+msgstr "IGN ортофото AMBA f (WMTS)"
 
 msgid "IGN orthophoto AMBA 4 (WMTS)"
-msgstr ""
+msgstr "IGN ортофото AMBA 4 (WMTS)"
 
 msgid "IGN orthophoto AMBA 5 (WMTS)"
-msgstr ""
+msgstr "IGN ортофото AMBA 5 (WMTS)"
 
 msgid "IGN orthophoto AMBA 6 (WMTS)"
-msgstr ""
+msgstr "IGN ортофото AMBA 6 (WMTS)"
 
 msgid "IGN orthophoto AMBA 7 (WMTS)"
-msgstr ""
+msgstr "IGN ортофото AMBA 7 (WMTS)"
 
 msgid "IGN orthophoto Barranqueras (WMTS)"
-msgstr ""
+msgstr "IGN ортофото Барранкерас (WMTS)"
 
 msgid "IGN orthophoto Catamarca (WMTS)"
-msgstr ""
+msgstr "IGN ортофото Катамарка (WMTS)"
 
 msgid "IGN orthophoto Córdoba (WMTS)"
-msgstr ""
+msgstr "IGN ортофото Кордова (WMTS)"
 
 msgid "IGN orthophoto El Calafate (WMTS)"
-msgstr ""
+msgstr "IGN ортофото Ель-Калафате (WMTS)"
 
 msgid "IGN orthophoto El Rodeo (WMTS)"
-msgstr ""
+msgstr "IGN ортофото Ель-Родео (WMTS)"
 
 msgid "IGN orthophoto Jujuy (WMTS)"
-msgstr ""
+msgstr "IGN ортофото Жужуй (WMTS)"
 
 msgid "IGN orthophoto La Rioja (WMTS)"
-msgstr ""
+msgstr "IGN ортофото Ла-Ріоха (WMTS)"
 
 msgid "IGN orthophoto Mendoza (WMTS)"
-msgstr ""
+msgstr "IGN ортофото  Мендоса (WMTS)"
 
 msgid "IGN orthophoto Neuquén (WMTS)"
-msgstr ""
+msgstr "IGN ортофото Неукен (WMTS)"
 
 msgid "IGN orthophoto Posadas (WMTS)"
-msgstr ""
+msgstr "IGN ортофото Посадас (WMTS)"
 
 msgid "IGN orthophoto Resistencia (WMTS)"
-msgstr ""
+msgstr "IGN ортофото Ресістенсія (WMTS)"
 
 msgid "IGN orthophoto Río Gallegos (WMTS)"
-msgstr ""
+msgstr "IGN ортофото Ріо-Гальєгос (WMTS)"
 
 msgid "IGN orthophoto Río Grande (WMTS)"
-msgstr ""
+msgstr "IGN ортофото Ріо-Гранде (WMTS)"
 
 msgid "IGN orthophoto Río Paraná A (WMTS)"
-msgstr ""
+msgstr "IGN ортофото  Парана (річка) A (WMTS)"
 
 msgid "IGN orthophoto Río Paraná B (WMTS)"
-msgstr ""
+msgstr "IGN ортофото  Парана (річка) B (WMTS)"
 
 msgid "IGN orthophoto Rosario (WMTS)"
+msgstr "IGN ортофото Росаріо (WMTS)"
+
+msgid "IGN orthophoto Salta (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Salto Grande (WMTS)"
+msgid "IGN orthophoto Salta 1 (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto San Juan (WMTS)"
+msgid "IGN orthophoto Salta 2 (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto San Luis (WMTS)"
+msgid "IGN orthophoto Salta 3 (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Santa Cruz III (WMTS)"
+msgid "IGN orthophoto Salta 4 (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salto Grande (WMTS)"
+msgstr "IGN ортофото Сальто-Гранде (WMTS)"
+
+msgid "IGN orthophoto San Juan (WMTS)"
+msgstr "IGN ортофото Сан-Хуан (WMTS)"
+
+msgid "IGN orthophoto San Luis (WMTS)"
+msgstr "IGN ортофото Сан-Луіс (WMTS)"
+
+msgid "IGN orthophoto Santa Cruz III (WMTS)"
+msgstr "IGN ортофото Санта-Крус III (WMTS)"
+
 msgid "IGN orthophoto Santa Cruz IV (WMTS)"
-msgstr ""
+msgstr "IGN ортофото Санта-Крус IV (WMTS)"
 
 msgid "IGN orthophoto Santa Cruz VI (WMTS)"
-msgstr ""
+msgstr "IGN ортофото Санта-Крус VI (WMTS)"
 
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
-msgstr ""
-
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
+msgstr "IGN ортофото Санта-Фе та Парана (WMTS)"
 
 msgid "IGN orthophoto Tucumán (WMTS)"
-msgstr ""
+msgstr "IGN ортофото Тукуман (WMTS)"
 
 msgid "IGN orthophoto Ushuaia (WMTS)"
-msgstr ""
+msgstr "IGN ортофото Ушуайя (WMTS)"
 
 msgid "Educational map (WMS)"
-msgstr ""
+msgstr "Освітня мапа (WMS)"
 
 msgid "Ministry of Agroindustry (WMS)"
-msgstr ""
+msgstr "Міністерство агропромисловісті (WMS)"
 
 msgid "Ministry of Energy and Mining (WMS)"
-msgstr ""
+msgstr "Міністерство енергетики та гірничодобувної промисловості (WMS)"
 
 msgid "imagico.de OSM images for mapping: Bahía Blanca (low tide)"
-msgstr ""
+msgstr "imagico.de - знімки OSM для мапінгу: Баїя-Бланка (час відливу)"
 
 msgid "Tidal flats and islands at the coast (true color)"
-msgstr ""
+msgstr "Приливні мілини та острови на узбережжі (true color)"
 
 msgid "imagico.de OSM images for mapping: Bahía Blanca (high tide)"
-msgstr ""
+msgstr "imagico.de - знімки OSM для мапінгу: Баїя-Бланка (час приливу)"
 
 msgid "AGRI black-and-white 2.5m"
 msgstr "AGRI чорно-біла 2,5 м"
@@ -25453,10 +25580,10 @@ msgid "SDFE DTK Kort25"
 msgstr "SDFE DTK Kort25"
 
 msgid "SDFE Terrain Shadow Map (40 cm)"
-msgstr ""
+msgstr "SDFE - Мапа рельєфу (40 см)"
 
 msgid "SDFE Surface Shadow Map (40 cm)"
-msgstr ""
+msgstr "SDFE Мапа поверхні (40 cm)"
 
 msgid "SDFE Skærmkort"
 msgstr "SDFE Skærmkort"
@@ -25525,7 +25652,7 @@ msgid "French land registry"
 msgstr "Земельний реєстр Франції"
 
 msgid "CRAIG - Auvergne 2016 - 25 cm"
-msgstr ""
+msgstr "CRAIG - Овернь 2016 - 25 см"
 
 msgid "CRAIG - Auvergne 2013 - 25 cm"
 msgstr "CRAIG - Овернь 2013 - 25 см"
@@ -25613,6 +25740,9 @@ msgstr "Берлін - аерофото 2015"
 msgid "Berlin aerial photograph 2016"
 msgstr "Берлін - аерофото 2016"
 
+msgid "Berlin aerial photograph 2017"
+msgstr "Берлін - аерофото 2017"
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr "Німецька залізниця Маршрути VzG Листопад 2013"
 
@@ -25670,7 +25800,7 @@ msgid "imagico.de OSM images for mapping: North Sea Coast 2016"
 msgstr "imagico.de - знімки OSM для мапінгу: узбережжя Північного моря, 2016"
 
 msgid "imagico.de OSM images for mapping: North Sea Coast 2017"
-msgstr ""
+msgstr "imagico.de - знімки OSM для мапінгу: узбережжя Північного моря 2017"
 
 msgid "Saxony latest aerial imagery"
 msgstr "Саксонія - свіжі знімки"
@@ -25715,18 +25845,21 @@ msgid "Icebridge DMS image - alignment might be poor"
 msgstr "Знімки Icebridge DMS (вирівнювання може бути неточним)"
 
 msgid "imagico.de OSM images for mapping: Kangerlussuaq Autumn"
-msgstr ""
+msgstr "imagico.de - знімки OSM для мапінгу: Канґерлуссуак восени"
 
 msgid ""
 "Icebridge DMS image of the airport and settlement - alignment might be poor"
 msgstr ""
+"Icebridge DMS: знімки аеропорту та поселення - вирівнювання може бути не "
+"точним"
 
 msgid "imagico.de OSM images for mapping: Kangerlussuaq Spring"
-msgstr ""
+msgstr "imagico.de - знімки OSM для мапінгу: Канґерлуссуак весна"
 
 msgid ""
 "Icebridge DMS image of the airport and roads - alignment might be poor"
 msgstr ""
+"Icebridge DMS: знімки аеропорту та доріг - вирівнювання може бути не точним"
 
 msgid ""
 "imagico.de OSM images for mapping: Thule Airbase DMS low altitude overflight "
@@ -25859,12 +25992,14 @@ msgid ""
 msgstr "Межа землі/води, яку важко розгледіти на знімках Bing/Mapbox"
 
 msgid "imagico.de OSM images for mapping: Sudirman Range 2015"
-msgstr ""
+msgstr "imagico.de - знімки OSM для мапінгу: Судірман 2015"
 
 msgid ""
 "Older image of the Sudirman Range with no fresh snow showing glacier extent "
 "(true color)"
 msgstr ""
+"Старі знімки хребта Судірман без свіжого снігу, на яких видно межі льодовика "
+"(true color)"
 
 msgid "imagico.de OSM images for mapping: Southeastern Sulawesi"
 msgstr "imagico.de - знімки OSM для мапінгу: Південно-Східний Сулавесі"
@@ -25889,11 +26024,12 @@ msgid "Missing Islands in OSM (true color)"
 msgstr "Відсутні в OSM острови (true color)"
 
 msgid "imagico.de OSM images for mapping: Sudirman Range 2016"
-msgstr ""
+msgstr "imagico.de - знімки OSM для мапінгу: Судірман 2016"
 
 msgid ""
 "Cloud free image of the Sudirman Range but with fresh snow (true color)"
 msgstr ""
+"Знімки гірського хребта Судірман без хмар, але зі свіжим снігом (true color)"
 
 msgid "Ireland British War Office 1:25k GSGS 3906"
 msgstr "Ірландія Міністерство оборони Великобританії 1:25000 GSGS 3906"
@@ -25933,16 +26069,16 @@ msgid "OSMIE T.ie Land not in Counties"
 msgstr "OSMIE T.ie Землі по за графствами"
 
 msgid "Israel Hiking"
-msgstr ""
+msgstr "Ізраїль - туристичні маршрути (пішохідні)"
 
 msgid "Israel Hiking map"
-msgstr ""
+msgstr "Ізраїль - мапа пішохідних маршрутів"
 
 msgid "Israel MTB"
-msgstr ""
+msgstr "Ізраїль MTB"
 
 msgid "Israel MTB map"
-msgstr ""
+msgstr "Мапа Ізраїля з маршрутами для гірських велосипедів"
 
 msgid "Lodi - Italy"
 msgstr "Лоді - Італія"
@@ -25993,17 +26129,21 @@ msgstr "Японія: ортознімки GSI"
 
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
+"imagico.de - знімки OSM для мапінгу: Аральське море (низький рівень води)"
 
 msgid "Water and wetland extents, dams etc. (true color)"
-msgstr ""
+msgstr "Межі води та заболочених земель, дамби та т.і. (true color)"
 
 msgid "imagico.de OSM images for mapping: Aral Sea (high water level)"
 msgstr ""
+"imagico.de - знімки OSM для мапінгу: Аральське море (високий рівень води)"
 
 msgid ""
 "Water and wetland extents, dams etc. - some remaining winter ice in the "
 "north (true color)"
 msgstr ""
+"Межі води та заболочених земель, дамби та т.і. - на півночі місцями льод "
+"(true color)"
 
 msgid "imagico.de OSM images for mapping: Mount Kenya 2016"
 msgstr "imagico.de - знімки OSM для мапінгу: гора Кенія, 2016"
@@ -26044,6 +26184,9 @@ msgstr "Люксембург Inspire Води"
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Дельта Нігера, жовт. 2012 Landsat"
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr "INEGI Цифрова мапа Мексики (WMS)"
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr "Аерофтознімки PDOK з Beeldmateriaal.nl 25 см"
 
@@ -26284,9 +26427,10 @@ msgstr "Актуальні знімки кінця літа з невеличк
 
 msgid "imagico.de OSM images for mapping: Northern Dvina delta at low tide"
 msgstr ""
+"imagico.de - знімки OSM для мапінгу: дельта Північної Двіни під час відливу"
 
 msgid "Beaches, tidal flats and other costal forms (true color)"
-msgstr ""
+msgstr "Пляжі, приливні мілини та інші берегові структури (true color)"
 
 msgid ""
 "imagico.de OSM images for mapping: Northern and Polar Ural mountains August "
@@ -26509,6 +26653,9 @@ msgstr "NLSC Open Data WMTS"
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr "imagico.de - знімки OSM для мапінгу: гора Кіліманджаро 2016"
 
+msgid "Aşgabat (high resolution)"
+msgstr "Ашгабат (висока розподільча здатність)"
+
 msgid "MSR Maps Topo"
 msgstr "MSR Топомапи"
 
@@ -26575,16 +26722,16 @@ msgstr ""
 "об’єктів (true color)"
 
 msgid "imagico.de OSM images for mapping: Bogoslof Island"
-msgstr ""
+msgstr "imagico.de - знімки OSM для мапінгу: Богословський острів"
 
 msgid "Recent image from after the eruption (true color)"
-msgstr ""
+msgstr "Знімки відразу після виверження (true color)"
 
 msgid "imagico.de OSM images for mapping: Cook Inlet"
-msgstr ""
+msgstr "imagico.de - знімки OSM для мапінгу: Затока Кука"
 
 msgid "Tidal flats and glaciers in surrounding mountains (true color)"
-msgstr ""
+msgstr "Приливні мілини та льодовики в горах навколо (true color)"
 
 msgid "NJ 2015 Aerial Imagery (Infrared)"
 msgstr "NJ 2015 аерофото (інфрачервоний діапазон)"
@@ -27777,12 +27924,17 @@ msgid ""
 "Object at Position 0.00E 0.00N. There is nothing at this position except an "
 "already mapped weather buoy."
 msgstr ""
+"Об''єкт з позицією 0.00E 0.00N. У цьому місці немає нічого, окрім вже "
+"позначеного метеорологічного буя."
 
 msgid "Ferry route is not connected to the road network or branches."
 msgstr ""
+"Поромний маршрут не пов''язаний з дорожньою мережею або його відгалуженнями."
 
 msgid "Ferry route is not connected to a ferry terminal or branches."
 msgstr ""
+"Поромний маршрут не пов''язаний з поромним терміналом або його "
+"відгалуженнями."
 
 msgid "abbreviated street name"
 msgstr "скорочене позначення вулиці"
@@ -27895,6 +28047,9 @@ msgstr "зв’язок без типу"
 msgid "{0} relation without {0} tag"
 msgstr "{0} зв’язок без теґу {0}"
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr "лінія з {0} є частиною звʼязку веломаршруту"
+
 msgid "religion without denomination"
 msgstr "теґ religion без теґу denomination"
 
@@ -28120,11 +28275,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -28183,9 +28333,6 @@ msgstr ""
 "Спілкуйтесь із іншими учасниками, що працюють з мапою поруч з вами, "
 "отримуйте сповіщення, якщо хтось з’являється поруч."
 
-msgid "Allows you to view a GeoJSON file as a layer."
-msgstr "Дозволяє переглядати GeoJSON файл як шар даних."
-
 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."
@@ -28634,13 +28781,6 @@ 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 "Просте завантаження уздовж довгого набору взаємопов’язаних шляхів"
 
@@ -29288,15 +29428,15 @@ msgstr "Шар обʼєктів Mapillary"
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr "Показує шар з обʼєктами, що були виявлені Mapillary"
 
+msgid "Start Mapillary layer"
+msgstr "Запустити шар Mapillary"
+
 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 для поточного виду"
 
@@ -29334,16 +29474,16 @@ msgid "Submit the current changeset to Mapillary"
 msgstr "Надіслати поточний набір змін до Mapillary"
 
 msgid "rejected"
-msgstr ""
+msgstr "відхилено"
 
 msgid "pending"
 msgstr "у черзі"
 
 msgid "approved"
-msgstr ""
+msgstr "затверджено"
 
 msgid "{0} images submitted, Changeset key: {1}, State: {2}"
-msgstr ""
+msgstr "{0} знімків надіслано, ключ набору змін: {1}, стан: {2}"
 
 msgid "Changeset upload failed with {0} error ''{1} {2}''!"
 msgstr "Невдалось надісати набір змін, помилка  {0} ''{1} {2}''!"
@@ -30431,7 +30571,7 @@ msgid "Name:"
 msgstr "Назва:"
 
 msgid "update building info"
-msgstr ""
+msgstr "оновити відомості про будівлю"
 
 msgid "Tag Element"
 msgstr "Задати теґи"
@@ -30458,10 +30598,10 @@ msgid "Trying to detect an area at:"
 msgstr "Намагаюсь знайти полігони у:"
 
 msgid "create building"
-msgstr ""
+msgstr "створити будівлю"
 
 msgid "replace building"
-msgstr ""
+msgstr "замінити будівлю"
 
 msgid "Add address"
 msgid_plural "Add addresses"
@@ -30580,10 +30720,10 @@ msgstr ""
 "Austria Address Helper"
 
 msgid "Replace existing buildings"
-msgstr ""
+msgstr "Замінити наявну будівлю"
 
 msgid "Replace an existing building with the new one."
-msgstr ""
+msgstr "Заміняє наявну будівлю на нову."
 
 msgid "Debug"
 msgstr "Відлагодження"
@@ -30750,81 +30890,6 @@ msgstr[2] "{0} будівель з конфліктом адрес"
 msgid "No address nodes inside buildings found"
 msgstr "Немає адресних точок в середині будівель"
 
-msgid "on polygon"
-msgstr "у багатокутнику"
-
-msgid "Helping tool for tag address"
-msgstr "Допоміжний інструмент для теґів адреси"
-
-msgid "CadastreFR - Buildings"
-msgstr "CadastreFR - Будинки"
-
-msgid "Next no"
-msgstr "Наступний номер"
-
-msgid "Enter addresses"
-msgstr "Ввести адреси"
-
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
-msgstr ""
-"Положення \"{0}\" знайдене в кеші.\n"
-"Спочатку завантажити кеш?\n"
-"(Ні = новий кеш)"
-
-msgid "Select Feuille"
-msgstr "Виберіть шар"
-
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
-msgstr ""
-"Помилка завантаження файлу.\n"
-"Можливо, в кеші стара версія файлу."
-
-msgid "Lambert Zone {0} cache file (.{0})"
-msgstr "Зона Lambert {0} файл кешу (.{0})"
-
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
-msgstr "Зона Lambert CC9 {0} файл кешу (.CC{0})"
-
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
-msgstr "Файл кешу Guadeloupe Fort-Marigot (.UTM1)"
-
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
-msgstr "Файл кешу Guadeloupe Ste-Anne (.UTM2)"
-
-msgid "Martinique Fort Desaix cache file (.UTM3)"
-msgstr "Файл кешу Martinique Fort Desaix (.UTM3)"
-
-msgid "Reunion RGR92 cache file (.UTM4)"
-msgstr "Файл кешу Reunion RGR92 (.UTM4)"
-
-msgid "CadastreGrabber: Illegal url."
-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 "Виберіть з…"
-
-msgid "Select commune"
-msgstr "Виберіть комуну"
-
 msgid "Auto sourcing"
 msgstr "Автоматичні джерела"
 
@@ -30855,6 +30920,223 @@ msgstr ""
 msgid "Change the current projection"
 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 "Завантажити зображення з WMS Кадастру Франції"
+
+msgid "Cadastre: {0}"
+msgstr "Кадастр: {0}"
+
+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 ""
+"Це зображення містить дані з координатами.\n"
+"Ви бажаєте їх використовувати?"
+
+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 "{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 "Місце положення {0} вже на екрані. Кеш не завантажено."
+
+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 ""
+"<html> Введіть назву села, селища чи міста.<br>Використовуйте синтаксис і "
+"пунктуацію, опубліковану на www.cadastre.gouv.fr </html>"
+
+msgid "Departement"
+msgstr "Відділ"
+
+msgid "<html>Departement number (optional)</html>"
+msgstr "<html>Номер відділку (опціонально)</html>"
+
+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 "PNG файли (*.png)"
+
+msgid "GeoTiff files (*.tif)"
+msgstr "GeoTiff файл (*.tif)"
+
+msgid "Export image (only raster images)"
+msgstr "Експорт зображення (тільки растрові зображення)"
+
+msgid ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+"Присутній більше, ніж один шар WMS.\n"
+"Виберіть спочатку один із них, а потім повторіть."
+
+msgid "on polygon"
+msgstr "у багатокутнику"
+
+msgid "Helping tool for tag address"
+msgstr "Допоміжний інструмент для теґів адреси"
+
+msgid "CadastreFR - Buildings"
+msgstr "CadastreFR - Будинки"
+
+msgid "Next no"
+msgstr "Наступний номер"
+
+msgid "Enter addresses"
+msgstr "Ввести адреси"
+
+msgid "Adjust WMS"
+msgstr "Підлаштувати WMS"
+
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
+msgstr ""
+"Налаштування положення шару WMS (збережено тільки для растрових зображень)"
+
+msgid "Add \"source=...\" to elements?"
+msgstr "Додати до елементів \"source=…\"?"
+
+msgid "Download from Cadastre"
+msgstr ""
+
+msgid "Objects:"
+msgstr ""
+
+msgid "Select to download buildings in the selected download area."
+msgstr ""
+
+msgid "address"
+msgstr "адреса"
+
+msgid "Select to download addresses in the selected download area."
+msgstr ""
+
+msgid "symbol"
+msgstr "символ"
+
+msgid "Select to download symbols in the selected download area."
+msgstr ""
+
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr "ділянка"
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
+msgstr "номер ділянки"
+
+msgid ""
+"Select to download cadastral parcel numbers in the selected download area."
+msgstr ""
+
+msgid "section"
+msgstr "розділ"
+
+msgid "Select to download cadastral sections in the selected download area."
+msgstr ""
+
+msgid "locality"
+msgstr "місце знаходження"
+
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
+msgstr "община"
+
+msgid ""
+"Select to download municipality boundary in the selected download area."
+msgstr ""
+
+msgid ""
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
+msgstr ""
+
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
+msgstr ""
+
 msgid "Replace original background by JOSM background color."
 msgstr "Замінити тло оригіналу кольором тла JOSM"
 
@@ -30904,27 +31186,6 @@ msgstr "середній"
 msgid "low"
 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 "Увімкнути автоматичне кешування."
 
@@ -31086,8 +31347,65 @@ msgstr "Увімкніть для можливості використання
 msgid "Unexpected file extension. {0}"
 msgstr "Несподіване розширення файлу. {0}"
 
-msgid "Add \"source=...\" to elements?"
-msgstr "Додати до елементів \"source=…\"?"
+msgid ""
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
+msgstr ""
+"Положення \"{0}\" знайдене в кеші.\n"
+"Спочатку завантажити кеш?\n"
+"(Ні = новий кеш)"
+
+msgid "Select Feuille"
+msgstr "Виберіть шар"
+
+msgid ""
+"Error loading file.\n"
+"Probably an old version of the cache file."
+msgstr ""
+"Помилка завантаження файлу.\n"
+"Можливо, в кеші стара версія файлу."
+
+msgid "Lambert Zone {0} cache file (.{0})"
+msgstr "Зона Lambert {0} файл кешу (.{0})"
+
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgstr "Зона Lambert CC9 {0} файл кешу (.CC{0})"
+
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgstr "Файл кешу Guadeloupe Fort-Marigot (.UTM1)"
+
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgstr "Файл кешу Guadeloupe Ste-Anne (.UTM2)"
+
+msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgstr "Файл кешу Martinique Fort Desaix (.UTM3)"
+
+msgid "Reunion RGR92 cache file (.UTM4)"
+msgstr "Файл кешу Reunion RGR92 (.UTM4)"
+
+msgid "CadastreGrabber: Illegal url."
+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 "Виберіть з…"
+
+msgid "Select commune"
+msgstr "Виберіть комуну"
 
 msgid "Downloading {0}"
 msgstr "Завантажується {0}"
@@ -31137,122 +31455,6 @@ msgstr ""
 "Ця комуна не векторизована.\n"
 "Будь ласка, скористайтесь іншим пунктом меню для гео-прив’язки \"планів\""
 
-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 "Завантажити зображення з WMS Кадастру Франції"
-
-msgid "Cadastre: {0}"
-msgstr "Кадастр: {0}"
-
-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 ""
-"Це зображення містить дані з координатами.\n"
-"Ви бажаєте їх використовувати?"
-
-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 "{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 "Місце положення {0} вже на екрані. Кеш не завантажено."
-
-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 ""
-"<html> Введіть назву села, селища чи міста.<br>Використовуйте синтаксис і "
-"пунктуацію, опубліковану на www.cadastre.gouv.fr </html>"
-
-msgid "Departement"
-msgstr "Відділ"
-
-msgid "<html>Departement number (optional)</html>"
-msgstr "<html>Номер відділку (опціонально)</html>"
-
-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 "PNG файли (*.png)"
-
-msgid "GeoTiff files (*.tif)"
-msgstr "GeoTiff файл (*.tif)"
-
-msgid "Export image (only raster images)"
-msgstr "Експорт зображення (тільки растрові зображення)"
-
 msgid ""
 "Click first corner for image cropping\n"
 "(two points required)"
@@ -31308,20 +31510,6 @@ msgstr "Позначте другий кут для обрізки зображ
 msgid "Click second Lambert crosspiece for georeferencing"
 msgstr "Клацніть на другу Lambert-перемичку для геоприв’язки"
 
-msgid "Adjust WMS"
-msgstr "Підлаштувати WMS"
-
-msgid "Adjust the position of the WMS layer (saved for raster images only)"
-msgstr ""
-"Налаштування положення шару WMS (збережено тільки для растрових зображень)"
-
-msgid ""
-"More than one WMS layer present\n"
-"Select one of them first, then retry"
-msgstr ""
-"Присутній більше, ніж один шар WMS.\n"
-"Виберіть спочатку один із них, а потім повторіть."
-
 msgid "Reset offset"
 msgstr "Перевстановити зміщення"
 
@@ -31788,20 +31976,6 @@ 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 ""
-"Виділений полігон не може бути розділеним, тому що він є членом зв’язку.\n"
-"Вилучіть його із зв’язку перед розділенням."
-
 msgid "TangoGPS Files (*.log)"
 msgstr "Файли TangoGPS (*.log)"
 
@@ -34335,10 +34509,10 @@ msgid "Writing position information to image files..."
 msgstr "Запис інформації про місце знаходження у файли зображень…"
 
 msgid "Retry"
-msgstr ""
+msgstr "Повторити"
 
 msgid "Unable to process file ''{0}'':"
-msgstr ""
+msgstr "Неможливо обробити файл ''{0}'':"
 
 msgid "File could not be deleted!"
 msgstr "Файл не може бути знищений!"
@@ -34762,9 +34936,11 @@ msgid ""
 "The relation has incomplete members. Do you want to download them and "
 "continue with the sorting?"
 msgstr ""
+"Звʼязок завантажено не повністю. Завантажити відсутніх членів та продовжити "
+"сортування?"
 
 msgid "Incomplete Members"
-msgstr ""
+msgstr "Незавантажені члени"
 
 msgid "Do you want to make the roundabout round?"
 msgstr "Ви бажаєте зробити проїзд по кругу?"
@@ -34819,10 +34995,10 @@ msgid "PT_Assistant Proceed Request"
 msgstr "ГТ_Помічник Продовжити запит"
 
 msgid "Bicycle and foot routes Tests"
-msgstr ""
+msgstr "Перевірка велосипедних та пішохідних маршрутів"
 
 msgid "PT: There is a gap in the "
-msgstr ""
+msgstr "ГТ: є прогалини в "
 
 msgid "PT: Stop_position is not part of a way"
 msgstr "ГТ: місце зупинки не входить до складу дороги"
@@ -34856,6 +35032,8 @@ msgstr "ГТ: фіктивне попередження"
 
 msgid "PT: Route needs to be sorted, found tag fixme:relation=order members"
 msgstr ""
+"ГТ: потрібне впорядкування маршруту, знайдено теґ fixme:relation=order "
+"members"
 
 msgid "PT: Route contains a gap that can be fixed by sorting"
 msgstr "ГТ: Маршрут містить прогалини, що можна усунути впорядкуванням ліній"
@@ -34868,23 +35046,27 @@ msgstr ""
 "сорутваня його елементів. Після цього потрібна додаткова перевірка."
 
 msgid "PT: Route gap can be closed by adding a single way"
-msgstr ""
+msgstr "ГТ: Прогалини в маршруті можна усунути додаванням одного відрізку"
 
 msgid ""
 "PT: The name of the first stop does not match the \"from\" tag of the route "
 "relation"
 msgstr ""
+"ГТ: Назва першої зупинки не збігається з теґом \"from\" у звʼязку маршруту"
 
 msgid ""
 "PT: The name of the last stop does not match the \"to\" tag of the route "
 "relation"
 msgstr ""
+"ГТ: Назва останньої зупинки не збігається з полем \"to\" у звʼязку маршруту"
 
 msgid "PT: The first stop of the route does not match the first way"
 msgstr ""
+"ГТ: Перша зупинка маршруту знаходиться не на початку першого відрізку"
 
 msgid "PT: The last stop of the route does not match the last way"
 msgstr ""
+"ГТ: остання зупинка маршруту на знаходиться в кінці останнього відрізку"
 
 msgid "PT: Route should start and end with a stop_position"
 msgstr "ГТ: Маршрут повинен починатись та закінчуватись stop_position"
@@ -36144,7 +36326,7 @@ msgid "Auto delete layer"
 msgstr "Автоматичне вилучення шарів"
 
 msgid "Set default url"
-msgstr ""
+msgstr "Встановити типовий URL"
 
 msgid "Select the checkbox to:"
 msgstr "Поставте позначку для:"
@@ -36171,13 +36353,13 @@ msgid "Select a task ..."
 msgstr "Оберіть завдання…"
 
 msgid "Setting default URL"
-msgstr ""
+msgstr "Встановлення типового URL"
 
 msgid "Enter the new URL"
-msgstr ""
+msgstr "Вкажіть новий URL"
 
 msgid "Setting new URL: "
-msgstr ""
+msgstr "Встановлення нового URL: "
 
 msgid "Set download area (m²)"
 msgstr "Ділянка для завантаження (м²)"
@@ -37986,29 +38168,6 @@ msgstr "по кругу"
 msgid "mute"
 msgstr "вимкнути звук"
 
-msgid "Walking Papers Scanned Map"
-msgstr "Скановані мапи Walking Papers"
-
-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 "Введіть URL або ID (частину після ?id= в URL) на walking-papers.org"
-
-msgid "Could not read information from walking-papers.org the id \"{0}\""
-msgstr ""
-"Не вдалося прочитати інформацію з walking-papers.org за ідентифікатором "
-"''{0}''"
-
-msgid "Walking Papers: {0}"
-msgstr "Walking Papers: {0}"
-
-msgid "Walking Papers layer ({0}) in zoom {1}"
-msgstr "Шар ({0}) Walking Papers в масштабі {1}"
-
 msgid "Way Download"
 msgstr "Завантажити лінію"
 
@@ -38199,6 +38358,26 @@ msgid ""
 msgstr ""
 "Додає теґ ''wikipedia'', який відповідає певній статті про виділені об’єкти"
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "The Ultimate WMS Super-speed Turbo Challenge II"
 
diff --git a/i18n/po/ur.po b/i18n/po/ur.po
index 284a9af..944539b 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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+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: 2017-09-03 05:04+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 05:02+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: ur\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -387,6 +387,34 @@ msgstr ""
 msgid "Delete selected objects."
 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 "Delete Layer"
 msgstr ""
 
@@ -1293,29 +1321,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2724,34 +2738,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2783,6 +2769,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2902,6 +2911,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3009,6 +3030,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr ""
 
@@ -3052,6 +3076,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3688,6 +3715,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4728,9 +4809,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4776,6 +4854,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr ""
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4797,9 +4878,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -5000,6 +5078,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5252,6 +5338,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7034,6 +7124,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7256,9 +7349,6 @@ 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."
@@ -8186,15 +8276,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8223,33 +8313,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8373,6 +8436,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8506,6 +8596,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8515,6 +8611,9 @@ msgstr ""
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8659,6 +8758,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9698,9 +9800,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12837,15 +12936,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -12951,6 +13041,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13200,14 +13293,6 @@ 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 ""
 
@@ -13271,9 +13356,6 @@ msgid ""
 "{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 ""
 
@@ -14505,9 +14587,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14604,10 +14683,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15195,6 +15270,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17232,7 +17311,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23058,6 +23138,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23116,6 +23199,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23197,6 +23283,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23218,9 +23319,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23815,6 +23913,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24226,6 +24327,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24669,6 +24773,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25872,6 +25979,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26052,10 +26162,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26103,9 +26209,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26449,11 +26552,6 @@ msgid ""
 "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 ""
 
@@ -27064,13 +27162,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28367,6 +28465,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28382,77 +28618,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28503,27 +28744,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28664,160 +28884,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28867,17 +29024,6 @@ 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 ""
 
@@ -29314,18 +29460,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35071,26 +35205,6 @@ 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 ""
 
@@ -35259,6 +35373,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/vi.po b/i18n/po/vi.po
index 2644b9a..914e46d 100644
--- a/i18n/po/vi.po
+++ b/i18n/po/vi.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+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"
@@ -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: 2017-09-03 05:04+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 05:03+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: vi\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -404,6 +404,41 @@ msgstr "Xóa"
 msgid "Delete selected objects."
 msgstr "Xóa đối tượng được chọn."
 
+msgid "Delete confirmation"
+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 "
+"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] ""
+"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 "Xóa quan hệ?"
+
 msgid "Delete Layer"
 msgstr ""
 
@@ -1382,34 +1417,14 @@ msgstr " [id: {0}]"
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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 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 ""
-"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 "Search preset"
+msgstr "Tìm kiếm cài sẵn"
 
-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 "Show preset search dialog"
+msgstr "Hiển thị cài sẵn tìm kiếm hộp thoại"
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] "Split cách {0} vào {1} phần"
+msgid "Search presets"
+msgstr "Tìm kiếm cài đặt trước"
 
 msgid "Discourage upload"
 msgstr ""
@@ -2895,41 +2910,6 @@ msgid "Delete {0} relation"
 msgid_plural "Delete {0} relations"
 msgstr[0] "Xóa {0} mối quan hệ"
 
-msgid "Delete confirmation"
-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 "
-"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] ""
-"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 "Xóa quan hệ?"
-
 msgid "Move {0} node"
 msgid_plural "Move {0} nodes"
 msgstr[0] "Move {0} nút"
@@ -2956,6 +2936,35 @@ msgstr[0] "chọn {0} đối tượng"
 msgid "Sequence: {0}"
 msgstr "trình tự: {0}"
 
+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 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 ""
+"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] "Split cách {0} vào {1} phần"
+
 msgid "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] "Biến đổi {0} nút"
@@ -3080,6 +3089,18 @@ msgstr "giá trị vĩ độ bất hợp pháp '' {0} ''"
 msgid "Illegal longitude value ''{0}''"
 msgstr "giá trị kinh độ bất hợp pháp '' {0} ''"
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr "Không thể tạo thư mục mất tích cache: {0}"
 
@@ -3202,6 +3223,11 @@ msgstr "Imperial"
 msgid "Nautical Mile"
 msgstr "Nautical Mile"
 
+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 "UNKNOWN"
 msgstr "UNKNOWN"
 
@@ -3246,6 +3272,9 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3921,6 +3950,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr "Custom chiếu"
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr "Mô tả"
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr "Hiển thị trợ giúp này"
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr "ví dụ"
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr "GRS80"
 
@@ -4993,11 +5076,6 @@ msgctxt "layer"
 msgid "Offset"
 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 "Outdated Java version"
 msgstr "phiên bản Java lỗi thời"
 
@@ -5047,6 +5125,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr "Đang khởi tạo OSM API"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr "layer Removed {0} bởi vì nó không được phép của các API cấu hình."
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -5068,9 +5149,6 @@ msgstr "sử dụng"
 msgid "options"
 msgstr "tùy chọn"
 
-msgid "Show this help"
-msgstr "Hiển thị trợ giúp này"
-
 msgid "Standard unix geometry argument"
 msgstr "Standard unix hình học lập luận"
 
@@ -5290,6 +5368,13 @@ msgstr ""
 "để 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ờ?"
 
+msgid "You have {0} unread message."
+msgid_plural "You have {0} unread messages."
+msgstr[0] "Bạn có {0} tin nhắn chưa đọc."
+
+msgid "Click here to see your inbox."
+msgstr "Nhấn vào đây để xem hộp thư đến của bạn."
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5548,6 +5633,10 @@ 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 "Giá trị hiện tại isn''ta chỉ số ngói hợp lệ cho mức zoom cho"
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr "Bạn đã gặp phải một lỗi trong JOSM"
 
@@ -7419,6 +7508,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr "Cập nhật các changeset từ máy chủ OSM"
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7679,9 +7771,6 @@ msgstr "URL: "
 msgid "Please enter or paste an URL to retrieve changesets from the OSM API."
 msgstr "Hãy nhập hoặc dán một URL để lấy changesets từ API OSM."
 
-msgid "Examples"
-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."
@@ -8671,15 +8760,15 @@ msgstr "Tải khu vực ok, kích thước có thể chấp nhận được đ
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8708,33 +8797,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr "lịch sử"
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8858,6 +8920,33 @@ msgstr "đồ lật đật"
 msgid "Tile Numbers"
 msgstr "Số Tile"
 
+msgid "history"
+msgstr "lịch sử"
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr "JOSM Trợ giúp trình duyệt"
 
@@ -9015,6 +9104,12 @@ 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 "Mở một trình duyệt lịch sử với lịch sử của nút này"
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr "Way {0}"
 
@@ -9024,6 +9119,9 @@ msgstr "Quan hệ {0}"
 msgid "Object"
 msgstr "đối tượng"
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr "changeset bình luận"
 
@@ -9195,6 +9293,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 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:"
@@ -10316,9 +10417,6 @@ msgid "{0} track"
 msgid_plural "{0} tracks"
 msgstr[0] "{0} theo dõi"
 
-msgid "Description"
-msgstr "Mô tả"
-
 msgid "Timespan"
 msgstr "khoảng thời gian"
 
@@ -13708,15 +13806,6 @@ msgstr "yếu tố phụ Preset mà không cần cha mẹ"
 msgid "Error parsing {0}: "
 msgstr "Lỗi phân tích cú pháp {0}: "
 
-msgid "Search preset"
-msgstr "Tìm kiếm cài sẵn"
-
-msgid "Show preset search dialog"
-msgstr "Hiển thị cài sẵn tìm kiếm hộp thoại"
-
-msgid "Search presets"
-msgstr "Tìm kiếm cài đặt trước"
-
 msgid "Presets"
 msgstr "Presets"
 
@@ -13833,6 +13922,9 @@ msgstr "Tất cả các file (*. *)"
 msgid "Received error page:"
 msgstr "Nhận lỗi trang:"
 
+msgid "{0}... [please type its number]"
+msgstr "{0} ... [vui lòng gõ số của nó]"
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -14133,13 +14225,6 @@ msgstr "chế độ Unknown {0}."
 msgid "get number of unread messages"
 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] "Bạn có {0} tin nhắn chưa đọc."
-
-msgid "Click here to see your inbox."
-msgstr "Nhấn vào đây để xem hộp thư đến của bạn."
-
 msgid "Message notifier"
 msgstr "tin nhắn thông báo dạng"
 
@@ -14207,9 +14292,6 @@ 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 "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 "định dạng không mong đợi của ID trả lời của máy chủ. Chấn '' {0} ''."
 
@@ -15608,9 +15690,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-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."
@@ -15720,10 +15799,6 @@ msgid "Failed to load XML schema."
 msgstr "Không thể tải giản đồ XML."
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -16323,6 +16398,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr "không"
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr "Loại dịch vụ"
 
@@ -18383,9 +18462,9 @@ msgid "Bay"
 msgstr "Bay"
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 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 "Shipping"
 msgstr "Vận chuyển"
@@ -24239,6 +24318,9 @@ msgstr "Trails Waymarked: Cưỡi ngựa"
 msgid "Waymarked Trails: Winter Sports"
 msgstr "Trails Waymarked: Thể thao mùa đông"
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr "OSM Thanh tra: Hình học"
 
@@ -24297,6 +24379,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -24378,6 +24463,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -24399,9 +24499,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -24998,6 +25095,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -25409,6 +25509,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Niger Delta tháng 10 năm 2012 Landsat"
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -25852,6 +25955,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr "MSR Maps Topo"
 
@@ -27072,6 +27178,9 @@ msgstr "mối quan hệ không có loại"
 msgid "{0} relation without {0} tag"
 msgstr "{0} mối quan hệ mà không có {0} tag"
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr "tôn giáo không có mệnh giá"
 
@@ -27269,10 +27378,6 @@ msgid "Customization of public public transport stops."
 msgstr ""
 
 msgid ""
-"Creating and handling address nodes and buildings within Czech Republic."
-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 ""
@@ -27330,9 +27435,6 @@ 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 "Allows you to view a GeoJSON file as a layer."
-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."
@@ -27755,13 +27857,6 @@ msgstr ""
 "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 "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"
 
@@ -28403,15 +28498,15 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
+msgid "Start Mapillary layer"
+msgstr ""
+
 msgid "Mapillary"
 msgstr "Mapillary"
 
 msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Start Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -29808,6 +29903,162 @@ 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 "Không có các nút địa chỉ bên trong tòa nhà tìm thấy"
 
+msgid "Auto sourcing"
+msgstr "Tự động tìm nguồn cung ứng"
+
+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 "Thay đổi chiếu hiện tại"
+
+msgid "Extract commune boundary"
+msgstr "Extract xã biên giới"
+
+msgid "Only on vectorized layers"
+msgstr "Chỉ trên lớp véc tơ"
+
+msgid "Cancel current grab"
+msgstr "Hủy lấy hiện tại"
+
+msgid "Cancel current grab (only vector images)"
+msgstr "Hủy lấy (những ảnh vector) hiện tại"
+
+msgid "Cadastre grab"
+msgstr "Địa chính lấy"
+
+msgid "Download Image from French Cadastre WMS"
+msgstr "Tải hình ảnh từ Pháp Địa chính WMS"
+
+msgid "Cadastre: {0}"
+msgstr "Địa chính: {0}"
+
+msgid "Georeference an image"
+msgstr "georeference một hình ảnh"
+
+msgid "Grab non-georeferenced image"
+msgstr "Lấy hình ảnh không tham chiếu hình học"
+
+msgid "Georeferencing interrupted"
+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 "Load layer từ bộ nhớ cache"
+
+msgid "Load location from cache (only if cache is enabled)"
+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 "{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 "{0} vị trí đã được trên màn hình. cache không được nạp."
+
+msgid "(optional)"
+msgstr "(tùy chọn)"
+
+msgid "Change location"
+msgstr "Change location"
+
+msgid "Set a new location for the next request"
+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 "Thêm một layer đô thị mới"
+
+msgid "Commune"
+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 "Lãnh thổ hải"
+
+msgid "<html>Departement number (optional)</html>"
+msgstr "<html> số thuộc tỉnh (tùy chọn) </ html>"
+
+msgid "Add new layer"
+msgstr "thêm một lớp mới"
+
+msgid "Open Cadastre Preferences"
+msgstr "Preferences mở Địa chính"
+
+msgid "Refine georeferencing"
+msgstr "Lọc georeferencing"
+
+msgid "Improve georeferencing (only raster images)"
+msgstr "Nâng cao georeferencing (chỉ hình ảnh raster)"
+
+msgid "Reset cookie"
+msgstr "Đặt lại cookie"
+
+msgid "Get a new cookie (session timeout)"
+msgstr "Nhận một cookie mới (session timeout)"
+
+msgid "Save image as..."
+msgstr "Lưu hình ảnh thành ..."
+
+msgid "PNG files (*.png)"
+msgstr "các tập tin PNG (* .png)"
+
+msgid "GeoTiff files (*.tif)"
+msgstr "các tập tin tệp GeoTiff (* .tif)"
+
+msgid "Export image (only raster images)"
+msgstr "hình ảnh xuất khẩu (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 "on polygon"
 msgstr "trên đa giác"
 
@@ -29823,95 +30074,83 @@ msgstr "Tiếp theo không"
 msgid "Enter addresses"
 msgstr "Nhập địa chỉ"
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
+msgstr "Điều chỉnh WMS"
+
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
+msgstr "Điều chỉnh vị trí của lớp WMS (lưu lại để chỉ hình ảnh raster)"
+
+msgid "Add \"source=...\" to elements?"
+msgstr "Thêm \" source = ... \"để tố?"
+
+msgid "Download from Cadastre"
 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 "Chọn Feuille"
+msgid "Objects:"
+msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Select to download buildings in the selected download area."
 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 "Lambert Zone {0} file cache (. {0})"
+msgid "address"
+msgstr "địa chỉ"
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
-msgstr "Lambert CC9 Zone {0} file cache (.cc {0})"
+msgid "Select to download addresses in the selected download area."
+msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
-msgstr "tập tin bộ nhớ cache Guadeloupe Fort-Marigot (.UTM1)"
+msgid "symbol"
+msgstr "biểu tượng"
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
-msgstr "tập tin bộ nhớ cache Guadeloupe Ste-Anne (.UTM2)"
+msgid "Select to download symbols in the selected download area."
+msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
-msgstr "tập tin bộ nhớ cache Martinique Fort Desaix (.UTM3)"
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
-msgstr "tập tin bộ nhớ cache Reunion RGR92 (.UTM4)"
+msgid "parcel"
+msgstr "thửa"
 
-msgid "CadastreGrabber: Illegal url."
-msgstr "CadastreGrabber: url bất hợp pháp."
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
+msgstr "số thửa"
 
 msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+"Select to download cadastral parcel numbers in the selected download area."
 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"
+msgid "section"
+msgstr "phần"
+
+msgid "Select to download cadastral sections in the selected download area."
 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 "Chọn từ ..."
+msgid "locality"
+msgstr "địa phương"
 
-msgid "Select commune"
-msgstr "Chọn xã"
+msgid "Select to download localities in the selected download area."
+msgstr ""
 
-msgid "Auto sourcing"
-msgstr "Tự động tìm nguồn cung ứng"
+msgid "commune"
+msgstr "xã"
 
 msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+"Select to download municipality boundary in the selected download area."
 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}"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 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"
+msgid "Recipient"
 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 "Thay đổi chiếu hiện tại"
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
+msgstr ""
 
 msgid "Replace original background by JOSM background color."
 msgstr "Thay thế nền ban đầu bởi màu nền JOSM."
@@ -29963,27 +30202,6 @@ msgstr "trung bình"
 msgid "low"
 msgstr "thấp"
 
-msgid "symbol"
-msgstr "biểu tượng"
-
-msgid "parcel"
-msgstr "thửa"
-
-msgid "parcel number"
-msgstr "số thửa"
-
-msgid "address"
-msgstr "địa chỉ"
-
-msgid "locality"
-msgstr "địa phương"
-
-msgid "section"
-msgstr "phần"
-
-msgid "commune"
-msgstr "xã"
-
 msgid "Enable automatic caching."
 msgstr "Kích hoạt tính năng bộ nhớ đệm tự động."
 
@@ -30139,8 +30357,65 @@ msgstr ""
 msgid "Unexpected file extension. {0}"
 msgstr "Unexpected mở rộng tập tin. {0}"
 
-msgid "Add \"source=...\" to elements?"
-msgstr "Thêm \" source = ... \"để tố?"
+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 "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 "Lambert Zone {0} file cache (. {0})"
+
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgstr "Lambert CC9 Zone {0} file cache (.cc {0})"
+
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgstr "tập tin bộ nhớ cache Guadeloupe Fort-Marigot (.UTM1)"
+
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgstr "tập tin bộ nhớ cache Guadeloupe Ste-Anne (.UTM2)"
+
+msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgstr "tập tin bộ nhớ cache Martinique Fort Desaix (.UTM3)"
+
+msgid "Reunion RGR92 cache file (.UTM4)"
+msgstr "tập tin bộ nhớ cache Reunion RGR92 (.UTM4)"
+
+msgid "CadastreGrabber: Illegal url."
+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 "Chọn từ ..."
+
+msgid "Select commune"
+msgstr "Chọn xã"
 
 msgid "Downloading {0}"
 msgstr "Tải {0}"
@@ -30192,125 +30467,6 @@ 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 "Extract xã biên giới"
-
-msgid "Only on vectorized layers"
-msgstr "Chỉ trên lớp véc tơ"
-
-msgid "Cancel current grab"
-msgstr "Hủy lấy hiện tại"
-
-msgid "Cancel current grab (only vector images)"
-msgstr "Hủy lấy (những ảnh vector) hiện tại"
-
-msgid "Cadastre grab"
-msgstr "Địa chính lấy"
-
-msgid "Download Image from French Cadastre WMS"
-msgstr "Tải hình ảnh từ Pháp Địa chính WMS"
-
-msgid "Cadastre: {0}"
-msgstr "Địa chính: {0}"
-
-msgid "Georeference an image"
-msgstr "georeference một hình ảnh"
-
-msgid "Grab non-georeferenced image"
-msgstr "Lấy hình ảnh không tham chiếu hình học"
-
-msgid "Georeferencing interrupted"
-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 "Load layer từ bộ nhớ cache"
-
-msgid "Load location from cache (only if cache is enabled)"
-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 "{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 "{0} vị trí đã được trên màn hình. cache không được nạp."
-
-msgid "(optional)"
-msgstr "(tùy chọn)"
-
-msgid "Change location"
-msgstr "Change location"
-
-msgid "Set a new location for the next request"
-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 "Thêm một layer đô thị mới"
-
-msgid "Commune"
-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 "Lãnh thổ hải"
-
-msgid "<html>Departement number (optional)</html>"
-msgstr "<html> số thuộc tỉnh (tùy chọn) </ html>"
-
-msgid "Add new layer"
-msgstr "thêm một lớp mới"
-
-msgid "Open Cadastre Preferences"
-msgstr "Preferences mở Địa chính"
-
-msgid "Refine georeferencing"
-msgstr "Lọc georeferencing"
-
-msgid "Improve georeferencing (only raster images)"
-msgstr "Nâng cao georeferencing (chỉ hình ảnh raster)"
-
-msgid "Reset cookie"
-msgstr "Đặt lại cookie"
-
-msgid "Get a new cookie (session timeout)"
-msgstr "Nhận một cookie mới (session timeout)"
-
-msgid "Save image as..."
-msgstr "Lưu hình ảnh thành ..."
-
-msgid "PNG files (*.png)"
-msgstr "các tập tin PNG (* .png)"
-
-msgid "GeoTiff files (*.tif)"
-msgstr "các tập tin tệp GeoTiff (* .tif)"
-
-msgid "Export image (only raster images)"
-msgstr "hình ảnh xuất khẩu (chỉ hình ảnh raster)"
-
 msgid ""
 "Click first corner for image cropping\n"
 "(two points required)"
@@ -30366,19 +30522,6 @@ 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 "Nhấn vào thứ hai Lambert crosspiece cho georeferencing"
 
-msgid "Adjust WMS"
-msgstr "Điều chỉnh WMS"
-
-msgid "Adjust the position of the WMS layer (saved for raster images only)"
-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 "Đặt lại bù đắp"
 
@@ -30819,21 +30962,6 @@ msgid ""
 "to cancel the download."
 msgstr ""
 
-msgid "Split area"
-msgstr "Split khu vực"
-
-msgid "Splits an area by an untagged way."
-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 "TangoGPS Files (* .log)"
 
@@ -36924,28 +37052,6 @@ msgstr "loop"
 msgid "mute"
 msgstr "câm"
 
-msgid "Walking Papers Scanned Map"
-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 "không thể đọc thông tin từ walking-papers.org id \" {0} \""
-
-msgid "Walking Papers: {0}"
-msgstr "Walking Papers: {0}"
-
-msgid "Walking Papers layer ({0}) in zoom {1}"
-msgstr "Walking Papers layer ({0}) trong zoom {1}"
-
 msgid "Way Download"
 msgstr "Way Download"
 
@@ -37132,6 +37238,26 @@ 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 "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "The Ultimate WMS siêu tốc Turbo Challenge II"
 
diff --git a/i18n/po/wae.po b/i18n/po/wae.po
index 31c9cd1..1f7613e 100644
--- a/i18n/po/wae.po
+++ b/i18n/po/wae.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: 2017-09-02 22:59+0200\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
 "PO-Revision-Date: 2016-03-09 22:17+0000\n"
 "Last-Translator: Simon Legner <Unknown>\n"
 "Language-Team: Walser <wae 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: 2017-09-03 05:08+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-09-30 05:07+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
 msgstr ""
@@ -386,6 +386,34 @@ msgstr ""
 msgid "Delete selected objects."
 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 "Delete Layer"
 msgstr ""
 
@@ -1292,29 +1320,15 @@ msgstr ""
 msgid "Segment {0}: {1}"
 msgstr ""
 
-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.)"
+msgid "Search preset"
 msgstr ""
 
-msgid ""
-"A role based relation membership was copied to all new ways.<br>You should "
-"verify this and correct it when necessary."
+msgid "Show preset search dialog"
 msgstr ""
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
+msgid "Search presets"
 msgstr ""
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
-
 msgid "Discourage upload"
 msgstr ""
 
@@ -2723,34 +2737,6 @@ msgid_plural "Delete {0} relations"
 msgstr[0] ""
 msgstr[1] ""
 
-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] ""
@@ -2782,6 +2768,29 @@ msgstr[1] ""
 msgid "Sequence: {0}"
 msgstr ""
 
+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 "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] ""
@@ -2901,6 +2910,18 @@ msgstr ""
 msgid "Illegal longitude value ''{0}''"
 msgstr ""
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr ""
 
@@ -3008,6 +3029,9 @@ msgstr ""
 msgid "Nautical Mile"
 msgstr ""
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
 msgid "UNKNOWN"
 msgstr ""
 
@@ -3051,6 +3075,9 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -3687,6 +3714,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr ""
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr ""
 
@@ -4727,9 +4808,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr ""
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
-
 msgid "Outdated Java version"
 msgstr ""
 
@@ -4775,6 +4853,9 @@ msgstr ""
 msgid "Initializing OSM API"
 msgstr ""
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
 msgid "Initializing internal traffic data"
 msgstr ""
 
@@ -4796,9 +4877,6 @@ msgstr ""
 msgid "options"
 msgstr ""
 
-msgid "Show this help"
-msgstr ""
-
 msgid "Standard unix geometry argument"
 msgstr ""
 
@@ -4999,6 +5077,14 @@ msgid ""
 "now?"
 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 ""
+
 msgctxt "menu"
 msgid "File"
 msgstr ""
@@ -5251,6 +5337,10 @@ msgstr ""
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr ""
 
@@ -7033,6 +7123,9 @@ msgstr ""
 msgid "Update the changeset from the OSM server"
 msgstr ""
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7255,9 +7348,6 @@ 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."
@@ -8185,15 +8275,15 @@ msgstr ""
 msgid "Download from Overpass API"
 msgstr ""
 
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 msgstr ""
 
-msgid "Query Wizard"
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
+msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
@@ -8222,33 +8312,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr ""
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8372,6 +8435,33 @@ msgstr ""
 msgid "Tile Numbers"
 msgstr ""
 
+msgid "history"
+msgstr ""
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr ""
 
@@ -8505,6 +8595,12 @@ msgstr ""
 msgid "Open a history browser with the history of this node"
 msgstr ""
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr ""
 
@@ -8514,6 +8610,9 @@ msgstr ""
 msgid "Object"
 msgstr ""
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr ""
 
@@ -8658,6 +8757,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr ""
 
@@ -9697,9 +9799,6 @@ msgid_plural "{0} tracks"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "Description"
-msgstr ""
-
 msgid "Timespan"
 msgstr ""
 
@@ -12836,15 +12935,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Search preset"
-msgstr ""
-
-msgid "Show preset search dialog"
-msgstr ""
-
-msgid "Search presets"
-msgstr ""
-
 msgid "Presets"
 msgstr ""
 
@@ -12950,6 +13040,9 @@ msgstr ""
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13199,14 +13292,6 @@ 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 ""
 
@@ -13270,9 +13355,6 @@ msgid ""
 "{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 ""
 
@@ -14504,9 +14586,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14603,10 +14682,6 @@ msgid "Failed to load XML schema."
 msgstr ""
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15194,6 +15269,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr ""
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr ""
 
@@ -17231,7 +17310,8 @@ msgid "Bay"
 msgstr ""
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 msgstr ""
 
 msgid "Shipping"
@@ -23057,6 +23137,9 @@ msgstr ""
 msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr ""
 
@@ -23115,6 +23198,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23196,6 +23282,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23217,9 +23318,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23814,6 +23912,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24225,6 +24326,9 @@ msgstr ""
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24668,6 +24772,9 @@ msgstr ""
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -25871,6 +25978,9 @@ msgstr ""
 msgid "{0} relation without {0} tag"
 msgstr ""
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr ""
 
@@ -26051,10 +26161,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26102,9 +26208,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26448,11 +26551,6 @@ msgid ""
 "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 ""
 
@@ -27063,13 +27161,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28366,6 +28464,144 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "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 ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
 msgid "on polygon"
 msgstr ""
 
@@ -28381,77 +28617,82 @@ msgstr ""
 msgid "Enter addresses"
 msgstr ""
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
 msgstr ""
 
-msgid "Select Feuille"
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Add \"source=...\" to elements?"
 msgstr ""
 
-msgid "Lambert Zone {0} cache file (.{0})"
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgid "Objects:"
 msgstr ""
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgid "Select to download buildings in the selected download area."
 msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgid "address"
 msgstr ""
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgid "Select to download addresses in the selected download area."
 msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
+msgid "symbol"
 msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
+msgid "Select to download symbols in the selected download area."
 msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
 msgstr ""
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
 
-msgid "Choose from..."
+msgid "section"
 msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
+msgid "locality"
 msgstr ""
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+"Select to download municipality boundary in the selected download area."
 msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28502,27 +28743,6 @@ msgstr ""
 msgid "low"
 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 ""
 
@@ -28663,160 +28883,97 @@ 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"
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
 msgstr ""
 
-msgid ""
-"Municipality vectorized !\n"
-"Use the normal Cadastre Grab menu."
+msgid "Select Feuille"
 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}"
+"Error loading file.\n"
+"Probably an old version of the cache file."
 msgstr ""
 
-msgid "Georeference an image"
+msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
 
-msgid "Grab non-georeferenced image"
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr ""
 
-msgid "Georeferencing interrupted"
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
 
-msgid ""
-"This image contains georeference data.\n"
-"Do you want to use them ?"
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
 msgstr ""
 
-msgid "Load layer from cache"
+msgid "Martinique Fort Desaix cache file (.UTM3)"
 msgstr ""
 
-msgid "Load location from cache (only if cache is enabled)"
+msgid "Reunion RGR92 cache file (.UTM4)"
 msgstr ""
 
-msgid "{0} not allowed with the current projection"
+msgid "CadastreGrabber: Illegal url."
 msgstr ""
 
 msgid ""
-"Cannot load cache {0} which is not compatible with current projection zone"
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
 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."
+"Town/city {0} not found or not available\n"
+"or action canceled"
 msgstr ""
 
-msgid "(optional)"
+msgid "Choose from..."
 msgstr ""
 
-msgid "Change location"
+msgid "Select commune"
 msgstr ""
 
-msgid "Set a new location for the next request"
+msgid "Downloading {0}"
 msgstr ""
 
-msgid "Add a new municipality layer"
+msgid "Contacting WMS Server..."
 msgstr ""
 
-msgid "Commune"
+msgid "Create buildings"
 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"
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
 msgstr ""
 
-msgid "Refine georeferencing"
+msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
 
-msgid "Improve georeferencing (only raster images)"
+msgid "Extract SVG ViewBox..."
 msgstr ""
 
-msgid "Reset cookie"
+msgid "Extract best fitting boundary..."
 msgstr ""
 
-msgid "Get a new cookie (session timeout)"
+msgid "Create boundary"
 msgstr ""
 
-msgid "Save image as..."
+msgid "Contacting cadastre WMS ..."
 msgstr ""
 
-msgid "PNG files (*.png)"
+msgid "Image already loaded"
 msgstr ""
 
-msgid "GeoTiff files (*.tif)"
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
 msgstr ""
 
-msgid "Export image (only raster images)"
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
 
 msgid ""
@@ -28866,17 +29023,6 @@ 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 ""
 
@@ -29313,18 +29459,6 @@ msgid ""
 "to cancel the download."
 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 ""
 
@@ -35070,26 +35204,6 @@ 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 ""
 
@@ -35258,6 +35372,26 @@ msgid ""
 "objects"
 msgstr ""
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/zh_CN.po b/i18n/po/zh_CN.po
index 65fa235..334393d 100644
--- a/i18n/po/zh_CN.po
+++ b/i18n/po/zh_CN.po
@@ -10,16 +10,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-02 22:59+0200\n"
-"PO-Revision-Date: 2016-10-23 14:49+0000\n"
-"Last-Translator: mmyfl <Unknown>\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
+"PO-Revision-Date: 2017-10-02 17:36+0000\n"
+"Last-Translator: Austin Zhu <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: 2017-09-03 05:07+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-10-03 04:34+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: zh_CN\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -387,6 +387,33 @@ msgstr "删除"
 msgid "Delete selected objects."
 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 "您将要删除在下载的区域外的节点。<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 "
+"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] "您将要删除 {0} 个关系:{1}<br/>这一步很少是必要的,并且在上传到服务器后,不能很容易地被撤销。<BR/您真的要删除吗?"
+
+msgid "Delete relation?"
+msgstr "删除关系?"
+
 msgid "Delete Layer"
 msgstr "删除图层"
 
@@ -421,7 +448,7 @@ msgid "Download data"
 msgstr "下载数据"
 
 msgid "Download map data from a server of your choice"
-msgstr ""
+msgstr "从已选定的服务器上下载地图数据"
 
 msgid ""
 "<html>This action will require {0} individual<br>download requests. Do you "
@@ -453,7 +480,7 @@ msgid "Duplicate"
 msgstr "制作副本"
 
 msgid "Duplicate selection."
-msgstr ""
+msgstr "重复选择"
 
 msgid "Exit"
 msgstr "退出"
@@ -1008,13 +1035,13 @@ msgid "Paste"
 msgstr "粘贴"
 
 msgid "Paste contents of clipboard."
-msgstr ""
+msgstr "粘贴剪贴板内容"
 
 msgid "Paste at source position"
-msgstr ""
+msgstr "在源位置粘贴"
 
 msgid "Paste contents of clipboard at the position they were copied from."
-msgstr ""
+msgstr "在被复制位置粘贴剪贴板内容"
 
 msgid "Paste Tags"
 msgstr "粘贴标签"
@@ -1300,30 +1327,17 @@ msgstr " [id:{0}]"
 msgid "Segment {0}: {1}"
 msgstr "区段 {0}:{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 "基于角色的成员关系复制到了所有的新路径上。<br>您应该验证这一点,并必要时改正它。"
+msgid "Search preset"
+msgstr "搜索预设组合"
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
-msgstr "成员关系复制到了所有的新路径上。<br>您应该验证这一点,并必要时改正它。"
+msgid "Show preset search dialog"
+msgstr "显示预设组合搜索对话框"
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] "分割路径 {0} 为 {1} 个部分"
+msgid "Search presets"
+msgstr "搜索预设组合"
 
 msgid "Discourage upload"
-msgstr ""
+msgstr "阻止上传"
 
 msgid "UnGlue Ways"
 msgstr "拆开路径"
@@ -2298,19 +2312,19 @@ msgid "MapCSS selector"
 msgstr "MapCSS 选择器"
 
 msgid "Selection settings"
-msgstr ""
+msgstr "选择设置"
 
 msgid "Additional settings"
-msgstr ""
+msgstr "附加设置"
 
 msgid "Search syntax"
-msgstr ""
+msgstr "搜索语法"
 
 msgid "Invalid search expression"
 msgstr "无效的搜索表达式"
 
 msgid "Search by preset"
-msgstr ""
+msgstr "按预设搜索"
 
 msgid "Filter"
 msgstr "过滤器"
@@ -2334,7 +2348,7 @@ msgstr ""
 " {0}"
 
 msgid "Search hints"
-msgstr ""
+msgstr "搜索提示"
 
 msgid "basics"
 msgstr "基本"
@@ -2399,7 +2413,7 @@ msgid "objects"
 msgstr "对象"
 
 msgid "all nodes"
-msgstr ""
+msgstr "所有节点"
 
 msgid "all ways"
 msgstr "所有路径"
@@ -2414,10 +2428,10 @@ msgid "object without useful tags"
 msgstr "物件没有有用的标签"
 
 msgid "all objects that use the address preset"
-msgstr ""
+msgstr "所有使用地址预设的对象"
 
 msgid "all objects that use any preset under the Geography/Nature group"
-msgstr ""
+msgstr "所有使用地理/自然组之下预设的对象"
 
 msgid "metadata"
 msgstr "元数据"
@@ -2476,7 +2490,7 @@ msgid "all incomplete objects"
 msgstr "所有不完整的对象"
 
 msgid "all deleted objects (checkbox <b>{0}</b> must be enabled)"
-msgstr ""
+msgstr "所有已删除的对象(checkbox <b>{0}</b> 必须被启用)"
 
 msgid "related objects"
 msgstr "相关对象"
@@ -2642,7 +2656,7 @@ msgid "Change relation {0}"
 msgstr "改变关系 {0}"
 
 msgid "Change nodes of {0}"
-msgstr ""
+msgstr "更改{0}节点"
 
 msgid "Remove \"{0}\" for node ''{1}''"
 msgstr "从节点“{1}”删除“{0}”"
@@ -2719,33 +2733,6 @@ msgid "Delete {0} relation"
 msgid_plural "Delete {0} relations"
 msgstr[0] "删除 {0} 个关系"
 
-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 "您将要删除在下载的区域外的节点。<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 "
-"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] "您将要删除 {0} 个关系:{1}<br/>这一步很少是必要的,并且在上传到服务器后,不能很容易地被撤销。<BR/您真的要删除吗?"
-
-msgid "Delete relation?"
-msgstr "删除关系?"
-
 msgid "Move {0} node"
 msgid_plural "Move {0} nodes"
 msgstr[0] "移动 {0} 个节点"
@@ -2772,6 +2759,28 @@ msgstr[0] "选中 {0} 个对象"
 msgid "Sequence: {0}"
 msgstr "序列:{0}"
 
+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 "基于角色的成员关系复制到了所有的新路径上。<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] "分割路径 {0} 为 {1} 个部分"
+
 msgid "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] "变换 {0} 个节点"
@@ -2888,6 +2897,18 @@ msgstr "非法纬度值“{0}”"
 msgid "Illegal longitude value ''{0}''"
 msgstr "非法经度值“{0}”"
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr "创建丢失偏好目录失败: {0}"
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr "<html>创建丢失偏好目录失败: {0}</html>"
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr "创建丢失用户数据目录失败: {0}"
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr "<html>创建丢失用户数据目录失败: {0}</html>"
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr "无法创建丢失的缓存目录:{0}"
 
@@ -2995,6 +3016,9 @@ msgstr "英制"
 msgid "Nautical Mile"
 msgstr "海里"
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr "参数“{0}”应为非空的数值,得到“{1}”"
+
 msgid "UNKNOWN"
 msgstr "不明"
 
@@ -3038,26 +3062,29 @@ msgctxt "compass"
 msgid "E"
 msgstr "东"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr "无法作为坐标值解析: ''{0}''"
+
 msgid "Date of imagery: {0}"
-msgstr ""
+msgstr "图像日期: {0}"
 
 msgid "This imagery is marked as best in this region in other editors."
-msgstr ""
+msgstr "该区域的其他编辑者标注其为最好图像"
 
 msgid "{0} mirror server {1}"
-msgstr ""
+msgstr "{0}镜像服务器 {1}"
 
 msgid "{0} mirror server"
-msgstr ""
+msgstr "{0} 镜像服务器"
 
 msgid "Update default entries"
 msgstr "更新默认项"
 
 msgid "Update imagery ''{0}''"
-msgstr ""
+msgstr "更新图像 ''{0}''"
 
 msgid "Drop old imagery ''{0}''"
-msgstr ""
+msgstr "丢弃旧图像 ''{0}''"
 
 msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr "找不到投影法“{0}”,无法使用书签“{1}”"
@@ -3091,7 +3118,7 @@ msgid "Matrix set identifier"
 msgstr "矩阵集标识符"
 
 msgid "No default layer selected, choosing first layer."
-msgstr ""
+msgstr "没有选择默认图层,已选定首个图层"
 
 msgid "No layers defined by getCapabilities document: {0}"
 msgstr "getCapabilities 文档未定义图层:{0}"
@@ -3103,7 +3130,7 @@ msgstr "WMT S解析器错误 - 开始元素 {0} 与结束元素 {2} 名称不同
 msgid ""
 "Can''t use layer {0} because no supported formats where found. Layer is "
 "available in formats: {1}"
-msgstr ""
+msgstr "无法使用图层 {0} 由于没有找到支持的格式. 有效图层格式: {1}"
 
 msgid ""
 "Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
@@ -3369,7 +3396,7 @@ msgid "Range of numbers expected"
 msgstr "预计的数字范围"
 
 msgid "Unknown preset name: "
-msgstr ""
+msgstr "未知预设名: "
 
 msgid "Failed to parse MapCSS selector"
 msgstr "解析 MapCSS 选择器失败"
@@ -3584,10 +3611,10 @@ msgid "Checks for errors on relations"
 msgstr "检查关系错误"
 
 msgid "Territories"
-msgstr ""
+msgstr "地区"
 
 msgid "Checks for territories-specific features"
-msgstr ""
+msgstr "检查地区特有特征"
 
 msgid "Unnecessary tags"
 msgstr "不必要的标签"
@@ -3675,6 +3702,60 @@ msgstr "无法将参数“{0}”的值“{1}”解析为坐标值。"
 msgid "Custom Projection"
 msgstr "自定义投影法"
 
+msgid "Error: {0}"
+msgstr "错误: {0}"
+
+msgid "JOSM projection command line interface"
+msgstr "JOSM投影的命令行界面"
+
+msgid "Description"
+msgstr "描述"
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr "将坐标从某一坐标参考系转换至另一个"
+
+msgid "Options"
+msgstr "选项"
+
+msgid "Show this help"
+msgstr "显示此说明信息"
+
+msgid "Switch input and output crs"
+msgstr "切换输入和输出crs"
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr "改变输入坐标的顺序 (东/北, 经/纬)"
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr "改变输出坐标的顺序 (东/北, 经/纬)"
+
+msgid "<crs>"
+msgstr "<crs>"
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr "用于输入输出坐标参考系的格式与PROJ.4软件格式类似"
+
+msgid "[file]"
+msgstr "[文件]"
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr "从一个或多个列出的位置变量中读取输入数据。如果没有给定的文件或文件名为\"-\",数据将会从标准输出中读取。"
+
+msgid "Examples"
+msgstr "例子"
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr "预期的两个坐标(以空格分隔)在“{1}”中找到{0}"
+
+msgid "Unable to parse number ''{0}''"
+msgstr "无法解析数字 ''{0}''"
+
 msgid "GRS80"
 msgstr "GRS80"
 
@@ -3816,7 +3897,7 @@ 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} 个点,应切割或简化。"
@@ -4062,7 +4143,7 @@ msgid "Area style way is not closed"
 msgstr "区域类型的路径未封闭"
 
 msgid "No outer way for boundary"
-msgstr ""
+msgstr "边界没有外部路径"
 
 msgid "No outer way for multipolygon"
 msgstr "多重多边形没有外部路径"
@@ -4096,13 +4177,13 @@ msgid "Multipolygon is not closed"
 msgstr "多重多边形未封闭"
 
 msgid "Multipolygon rings share node(s)"
-msgstr ""
+msgstr "多重多边形环共用节点"
 
 msgid "Intersection between multipolygon ways"
 msgstr "多重多边形之间有交集"
 
 msgid "Multipolygon rings are equal"
-msgstr ""
+msgstr "多重多边形环同等"
 
 msgid "Role for ''{0}'' should be ''{1}''"
 msgstr "“{0}”的角色应为“{1}”"
@@ -4111,25 +4192,25 @@ msgid "Multipolygon inner way is outside"
 msgstr "多重多边形的内部路径超出外围"
 
 msgid "Multipolygon ring contains segments twice"
-msgstr ""
+msgstr "多重多边形环包括重复区段"
 
 msgid "Multipolygon outer way shares segment(s) with other ring"
-msgstr ""
+msgstr "多重多边形的外部路径与其他环共用区段"
 
 msgid "No useful role for multipolygon member"
 msgstr "多重多边形成员没有有用的角色"
 
 msgid "Non-Way in boundary"
-msgstr ""
+msgstr "在边界中的非路径"
 
 msgid "Non-Way in multipolygon"
 msgstr "多重多边形内没有路径"
 
 msgid "Multipolygon member(s) repeated with different role"
-msgstr ""
+msgstr "多重多边形成员以不同角色重复"
 
 msgid "Multipolygon member(s) repeated with same role"
-msgstr ""
+msgstr "多重多边形成员以相同角色重复"
 
 msgid "Missing name:* translation"
 msgstr "缺少 name:* 翻译"
@@ -4253,30 +4334,30 @@ msgstr "关系是空白的"
 
 msgid ""
 "Role of relation member does not match expression ''{0}'' in template {1}"
-msgstr ""
+msgstr "关系成员的角色不符合模板{1}中的表达式“{0}”"
 
 msgid ""
 "Type ''{0}'' of relation member with role ''{1}'' does not match accepted "
 "types ''{2}'' in template {3}"
-msgstr ""
+msgstr "含有角色“{1}”的“{0}”种类关系成员不符合在模板{3}中可接受的“{2}”种类"
 
 msgid "<empty>"
 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 "自我交叉的路径"
@@ -4719,9 +4800,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr "偏移"
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr "参数“{0}”应为非空的数值,得到“{1}”"
-
 msgid "Outdated Java version"
 msgstr "过时的 Java 版本"
 
@@ -4744,13 +4822,13 @@ msgstr "JOSM 即将停止支持这一 Java 版本,强烈建议您升级至 Jav
 msgid ""
 "You may face critical Java bugs; we highly recommend you to update to Java "
 "{0}."
-msgstr ""
+msgstr "您可能会遇到严重的Java漏洞;我们极力建议您升级至Java{0}。"
 
 msgid "Would you like to update now ?"
 msgstr "您希望立即更新吗?"
 
 msgid "Starting file watcher"
-msgstr ""
+msgstr "正在开始文件监视"
 
 msgid "Executing platform startup hook"
 msgstr "执行平台启动挂钩中"
@@ -4762,13 +4840,16 @@ msgid "Updating user interface"
 msgstr "更新用户界面中"
 
 msgid "Initializing internal boundaries data"
-msgstr ""
+msgstr "初始化内部边界数据中"
 
 msgid "Initializing OSM API"
 msgstr "初始化 OSM API 中"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr "已删除图层 {0},因为它不被配置的 API 所支持。"
+
 msgid "Initializing internal traffic data"
-msgstr ""
+msgstr "初始化内部交通数据中"
 
 msgid "Initializing validator"
 msgstr "初始化验证器中"
@@ -4788,9 +4869,6 @@ msgstr "用法"
 msgid "options"
 msgstr "选项"
 
-msgid "Show this help"
-msgstr "显示此说明信息"
-
 msgid "Standard unix geometry argument"
 msgstr "标准 unix 几何参数"
 
@@ -4843,7 +4921,7 @@ msgid "options provided as Java system properties"
 msgstr "提供 Java 系统属性的选项"
 
 msgid "Change the JOSM directory name"
-msgstr ""
+msgstr "更改JOSM目录名"
 
 msgid "/PATH/TO/JOSM/PREF    "
 msgstr "/JOSM/首选项/路径    "
@@ -4852,7 +4930,7 @@ msgid "Set the preferences directory"
 msgstr "设置首选项目录"
 
 msgid "Default: {0}"
-msgstr ""
+msgstr "默认:{0}"
 
 msgid "/PATH/TO/JOSM/USERDATA"
 msgstr "/JOSM/用户/数据/路径"
@@ -4872,7 +4950,7 @@ msgstr "/JOSM/安装/路径 "
 msgid ""
 "Set the preferences+data+cache directory (cache directory will be "
 "josm.home/cache)"
-msgstr ""
+msgstr "设定偏好+数据+缓存目录(缓存目录将为josm.home/cache)"
 
 msgid ""
 "-Djosm.home has lower precedence, i.e. the specific setting overrides the "
@@ -4993,6 +5071,13 @@ msgstr ""
 "JOSM "
 "试图访问下列资源:<br>{0},但访问<b>失败</b>,因下列网络错误:<br>{1}这可能是由于未配置代理。<br>您是否要立即更改代理设置?"
 
+msgid "You have {0} unread message."
+msgid_plural "You have {0} unread messages."
+msgstr[0] "您有 {0} 封未读邮件。"
+
+msgid "Click here to see your inbox."
+msgstr "点击这里查看您的收件箱。"
+
 msgctxt "menu"
 msgid "File"
 msgstr "文件(F)"
@@ -5195,10 +5280,10 @@ msgid " ({0})"
 msgstr " ({0})"
 
 msgid "<h2>Filter active: {0}</h2>"
-msgstr ""
+msgstr "<h2>过滤器启用:{0}</h2>"
 
 msgid "</p><p>Click again on filter button to see all objects.</p></html>"
-msgstr ""
+msgstr "/p><p>再次点击过滤器按钮来查看所有对象</p></html>"
 
 msgid "Enlarge"
 msgstr "放大"
@@ -5247,6 +5332,10 @@ msgstr "请输入瓦片索引"
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr "在指定的缩放等级中,目前的数值是无法使用的瓦片索引"
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr "打开错误报告失败。请使用此网站手动报告:"
+
 msgid "You have encountered a bug in JOSM"
 msgstr "您遇到了 JOSM 程序缺陷"
 
@@ -5255,18 +5344,20 @@ msgid ""
 "This is always a coding error. If you are running the latest version of "
 "JOSM, please consider being kind and file a bug report."
 msgstr ""
+"发生了一个意外异常。\n"
+"这多半是编码错误。如果您正在运行JOSM的最新版本,请考虑善待并记录错误报告到文件。"
 
 msgid "Debug information"
-msgstr ""
+msgstr "调试信息"
 
 msgid "Manually report at:"
-msgstr ""
+msgstr "在此手动报告:"
 
 msgid "Is JOSM up to date?"
-msgstr ""
+msgstr "您的JOSM是最新版本吗?"
 
 msgid "Send bug report"
-msgstr ""
+msgstr "提交漏洞报告"
 
 msgid ""
 "If you are running the latest version of JOSM and the plugins, please file a "
@@ -5275,47 +5366,49 @@ msgid ""
 "include information on how to reproduce the error and try to supply as much "
 "detail as possible."
 msgstr ""
+"如果您正在运行JOSM及其插件的最新版本,请将漏洞提交至我们的漏洞追踪器。\n"
+"错误信息应该已经为您填写完毕。请包括关于如何重现该错误的信息,并且尽可能提供更多的细节。"
 
 msgid "Report Bug"
 msgstr "报告程序缺陷"
 
 msgid "Suppress this error for this session."
-msgstr ""
+msgstr "在此会话中禁止此错误。"
 
 msgid "Suppress further error dialogs for this session."
 msgstr "阻止此会话再显示该错误对话框。"
 
 msgid "Ignore this error."
-msgstr ""
+msgstr "忽略此错误"
 
 msgid "Include the system status report."
-msgstr ""
+msgstr "包括系统状态报告。"
 
 msgid "Include information about the data you were working on."
-msgstr ""
+msgstr "包含有关您正在处理的数据的信息"
 
 msgid "Include all stack traces."
-msgstr ""
+msgstr "包括所有堆栈跟踪。"
 
 msgid "Your current version of JOSM is {0}"
-msgstr ""
+msgstr "您当前的JOSM版本为{0}"
 
 msgid "JOSM is searching for updates..."
-msgstr ""
+msgstr "JOSM正在寻找更新..."
 
 msgid "An error occured while checking if your JOSM instance is up to date."
-msgstr ""
+msgstr "检查您的JOSM实例是否为最新时发生错误。"
 
 msgid "JOSM is up to date."
-msgstr ""
+msgstr "JOSM为最新版本。"
 
 msgid "JOSM is out of date. The current version is {0}. Try updating JOSM."
-msgstr ""
+msgstr "JOSM已过时。当前版本为{0}。请尝试升级JOSM。"
 
 msgid ""
 "Before you file a bug report make sure you have updated to the latest "
 "version of JOSM here:"
-msgstr ""
+msgstr "当您提交漏洞报告前,在此确认您已升级至JOSM的最新版本:"
 
 msgid "Update JOSM"
 msgstr "升级 JOSM"
@@ -5715,7 +5808,7 @@ msgid "Primitive"
 msgstr "原型"
 
 msgid "Merged members not frozen yet. Cannot build resolution command"
-msgstr ""
+msgstr "合并的成员尚未冻结。 无法建立分辨率命令"
 
 msgid "<undefined>"
 msgstr "<未定义>"
@@ -6670,7 +6763,7 @@ msgid "Sort"
 msgstr "排序"
 
 msgid "Open the note in an external browser"
-msgstr ""
+msgstr "在外部浏览器打开此笔记"
 
 msgid "Object type:"
 msgstr "对象类型:"
@@ -7042,6 +7135,9 @@ msgstr "从本地缓存删除详细数据查看面板中的修改集合"
 msgid "Update the changeset from the OSM server"
 msgstr "从 OSM 服务器更新修改集合"
 
+msgid "View changeset"
+msgstr "查看修改集合"
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7266,9 +7362,6 @@ 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."
@@ -8022,7 +8115,7 @@ msgid "Wrong number of arguments for bookmark"
 msgstr "错误的书签参数值"
 
 msgid "Home location"
-msgstr ""
+msgstr "主文件夹"
 
 msgid "Error reading bookmark entry: %s"
 msgstr "读取书签时发生错误:%s"
@@ -8061,7 +8154,7 @@ msgid "Rename the currently selected bookmark"
 msgstr "重新命名目前选定的书签"
 
 msgid "Download bookmarks for my {0} last changesets"
-msgstr ""
+msgstr "下载我的{0}最后修改集合的书签"
 
 msgid "min lat"
 msgstr "最小纬度"
@@ -8112,10 +8205,10 @@ msgid ""
 msgstr "<html>每次 JOSM 启动时自动显示“从 OSM 下载”对话框。<br>您可以从文件菜单或工具栏手动打开它。</html>"
 
 msgid "Zoom to downloaded data"
-msgstr ""
+msgstr "缩放至已下载数据"
 
 msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
+msgstr "选择缩放至整个新下载的数据"
 
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
@@ -8149,7 +8242,7 @@ msgid "Download referrers (parent relations and ways)"
 msgstr "下载参照者(父关系和路径)"
 
 msgid "Download from OSM"
-msgstr ""
+msgstr "从OSM下载"
 
 msgid "Data Sources and Types:"
 msgstr "数据来源和类型:"
@@ -8190,86 +8283,59 @@ msgid "Download area ok, size probably acceptable to server"
 msgstr "下载区域合适,大小应该会被服务器接受"
 
 msgid "Download from Overpass API"
-msgstr ""
-
-msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
-msgstr ""
-
-msgid "Query Wizard"
-msgstr ""
+msgstr "从Overpass API下载"
 
 msgid ""
 "Place your Overpass query below or generate one using the Overpass Turbo "
 "Query Wizard"
-msgstr ""
+msgstr "使用Overpass Turbo 查询向导工具在下面放置或生成Overpass队列"
+
+msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
+msgstr "使用Overpass Turbo 查询向导工具建立Overpass队列"
+
+msgid "Query Wizard"
+msgstr "查询向导"
 
 msgid "Your saved queries:"
-msgstr ""
+msgstr "您已保存的查询:"
 
 msgid "Show/hide Overpass snippet list"
-msgstr ""
+msgstr "显示/隐藏Overpass片段列表"
 
 msgid "Overpass query:"
-msgstr ""
+msgstr "Overpass查询:"
 
 msgid ""
 "You entered an empty query. Do you want to download all data in this area "
 "instead?"
-msgstr ""
+msgstr "您输入了一个空的查询。您想要下载该区域中的所有数据吗?"
 
 msgid "Download all data?"
-msgstr ""
+msgstr "下载所有数据?"
 
 msgid "Add new snippet"
-msgstr ""
+msgstr "添加新片段"
 
 msgid "Delete selected snippet"
-msgstr ""
+msgstr "删除选中的片段"
 
 msgid "Edit selected snippet"
-msgstr ""
-
-msgid "history"
-msgstr "历史"
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
+msgstr "编辑选中的片段"
 
 msgid "Overpass Turbo Query Wizard"
-msgstr ""
+msgstr "Overpass Turbo查询向导"
 
 msgid "Build query"
 msgstr "构建查询"
 
 msgid "Build query and execute"
-msgstr ""
+msgstr "建立查询并执行"
 
 msgid "Search :"
-msgstr ""
+msgstr "查找:"
 
 msgid "The Overpass wizard could not parse the following query:"
-msgstr ""
+msgstr "Overpass向导无法解析以下查询:"
 
 msgid "Parse error"
 msgstr "解析错误"
@@ -8277,59 +8343,60 @@ msgstr "解析错误"
 msgid ""
 "Allows you to interact with <i>Overpass API</i> by writing declarative, "
 "human-readable terms."
-msgstr ""
+msgstr "允许您通过编写声明性,可读性的术语与 </i>Overpass API</i> 进行交互。"
 
 msgid ""
 "The <i>Query Wizard</i> tool will transform those to a valid overpass query."
-msgstr ""
+msgstr "<i>查询向导</i>工具将会将其转换为有效的Overpass查询。"
 
 msgid "For more detailed description see "
-msgstr ""
+msgstr "更详细的描述请见 "
 
 msgid "<a href=\"{0}\">OSM Wiki</a>."
-msgstr ""
+msgstr "<a href=\"{0}\">OSM 维基</a>."
 
 msgid "Hints"
-msgstr ""
+msgstr "提示"
 
 msgid "Download objects of a certain type."
-msgstr ""
+msgstr "下载某一特定类型的对象"
 
 msgid "Download object by specifying a specific location. For example,"
-msgstr ""
+msgstr "通过指定特定地点来下载对象。例如,"
 
 msgid "{0} all objects having {1} as attribute are downloaded."
-msgstr ""
+msgstr "{0}所有含有{1}作为其属性的对象已下载"
 
 msgid ""
 "{0} all object with the corresponding key/value pair located around Berlin. "
 "Note, the default value for radius is set to 1000m, but it can be changed in "
 "the generated query."
-msgstr ""
+msgstr "{0}所有含有对应键/值对的对象都位于柏林附近。注意,半径的默认值被设定为1000米,但可以在生成的查询中更改半径。"
 
 msgid ""
 "{0} all objects within the current selection that have {1} as attribute."
-msgstr ""
+msgstr "{0}所有在当前选择中含有{1}作为其属性的对象。"
 
 msgid ""
 "Instead of <i>location</i> any valid place name can be used like address, "
 "city, etc."
-msgstr ""
+msgstr "可以使用任何有效的地名例如地址、城市等,而不是<i>location</i>。"
 
 msgid ""
 "<span>Download objects that have some concrete key/value pair, only the key "
 "with any contents for the value, the value matching some regular expression. "
 "\"Not equal\" operators are supported as well.</span>"
-msgstr ""
+msgstr "<span>下载含有一些具体键/值对的对象(仅具有任意内容的值的键,且该值符合一些正则表达式)。支持“不等”运算符</span>"
 
 msgid "<i>expression1 {0} expression2</i>"
-msgstr ""
+msgstr "<i>表达式1 {0} 表达式2</i>"
 
 msgid ""
 "Basic logical operators can be used to create more sophisticated queries. "
 "Instead of \"or\" - \"|\", \"||\" can be used, and instead of \"and\" - "
 "\"&\", \"&&\"."
 msgstr ""
+"可以使用基本逻辑运算符来创建更加复杂的查询。而非\"or\" - \"|\", \"||\"可以使用,而非\"and\" - \"&\", \"&&\"。"
 
 msgid "Class Type"
 msgstr "类别类型"
@@ -8379,6 +8446,33 @@ msgstr "快速地图"
 msgid "Tile Numbers"
 msgstr "瓦片数"
 
+msgid "history"
+msgstr "历史"
+
+msgid "Please select an item first"
+msgstr "请先选择一项条目"
+
+msgid "Edit item"
+msgstr "编辑条目"
+
+msgid "Add snippet"
+msgstr "添加片段"
+
+msgid "Query cannot be empty"
+msgstr "查询不能为空"
+
+msgid "This name can be used for the item"
+msgstr "此名称无法用于该条目"
+
+msgid "Item with this name already exists"
+msgstr "含有此名称的条目已经存在"
+
+msgid "The item cannot be created with provided name"
+msgstr "无法用给定名称创建条目"
+
+msgid "The item cannot be created with an empty query"
+msgstr "无法创建含有空查询的条目"
+
 msgid "JOSM Help Browser"
 msgstr "JOSM 帮助页面浏览器"
 
@@ -8521,6 +8615,12 @@ msgstr "缩放到目前数据图层的这个节点"
 msgid "Open a history browser with the history of this node"
 msgstr "打开历史记录浏览器,查看这个节点的历史记录"
 
+msgid "View changeset in web browser"
+msgstr "在网页浏览器中查看修改合集"
+
+msgid "Open {0}"
+msgstr "打开{0}"
+
 msgid "Way {0}"
 msgstr "路径 {0}"
 
@@ -8530,6 +8630,9 @@ msgstr "关系 {0}"
 msgid "Object"
 msgstr "对象"
 
+msgid "Open Changeset Manager"
+msgstr "打开修改集合管理器"
+
 msgid "Changeset comment"
 msgstr "修改集合注释"
 
@@ -8588,7 +8691,7 @@ msgid "B"
 msgstr "B"
 
 msgid "Editor"
-msgstr ""
+msgstr "编辑器"
 
 msgid ""
 "Failed to update primitive with id {0} because current edit layer is null"
@@ -8682,6 +8785,9 @@ msgstr "选中“上传”以上传更改至 OSM 服务器。"
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr "选中“保存”以将图层保存到左侧指定的文件。"
 
+msgid "I would like someone to review my edits."
+msgstr "我想要某人来检验我的编辑"
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "为您的修改提供一些简短说明:"
 
@@ -9563,7 +9669,7 @@ msgid "Open OSM file"
 msgstr "打开 OSM 文件"
 
 msgid "Validation Error Files"
-msgstr ""
+msgstr "验证错误文件"
 
 msgid "WMS Files (*.wms)"
 msgstr "WMS 文件(*.wms)"
@@ -9572,19 +9678,19 @@ msgid "Unsupported WMS file version; found {0}, expected {1}"
 msgstr "不支持的 WMS 文件版本;发现 {0},应为 {1}"
 
 msgid "Native projections"
-msgstr ""
+msgstr "本地投影"
 
 msgid "Offset"
 msgstr "偏移"
 
 msgid "Tile download projection"
-msgstr ""
+msgstr "瓦片下载投影"
 
 msgid "Tile display projection"
-msgstr ""
+msgstr "瓦片显示投影"
 
 msgid "Current zoom"
-msgstr ""
+msgstr "当前缩放"
 
 msgid "Show tile info"
 msgstr "显示瓦片信息"
@@ -9593,22 +9699,22 @@ msgid "Tile Info"
 msgstr "瓦片信息"
 
 msgid "Tile name"
-msgstr ""
+msgstr "瓦片名称"
 
 msgid "Tile URL"
-msgstr ""
+msgstr "瓦片URL"
 
 msgid "Tile size"
-msgstr ""
+msgstr "瓦片大小"
 
 msgid "Tile display size"
-msgstr ""
+msgstr "瓦片显示大小"
 
 msgid "Reprojection"
-msgstr ""
+msgstr "二次投影"
 
 msgid "Reprojected tile size"
-msgstr ""
+msgstr "二次投影瓦片大小"
 
 msgid "Metadata "
 msgstr "元数据 "
@@ -9626,7 +9732,7 @@ msgid "zoom in to load more tiles"
 msgstr "放大以加载更多瓦片"
 
 msgid "increase tiles zoom level (change resolution) to see more detail"
-msgstr ""
+msgstr "增加瓦片缩放等级(更改分辨率)以查看更多细节"
 
 msgid "No tiles at this zoom level"
 msgstr "在此缩放等级没有瓦片"
@@ -9724,9 +9830,6 @@ msgid "{0} track"
 msgid_plural "{0} tracks"
 msgstr[0] "{0} 条轨迹"
 
-msgid "Description"
-msgstr "描述"
-
 msgid "Timespan"
 msgstr "时间跨度"
 
@@ -9755,10 +9858,10 @@ msgid "Id"
 msgstr "Id"
 
 msgid "Min. zoom"
-msgstr ""
+msgstr "最小缩放"
 
 msgid "Max. zoom"
-msgstr ""
+msgstr "最大缩放"
 
 msgid "Unsupported imagery type: {0}"
 msgstr "不支持的图像类型:{0}"
@@ -9792,8 +9895,7 @@ msgstr "保存图层"
 
 msgid "{0} note"
 msgid_plural "{0} notes"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} 笔记"
 
 msgid "Notes layer"
 msgstr "笔记图层"
@@ -9805,7 +9907,7 @@ msgid "Changes need uploading?"
 msgstr "需要上传修改吗?"
 
 msgid "Save Note file"
-msgstr ""
+msgstr "保存笔记文件"
 
 msgid "outside downloaded area"
 msgstr "超出下载的区域"
@@ -9833,7 +9935,7 @@ msgid "Upload is discouraged"
 msgstr "不鼓励上传"
 
 msgid "Upload is blocked"
-msgstr ""
+msgstr "上传受阻"
 
 msgid "Convert to GPX layer"
 msgstr "转换为 GPX 图层"
@@ -9880,7 +9982,7 @@ msgid "No validation errors"
 msgstr "没有验证错误"
 
 msgid "Save Validation errors file"
-msgstr ""
+msgstr "保存验证错误文件"
 
 msgid "Set WMS Bookmark"
 msgstr "设定 WMS 书签"
@@ -9888,10 +9990,10 @@ msgstr "设定 WMS 书签"
 msgid ""
 "Reprojecting layer {0} from {1} to {2}. For best image quality and "
 "performance, switch to one of the supported projections: {3}"
-msgstr ""
+msgstr "从{1}至{2}二次投影图层{0}。为了获得最佳的图像质量和性能,请切换到支持的投影之一:{3}"
 
 msgid "Unable to find supported projection for layer {0}. Using {1}."
-msgstr ""
+msgstr "无法为图层{0}找到支持的投影。使用{1}。"
 
 msgid "Correlate to GPX"
 msgstr "关联到 GPX"
@@ -10325,7 +10427,7 @@ msgid "Velocity, {0}"
 msgstr "速度,{0}"
 
 msgid "Audio files (*.wav, *.mp3, *.aac, *.aif, *.aiff)"
-msgstr ""
+msgstr "音频文件(*.wav, *.mp3, *.aac, *.aif, *.aiff)"
 
 msgid "Import Audio"
 msgstr "导入音频"
@@ -11334,7 +11436,7 @@ msgid "Draw segment order numbers"
 msgstr "绘制区段顺序编号"
 
 msgid "Draw segment order numbers on selected way"
-msgstr ""
+msgstr "在选定路径上绘制片段顺序号码"
 
 msgid "Draw boundaries of downloaded data"
 msgstr "绘出已下载数据的边界"
@@ -11349,10 +11451,10 @@ msgid "Display discardable keys"
 msgstr "显示丢弃的键"
 
 msgid "Use auto filters"
-msgstr ""
+msgstr "使用自动过滤器"
 
 msgid "Rule"
-msgstr ""
+msgstr "规则"
 
 msgid "Highlight target ways and nodes"
 msgstr "高亮显示目标路径和节点"
@@ -11414,7 +11516,7 @@ msgstr "显示有已认为无用的键的点,使它们能被静默移除。"
 
 msgid ""
 "Display buttons to automatically filter numeric values of a predefined tag"
-msgstr ""
+msgstr "显示按钮以便自动过滤预定义的标签数值"
 
 msgid "Options that affect drawing performance"
 msgstr "影响绘制性能的选项"
@@ -11485,7 +11587,7 @@ msgid "Track date"
 msgstr "轨迹日期"
 
 msgid "Heat Map (dark = few, bright = many)"
-msgstr ""
+msgstr "热力图(暗=少,亮=多)"
 
 msgid "Single Color (can be customized for named layers)"
 msgstr "单一颜色(可以为已命名的图层自定义)"
@@ -11501,34 +11603,34 @@ msgstr "步行"
 
 msgctxt "Heat map"
 msgid "User Normal"
-msgstr ""
+msgstr "正常"
 
 msgctxt "Heat map"
 msgid "User Light"
-msgstr ""
+msgstr "明亮"
 
 msgctxt "Heat map"
 msgid "Traffic Lights"
-msgstr ""
+msgstr "交通灯"
 
 msgctxt "Heat map"
 msgid "Inferno"
-msgstr ""
+msgstr "地狱"
 
 msgctxt "Heat map"
 msgid "Viridis"
-msgstr ""
+msgstr "翠绿"
 
 msgctxt "Heat map"
 msgid "Wood"
-msgstr ""
+msgstr "木质"
 
 msgctxt "Heat map"
 msgid "Heat"
-msgstr ""
+msgstr "热烈"
 
 msgid "Use points instead of lines for heat map"
-msgstr ""
+msgstr "在热力图中使用点代替线"
 
 msgid "Create markers when reading GPX"
 msgstr "读取 GPX 时创建标记"
@@ -11543,7 +11645,7 @@ msgid "Smooth GPX graphics (antialiasing)"
 msgstr "光滑 GPX 图形(抗锯齿)"
 
 msgid "Draw with Opacity (alpha blending) "
-msgstr ""
+msgstr "绘制不透明(alpha混合) "
 
 msgid ""
 "Automatically make a marker layer from any waypoints when opening a GPX "
@@ -11606,7 +11708,7 @@ msgstr "使用抗锯齿,以使 GPX 线有平滑外观。"
 msgid ""
 "Apply dynamic alpha-blending and adjust width based on zoom level for all "
 "GPX lines."
-msgstr ""
+msgstr "应用动态alpha混合并且基于缩放等级为所有GPX线调整宽度"
 
 msgid ""
 "All points and track segments will have the same color. Can be customized in "
@@ -11629,32 +11731,32 @@ msgstr "依时间戳为点和轨迹区段上色。"
 
 msgid ""
 "Collected points and track segments for a position and displayed as heat map."
-msgstr ""
+msgstr "为某一位置收集点和轨迹段,并显示为热图。"
 
 msgid "Allows to tune the track coloring for different average speeds."
 msgstr "允许依不同的平均速度调整轨迹颜色。"
 
 msgid "Selects the color schema for heat map."
-msgstr ""
+msgstr "选择热力图的配色方案"
 
 msgid "Track and Point Coloring"
 msgstr "轨迹和点的颜色"
 
 msgid "Overlay gain adjustment"
-msgstr ""
+msgstr "叠加增益调整"
 
 msgid "Lower limit of visibility"
-msgstr ""
+msgstr "能见度下限"
 
 msgid "Adjust the gain of overlay blending."
-msgstr ""
+msgstr "调整叠加混合的增益"
 
 msgid "Draw all GPX traces that exceed this threshold."
-msgstr ""
+msgstr "绘制所有超过阈值的GPX轨迹"
 
 msgid ""
 "Render engine uses points with simulated position error instead of lines. "
-msgstr ""
+msgstr "渲染引擎使用含有模拟位置误差的点而非线。 "
 
 msgid "Colors points and track segments by data limits."
 msgstr "依数据范围为点和轨迹区段上色。"
@@ -11881,7 +11983,7 @@ msgid "Available default entries:"
 msgstr "可用的预置项目:"
 
 msgid "New default entries can be added in the <a href=\"{0}\">Wiki</a>."
-msgstr ""
+msgstr "可以在<a href=\"{0}\">维基</a>中添加新默认项目"
 
 msgid "Selected entries:"
 msgstr "选择的项目:"
@@ -12209,29 +12311,29 @@ msgid "Configure the list of sites where plugins are downloaded from"
 msgstr "设定用来下载插件的网站列表"
 
 msgid "Load from list..."
-msgstr ""
+msgstr "从列表中加载..."
 
 msgid "Load plugins from a list of plugins"
-msgstr ""
+msgstr "从插件列表中加载插件"
 
 msgid "Disable all other plugins"
-msgstr ""
+msgstr "禁用其他所有插件"
 
 msgid "Enter a list of plugins you want to download."
-msgstr ""
+msgstr "输入您想要下载的插件列表"
 
 msgid ""
 "You should add one plugin id per line, version information is ignored."
-msgstr ""
+msgstr "您应该每行添加一个插件id(忽略版本信息)"
 
 msgid "You can copy+paste the list of a status report here."
-msgstr ""
+msgstr "您可以在此复制/粘贴状态报告"
 
 msgid "Load plugins from list"
-msgstr ""
+msgstr "从列表中加载插件"
 
 msgid "The following plugins were not found. Continue anyway?"
-msgstr ""
+msgstr "未找到以下插件。仍然继续?"
 
 msgid "Add JOSM Plugin description URL."
 msgstr "添加 JOSM 插件描述 URL。"
@@ -12263,7 +12365,7 @@ msgstr "永不更新"
 msgid ""
 "Please decide whether JOSM shall automatically update active plugins at "
 "startup after an update of JOSM itself."
-msgstr "请决定 JOSM 是否该在更新 JOSM 本身后,于启动时自动更新使用中的插件。"
+msgstr "请决定 JOSM 是否该在更新后,于启动时自动更新使用中的插件。"
 
 msgid ""
 "Please decide whether JOSM shall automatically update active plugins after a "
@@ -12373,7 +12475,7 @@ msgid "LKS-92 (Latvia TM)"
 msgstr "LKS-92(拉脱维亚 TM)"
 
 msgid "Rijksdriehoekscoördinaten (Netherlands)"
-msgstr ""
+msgstr "国家三角坐标(荷兰)"
 
 msgid "SWEREF99 13 30 / EPSG:3008 (Sweden)"
 msgstr "SWEREF99 13 30 / EPSG:3008(瑞典)"
@@ -12385,13 +12487,13 @@ msgid "Projection method"
 msgstr "投影法"
 
 msgid "Set as default"
-msgstr ""
+msgstr "设为默认"
 
 msgid "Default projection"
-msgstr ""
+msgstr "默认投影"
 
 msgid "Default projection has been set to ''{0}''"
-msgstr ""
+msgstr "默认投影已被设置为“{0}”"
 
 msgid "Display coordinates as"
 msgstr "显示坐标为"
@@ -12421,7 +12523,7 @@ msgid "Swiss Grid (Switzerland)"
 msgstr "Swiss Grid(瑞士)"
 
 msgid "<i>CH1903 / LV03</i>"
-msgstr ""
+msgstr "<i>瑞士地理坐标系统(CH1903/LV03)</i>"
 
 msgid "Guadeloupe Fort-Marigot 1949"
 msgstr "瓜德罗普岛堡马里戈特 1949"
@@ -12922,15 +13024,6 @@ msgstr "预置无父元素的子元素"
 msgid "Error parsing {0}: "
 msgstr "分析 {0} 时发生错误: "
 
-msgid "Search preset"
-msgstr "搜索预设组合"
-
-msgid "Show preset search dialog"
-msgstr "显示预设组合搜索对话框"
-
-msgid "Search presets"
-msgstr "搜索预设组合"
-
 msgid "Presets"
 msgstr "预设组合(P)"
 
@@ -12993,7 +13086,7 @@ msgid "Unknown requisite: {0}"
 msgstr "不明的必需品:{0}"
 
 msgid "Unknown regexp value: {0}"
-msgstr ""
+msgstr "未知的正则表达式值:{0}"
 
 msgid "Illegal member expression: {0}"
 msgstr "非法成员表达式:{0}"
@@ -13036,6 +13129,9 @@ msgstr "所有文件(*.*)"
 msgid "Received error page:"
 msgstr "收到错误页:"
 
+msgid "{0}... [please type its number]"
+msgstr "{0}... [请输入其编号]"
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13189,7 +13285,7 @@ msgid ""
 msgstr "打开扩展名为\"{2}\"的文件中名为\"{3}\"的压缩文件\"{0}\"失败。异常如下:{1}"
 
 msgid "The requested URL {0} was not found"
-msgstr ""
+msgstr "未找到请求的URL {0}"
 
 msgid "Failed to rename file {0} to {1}."
 msgstr "无法重命名文件 {0} 为 {1}。"
@@ -13285,13 +13381,6 @@ msgstr "未知模式 {0}。"
 msgid "get number of unread messages"
 msgstr "获取未读消息数"
 
-msgid "You have {0} unread message."
-msgid_plural "You have {0} unread messages."
-msgstr[0] "您有 {0} 封未读邮件。"
-
-msgid "Click here to see your inbox."
-msgstr "点击这里查看您的收件箱。"
-
 msgid "Message notifier"
 msgstr "消息通知"
 
@@ -13354,9 +13443,6 @@ msgid ""
 "{1}."
 msgstr "它支持协议版本 0.6,但服务器说它支持 {0} 到 {1} 版。"
 
-msgid "Removed layer {0} because it is not allowed by the configured API."
-msgstr "已删除图层 {0},因为它不被配置的 API 所支持。"
-
 msgid "Unexpected format of ID replied by the server. Got ''{0}''."
 msgstr "服务器返回意外的 id 格式,得到“{0}”。"
 
@@ -13482,11 +13568,13 @@ msgid ""
 "Missing mandatory attributes on element ''bounds''. Got "
 "minlon=''{0}'',minlat=''{1}'',maxlon=''{2}'',maxlat=''{3}'', origin=''{4}''."
 msgstr ""
+"元素“边界”上缺少必要属性。得到minlon=''{0}'',minlat=''{1}'',maxlon=''{2}'',maxlat=''{3}'', "
+"origin=''{4}''"
 
 msgid ""
 "Illegal value for attributes ''lat'', ''lon'' on node with ID {0}. Got "
 "''{1}'', ''{2}''."
-msgstr ""
+msgstr "ID{0}上的属性“lat”,“lon”含有非法值。得到“{1}”,“{2}”"
 
 msgid "Deleted way {0} contains nodes"
 msgstr "删除的路径 {0} 包含节点"
@@ -13628,7 +13716,7 @@ msgid "Reading user info ..."
 msgstr "正在读取用户信息..."
 
 msgid "Reading user preferences ..."
-msgstr ""
+msgstr "读取用户偏好"
 
 msgid "Starting to upload with one request per primitive ..."
 msgstr "正在开始以每个原型一次要求的方式上传..."
@@ -13662,7 +13750,7 @@ msgid "Unexpected id 0 for osm primitive found"
 msgstr "发现意外的 id 0 osm 原型"
 
 msgid "Failed to evaluate {0}"
-msgstr ""
+msgstr "评估失败{0}"
 
 msgid "Unexpected value for key ''{0}'' in preferences, got ''{1}''"
 msgstr "首选项中意外的键\"{0}\"值\"{1}\""
@@ -13837,7 +13925,7 @@ msgid "Confirm Remote Control action"
 msgstr "确认远程控制动作"
 
 msgid "The following keys are mandatory, but have not been provided: {0}"
-msgstr ""
+msgstr "以下键是必须的,但其并未被提供:{0}"
 
 msgid ""
 "Remote Control has been asked to report its protocol version. This enables "
@@ -14122,7 +14210,7 @@ msgid_plural "The plugins are not going to be loaded."
 msgstr[0] "这个插件将不会被加载。"
 
 msgid "Determining plugins to load..."
-msgstr ""
+msgstr "正在确定要加载的插件..."
 
 msgid "Removing deprecated plugins..."
 msgstr "正在删除废弃的插件..."
@@ -14604,9 +14692,6 @@ msgstr ""
 "#}MB内存。\n"
 "目前分配给JOSM的内存有 {1,number,#}MB。"
 
-msgid "{0}... [please type its number]"
-msgstr "{0}... [请输入其编号]"
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14665,7 +14750,7 @@ msgid "Silent shortcut conflict: ''{0}'' moved by ''{1}'' to ''{2}''."
 msgstr "静默快捷键冲突:“{0}”被“{1}”移动到“{2}”。"
 
 msgid "Unknown territory id: {0}"
-msgstr ""
+msgstr "未知地区id:{0}"
 
 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!"
@@ -14706,10 +14791,6 @@ msgid "Failed to load XML schema."
 msgstr "无法加载 XML 架构。"
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr "打开错误报告失败。请使用此网站手动报告:"
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr "搜索表达式在位置 {0} 上有错误 - 右侧或(|)表达式必须返回一组原型"
@@ -14789,11 +14870,11 @@ msgstr "农田"
 
 msgctxt "landuse"
 msgid "farmyard"
-msgstr ""
+msgstr "农家庭院"
 
 msgctxt "landuse"
 msgid "cemetery"
-msgstr ""
+msgstr "公墓"
 
 msgctxt "landuse"
 msgid "residential"
@@ -14801,23 +14882,23 @@ msgstr "住宅"
 
 msgctxt "landuse"
 msgid "greenfield"
-msgstr ""
+msgstr "未开发土地"
 
 msgctxt "landuse"
 msgid "village_green"
-msgstr ""
+msgstr "村镇公用绿地"
 
 msgctxt "landuse"
 msgid "quarry"
-msgstr ""
+msgstr "采石场"
 
 msgctxt "landuse"
 msgid "allotments"
-msgstr ""
+msgstr "市民农场"
 
 msgctxt "landuse"
 msgid "vineyard"
-msgstr ""
+msgstr "葡萄园"
 
 msgctxt "natural"
 msgid "scrub"
@@ -14829,27 +14910,27 @@ msgstr "树林"
 
 msgctxt "natural"
 msgid "grassland"
-msgstr ""
+msgstr "草原"
 
 msgctxt "natural"
 msgid "wetland"
-msgstr ""
+msgstr "湿地"
 
 msgctxt "natural"
 msgid "heath"
-msgstr ""
+msgstr "荒地"
 
 msgctxt "amenity"
 msgid "fire_station"
-msgstr ""
+msgstr "消防队"
 
 msgctxt "leisure"
 msgid "park"
-msgstr ""
+msgstr "公园"
 
 msgctxt "leisure"
 msgid "track"
-msgstr ""
+msgstr "跑道"
 
 msgctxt "building"
 msgid "industrial"
@@ -14881,7 +14962,7 @@ msgstr "多重多边形"
 
 msgctxt "Relation type"
 msgid "network"
-msgstr "网络"
+msgstr "路网"
 
 msgctxt "Relation type"
 msgid "public_transport"
@@ -15200,7 +15281,7 @@ msgstr "不可通过轮式车辆"
 
 msgctxt "riding"
 msgid "horse_riding"
-msgstr ""
+msgstr "骑马"
 
 msgctxt "riding"
 msgid "pitch"
@@ -15297,6 +15378,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr "无"
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr "分离的"
+
 msgid "Service type"
 msgstr "服务类型"
 
@@ -15317,19 +15402,19 @@ msgstr "电气化"
 
 msgctxt "electrified"
 msgid "contact_line"
-msgstr ""
+msgstr "接触线"
 
 msgctxt "electrified"
 msgid "no"
-msgstr ""
+msgstr "否"
 
 msgctxt "electrified"
 msgid "yes"
-msgstr ""
+msgstr "是"
 
 msgctxt "electrified"
 msgid "rail"
-msgstr ""
+msgstr "第三轨"
 
 msgid "Voltage in Volts (V)"
 msgstr "电压(伏)"
@@ -16105,7 +16190,7 @@ msgid "oil"
 msgstr "石油"
 
 msgid "sewage"
-msgstr "污水"
+msgstr "污水池"
 
 msgid "Support"
 msgstr "支撑"
@@ -16148,7 +16233,7 @@ msgid "Via (intermediate stops)"
 msgstr "经(中间站)"
 
 msgid "Network"
-msgstr "网络"
+msgstr "路网"
 
 msgid "Color (HTML name or hexadecimal code)"
 msgstr "颜色(HTML名称或十六进制代码)"
@@ -16415,7 +16500,7 @@ msgstr "步行街"
 
 msgctxt "Highway"
 msgid "track"
-msgstr ""
+msgstr "路辙"
 
 msgctxt "Highway"
 msgid "footway"
@@ -16432,7 +16517,7 @@ msgid "roundabout"
 msgstr "环岛"
 
 msgid "jughandle"
-msgstr ""
+msgstr "壶柄式匝道"
 
 msgid "Road Restrictions"
 msgstr "道路限制"
@@ -16458,7 +16543,7 @@ msgid "All vehicles"
 msgstr "所有车辆"
 
 msgid "use_sidepath"
-msgstr ""
+msgstr "使用侧道"
 
 msgid "Motor vehicles"
 msgstr "机动车"
@@ -16533,7 +16618,7 @@ msgid "Ford"
 msgstr "浅滩"
 
 msgid "stepping_stones"
-msgstr ""
+msgstr "垫脚石"
 
 msgid "Ways"
 msgstr "路径"
@@ -16612,7 +16697,7 @@ msgstr "T4 - 艰难、裸露、陡峭的高山步道"
 msgid ""
 "sometimes need for hand use to get ahead. Terrain quite exposed, precarious "
 "grassy acclivities, jagged rocks, facile snow-free glaciers"
-msgstr ""
+msgstr "有时需手脚并用前行,地形相当暴露,有不安全的草坡、摇摇欲坠的裸岩和无积雪的浅薄冰川"
 
 msgid "T5 - difficult alpine trail with climbing"
 msgstr "T5 - 艰难的攀登高山步道"
@@ -16620,7 +16705,7 @@ msgstr "T5 - 艰难的攀登高山步道"
 msgid ""
 "single plainly climbing up to second grade. Exposed, demanding terrain, "
 "jagged rocks, few dangerous glacier and snow"
-msgstr ""
+msgstr "单一的岩壁,地形陡峭、暴露、有裸岩和少量危险的冰川及积雪"
 
 msgid "T6 - hazardous alpine trail with climbing"
 msgstr "T6 - 危险的攀登高山步道"
@@ -16628,7 +16713,7 @@ msgstr "T6 - 危险的攀登高山步道"
 msgid ""
 "climbing up to second grade. Often very exposed, precarious jagged rocks, "
 "glacier with danger to slip and fall"
-msgstr ""
+msgstr "连续的岩壁,地形非常暴露,有摇摇欲坠的裸岩和易滑落的冰川。"
 
 msgid "Visibility"
 msgstr "可见状态"
@@ -16674,31 +16759,31 @@ msgstr "自行车路"
 
 msgctxt "cycleway"
 msgid "lane"
-msgstr ""
+msgstr "车道"
 
 msgctxt "cycleway"
 msgid "track"
-msgstr ""
+msgstr "车辙"
 
 msgctxt "cycleway"
 msgid "opposite_lane"
-msgstr ""
+msgstr "相连且逆向"
 
 msgctxt "cycleway"
 msgid "opposite_track"
-msgstr ""
+msgstr "分隔且逆向"
 
 msgctxt "cycleway"
 msgid "opposite"
-msgstr ""
+msgstr "逆向"
 
 msgctxt "cycleway"
 msgid "share_busway"
-msgstr ""
+msgstr "与公交车共用"
 
 msgctxt "cycleway"
 msgid "shared_lane"
-msgstr ""
+msgstr "共用车道"
 
 msgid "Cycleway left"
 msgstr "左侧自行车道"
@@ -17037,7 +17122,7 @@ msgid "pole"
 msgstr "杆"
 
 msgid "split_rail"
-msgstr ""
+msgstr "圆木篱栏"
 
 msgid "wire"
 msgstr "线"
@@ -17094,16 +17179,16 @@ msgid "double"
 msgstr "双扇门"
 
 msgid "Hampshire Gate"
-msgstr ""
+msgstr "线栅"
 
 msgid "Bump Gate"
-msgstr ""
+msgstr "遮断闸门"
 
 msgid "Kissing Gate"
-msgstr ""
+msgstr "单人闸门"
 
 msgid "Chain"
-msgstr ""
+msgstr "锁链"
 
 msgid "Stile"
 msgstr "栅栏台阶"
@@ -17112,10 +17197,10 @@ msgid "ladder"
 msgstr "梯子"
 
 msgid "squeezer"
-msgstr ""
+msgstr "窄口"
 
 msgid "stepover"
-msgstr ""
+msgstr "跨栏"
 
 msgid "Turnstile"
 msgstr "旋转栅门"
@@ -17165,7 +17250,7 @@ msgid "River"
 msgstr "河流"
 
 msgid "Lock"
-msgstr ""
+msgstr "水闸"
 
 msgid "Canal"
 msgstr "运河"
@@ -17200,25 +17285,25 @@ msgid "Basin"
 msgstr "水池"
 
 msgid "retention"
-msgstr ""
+msgstr "调节池"
 
 msgid "infiltration"
-msgstr ""
+msgstr "入渗池"
 
 msgid "detention"
-msgstr ""
+msgstr "蓄洪池"
 
 msgid "Reservoir"
 msgstr "贮水处"
 
 msgid "evaporator"
-msgstr ""
+msgstr "蒸发池"
 
 msgid "tailings"
-msgstr ""
+msgstr "残渣池"
 
 msgid "water_storage"
-msgstr ""
+msgstr "蓄水池"
 
 msgid "Covered Reservoir"
 msgstr "有覆盖的贮水处"
@@ -17255,10 +17340,10 @@ msgid "river"
 msgstr "河"
 
 msgid "lock"
-msgstr ""
+msgstr "水闸"
 
 msgid "wastewater"
-msgstr ""
+msgstr "废水池"
 
 msgid "Salt Water"
 msgstr "咸水"
@@ -17307,7 +17392,7 @@ msgid "wet_meadow"
 msgstr "湿草甸"
 
 msgid "string_bog"
-msgstr ""
+msgstr "线状沼泽"
 
 msgid "saltern"
 msgstr "盐场"
@@ -17334,8 +17419,9 @@ msgid "Bay"
 msgstr "海湾"
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
-msgstr "大片水体,部分由土地包围,但有一个宽阔出口。"
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
+msgstr "水域主要由陆地包围,但与水面或湖泊相连。"
 
 msgid "Shipping"
 msgstr "船运"
@@ -17642,7 +17728,7 @@ msgid "Typical journey time in minutes"
 msgstr "典型行程用时(分钟)"
 
 msgid "Has heating?"
-msgstr "有加热吗?"
+msgstr "有供暖吗?"
 
 msgid "Chair Lift"
 msgstr "椅式升降机"
@@ -17651,7 +17737,7 @@ msgid "Number of people per chair"
 msgstr "每椅子的人数"
 
 msgid "Has bubble?"
-msgstr ""
+msgstr "有透明防护罩?"
 
 msgid "Gondola"
 msgstr "索道"
@@ -17674,16 +17760,16 @@ msgid ""
 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 "魔毯"
@@ -17765,22 +17851,22 @@ msgid "Diesel for Heavy Good Vehicles"
 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 "加油卡:"
 
 msgid "DKV"
-msgstr ""
+msgstr "DKV"
 
 msgid "Routex"
-msgstr ""
+msgstr "Routex"
 
 msgid "UTA"
-msgstr ""
+msgstr "UTA"
 
 msgid "Charging Station"
 msgstr "充电站"
@@ -17861,7 +17947,7 @@ msgid "Wash"
 msgstr "洗车"
 
 msgid "Self Service"
-msgstr ""
+msgstr "自助服务"
 
 msgid "Car Dealer"
 msgstr "汽车经销商"
@@ -17877,19 +17963,19 @@ msgstr "修车场"
 
 msgctxt "shop=car_repair"
 msgid "Service"
-msgstr ""
+msgstr "用途"
 
 msgid "dealer"
-msgstr ""
+msgstr "经销商"
 
 msgid "repair"
-msgstr ""
+msgstr "修理"
 
 msgid "parts"
-msgstr ""
+msgstr "部件"
 
 msgid "tyres"
-msgstr ""
+msgstr "轮胎"
 
 msgid "Parts"
 msgstr "配件"
@@ -17937,28 +18023,28 @@ msgid "Clothes"
 msgstr "服装店"
 
 msgid "anchors"
-msgstr ""
+msgstr "锁座"
 
 msgid "ground_slots"
-msgstr ""
+msgstr "地面插槽"
 
 msgid "informal"
 msgstr "非正式"
 
 msgid "lockers"
-msgstr ""
+msgstr "储车柜"
 
 msgid "rack"
-msgstr ""
+msgstr "竖立架"
 
 msgid "shed"
 msgstr "停车棚"
 
 msgid "stands"
-msgstr ""
+msgstr "固定架"
 
 msgid "wall_loops"
-msgstr ""
+msgstr "墙壁挂环"
 
 msgid "Covered"
 msgstr "有遮盖"
@@ -18045,7 +18131,7 @@ msgid "aerialway"
 msgstr "机场道路"
 
 msgid "route variant/direction (at least 2)"
-msgstr ""
+msgstr "路线变化/方向(至少两种)"
 
 msgid "Stop Area"
 msgstr "停车区"
@@ -18175,7 +18261,7 @@ msgid "Taxiway"
 msgstr "滑行道"
 
 msgid "Holding Position"
-msgstr ""
+msgstr "等待位置"
 
 msgid "Helipad"
 msgstr "直升机停机坪"
@@ -18199,10 +18285,10 @@ msgstr "普通"
 
 msgctxt "airmark"
 msgid "Beacon"
-msgstr ""
+msgstr "信标"
 
 msgid "Navigationaid"
-msgstr ""
+msgstr "导航辅助"
 
 msgid "Windsock"
 msgstr "风向袋"
@@ -18239,10 +18325,10 @@ msgid "Guest House/Bed & Breakfast"
 msgstr "旅舍/Bed & Breakfast"
 
 msgid "Apartment"
-msgstr ""
+msgstr "公寓"
 
 msgid "Number of apartments"
-msgstr ""
+msgstr "公寓数量"
 
 msgid "Chalet"
 msgstr "小木屋"
@@ -18311,10 +18397,10 @@ msgid "Takeaway"
 msgstr "外带"
 
 msgid "Delivery"
-msgstr ""
+msgstr "外送"
 
 msgid "Mo-Su 12:00-22:00"
-msgstr ""
+msgstr "周一至周日 12:00-22:00"
 
 msgid "Fast Food"
 msgstr "快餐"
@@ -18501,7 +18587,7 @@ msgid "Water Park"
 msgstr "水上乐园"
 
 msgid "Beach Resort"
-msgstr ""
+msgstr "海滩度假区"
 
 msgid "Swimming Pool"
 msgstr "游泳池"
@@ -18708,7 +18794,7 @@ msgstr "复临安息日会"
 
 msgctxt "christian"
 msgid "spiritist"
-msgstr ""
+msgstr "招魂术"
 
 msgid "Mosque"
 msgstr "清真寺"
@@ -18762,7 +18848,7 @@ msgid "shaktism"
 msgstr "性力派"
 
 msgid "smartism"
-msgstr ""
+msgstr "Smartism(师摩多派)"
 
 msgid "Shinto Shrine"
 msgstr "神道圣地"
@@ -18861,10 +18947,10 @@ msgid "Point Name"
 msgstr "地点名"
 
 msgid "Emergency Phone Number"
-msgstr ""
+msgstr "紧急电话号码"
 
 msgid "(Use number as shown on plate.)"
-msgstr ""
+msgstr "(使用在牌子上标示的号码)"
 
 msgid "Veterinary"
 msgstr "兽医"
@@ -18879,7 +18965,7 @@ msgid "Automated Defibrillator"
 msgstr "自动除颤器"
 
 msgid "Location description"
-msgstr ""
+msgstr "位置描述"
 
 msgid "Phone Number"
 msgstr "电话号码"
@@ -19001,7 +19087,7 @@ msgid "Nursing Home"
 msgstr "疗养院"
 
 msgid "Nursing Home (Legacy)"
-msgstr ""
+msgstr "疗养院(晚年)"
 
 msgid "Group Home"
 msgstr "教养院"
@@ -19013,7 +19099,7 @@ msgid "Assisted Living"
 msgstr "生活协助"
 
 msgid "Outreach"
-msgstr ""
+msgstr "外展服务"
 
 msgctxt "social_facility"
 msgid "Shelter"
@@ -19091,7 +19177,7 @@ msgstr "壁挂式"
 
 msgctxt "post_box"
 msgid "meter"
-msgstr ""
+msgstr "米"
 
 msgid "Drive through"
 msgstr "不停车"
@@ -19110,7 +19196,7 @@ msgid "Telephone cards"
 msgstr "电话卡"
 
 msgid "Internet Cafe"
-msgstr ""
+msgstr "网咖"
 
 msgid "Internet Access"
 msgstr "互联网访问"
@@ -19158,7 +19244,7 @@ msgid "Shows humidity"
 msgstr "显示湿度"
 
 msgid "Photo booth"
-msgstr ""
+msgstr "照相亭"
 
 msgid "Recycling Container"
 msgstr "回收箱"
@@ -19218,13 +19304,13 @@ msgid "Sanitary Dump Station"
 msgstr "垃圾转运站"
 
 msgid "Suction pumpout"
-msgstr ""
+msgstr "化粪池泵"
 
 msgid "Gravity drain for hose"
-msgstr ""
+msgstr "自流排水软管"
 
 msgid "Casette or Elsan Disposal"
-msgstr ""
+msgstr "排泄物收集盒"
 
 msgid "Operation times"
 msgstr "工作时间"
@@ -19240,11 +19326,11 @@ msgstr "庇护所的类型"
 
 msgctxt "shelter"
 msgid "basic_hut"
-msgstr ""
+msgstr "小屋"
 
 msgctxt "shelter"
 msgid "lean_to"
-msgstr ""
+msgstr "开放式"
 
 msgctxt "shelter"
 msgid "picnic_shelter"
@@ -19267,16 +19353,16 @@ msgstr "狩猎站"
 
 msgctxt "hunting stand"
 msgid "Hide"
-msgstr ""
+msgstr "棚舍"
 
 msgid "Lockable"
-msgstr ""
+msgstr "可上锁"
 
 msgid "Water Point"
 msgstr "饮水点"
 
 msgid "Animal watering place"
-msgstr ""
+msgstr "动物饮水地"
 
 msgid "Compressed Air"
 msgstr "压缩空气"
@@ -19285,16 +19371,16 @@ msgid "Valves"
 msgstr "阀"
 
 msgid "Dunlop (Woods)"
-msgstr ""
+msgstr "Dunlop (Woods)(英式)"
 
 msgid "Schrader"
-msgstr ""
+msgstr "Schrader (美式)"
 
 msgid "Sclaverand (Presta)"
-msgstr ""
+msgstr "Sclaverand (Presta) (法式)"
 
 msgid "Regina"
-msgstr ""
+msgstr "Regina (意式)"
 
 msgid "Advertising Column"
 msgstr "广告栏"
@@ -19315,7 +19401,7 @@ msgid "Sports Centre"
 msgstr "运动中心"
 
 msgid "Fitness Centre"
-msgstr ""
+msgstr "健身中心"
 
 msgid "Pitch"
 msgstr "场地"
@@ -19324,7 +19410,7 @@ msgid "artificial_turf"
 msgstr "人工草皮"
 
 msgid "decoturf"
-msgstr ""
+msgstr "DecoTurf"
 
 msgid "tartan"
 msgstr "塑胶"
@@ -19340,53 +19426,53 @@ msgstr "高尔夫路线"
 
 msgctxt "golf"
 msgid "Tee"
-msgstr ""
+msgstr "开球座"
 
 msgctxt "golf"
 msgid "Hole"
-msgstr ""
+msgstr "球洞"
 
 msgid "Par"
-msgstr ""
+msgstr "标准杆"
 
 msgid "Handicap rating"
-msgstr ""
+msgstr "差点等级"
 
 msgctxt "golf"
 msgid "Pin"
-msgstr ""
+msgstr "旗杆"
 
 msgctxt "golf"
 msgid "Bunker"
-msgstr ""
+msgstr "沙坑"
 
 msgctxt "golf"
 msgid "Natural"
-msgstr ""
+msgstr "自然"
 
 msgctxt "golf"
 msgid "Frontal Water hazard"
-msgstr ""
+msgstr "正面水塘"
 
 msgctxt "golf"
 msgid "Lateral water hazard"
-msgstr ""
+msgstr "侧面水塘"
 
 msgctxt "golf"
 msgid "Green"
-msgstr ""
+msgstr "果岭"
 
 msgctxt "golf"
 msgid "Fairway"
-msgstr ""
+msgstr "球道"
 
 msgctxt "golf"
 msgid "Rough"
-msgstr ""
+msgstr "长草"
 
 msgctxt "golf"
 msgid "Driving range"
-msgstr ""
+msgstr "练球场"
 
 msgid "Miniature Golf"
 msgstr "迷你高尔夫"
@@ -19404,7 +19490,7 @@ msgstr "体育中心"
 
 msgctxt "running"
 msgid "fitness_centre"
-msgstr ""
+msgstr "健身中心"
 
 msgctxt "running"
 msgid "stadium"
@@ -19464,7 +19550,7 @@ msgid "Gymnastics"
 msgstr "体操"
 
 msgid "fitness_centre"
-msgstr ""
+msgstr "健身中心"
 
 msgid "Ice Skating"
 msgstr "滑冰"
@@ -19536,34 +19622,34 @@ 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 "射击"
@@ -19707,7 +19793,7 @@ msgstr "商业"
 
 msgctxt "building"
 msgid "service"
-msgstr ""
+msgstr "用途"
 
 msgctxt "building"
 msgid "train_station"
@@ -19719,7 +19805,7 @@ msgstr "谷仓"
 
 msgctxt "building"
 msgid "stable"
-msgstr ""
+msgstr "马厩"
 
 msgctxt "building"
 msgid "cabin"
@@ -19747,7 +19833,7 @@ msgstr "大学"
 
 msgctxt "building"
 msgid "college"
-msgstr ""
+msgstr "学院"
 
 msgctxt "building"
 msgid "hospital"
@@ -19831,11 +19917,11 @@ msgstr "输电塔"
 
 msgctxt "building"
 msgid "public"
-msgstr ""
+msgstr "公共"
 
 msgctxt "building"
 msgid "ruins"
-msgstr ""
+msgstr "废墟"
 
 msgctxt "building"
 msgid "Levels"
@@ -19866,7 +19952,7 @@ msgstr "木屋"
 
 msgctxt "building"
 msgid "bungalow"
-msgstr ""
+msgstr "平房"
 
 msgctxt "building"
 msgid "dormitory"
@@ -19885,14 +19971,14 @@ msgid "farm"
 msgstr "农场"
 
 msgid "Building part"
-msgstr ""
+msgstr "建筑部分"
 
 msgctxt "building"
 msgid "Skipped Levels"
-msgstr ""
+msgstr "跳过的楼层"
 
 msgid "Skipped height (meters)"
-msgstr ""
+msgstr "跳过的高度"
 
 msgid "Entrance"
 msgstr "入口"
@@ -19923,7 +20009,7 @@ msgstr "阶梯"
 
 msgctxt "entrance"
 msgid "home"
-msgstr ""
+msgstr "住户"
 
 msgid "Entrance number"
 msgstr "入口编号"
@@ -19947,7 +20033,7 @@ msgid "Flagpole"
 msgstr "旗杆"
 
 msgid "Cross"
-msgstr ""
+msgstr "十字架"
 
 msgid "Works"
 msgstr "工厂"
@@ -20126,7 +20212,7 @@ msgstr "灯塔"
 
 msgctxt "man_made"
 msgid "Beacon"
-msgstr ""
+msgstr "信标"
 
 msgid "Street Lamp"
 msgstr "路灯"
@@ -20230,7 +20316,7 @@ msgstr "固定"
 
 msgctxt "camera:type"
 msgid "panning"
-msgstr ""
+msgstr "摆动"
 
 msgctxt "camera:type"
 msgid "dome"
@@ -20267,13 +20353,13 @@ msgid "boardwalk"
 msgstr "木板路"
 
 msgid "cantilever"
-msgstr ""
+msgstr "悬臂"
 
 msgid "covered"
-msgstr ""
+msgstr "有顶的"
 
 msgid "low_water_crossing"
-msgstr ""
+msgstr "浅水桥"
 
 msgid "trestle"
 msgstr "栈桥"
@@ -20327,7 +20413,7 @@ msgid "swing"
 msgstr "吊桥"
 
 msgid "transporter"
-msgstr ""
+msgstr "运渡桥"
 
 msgid "Bridge Support"
 msgstr "桥墩"
@@ -20336,16 +20422,16 @@ msgid "pier"
 msgstr "栈桥"
 
 msgid "abutment"
-msgstr ""
+msgstr "桥台"
 
 msgid "lift_pier"
-msgstr ""
+msgstr "升降桥墩"
 
 msgid "pivot_pier"
-msgstr ""
+msgstr "转轴桥墩"
 
 msgid "Bridge outline"
-msgstr ""
+msgstr "桥梁轮廓"
 
 msgctxt "preset group"
 msgid "Military"
@@ -20393,7 +20479,7 @@ msgid "Power Plant"
 msgstr "发电厂"
 
 msgid "Output forms of energy (optional):"
-msgstr ""
+msgstr "输出能源形式(可选)"
 
 msgid "Power Generator"
 msgstr "发电机"
@@ -20573,7 +20659,7 @@ msgstr "水轮机"
 
 msgctxt "generator method"
 msgid "run-of-the-river"
-msgstr "河流"
+msgstr "河床"
 
 msgctxt "generator method"
 msgid "water-pumped-storage"
@@ -20593,13 +20679,13 @@ msgid "hydrodynamic_screw"
 msgstr "水动力螺旋"
 
 msgid "run-of-the-river"
-msgstr ""
+msgstr "河床式"
 
 msgid "kaplan_turbine"
 msgstr "轴流式水轮机"
 
 msgid "run-of-the-river / water-storage"
-msgstr ""
+msgstr "河床式/蓄水式"
 
 msgid "pelton_turbine"
 msgstr "水斗式水轮机"
@@ -20729,13 +20815,13 @@ msgstr "开关柜"
 msgid ""
 "(Please only use this tag if more detailed mapping using busbars and bays is "
 "impossible!)"
-msgstr ""
+msgstr "(请仅当详细绘制时无法使用母线和线架的情况下使用此标签!)"
 
 msgid "Power Busbar"
 msgstr "母线"
 
 msgid "Power Bay"
-msgstr ""
+msgstr "电源架"
 
 msgid "Power Switch"
 msgstr "开关"
@@ -20759,13 +20845,13 @@ msgid "back-to-back"
 msgstr "背靠背换流器(back-to-back)"
 
 msgid "Amount of poles"
-msgstr ""
+msgstr "极点数"
 
 msgid "monopole"
-msgstr ""
+msgstr "单极"
 
 msgid "bipole"
-msgstr ""
+msgstr "双极"
 
 msgid "Power rating (MVA)"
 msgstr "主变容量(MVA)"
@@ -20821,25 +20907,25 @@ msgid "5 Mvar"
 msgstr "5 Mvar"
 
 msgid "Power Street Cabinet"
-msgstr ""
+msgstr "变电箱"
 
 msgid "Transformer Tower"
-msgstr ""
+msgstr "变电塔"
 
 msgid "Power Portal"
-msgstr ""
+msgstr "电源门架"
 
 msgid "Type of construction"
 msgstr "建筑类型"
 
 msgid "lattice"
-msgstr ""
+msgstr "网格"
 
 msgid "tubular"
-msgstr ""
+msgstr "空心"
 
 msgid "solid"
-msgstr ""
+msgstr "实心"
 
 msgid "steel"
 msgstr "钢"
@@ -20849,19 +20935,19 @@ msgid "red/white"
 msgstr "红/白"
 
 msgid "Portal design"
-msgstr ""
+msgstr "门架设计"
 
 msgctxt "power"
 msgid "portal"
-msgstr ""
+msgstr "单层门架"
 
 msgctxt "power"
 msgid "portal_two-level"
-msgstr ""
+msgstr "双层门架"
 
 msgctxt "power"
 msgid "portal_three-level"
-msgstr ""
+msgstr "三层门架"
 
 msgid "Power Tower"
 msgstr "电塔"
@@ -20895,134 +20981,134 @@ msgid "crossing"
 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 "Donau型"
 
 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 "单侧型(Flag)"
 
 msgctxt "power"
 msgid "donau;one-level"
-msgstr ""
+msgstr "Donau;单层"
 
 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 "guyed_v-frame"
-msgstr ""
+msgstr "微张Y型"
 
 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 "电竿"
 
 msgid "Pole with Transformer"
-msgstr ""
+msgstr "杆式变压器"
 
 msgid "Pole Attributes:"
-msgstr ""
+msgstr "电杆属性"
 
 msgid "Transformer Attributes:"
-msgstr ""
+msgstr "变压器属性"
 
 msgid "Insulator"
-msgstr ""
+msgstr "绝缘子"
 
 msgid "Power Line"
 msgstr "电线"
@@ -21092,37 +21178,37 @@ msgid "Castle"
 msgstr "城堡"
 
 msgid "stately"
-msgstr ""
+msgstr "豪宅"
 
 msgid "defensive"
-msgstr ""
+msgstr "防御"
 
 msgid "fortress"
-msgstr ""
+msgstr "要塞"
 
 msgid "manor"
-msgstr ""
+msgstr "庄园"
 
 msgid "palace"
-msgstr ""
+msgstr "宫殿"
 
 msgid "Archaeological Site"
 msgstr "考古学地区"
 
 msgid "tumulus"
-msgstr ""
+msgstr "坟包"
 
 msgid "megalith"
-msgstr ""
+msgstr "巨石阵"
 
 msgid "fortification"
-msgstr ""
+msgstr "防御工事"
 
 msgid "settlement"
-msgstr ""
+msgstr "古聚落"
 
 msgid "necropolis"
-msgstr ""
+msgstr "墓葬"
 
 msgid "Battlefield"
 msgstr "战场"
@@ -21142,7 +21228,7 @@ msgstr "雕塑"
 
 msgctxt "memorial"
 msgid "bust"
-msgstr ""
+msgstr "胸像"
 
 msgctxt "memorial"
 msgid "plaque"
@@ -21150,18 +21236,18 @@ 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 "路边十字架"
@@ -21170,11 +21256,11 @@ msgid "Wayside Shrine"
 msgstr "圣像柱"
 
 msgid "Place of worship"
-msgstr ""
+msgstr "宗教场所"
 
 msgctxt "building"
 msgid "wayside_shrine"
-msgstr ""
+msgstr "路旁神社"
 
 msgid "Boundary Stone"
 msgstr "界碑"
@@ -21204,19 +21290,19 @@ msgid "Seafood"
 msgstr "海鲜"
 
 msgid "Dairy"
-msgstr ""
+msgstr "乳制品"
 
 msgid "Cheese"
-msgstr ""
+msgstr "奶酪"
 
 msgid "Deli (Fine Food)"
 msgstr "熟食店(美食)"
 
 msgid "Pastry"
-msgstr ""
+msgstr "糕点"
 
 msgid "Confectionery"
-msgstr ""
+msgstr "甜点"
 
 msgid "Tea"
 msgstr "茶"
@@ -21234,13 +21320,13 @@ msgid "Greengrocer"
 msgstr "蔬果店"
 
 msgid "Farm Stand"
-msgstr ""
+msgstr "农家摊点"
 
 msgid "Organic/Bio"
 msgstr "有机/生物"
 
 msgid "Fair Trade"
-msgstr ""
+msgstr "公平贸易"
 
 msgid "Alcohol"
 msgstr "酒类"
@@ -21381,13 +21467,13 @@ msgid "Hairdresser/Barber"
 msgstr "美发/理发"
 
 msgid "Female"
-msgstr ""
+msgstr "女性"
 
 msgid "Male"
-msgstr ""
+msgstr "男性"
 
 msgid "Unisex"
-msgstr ""
+msgstr "中性"
 
 msgid "Tattoo"
 msgstr "文身"
@@ -21444,7 +21530,7 @@ msgid "Variety Store"
 msgstr "杂货店"
 
 msgid "Charity"
-msgstr ""
+msgstr "慈善"
 
 msgid "Bookmaker"
 msgstr "博彩"
@@ -21471,10 +21557,10 @@ msgid "Vending products"
 msgstr "贩卖产品"
 
 msgid "admission_tickets"
-msgstr ""
+msgstr "入场券"
 
 msgid "animal_feed"
-msgstr ""
+msgstr "动物饲料"
 
 msgid "bicycle_tube"
 msgstr "自行车内胎"
@@ -21483,7 +21569,7 @@ msgid "cigarettes"
 msgstr "菸"
 
 msgid "coffee"
-msgstr ""
+msgstr "咖啡"
 
 msgid "condoms"
 msgstr "保险套"
@@ -21492,7 +21578,7 @@ msgid "drinks"
 msgstr "饮料"
 
 msgid "elongated_coin"
-msgstr ""
+msgstr "硬币压印"
 
 msgid "excrement_bags"
 msgstr "粪袋"
@@ -21501,7 +21587,7 @@ msgid "food"
 msgstr "食物"
 
 msgid "milk"
-msgstr ""
+msgstr "牛奶"
 
 msgid "newspapers"
 msgstr "报纸"
@@ -21510,10 +21596,10 @@ msgid "parking_tickets"
 msgstr "停车票"
 
 msgid "parcel_pickup"
-msgstr ""
+msgstr "包裹取件"
 
 msgid "parcel_mail_in"
-msgstr ""
+msgstr "包裹寄送"
 
 msgid "photos"
 msgstr "相片"
@@ -21552,7 +21638,7 @@ msgid "Girocard"
 msgstr "Girocard"
 
 msgid "Laser"
-msgstr ""
+msgstr "Laser/镭射卡"
 
 msgid "Maestro"
 msgstr "Maestro"
@@ -21576,7 +21662,7 @@ msgid "Discover Card"
 msgstr "Discover Card/发现卡"
 
 msgid "JCB"
-msgstr ""
+msgstr "JCB/吉士美卡"
 
 msgid "Mastercard"
 msgstr "Mastercard/万事达卡"
@@ -21588,40 +21674,40 @@ msgid "Electronic purses and Charge cards"
 msgstr "电子钱包或收费卡"
 
 msgid "Avant (fi)"
-msgstr ""
+msgstr "Avant(芬兰)"
 
 msgid "Cash (ch)"
-msgstr ""
+msgstr "Cash(瑞士)"
 
 msgid "Chipknip (nl)"
-msgstr ""
+msgstr "Chipknip(荷兰)"
 
 msgid "Geldkarte (de)"
-msgstr ""
+msgstr "Geldkarte(德国)"
 
 msgid "Mep (pt)"
-msgstr ""
+msgstr "Mep(葡萄牙)"
 
 msgid "Minicash (lu)"
-msgstr ""
+msgstr "Minicash(卢森堡)"
 
 msgid "Minipay (it)"
-msgstr ""
+msgstr "Minipay(意大利)"
 
 msgid "Mondero (ar)"
-msgstr ""
+msgstr "Mondero(阿根廷)"
 
 msgid "Mondero 4b (es)"
-msgstr ""
+msgstr "Mondero 4b(西班牙)"
 
 msgid "Moneo (fr)"
-msgstr ""
+msgstr "Moneo(法国)"
 
 msgid "Proton (be)"
-msgstr ""
+msgstr "Proton(比利时)"
 
 msgid "Quick (au)"
-msgstr ""
+msgstr "Quick(澳大利亚)"
 
 msgid "Cryptocurrencies"
 msgstr "加密货币"
@@ -21683,16 +21769,16 @@ msgid "Government"
 msgstr "政府"
 
 msgid "ministry"
-msgstr ""
+msgstr "政府部门"
 
 msgid "prosecutor"
-msgstr ""
+msgstr "检察"
 
 msgid "tax"
-msgstr ""
+msgstr "税务"
 
 msgid "register_office"
-msgstr ""
+msgstr "民政"
 
 msgctxt "office"
 msgid "Insurance"
@@ -21832,16 +21918,16 @@ msgid "Political"
 msgstr "政治"
 
 msgid "Division"
-msgstr ""
+msgstr "政府部门"
 
 msgid "canton"
-msgstr ""
+msgstr "民族区"
 
 msgid "linguistic_community"
 msgstr "语言区"
 
 msgid "ward"
-msgstr ""
+msgstr "选举区"
 
 msgid "National Park"
 msgstr "国家公园"
@@ -21853,22 +21939,22 @@ msgid "Protect Class"
 msgstr "保护等级"
 
 msgid "Title or type of protection"
-msgstr ""
+msgstr "保护的种类或类型"
 
 msgid "Border type"
 msgstr "边界类型"
 
 msgid "baseline"
-msgstr ""
+msgstr "基线"
 
 msgid "territorial"
-msgstr ""
+msgstr "领土"
 
 msgid "contiguous"
-msgstr ""
+msgstr "相接"
 
 msgid "eez"
-msgstr ""
+msgstr "专属经济区"
 
 msgid "Places"
 msgstr "地名"
@@ -21914,10 +22000,10 @@ msgid "Farm"
 msgstr "农场"
 
 msgid "A farm within a bigger settlement"
-msgstr ""
+msgstr "较大聚落中的农田"
 
 msgid "(please use isolated_dwelling for an isolated farm)"
-msgstr ""
+msgstr "(对于单独的农场,请使用isolated_dwelling)"
 
 msgid "Locality"
 msgstr "地区"
@@ -21940,7 +22026,7 @@ msgstr "冰川"
 msgid ""
 "A persistent body of dense ice that is constantly moving under its own "
 "weight."
-msgstr ""
+msgstr "永冻的紧密冰块,受其自身重量影响而持续移动"
 
 msgid "Volcano"
 msgstr "火山"
@@ -21984,7 +22070,7 @@ 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 ""
+msgstr "裸露的陡峭岩石,坡度垂直或几近垂直(地处绘制在路径右侧)"
 
 msgid "Cave Entrance"
 msgstr "洞口"
@@ -21999,16 +22085,16 @@ msgid "Islet"
 msgstr "屿"
 
 msgid "Reef"
-msgstr ""
+msgstr "暗礁"
 
 msgid "coral"
-msgstr ""
+msgstr "珊瑚礁"
 
 msgid "oyster"
-msgstr ""
+msgstr "牡蛎礁"
 
 msgid "rock"
-msgstr ""
+msgstr "岩礁"
 
 msgid "Nature"
 msgstr "自然"
@@ -22029,7 +22115,7 @@ msgid "Wood"
 msgstr "树林"
 
 msgid "Woodland where timber production does not dominate use."
-msgstr ""
+msgstr "非主要用于木材生产使用的林地"
 
 msgid "Forest"
 msgstr "森林"
@@ -22047,7 +22133,7 @@ msgstr "防火带"
 
 msgctxt "cutline"
 msgid "hunting"
-msgstr ""
+msgstr "狩猎"
 
 msgctxt "cutline"
 msgid "loggingmachine"
@@ -22063,7 +22149,7 @@ msgstr "滑雪"
 
 msgctxt "cutline"
 msgid "section"
-msgstr ""
+msgstr "分区"
 
 msgid "Grassland"
 msgstr "草原"
@@ -22071,7 +22157,7 @@ msgstr "草原"
 msgid ""
 "Where vegetation is dominated by grasses (Poaceae) and other herbaceous (non-"
 "woody) plants. Excludes cultivated areas and wetlands."
-msgstr ""
+msgstr "以草植被(禾本科)或其他非树木的草本植物为主。不包括耕地和湿地。"
 
 msgid "pampas"
 msgstr "潘帕斯"
@@ -22098,13 +22184,13 @@ msgid "Scree"
 msgstr "碎石坡"
 
 msgid "An accumulation of loose angular rocks."
-msgstr ""
+msgstr "一堆松散碎石。"
 
 msgid "Shingle"
-msgstr ""
+msgstr "卵石滩"
 
 msgid "An accumulation of loose rounded rocks on a beach or riverbed."
-msgstr ""
+msgstr "在河床或沙滩上堆积的松散卵石。"
 
 msgid "Fell"
 msgstr "丘陵"
@@ -22112,14 +22198,14 @@ msgstr "丘陵"
 msgid ""
 "Bare upper lying uncultivated land principally covered with grass and often "
 "grazed."
-msgstr ""
+msgstr "主要被深草覆盖的未耕地,经常用于放牧。"
 
 msgid "Scrub"
 msgstr "灌木丛"
 
 msgid ""
 "Bare lower lying uncultivated land with bushes but little or no tree cover."
-msgstr ""
+msgstr "主要被低矮灌木覆盖的未耕地,可能有些许树。"
 
 msgid "Heath"
 msgstr "荒地"
@@ -22128,7 +22214,7 @@ 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 ""
+msgstr "有低矮灌木丛的未耕地,土地贫瘠干旱,土壤呈酸性,比较开阔,有低矮的木本植物。"
 
 msgid "Sand"
 msgstr "沙地"
@@ -22256,13 +22342,13 @@ msgid "Plant Nursery"
 msgstr "苗圃"
 
 msgid "Aquaculture"
-msgstr ""
+msgstr "水产养殖"
 
 msgid "shrimp"
-msgstr ""
+msgstr "虾"
 
 msgid "mussels"
-msgstr ""
+msgstr "贝类"
 
 msgid "Allotments"
 msgstr "市民农场"
@@ -22308,75 +22394,75 @@ msgstr "工业"
 
 msgctxt "industrial"
 msgid "bakery"
-msgstr ""
+msgstr "烘焙"
 
 msgctxt "industrial"
 msgid "brewery"
-msgstr ""
+msgstr "酿酒"
 
 msgctxt "industrial"
 msgid "brickyard"
-msgstr ""
+msgstr "砖厂"
 
 msgctxt "industrial"
 msgid "depot"
-msgstr ""
+msgstr "专用仓库"
 
 msgctxt "industrial"
 msgid "distributor"
-msgstr ""
+msgstr "批发"
 
 msgctxt "industrial"
 msgid "factory"
-msgstr ""
+msgstr "工厂"
 
 msgctxt "industrial"
 msgid "grinding_mill"
-msgstr ""
+msgstr "研磨"
 
 msgctxt "industrial"
 msgid "heating_station"
-msgstr ""
+msgstr "供暖"
 
 msgctxt "industrial"
 msgid "machine_shop"
-msgstr ""
+msgstr "车间"
 
 msgctxt "industrial"
 msgid "mine"
-msgstr ""
+msgstr "矿石"
 
 msgctxt "industrial"
 msgid "oil"
-msgstr ""
+msgstr "油料"
 
 msgctxt "industrial"
 msgid "port"
-msgstr ""
+msgstr "港口"
 
 msgctxt "industrial"
 msgid "salt_pond"
-msgstr ""
+msgstr "盐场"
 
 msgctxt "industrial"
 msgid "sawmill"
-msgstr ""
+msgstr "锯木"
 
 msgctxt "industrial"
 msgid "scrap_yard"
-msgstr ""
+msgstr "废料场"
 
 msgctxt "industrial"
 msgid "shipyard"
-msgstr ""
+msgstr "造船厂"
 
 msgctxt "industrial"
 msgid "slaughterhouse"
-msgstr ""
+msgstr "屠宰场"
 
 msgctxt "industrial"
 msgid "warehouse"
-msgstr ""
+msgstr "仓库"
 
 msgid "Garages"
 msgstr "车库"
@@ -22451,13 +22537,13 @@ msgid "Country code"
 msgstr "国家代码"
 
 msgid "Unit/Suite"
-msgstr ""
+msgstr "单元/套房"
 
 msgid "House name"
 msgstr "房屋名称"
 
 msgid "Subdistrict"
-msgstr ""
+msgstr "小区"
 
 msgid "District"
 msgstr "区"
@@ -22659,7 +22745,7 @@ msgid "potential"
 msgstr "可能"
 
 msgid "Contact (Common Schema)"
-msgstr ""
+msgstr "联系方式(常用模式)"
 
 msgid "Email Address"
 msgstr "电子邮件地址"
@@ -22671,17 +22757,17 @@ msgid "Image"
 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 ""
+msgstr "可能对终端用户可见(使用搜索系统或带有弹窗的地图)"
 
 msgctxt "note=*, fixme=*, description=*"
 msgid "Similar but different tags:"
@@ -22741,22 +22827,22 @@ msgid "Administration centre"
 msgstr "行政中心"
 
 msgid "Label point"
-msgstr ""
+msgstr "标志点"
 
 msgid "Outline of building"
-msgstr ""
+msgstr "建筑物轮廓"
 
 msgid "Inner segment"
-msgstr ""
+msgstr "内部片段"
 
 msgid "Roof ridge"
-msgstr ""
+msgstr "屋脊"
 
 msgid "Roof edge"
-msgstr ""
+msgstr "屋檐"
 
 msgid "Building level"
-msgstr ""
+msgstr "楼层"
 
 msgid "Site"
 msgstr "地点"
@@ -22831,7 +22917,7 @@ msgid "mindistance"
 msgstr "车距"
 
 msgid "check"
-msgstr ""
+msgstr "普通检测"
 
 msgid "Max. height (meters, only if enforcement=maxheight)"
 msgstr "最大高度(米,仅当 enforcement=maxheight)"
@@ -22861,10 +22947,10 @@ msgid "Bicycle Route"
 msgstr "自行车线路"
 
 msgid "national"
-msgstr ""
+msgstr "国家"
 
 msgid "local"
-msgstr ""
+msgstr "当地"
 
 msgid "Mountain Biking Route"
 msgstr "山地自行车路线"
@@ -22873,7 +22959,7 @@ msgid "Hiking Route"
 msgstr "远足路线"
 
 msgid "infrastructure"
-msgstr ""
+msgstr "基础设施"
 
 msgid "natural"
 msgstr "自然"
@@ -22888,31 +22974,31 @@ msgid "Piste Route"
 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 "Ref of the way this is a detour to"
-msgstr ""
+msgstr "该路径作为绕行时的编号"
 
 msgid "fork node for alternative routes"
-msgstr ""
+msgstr "用于备选的交叉节点"
 
 msgid "Power Route"
 msgstr "电力线"
@@ -22930,7 +23016,7 @@ msgid "member"
 msgstr "成员"
 
 msgid "Associated Street"
-msgstr ""
+msgstr "有关街道"
 
 msgid "house"
 msgstr "房子"
@@ -23032,16 +23118,16 @@ msgid "ways passing under the bridge"
 msgstr "路径在桥下通过"
 
 msgid "way forming the outline footprint"
-msgstr ""
+msgstr "刻画轮廓的路径"
 
 msgid "edge ways parallel to ''across''"
-msgstr ""
+msgstr "边缘路径平行于“桥高部分”"
 
 msgid "ways passing through the tunnel"
 msgstr "路径穿过隧道"
 
 msgid "edge ways parallel to ''through''"
-msgstr ""
+msgstr "边缘路径平行于“隧深部分”"
 
 msgid "Landsat"
 msgstr "Landsat"
@@ -23056,40 +23142,44 @@ msgid "Mapbox Satellite"
 msgstr "Mapbox 卫星"
 
 msgid "DigitalGlobe Premium Imagery"
-msgstr ""
+msgstr "DigitalGlobe Premium图像"
 
 msgid ""
 "DigitalGlobe-Premium is a mosaic composed of DigitalGlobe basemap with "
 "select regions filled with +Vivid or custom area of interest imagery, 50cm "
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
+"DigitalGlobe-Premium是由DigitalGlobe底图构成的拼贴图像,其中特定区域包含+ "
+"Vivid或自定义兴趣区域图像,具有50厘米或更好的分辨率,并且在以后会更加频繁地更新。"
 
 msgid "DigitalGlobe Standard Imagery"
-msgstr ""
+msgstr "DigitalGlobe Standard图像"
 
 msgid ""
 "DigitalGlobe-Standard is a curated set of imagery covering 86% of the "
 "earth’s landmass, with 30-60cm or resolution where available, backfilled by "
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
+"DigitalGlobe-Standard是一套策略性的图像,覆盖了地球86%的面积,其中30-"
+"60cm分辨率可用,由Landsat补充。平均拍摄日期为2.31年前,部分地区每年更新2次。"
 
 msgid "Esri World Imagery"
-msgstr ""
+msgstr "Esri 全球图像"
 
 msgid "OpenCycleMap"
 msgstr "OpenCycleMap"
 
 msgid "Thunderforest Landscape"
-msgstr ""
+msgstr "Thunderforest 地形"
 
 msgid "OpenSeaMap"
 msgstr "OpenSeaMap"
 
 msgid "OpenStreetMap Carto (Standard)"
-msgstr ""
+msgstr "OpenStreetMap 图层 (标准)"
 
 msgid "OpenStreetMap (Standard Black & White)"
-msgstr ""
+msgstr "OpenStreetMap (标准黑白)"
 
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr "OpenStreetMap (Mapnik,无标签)"
@@ -23104,22 +23194,22 @@ msgid "OpenStreetMap GPS Traces"
 msgstr "OSM GPS 轨迹"
 
 msgid "Public GPS traces uploaded to OpenStreetMap."
-msgstr ""
+msgstr "上传至OpenStreetMap的公共GPS轨迹。"
 
 msgid "Public Transport (ÖPNV)"
 msgstr "公共交通(ÖPNV)"
 
 msgid "Hike & Bike"
-msgstr ""
+msgstr "Hike & Bike"
 
 msgid "skobbler"
-msgstr ""
+msgstr "skobbler"
 
 msgid "Stamen Terrain"
-msgstr ""
+msgstr "Stamen 地形"
 
 msgid "Cambodia, Laos, Thailand, Vietnam, Myanmar bilingual"
-msgstr ""
+msgstr "柬埔寨,老挝,泰国,越南,缅甸(双语)"
 
 msgid "OpenPT Map (overlay)"
 msgstr "OpenPT Map (叠加层)"
@@ -23131,13 +23221,13 @@ msgid "Strava running heatmap"
 msgstr "Strava跑步热力图"
 
 msgid "Strava cycling and running heatmap"
-msgstr ""
+msgstr "Strava骑行与跑步热力图"
 
 msgid "Locator Overlay"
 msgstr "定位符叠加层"
 
 msgid "Shows major features to help orient you."
-msgstr ""
+msgstr "显示主要功能来帮助您。"
 
 msgid "QA No Address"
 msgstr "质量控制(QA)地址"
@@ -23160,6 +23250,9 @@ msgstr "路标路线:骑马"
 msgid "Waymarked Trails: Winter Sports"
 msgstr "路标路线:冬季运动"
 
+msgid "Wikimedia Map"
+msgstr "Wikimedia 地图"
+
 msgid "OSM Inspector: Geometry"
 msgstr "OSM 检查器:几何"
 
@@ -23173,7 +23266,7 @@ msgid "OSM Inspector: Highways"
 msgstr "OSM 检查器:公路"
 
 msgid "OSM Inspector: Area"
-msgstr ""
+msgstr "OSM检查器:面"
 
 msgid "OSM Inspector: Routing"
 msgstr "OSM 检查器:路线"
@@ -23182,1402 +23275,1423 @@ msgid "OSM Inspector: Addresses"
 msgstr "OSM 检查器:地址"
 
 msgid "OSM Inspector: Coastline (EU)"
-msgstr ""
+msgstr "OSM 检查器:海岸(欧洲)"
 
 msgid "imagico.de OSM images for mapping: Prokletije Mountains"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 北阿尔巴尼亚山"
 
 msgid ""
 "Late summer imagery where usual sources are severely limited by clouds and "
 "snow (true color)"
-msgstr ""
+msgstr "通常来源的夏季图像会受到云和雪严重限制(真彩色)"
 
 msgid "imagico.de OSM images for mapping: Southern Transantarctic Mountains"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 横贯南极山脉南部"
 
 msgid ""
 "Outside regular Landsat coverage and therefore not in LIMA and Bing/Mapbox "
 "(true color)"
-msgstr ""
+msgstr "在常规Landsat图像覆盖之外,也不在LIMA和Bing / Mapbox图像中(真彩色)"
 
 msgid "imagico.de OSM images for mapping: Pensacola Mountains"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 彭萨科拉山脉"
 
 msgid "imagico.de OSM images for mapping: Elephant Island/Clarence Island"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 大象岛/克拉伦斯岛"
 
 msgid "Fairly clear up-to-date image for updating glacier edges (true color)"
-msgstr ""
+msgstr "用于更新冰川边缘的最新清晰图像(真彩色)"
 
 msgid "imagico.de OSM images for mapping: Enderby Land and Kemp Coast"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 恩德比地和肯普海岸"
 
 msgid "Sentinel-2 images of Enderby Land and Kemp Coast (true color)"
-msgstr ""
+msgstr "Sentinel-2拍摄的恩德比地和肯普海岸图像(真彩色)"
 
 msgid "IGN topographical map (TMS)"
-msgstr ""
+msgstr "IGN 地形地图(TMS)"
+
+msgid "IGN topographical map (WMTS)"
+msgstr "IGN 地形图 (WMTS)"
 
 msgid "IGN topographical map (WMS)"
-msgstr ""
+msgstr "IGN 地形地图(WMS)"
 
 msgid "IGN orthophoto AMBA a (WMTS)"
-msgstr ""
+msgstr "IGN 正射影像 AMBA a(WMTS)"
 
 msgid "IGN orthophoto AMBA b (WMTS)"
-msgstr ""
+msgstr "IGN 正射影像 AMBA b (WMTS)"
 
 msgid "IGN orthophoto AMBA c (WMTS)"
-msgstr ""
+msgstr "IGN 正射影像 AMBA c (WMTS)"
 
 msgid "IGN orthophoto AMBA d (WMTS)"
-msgstr ""
+msgstr "IGN 正射影像 AMBA d (WMTS)"
 
 msgid "IGN orthophoto AMBA e (WMTS)"
-msgstr ""
+msgstr "IGN 正射影像 AMBA e (WMTS)"
 
 msgid "IGN orthophoto AMBA f (WMTS)"
-msgstr ""
+msgstr "IGN 正射影像 AMBA f (WMTS)"
 
 msgid "IGN orthophoto AMBA 4 (WMTS)"
-msgstr ""
+msgstr "IGN 正射影像 AMBA 4 (WMTS)"
 
 msgid "IGN orthophoto AMBA 5 (WMTS)"
-msgstr ""
+msgstr "IGN 正射影像 AMBA 5 (WMTS)"
 
 msgid "IGN orthophoto AMBA 6 (WMTS)"
-msgstr ""
+msgstr "IGN 正射影像 AMBA 6 (WMTS)"
 
 msgid "IGN orthophoto AMBA 7 (WMTS)"
-msgstr ""
+msgstr "IGN 正射影像 AMBA 7 (WMTS)"
 
 msgid "IGN orthophoto Barranqueras (WMTS)"
-msgstr ""
+msgstr "IGN 正射影像 巴兰克拉斯 (WMTS)"
 
 msgid "IGN orthophoto Catamarca (WMTS)"
-msgstr ""
+msgstr "IGN 正射影像 卡塔马卡 (WMTS)"
 
 msgid "IGN orthophoto Córdoba (WMTS)"
-msgstr ""
+msgstr "IGN 正射影像 科尔多瓦 (WMTS)"
 
 msgid "IGN orthophoto El Calafate (WMTS)"
-msgstr ""
+msgstr "IGN 正射影像 埃尔卡拉法特 (WMTS)"
 
 msgid "IGN orthophoto El Rodeo (WMTS)"
-msgstr ""
+msgstr "IGN 正射影像 埃尔罗德奥 (WMTS)"
 
 msgid "IGN orthophoto Jujuy (WMTS)"
-msgstr ""
+msgstr "IGN 正射影像 胡胡伊 (WMTS)"
 
 msgid "IGN orthophoto La Rioja (WMTS)"
-msgstr ""
+msgstr "IGN 正射影像 拉里奥哈 (WMTS)"
 
 msgid "IGN orthophoto Mendoza (WMTS)"
-msgstr ""
+msgstr "IGN 正射影像 门多萨 (WMTS)"
 
 msgid "IGN orthophoto Neuquén (WMTS)"
-msgstr ""
+msgstr "IGN 正射影像 内乌肯 (WMTS)"
 
 msgid "IGN orthophoto Posadas (WMTS)"
-msgstr ""
+msgstr "IGN 正射影像 波萨达斯 (WMTS)"
 
 msgid "IGN orthophoto Resistencia (WMTS)"
-msgstr ""
+msgstr "IGN 正射影像 雷西斯滕西亚 (WMTS)"
 
 msgid "IGN orthophoto Río Gallegos (WMTS)"
-msgstr ""
+msgstr "IGN 正射影像 里奥加耶戈斯 (WMTS)"
 
 msgid "IGN orthophoto Río Grande (WMTS)"
-msgstr ""
+msgstr "IGN 正射影像 格兰德河 (WMTS)"
 
 msgid "IGN orthophoto Río Paraná A (WMTS)"
-msgstr ""
+msgstr "IGN 正射影像 巴拉那河 A (WMTS)"
 
 msgid "IGN orthophoto Río Paraná B (WMTS)"
-msgstr ""
+msgstr "IGN 正射影像 巴拉那河 B (WMTS)"
 
 msgid "IGN orthophoto Rosario (WMTS)"
-msgstr ""
+msgstr "IGN 正射影像 罗萨里奥 (WMTS)"
+
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr "IGN 正射影像 萨尔塔 (WMTS)"
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr "IGN 正射影像 萨尔塔1 (WMTS)"
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr "IGN 正射影像 萨尔塔2 (WMTS)"
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr "IGN 正射影像 萨尔塔3 (WMTS)"
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr "IGN 正射影像 萨尔塔4 (WMTS)"
 
 msgid "IGN orthophoto Salto Grande (WMTS)"
-msgstr ""
+msgstr "IGN 正射影像 萨尔图格兰德 (WMTS)"
 
 msgid "IGN orthophoto San Juan (WMTS)"
-msgstr ""
+msgstr "IGN 正射影像 圣胡安 (WMTS)"
 
 msgid "IGN orthophoto San Luis (WMTS)"
-msgstr ""
+msgstr "IGN 正射影像 圣路易斯 (WMTS)"
 
 msgid "IGN orthophoto Santa Cruz III (WMTS)"
-msgstr ""
+msgstr "IGN 正射影像 圣克鲁斯 III (WMTS)"
 
 msgid "IGN orthophoto Santa Cruz IV (WMTS)"
-msgstr ""
+msgstr "IGN 正射影像 圣克鲁斯 IV (WMTS)"
 
 msgid "IGN orthophoto Santa Cruz VI (WMTS)"
-msgstr ""
+msgstr "IGN 正射影像 圣克鲁斯 (WMTS)"
 
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
-msgstr ""
-
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
+msgstr "IGN 正射影像 圣达菲和巴拉那 (WMTS)"
 
 msgid "IGN orthophoto Tucumán (WMTS)"
-msgstr ""
+msgstr "IGN 正射影像 图库曼 (WMTS)"
 
 msgid "IGN orthophoto Ushuaia (WMTS)"
-msgstr ""
+msgstr "IGN 正射影像 乌斯怀亚 (WMTS)"
 
 msgid "Educational map (WMS)"
-msgstr ""
+msgstr "教育地图 (WMS)"
 
 msgid "Ministry of Agroindustry (WMS)"
-msgstr ""
+msgstr "阿根廷农业部 (WMS)"
 
 msgid "Ministry of Energy and Mining (WMS)"
-msgstr ""
+msgstr "阿根廷能源与矿业部 (WMS)"
 
 msgid "imagico.de OSM images for mapping: Bahía Blanca (low tide)"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 布兰卡港 (低潮)"
 
 msgid "Tidal flats and islands at the coast (true color)"
-msgstr ""
+msgstr "海岸的潮滩与岛屿 (true color)"
 
 msgid "imagico.de OSM images for mapping: Bahía Blanca (high tide)"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 布兰卡港 (高潮)"
 
 msgid "AGRI black-and-white 2.5m"
-msgstr ""
+msgstr "AGRI黑白2.5米"
 
 msgid "LPI NSW Base Map"
-msgstr ""
+msgstr "LPI NSW 基本地图"
 
 msgid "LPI NSW Topographic Map"
-msgstr ""
+msgstr "LPI NSW 地形地图"
 
 msgid "LPI NSW Imagery"
-msgstr ""
+msgstr "LPI NSW 图像"
 
 msgid "LPI NSW Administrative Boundaries Suburb"
-msgstr ""
+msgstr "LPI NSW 郊区行政边界"
 
 msgid "LPI NSW Administrative Boundaries LGA"
-msgstr ""
+msgstr "LPI NSW LGA行政边界"
 
 msgid "LPI NSW Administrative Boundaries County"
-msgstr ""
+msgstr "LPI NSW 县行政边界"
 
 msgid "LPI NSW Administrative Boundaries Parish"
-msgstr ""
+msgstr "LPI NSW 教区行政边界"
 
 msgid "LPI NSW Administrative Boundaries State Forest"
-msgstr ""
+msgstr "LPI NSW 国家林区行政边界"
 
 msgid "LPI NSW Administrative Boundaries NPWS Reserve"
-msgstr ""
+msgstr "LPI NSW NPWS保护区行政边界"
 
 msgid "imagico.de OSM images for mapping: Northwest Heard Island"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 赫德岛西北部"
 
 msgid ""
 "Glaciers of Northwest Heard Island (mapped meanwhile) (false color IR)"
-msgstr ""
+msgstr "赫德岛西北部的冰川(同时绘制) (假色IR)"
 
 msgid "imagico.de OSM images for mapping: Heard Island coast"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 赫德岛海岸"
 
 msgid ""
 "Recent image of Heard island with interior mostly cloud covered but mostly "
 "well visible coast (true color)"
-msgstr ""
+msgstr "赫德岛的近期图像,虽然内部有许多云层但是海岸清晰可见(真彩色)"
 
 msgid "basemap.at"
 msgstr "basemap.at"
 
 msgid "Basemap of Austria, based on goverment data."
-msgstr ""
+msgstr "奥地利基本图,基于政府数据"
 
 msgid "basemap.at Orthofoto"
-msgstr "basemap.at Orthofoto"
+msgstr "basemap.at 正射影像"
 
 msgid "Orthofoto layer provided by basemap.at. "
-msgstr ""
+msgstr "正射影像图层由basemap.at.提供 "
 
 msgid "Geoimage.at MaxRes"
-msgstr ""
+msgstr "Geoimage.at 最大分辨率"
 
 msgid "Graz: Basiskarte (base map)"
-msgstr ""
+msgstr "格拉茨: 基本图"
 
 msgid "Tiris: DGM (Terrain model)"
-msgstr ""
+msgstr "提里斯: DGM (地形模型)"
 
 msgid "Tiris: DOM (Surface model)"
-msgstr ""
+msgstr "提里斯: DOM (表面模型)"
 
 msgid "Tiris: contour lines"
-msgstr ""
+msgstr "提里斯: 海岸线"
 
 msgid "Tiris: orthophoto"
-msgstr ""
+msgstr "提里斯: 正射影像"
 
 msgid "Tiris: orthophoto infrared"
-msgstr ""
+msgstr "提里斯: 红外线正射影像"
 
 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 ""
+msgstr "VoGIS: 真彩色图像 (2015年冬季)(20厘米)"
 
 msgid "VoGIS: Echtfarbenbild 2015 (10cm)"
-msgstr ""
+msgstr "VoGIS: 真彩色图像 (2015年)(10厘米)"
 
 msgid "VoGIS: Flächenwidmungsplan"
-msgstr ""
+msgstr "VoGIS: 分区规划"
 
 msgid "VoGIS: Höhen und Gelände"
-msgstr ""
+msgstr "VoGIS: 地高和地形"
 
 msgid "imagico.de OSM images for mapping: Rila and Pirin Mountains"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 里拉和皮林山脉"
 
 msgid "OpenStreetMap (Belgian Style)"
-msgstr ""
+msgstr "OpenStreetMap (比利时风格)"
 
 msgid "OpenStreetMap (Belgian Style - French)"
-msgstr ""
+msgstr "OpenStreetMap (比利时风格 - 法语)"
 
 msgid "OpenStreetMap (Belgian Style - Dutch)"
-msgstr ""
+msgstr "OpenStreetMap (比利时风格 - 荷兰语)"
 
 msgid "OpenStreetMap (Belgian Style - German)"
-msgstr ""
+msgstr "OpenStreetMap (比利时风格 - 德语)"
 
 msgid "Orthophoto IGN-NGI"
-msgstr ""
+msgstr "正射影像 IGN-NGI"
 
 msgid "AGIV Flanders most recent aerial imagery"
-msgstr ""
+msgstr "AGIV 法兰德斯最新航拍图像"
 
 msgid "AGIV Flanders 2013-2015 aerial imagery 10cm"
-msgstr ""
+msgstr "AGIV 法兰德斯2013年-2015年航拍图像 (10厘米)"
 
 msgid "AGIV Flanders GRB"
-msgstr ""
+msgstr "AGIV 法兰德斯 GRB"
 
 msgid "URBISfr numerical imagery (2013)"
-msgstr ""
+msgstr "URBISfr 数个图像 (2013年)"
 
 msgid "URBISfr numerical imagery"
-msgstr ""
+msgstr "URBISfr 数个图像"
 
 msgid "URBISnl numerical imagery (2013)"
-msgstr ""
+msgstr "URBISnl 数个图像 (2013年)"
 
 msgid "URBISnl numerical imagery"
-msgstr ""
+msgstr "URBISnl 数个图像"
 
 msgid "URBIS 2009 aerial imagery"
-msgstr ""
+msgstr "URBIS 2009年航拍图像"
 
 msgid "URBIS 2012 aerial imagery"
-msgstr ""
+msgstr "URBIS 2012年航拍图像"
 
 msgid "URBIS 2014 aerial imagery"
-msgstr ""
+msgstr "URBIS 2014年航拍图像"
 
 msgid "URBIS 2015 aerial imagery"
-msgstr ""
+msgstr "URBIS 2015年航拍图像"
 
 msgid "URBIS 2016 aerial imagery"
-msgstr ""
+msgstr "URBIS 2016年航拍图像"
 
 msgid "SPW(allonie) PICC numerical imagery"
-msgstr ""
+msgstr "SPW(allonie) PICC 数个图像"
 
 msgid "SPW(allonie) most recent aerial imagery"
-msgstr ""
+msgstr "SPW(allonie) 最新航拍图像"
 
 msgid "SPW(allonie) 2015 aerial imagery"
-msgstr ""
+msgstr "SPW(allonie) 2015年航拍图像"
 
 msgid "SPW(allonie) 2012-2013 aerial imagery"
-msgstr ""
+msgstr "SPW(allonie) 2012年-2013年航拍图像"
 
 msgid "SPW(allonie) 2009-2010 aerial imagery"
-msgstr ""
+msgstr "SPW(allonie) 2009年-2010年航拍图像"
 
 msgid "TEC bus lines"
-msgstr ""
+msgstr "TEC 公交路线"
 
 msgid "TEC bus stops"
-msgstr ""
+msgstr "TEC 公交站"
 
 msgid "Benin: Cotonou Pleiade 2016"
-msgstr ""
+msgstr "贝宁: 科托努 (2016年)"
 
 msgid "imagico.de OSM images for mapping: Cotonou"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 科托努"
 
 msgid "Patchy and partly cloudy coverage in usual sources (true color)"
-msgstr ""
+msgstr "平常来源有部分多云覆盖(真彩)"
 
 msgid "imagico.de OSM images for mapping: Bouvet Island"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 布韦岛"
 
 msgid "For more accurate coastline and glacier mapping (true color)"
-msgstr ""
+msgstr "用于更加精确的海岸线和冰川绘制(真彩色)"
 
 msgid "IBGE Map of urban areas"
-msgstr ""
+msgstr "IBGE Map 城区"
 
 msgid "IBGE Map of rural areas"
-msgstr ""
+msgstr "IBGE Map 乡村"
 
 msgid "IBGE federal district"
-msgstr ""
+msgstr "IBGE 联邦地区"
 
 msgid "Addresses data from IBGE"
-msgstr ""
+msgstr "地址信息来源于IBGE"
 
 msgid "Rio Mosaic 2013"
-msgstr ""
+msgstr "里约热内卢 (拼贴)(2013年)"
 
 msgid "Rio Mosaic 2015"
-msgstr ""
+msgstr "里约热内卢 (拼贴)(2015年)"
 
 msgid "Londrina Ortofoto 2011"
-msgstr ""
+msgstr "隆德里纳 正射影像 (2011年)"
 
 msgid "SIG Santa Catarina OrtoRGB 2012"
-msgstr ""
+msgstr "SIG 圣卡塔琳娜 RGB正射影像 (2012年)"
 
 msgid "Arapiraca AL"
-msgstr ""
+msgstr "阿拉皮拉卡 AL"
 
 msgid "Branquinha AL"
-msgstr ""
+msgstr "布兰基尼亚 AL"
 
 msgid "Cajueiro AL"
-msgstr ""
+msgstr "卡茹埃鲁 AL"
 
 msgid "Campo Alegre AL"
-msgstr ""
+msgstr "坎普阿莱格里 AL"
 
 msgid "Capela AL"
-msgstr ""
+msgstr "卡佩拉 AL"
 
 msgid "Delmiro Gouveia AL"
-msgstr ""
+msgstr "德尔米鲁戈韦亚 AL"
 
 msgid "Estrela de Alagoas"
-msgstr ""
+msgstr "阿拉戈斯州埃斯特雷拉"
 
 msgid "Girau do Ponciano"
-msgstr ""
+msgstr "吉劳-杜蓬西亚努"
 
 msgid "Major Isidoro AL"
-msgstr ""
+msgstr "伊西多鲁少校镇 AL"
 
 msgid "Mar Vermelho AL"
-msgstr ""
+msgstr "马尔韦梅柳 AL"
 
 msgid "Minador do Negrão"
-msgstr ""
+msgstr "米纳多-杜内格朗"
 
 msgid "Olho d’Agua do Casado AL"
-msgstr ""
+msgstr "奥柳达瓜-杜卡萨杜 AL"
 
 msgid "Palestina AL"
-msgstr ""
+msgstr "帕莱斯蒂纳 AL"
 
 msgid "Palmeira dos Indios AL"
-msgstr ""
+msgstr "帕尔梅拉-杜斯印第乌斯 AL"
 
 msgid "Pão de Açucar AL"
-msgstr ""
+msgstr "庞迪阿苏卡尔 AL"
 
 msgid "Piranhas AL"
-msgstr ""
+msgstr "皮拉尼亚斯 AL"
 
 msgid "Poço das Trincheiras AL"
-msgstr ""
+msgstr "波苏-达斯特林谢拉斯 AL"
 
 msgid "Santana do Ipanema AL"
-msgstr ""
+msgstr "圣安娜杜伊帕内马 AL"
 
 msgid "São Miguel dos Campos AL"
-msgstr ""
+msgstr "圣米格尔-杜斯坎普斯 AL"
 
 msgid "Teotonio Vilela AL"
-msgstr ""
+msgstr "特奥托尼奥-维莱拉 AL"
 
 msgid "União dos Palmares AL"
-msgstr ""
+msgstr "乌尼昂-杜斯帕尔马里斯 AL"
 
 msgid "Viçosa AL"
-msgstr ""
+msgstr "维索萨 AL"
 
 msgid "Alagoas coast 2006"
-msgstr ""
+msgstr "阿拉戈斯海岸 (2006年)"
 
 msgid "DER-ES"
-msgstr ""
+msgstr "DER-ES"
 
 msgid "IBGE-BC250 Isolated Rural Location"
-msgstr ""
+msgstr "IBGE-BC250 孤立农村地"
 
 msgid "IBGE-BC250 Landing strip"
-msgstr ""
+msgstr "IBGE-BC250 降落跑道"
 
 msgid "IBGE-BC250 River drains"
-msgstr ""
+msgstr "IBGE-BC250 河流水渠"
 
 msgid "IBGE-BC250 Highways stretches"
-msgstr ""
+msgstr "IBGE-BC250 高速公路延伸"
 
 msgid "IBGE-BC250 Indigenous Lands"
-msgstr ""
+msgstr "IBGE-BC250 当地土地"
 
 msgid "IBGE-BC250 Public Land (Military)"
-msgstr ""
+msgstr "IBGE-BC250 公共土地 (军事)"
 
 msgid "IBGE-BC250 Units of Sustainable Use - APA"
-msgstr ""
+msgstr "IBGE-BC250 可持续利用单位 - APA"
 
 msgid "IBGE-BC250 Villages"
-msgstr ""
+msgstr "IBGE-BC250 村镇"
 
 msgid "IBGE-BCIM Stations for Electrical Power Generation"
-msgstr ""
+msgstr "IBGE-BCIM 发电站"
 
 msgid "IBGE-BCIM Municipalities"
-msgstr ""
+msgstr "IBGE-BCIM 直辖市"
 
 msgid "Geobase Hydrography"
-msgstr ""
+msgstr "Geobase 水文"
 
 msgid "Geobase Roads"
-msgstr ""
+msgstr "Geobase 道路"
 
 msgid "Canvec"
-msgstr ""
+msgstr "Canvec"
 
 msgid "British Columbia Mosaic"
-msgstr ""
+msgstr "不列颠哥伦比亚(拼贴)"
 
 msgid "Latest southwest British Columbia Landsat"
-msgstr ""
+msgstr "最新的不列颠哥伦比亚西南部(Landsat)"
 
 msgid ""
 "Recent lower-resolution landsat imagery for southwest British Columbia"
-msgstr ""
+msgstr "不列颠哥伦比亚西南部的最新低分辨率Landsat图像"
 
 msgid "Kelowna 2012"
-msgstr ""
+msgstr "基洛纳(2012年)"
 
 msgid "High quality aerial imagery taken for the City of Kelowna"
-msgstr ""
+msgstr "基洛纳的高质量航拍图像"
 
 msgid "Kelowna Roads overlay"
-msgstr ""
+msgstr "基洛纳 (道路叠加)"
 
 msgid "imagico.de OSM images for mapping: Eastern Devon Island coast"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 德文岛东部海岸"
 
 msgid "Coastline mostly mapped meanwhile (false color IR)"
-msgstr ""
+msgstr "同时绘制了大多数的海岸线 (假色 IR)"
 
 msgid "imagico.de OSM images for mapping: Northern Ellesmere Island"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 埃尔斯米尔岛北部"
 
 msgid ""
 "Assembled from July 2012 ASTER imagery (true color with estimated blue)"
-msgstr ""
+msgstr "从2012年7月 ASTER 图像中整合 (真彩色包含预测的蓝色)"
 
 msgid ""
 "imagico.de OSM images for mapping: Northern Ellesmere Island July 2016"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 埃尔斯米尔岛北部(2016年7月)"
 
 msgid ""
 "Assembled from July 2016 ASTER imagery (true color with estimated blue)"
-msgstr ""
+msgstr "从2016年7月ASTER图像中整合(真彩色包含预测的蓝色)"
 
 msgid "imagico.de OSM images for mapping: Fogo, Cape Verde"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 福古岛(佛得角)"
 
 msgid "Image from after the 2014/2015 eruption (true color)"
-msgstr ""
+msgstr "在2014年/2015年火山喷发后的图像 (真彩色)"
 
 msgid "imagico.de OSM images for mapping: Isla Londonderry"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 伦敦德里岛"
 
 msgid ""
 "A lot of very coarse coastlines could be improved here, much snow cover "
 "though so no use for glacier mapping (false color IR)"
-msgstr ""
+msgstr "可以用来改善许多粗糙的海岸线,有许多积雪所以请勿用于绘制冰川(假色IR)"
 
 msgid "imagico.de OSM images for mapping: Volcán Calbuco"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 卡尔布科火山"
 
 msgid "Image from after the 2015 eruption (true color)"
-msgstr ""
+msgstr "在2015年火山喷发后的图像 (真彩色)"
 
 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 ""
+msgstr "捷克 pLPIS"
 
 msgid "Praha IPR latest orthophoto"
-msgstr ""
+msgstr "布拉格 IPR 最新正射影像"
 
 msgid "Praha IPR low-vegetation orthophoto"
-msgstr ""
+msgstr "布拉格 IPR 矮植被正射影像"
 
 msgid "SDFE aerial imagery"
-msgstr ""
+msgstr "SDFE 航拍图像"
 
 msgid "SDFE Cadastral Parcels INSPIRE View"
-msgstr ""
+msgstr "SDFE 地籍地块 INSPIRE 视图"
 
 msgid "SDFE DTK Kort25"
-msgstr ""
+msgstr "SDFE DTK Kort25"
 
 msgid "SDFE Terrain Shadow Map (40 cm)"
-msgstr ""
+msgstr "SDFE 地形阴影地图 (40 厘米)"
 
 msgid "SDFE Surface Shadow Map (40 cm)"
-msgstr ""
+msgstr "SDFE 表面阴影地图 (40 厘米)"
 
 msgid "SDFE Skærmkort"
-msgstr ""
+msgstr "SDFE 显示适配"
 
 msgid "Stevns"
-msgstr ""
+msgstr "Stevns"
 
 msgid "Vejmidte"
-msgstr ""
+msgstr "Vejmidte"
 
 msgid "imagico.de OSM images for mapping: El Altar"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 埃尔阿尔塔火山"
 
 msgid ""
 "2007 ASTER image offering better glacier coverage than common sources (true "
 "color with estimated blue)"
-msgstr ""
+msgstr "2007年的ASTER图像提供了比普通来源更好的冰川覆盖(真彩色包含预测的蓝色)"
 
 msgid "imagico.de OSM images for mapping: Darwin and Wolf islands, Galapagos"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 达尔文岛和沃尔夫岛(加拉帕戈斯群岛)"
 
 msgid ""
 "Recent image, only old and poor images in other sources currently (true "
 "color)"
-msgstr ""
+msgstr "最新图像,现有的其他来源包含过时的图像 (真彩色)"
 
 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 "BANO"
 
 msgid "French address registry or Base Adresses Nationale"
-msgstr ""
+msgstr "法国地址登记处或国家地址数据库"
 
 msgid "BD Carthage"
-msgstr ""
+msgstr "BD 迦太基"
 
 msgid "BDOrtho IGN"
-msgstr ""
+msgstr "BDOrtho IGN"
 
 msgid "Bordeaux - 2012"
-msgstr ""
+msgstr "波尔多(2012年)"
 
 msgid "Cadastre"
 msgstr "Cadastre"
 
 msgid "French land registry"
-msgstr ""
+msgstr "法国土地登记处"
 
 msgid "CRAIG - Auvergne 2016 - 25 cm"
-msgstr ""
+msgstr "CRAIG - 奥弗涅 (2016年)(25厘米)"
 
 msgid "CRAIG - Auvergne 2013 - 25 cm"
-msgstr ""
+msgstr "CRAIG - 奥弗涅 (2013年)(25厘米)"
 
 msgid "GrandNancy Orthophotographie 2012"
-msgstr ""
+msgstr "GrandNancy 正射影像 (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 2011-2014"
-msgstr ""
+msgstr "Géolittoral V2 - 正射影像 (2011年-2014年)"
 
 msgid "Géolittoral - Sentiers"
-msgstr ""
+msgstr "Géolittoral - 步道"
 
 msgid "Lyon - Orthophoto 2012-03 10cm - EPSG:3946"
-msgstr ""
+msgstr "里昂 - 正射影像 (2012年3月)(10厘米) - EPSG:3946"
 
 msgid "Lyon - Orthophoto 2015-05 8cm - EPSG:3946"
-msgstr ""
+msgstr "里昂 - 正射影像 (2015年5月)(8厘米) - EPSG:3946"
 
 msgid "Loire-Atlantique - Orthophotos 2012 - 20 cm"
-msgstr ""
+msgstr "大西洋卢瓦尔 - 正射影像 (2012年)(20厘米)"
 
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
-msgstr ""
+msgstr "SIG L-R - 朗格多克-鲁西永(2012年)(20厘米)"
 
 msgid "Route 500™©®"
-msgstr ""
+msgstr "Route 500™©®"
 
 msgid "Toulouse - Orthophotoplan 2015"
-msgstr ""
+msgstr "图卢兹 - 正射影像 (2015年)"
 
 msgid "Toulouse - Orthophotoplan 2013"
-msgstr ""
+msgstr "图卢兹 - 正射影像 (2013年)"
 
 msgid "Toulouse - Orthophotoplan 2011"
-msgstr ""
+msgstr "图卢兹 - 正射影像 (2011年)"
 
 msgid "Toulouse - Orthophotoplan 2007"
-msgstr ""
+msgstr "图卢兹 - 正射影像 (2007年)"
 
 msgid "Tours - Orthophoto 2013"
-msgstr ""
+msgstr "图尔 - 正射影像 (2013年)"
 
 msgid "Tours - Orthophoto 2008-2010"
-msgstr ""
+msgstr "图尔 - 正射影像 (2008年-2010年)"
 
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
-msgstr ""
+msgstr "韦科尔 - 高原自然保护区正射影像(1999年)(1米)"
 
 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 ""
+msgstr "巴伐利亚 (80厘米)"
 
 msgid "Bavaria (2 m)"
-msgstr ""
+msgstr "巴伐利亚 (2米)"
 
 msgid "Berlin aerial photograph 2011"
-msgstr ""
+msgstr "柏林航拍图像 (2011年)"
 
 msgid "Berlin aerial photograph 2014"
-msgstr ""
+msgstr "柏林航拍图像(2014年)"
 
 msgid "Berlin aerial photograph 2015"
-msgstr ""
+msgstr "柏林航拍图像 (2015年)"
 
 msgid "Berlin aerial photograph 2016"
-msgstr ""
+msgstr "柏林航拍图像 (2016年)"
+
+msgid "Berlin aerial photograph 2017"
+msgstr "柏林航拍图像 (2017年)"
 
 msgid "Deutsche Bahn VzG lines Nov 2013"
-msgstr ""
+msgstr "德国铁路VzG线 (2013年11月)"
 
 msgid "Deutsche Bahn VzG lines Nov 2015"
-msgstr ""
+msgstr "德国铁路VzG线 (2015年11月)"
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
-msgstr ""
+msgstr "埃尔兰根航拍图像 (2016年)(5.0厘米)"
 
 msgid "Erlangen aerial imagery (2013 6.25 cm)"
-msgstr ""
+msgstr "埃尔兰根航拍图像 (2013年)(6.25 厘米)"
 
 msgid "Erlangen aerial imagery (2011 5.0 cm)"
-msgstr ""
+msgstr "埃尔兰根航拍图像 (2011年)(5.0厘米)"
 
 msgid "Old map of Zwenkau - TK25 Messtischblatt (4739; 1906; PROJ.4-rect)"
-msgstr ""
+msgstr "茨文考旧地图 - TK25 军事测绘 (4739; 1906; PROJ.4-rect)"
 
 msgid "Old map of Pegau - TK25 Messtischblatt (4839; 1909; PROJ.4-rect)"
-msgstr ""
+msgstr "佩高旧地图 - TK25 军事测绘 (4839; 1909; PROJ.4-rect)"
 
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
-msgstr ""
+msgstr "Maps4BW (LGL-BW, www.lgl-bw.de)"
 
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
-msgstr ""
+msgstr "大都会鲁尔: 航拍图像 (10 cm)"
 
 msgid ""
 "imagico.de OSM images for mapping: Northern German west coast tidalflats"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 德国北部西海岸潮滩"
 
 msgid ""
 "Up-to-date low tide imagery of the coast for updating mapping of tidalflats "
 "and shoals (true color)"
-msgstr ""
+msgstr "最新拍摄的低潮海岸,用于更新潮滩和浅滩 (真彩色)"
 
 msgid ""
 "imagico.de OSM images for mapping: Northern German west coast tidalflats "
 "(infrared)"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 德国北部西海岸潮滩(红外线)"
 
 msgid ""
 "Up-to-date low tide imagery of the coast for updating mapping of tidalflats "
 "and shoals (false color IR)"
-msgstr ""
+msgstr "最新的海岸低潮时的图像,用于更新潮滩和浅滩(假色IR)"
 
 msgid "imagico.de OSM images for mapping: North Sea Coast 2016"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 北海海岸 (2016年)"
 
 msgid "imagico.de OSM images for mapping: North Sea Coast 2017"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 北海海岸 (2017年)"
 
 msgid "Saxony latest aerial imagery"
-msgstr ""
+msgstr "萨克森最新航拍图像"
 
 msgid "Saxony latest aerial imagery infrared"
-msgstr ""
+msgstr "萨克森最新红外航拍图像"
 
 msgid "Saxony historical aerial imagery 2012-2014"
-msgstr ""
+msgstr "萨克森历史航拍图像(2012年-2014年)"
 
 msgid "Saxony historical aerial imagery 2005"
-msgstr ""
+msgstr "萨克森历史航拍图像(2005年)"
 
 msgid "Saxony WebAtlasSN"
-msgstr ""
+msgstr "萨克森 WebAtlasSN"
 
 msgid "Saxony topographic map"
-msgstr ""
+msgstr "萨克森地形图"
 
 msgid "Saxony digital terrain model"
-msgstr ""
+msgstr "萨克森数字地形模型"
 
 msgid "Mainz all aerial imageries"
-msgstr ""
+msgstr "美因茨航拍图像大全"
 
 msgid "Mainz latest aerial imagery"
-msgstr ""
+msgstr "美因茨最新航拍图像"
 
 msgid "Munich latest aerial imagery 60cm"
-msgstr ""
+msgstr "慕尼黑最新航拍图像(60厘米)"
 
 msgid "imagico.de OSM images for mapping: Qasigiannguit"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 卡西江吉特"
 
 msgid "Icebridge DMS image of the settlement - alignment might be poor"
-msgstr ""
+msgstr "Icebridge DMS 聚落图像(可能有校准问题)"
 
 msgid "imagico.de OSM images for mapping: Thule Air Base"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 图勒空军基地"
 
 msgid "Icebridge DMS image - alignment might be poor"
-msgstr ""
+msgstr "Icebridge DMS图像(可能有校准问题)"
 
 msgid "imagico.de OSM images for mapping: Kangerlussuaq Autumn"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 康克鲁斯瓦格(秋季)"
 
 msgid ""
 "Icebridge DMS image of the airport and settlement - alignment might be poor"
-msgstr ""
+msgstr "Icebridge DMS 机场与聚落图像(可能有校准问题)"
 
 msgid "imagico.de OSM images for mapping: Kangerlussuaq Spring"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 康克鲁斯瓦格(春季)"
 
 msgid ""
 "Icebridge DMS image of the airport and roads - alignment might be poor"
-msgstr ""
+msgstr "Icebridge DMS 机场与道路图像(可能有校准问题)"
 
 msgid ""
 "imagico.de OSM images for mapping: Thule Airbase DMS low altitude overflight "
 "September 2015"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 图勒空军基地(DMS低空飞越)(2015年9月)"
 
 msgid ""
 "Icebridge DMS aerial images from Thule Airbase - alignment might be poor"
-msgstr ""
+msgstr "Icebridge DMS 图勒空军基地航拍图像(可能有校准问题)"
 
 msgid ""
 "imagico.de OSM images for mapping: Thule Airbase DMS overflight September "
 "2015"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 图勒空军基地(DMS飞越)(2015年9月)"
 
 msgid ""
 "imagico.de OSM images for mapping: Thule Airbase DMS overflight October 2015"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 图勒空军基地(DMS飞越)(2015年10月)"
 
 msgid "imagico.de OSM images for mapping: Greenland mosaic"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 格陵兰(拼贴)"
 
 msgid "Landsat mosaic of Greenland (true color)"
-msgstr ""
+msgstr "Landsat格陵兰拼贴图 (真彩色)"
 
 msgid "imagico.de OSM images for mapping: May 2013 off-nadir Landsat"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: Landsat天底图(2013年5月)"
 
 msgid ""
 "First available image north of the regular Landsat limit, mostly with "
 "seasonal snow cover so difficult to interpret (true color)"
-msgstr ""
+msgstr "第一个展现常规Landsat限制以北区域的图像,大部分都被季节性的雪所覆盖因而难以解读(真彩色)"
 
 msgid "imagico.de OSM images for mapping: Landsat off-nadir July 2016"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: Landsat天底图(2016年7月)"
 
 msgid "Latest images north of the regular Landsat limit (true color)"
-msgstr ""
+msgstr "最新展现常规Landsat限制以北区域的图像(真彩色)"
 
 msgid "imagico.de OSM images for mapping: Northern Greenland ASTER"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 格陵兰北部(ASTER)"
 
 msgid ""
 "Assembled from mostly 2012 ASTER imagery, some 2005 images mainly in the "
 "northeast (true color with estimated blue)"
-msgstr ""
+msgstr "大多从2012年的ASTER图像中整合,在东北部有一些2005年的图像(真彩色包含预测的蓝色)"
 
 msgid "Drone Imagery (Haiti)"
-msgstr ""
+msgstr "海地无人机图像"
 
 msgid "Drone Imagery 2014 (Haiti)"
-msgstr ""
+msgstr "海地无人机图像(2014年)"
 
 msgid "Drone Imagery Canaan(Haiti) November 2015"
-msgstr ""
+msgstr "迦南(海地)无人机图像(2016年10月)"
 
 msgid "Drone Imagery Matthew(Haiti) October 2016"
-msgstr ""
+msgstr "马修(海地)无人机图像(2016年10月)"
 
 msgid "FÖMI orthophoto 2000"
-msgstr ""
+msgstr "FÖMI 正射影像(2000年)"
 
 msgid "FÖMI orthophoto 2005"
-msgstr ""
+msgstr "FÖMI 正射影像(2005年)"
 
 msgid "Szeged orthophoto 2011"
-msgstr ""
+msgstr "塞格德正射影像(2011年)"
 
 msgid "Inner part of Szeged"
-msgstr ""
+msgstr "赛格德市内部分"
 
 msgid "Törökbálint orthophoto 2013"
-msgstr ""
+msgstr "特勒克巴林特正射影像(2013年)"
 
 msgid "5 cm resolution bald image"
-msgstr ""
+msgstr "5厘米分辨率图像"
 
 msgid "Törökbálint orthophoto 2015"
-msgstr ""
+msgstr "特勒克巴林特正射影像(2015年)"
 
 msgid "Danube flood orthophoto 2013"
-msgstr ""
+msgstr "多瑙河汛期正射影像(2013年)"
 
 msgid "Riverbank of Danube at Budapest, Szentendre and Szigetmonostor"
-msgstr ""
+msgstr "多瑙河在布达佩斯,圣安德烈与西盖特莫诺什托尔的河岸"
 
 msgid "Budapest district XI orthophoto 2015"
-msgstr ""
+msgstr "布达佩斯11区正射影像 (2015年)"
 
 msgid "Budapest district XI orthophoto 2017"
-msgstr ""
+msgstr "布达佩斯11区正射影像 (2017年)"
 
 msgid "Sóskút, Pusztazámor, Tárnok, Diósd orthophoto 2017"
-msgstr ""
+msgstr "绍什库特, 普斯陶扎莫尔, 塔尔诺克和迪欧什德的正射影像(2017年)"
 
 msgid "5 cm resolution bald image of 4 settlement"
-msgstr ""
+msgstr "4个村镇的5厘米分辨率图像"
 
 msgid "openstreetmap.hu orthophotos"
-msgstr ""
+msgstr "openstreetmap.hu 正射影像"
 
 msgid "OpenStreetMap Hungary (hiking routes)"
-msgstr ""
+msgstr "OpenStreetMap 匈牙利 (徒步线路)"
 
 msgid "Hillshade Hungary"
-msgstr ""
+msgstr "匈牙利山体阴影"
 
 msgid "imagico.de OSM images for mapping: Eastern Iceland"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 冰岛东部"
 
 msgid "Missing islets and inaccurate coast (true color)"
-msgstr ""
+msgstr "缺少小岛,海岸线不精确的部分 (真彩色)"
 
 msgid "imagico.de OSM images for mapping: Rann of Kutch"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 库奇兰恩"
 
 msgid ""
 "Land/water distinction difficult to properly map based on Bing/Mapbox images "
 "(false color IR)"
-msgstr ""
+msgstr "基于Bing/Mapbox图像很难正确绘制水陆分界线(假色IR)"
 
 msgid "imagico.de OSM images for mapping: Sudirman Range 2015"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 苏迪曼山脉(2015年)"
 
 msgid ""
 "Older image of the Sudirman Range with no fresh snow showing glacier extent "
 "(true color)"
-msgstr ""
+msgstr "苏迪曼山脉的旧图像,没有新的积雪,展现出了冰川规模(真彩色)"
 
 msgid "imagico.de OSM images for mapping: Southeastern Sulawesi"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 东南苏拉威西岛"
 
 msgid ""
 "Missing islands and coarse coastline due to cloud cover in Bing, lakes could "
 "also use additional detail (true color)"
-msgstr ""
+msgstr "Bing图像由于有云层覆盖,遗漏岛屿且海岸线粗糙。更新的细节可以被用来绘制湖面(真彩色)"
 
 msgid "imagico.de OSM images for mapping: Bakun Reservoir"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 巴贡水库"
 
 msgid "Missing in older pre-2011 images (true color)"
-msgstr ""
+msgstr "在2011年以前的图像中缺少的部分(真彩色)"
 
 msgid "imagico.de OSM images for mapping: Batam"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 巴丹岛"
 
 msgid "Missing Islands in OSM (true color)"
-msgstr ""
+msgstr "在OSM中缺少的岛屿(真彩色)"
 
 msgid "imagico.de OSM images for mapping: Sudirman Range 2016"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 苏迪曼山脉(2016年)"
 
 msgid ""
 "Cloud free image of the Sudirman Range but with fresh snow (true color)"
-msgstr ""
+msgstr "苏迪曼群岛的无云图像,但有新的积雪(真彩色)"
 
 msgid "Ireland British War Office 1:25k GSGS 3906"
-msgstr ""
+msgstr "爱尔兰英国战争办公室 1:25k GSGS 3906"
 
 msgid "Ireland British War Office One-Inch 1941-43 GSGS 4136"
-msgstr ""
+msgstr "爱尔兰英国战争办公室 (1英寸)(1941年-1943年) GSGS 4136"
 
 msgid "Ireland Bartholomew Quarter-Inch 1940"
-msgstr ""
+msgstr "爱尔兰巴塞洛缪 (1/4英寸)(1940年)"
 
 msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
-msgstr ""
+msgstr "爱尔兰民间教区和乡镇 - 纪念图集"
 
 msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
-msgstr ""
+msgstr "爱尔兰纪念图集(1901年) L.J. Richards"
 
 msgid "OSMIE Townlands"
-msgstr ""
+msgstr "OSMIE 镇区"
 
 msgid "OSMIE EDs"
-msgstr ""
+msgstr "OSMIE EDs"
 
 msgid "OSMIE Civil Parishes"
-msgstr ""
+msgstr "OSMIE 民间教区"
 
 msgid "OSMIE Baronies"
-msgstr ""
+msgstr "OSMIE 乡镇"
 
 msgid "OSMIE Local Election Areas"
-msgstr ""
+msgstr "OSMIE 地方选区"
 
 msgid "OSMIE Dail Election Areas"
-msgstr ""
+msgstr "OSMIE 众议院选区"
 
 msgid "OSMIE T.ie Land not in Counties"
-msgstr ""
+msgstr "OSMIE 乡镇飞地"
 
 msgid "Israel Hiking"
-msgstr ""
+msgstr "以色列徒步"
 
 msgid "Israel Hiking map"
-msgstr ""
+msgstr "以色列徒步地图"
 
 msgid "Israel MTB"
-msgstr ""
+msgstr "以色列MTB"
 
 msgid "Israel MTB map"
-msgstr ""
+msgstr "以色列MTB地图"
 
 msgid "Lodi - Italy"
-msgstr ""
+msgstr "洛迪 - 意大利"
 
 msgid "Lombardia - Italy (CTR)"
-msgstr ""
+msgstr "伦巴第 - 意大利 (CTR)"
 
 msgid "Lombardia - Italy (CTR DBT)"
-msgstr ""
+msgstr "伦巴第 - 意大利 (CTR DBT)"
 
 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 Orthofoto 2011 (highres)"
-msgstr ""
+msgstr "南蒂罗尔正射影像(2011年)(高分辨率)"
 
 msgid ""
 "Orthophoto of South Tyrol from 2011 with up to 20cm resolution (larger "
 "valleys)"
-msgstr ""
+msgstr "南蒂罗尔2011年的正射影像,最高20厘米分辨率(大型街道)"
 
 msgid "South Tyrol Orthofoto 2014"
-msgstr ""
+msgstr "南蒂罗尔正射影像(2014年)"
 
 msgid "South Tyrol Orthofoto 2014/2015"
-msgstr ""
+msgstr "南蒂罗尔正射影像(2014年/2015年)"
 
 msgid "South Tyrol Topomap"
-msgstr ""
+msgstr "南蒂罗尔地形图"
 
 msgid "Topographical basemap of South Tyrol"
-msgstr ""
+msgstr "南蒂罗尔地形基本图"
 
 msgid "Japan GSI ortho Imagery"
-msgstr ""
+msgstr "日本GSI 正射影像"
 
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 咸海(低水位)"
 
 msgid "Water and wetland extents, dams etc. (true color)"
-msgstr ""
+msgstr "水和湿地规模,大坝等(真彩色)"
 
 msgid "imagico.de OSM images for mapping: Aral Sea (high water level)"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 咸海(高水位)"
 
 msgid ""
 "Water and wetland extents, dams etc. - some remaining winter ice in the "
 "north (true color)"
-msgstr ""
+msgstr "水和湿地规模,大坝等 - 北部有一些残存的冰(真彩色)"
 
 msgid "imagico.de OSM images for mapping: Mount Kenya 2016"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 肯尼亚山(2016年)"
 
 msgid "Up-to-date image for glacier mapping (true color)"
-msgstr ""
+msgstr "最新用于冰川绘制的图像(真彩色)"
 
 msgid "USSR - Latvia"
 msgstr ""
 
 msgid "50cm ortho - Latvia"
-msgstr ""
+msgstr "50厘米正射影像 - 拉脱维亚"
 
 msgid "20cm ortho - Latvia - Coastline"
-msgstr ""
+msgstr "20厘米正射影像 - 拉脱维亚 - 海岸线"
 
 msgid "1.cikla ortofotokarte - Latvia"
-msgstr ""
+msgstr "1.cikla 正射影像 - 拉脱维亚"
 
 msgid "ORT10LT (Lithuania)"
-msgstr ""
+msgstr "ORT10LT (立陶宛)"
 
 msgid "geoportail.lu all layers"
-msgstr ""
+msgstr "geoportail.lu 全图层"
 
 msgid "geoportail.lu ortho 2016"
-msgstr ""
+msgstr "geoportail.lu 正射影像(2016年)"
 
 msgid "Luxembourg Inspire Railway"
-msgstr ""
+msgstr "卢森堡 Inspire 铁路"
 
 msgid "Luxembourg Inspire Roads"
-msgstr ""
+msgstr "卢森堡 Inspire 道路"
 
 msgid "Luxembourg Inspire Water"
-msgstr ""
+msgstr "卢森堡 Inspire 水域"
 
 msgid "Niger Delta Oct 2012 Landsat"
-msgstr ""
+msgstr "尼日尔三角洲(2012年10月)(Landsat)"
+
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr "INEGI 墨西哥数字地图 (WMS)"
 
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
-msgstr ""
+msgstr "PDOK 航拍图像 (Beeldmateriaal.nl)(25厘米)"
 
 msgid ""
 "Nationwide data set 25cm resolution color aerial imagery of the most recent "
 "year."
-msgstr ""
+msgstr "全国25厘米分辨率数据,最近几年的彩色航拍图像。"
 
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm (WMTS)"
-msgstr ""
+msgstr "PDOK航拍图像 (Beeldmateriaal.nl)(25厘米)(WMTS)"
 
 msgid "LINZ NZ Aerial Imagery"
-msgstr ""
+msgstr "LINZ NZ 航拍图像"
 
 msgid "LINZ NZ Topo50 Gridless Maps"
-msgstr ""
+msgstr "LINZ NZ Topo50 无网格地图"
 
 msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
-msgstr ""
+msgstr "斯瓦尔巴特 - 正射影像(2009年/2011年) EPSG:25833"
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 斯瓦尔巴特群岛(拼贴)"
 
 msgid "Sentinel-2 mosaic of Svalbard (true color)"
-msgstr ""
+msgstr "Sentinel-2提供的斯瓦尔巴特拼贴图 (真彩色)"
 
 msgid "imagico.de OSM images for mapping: Western Karakoram"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 喀喇昆仑山脉西部"
 
 msgid ""
 "Represents approximately minimum snow cover so can be well used for glacier "
 "mapping (true color)"
-msgstr ""
+msgstr "显示几乎最少的积雪,所以可以很好地用于冰川绘制(真彩色)"
 
 msgid "Gaza Strip - Pléiades - 2014/07/06"
-msgstr ""
+msgstr "加沙地带(Pléiades)(2014/07/06)"
 
 msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
-msgstr ""
+msgstr "加沙地带(Pléiades)(2014/07/06)(NIR)"
 
 msgid "imagico.de OSM images for mapping: Panama Canal - Pacific side"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 巴拿马运河-太平洋侧"
 
 msgid ""
 "New locks with less clouds than in the Sentinel-2 image - make sure to check "
 "image alignment (true color)"
-msgstr ""
+msgstr "新的水闸,较Sentinel-2图像中云量少 - 记得检查图像偏移(真彩色)"
 
 msgid "imagico.de OSM images for mapping: Panama Canal"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 巴拿马运河"
 
 msgid "Images of the new locks (but partly cloudy) (true color)"
-msgstr ""
+msgstr "新水闸的图像(但部分多云)(真彩色)"
 
 msgid "imagico.de OSM images for mapping: Vanatinai"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 塔古拉岛"
 
 msgid "Coarse coastline due to cloud cover in Bing/Mapbox (true color)"
-msgstr ""
+msgstr "Bing/Mapbox图像由于云层覆盖,海岸线较粗糙(真彩色)"
 
 msgid "imagico.de OSM images for mapping: New Ireland"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 新爱尔兰"
 
 msgid "Many missing islands in OSM (mostly mapped meanwhile) (true color)"
-msgstr ""
+msgstr "许多在OSM中遗漏的小岛(大部分已绘制)(真彩色)"
 
 msgid "imagico.de OSM images for mapping: Coropuna"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 科罗普纳峰"
 
 msgid ""
 "imagico.de OSM images for mapping: Willkanuta Mountains and Quelccaya Ice Cap"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 韦尔卡努塔山脉和奎尔卡亚冰盖"
 
 msgid "Poor and outdated imagery in other sources (true color)"
-msgstr ""
+msgstr "其他来源的图像过时且质量较差(真彩色)"
 
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
-msgstr ""
+msgstr "邦阿西楠/布拉干 (菲律宾高分辨率)"
 
 msgid "Geoportal 2: Ortofotomapa (aerial image)"
-msgstr ""
+msgstr "Geoportal 2: 航拍图像"
 
 msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
-msgstr ""
+msgstr "Geoportal 2: 航拍图像 WMTS"
 
 msgid "Geoportal 2: PRNG (geo names)"
-msgstr ""
+msgstr "Geoportal 2: PRNG (地理名称)"
 
 msgid "Geoportal 2: ISOK hillshade"
-msgstr ""
+msgstr "Geoportal 2: ISOK 山体阴影"
 
 msgid "Będzin: Ortofotomapa 2013 (aerial image)"
-msgstr ""
+msgstr "本津: 航拍图像 (2013年)"
 
 msgid "Będzin: Budynki (buildings)"
-msgstr ""
+msgstr "本津: 建筑"
 
 msgid "Bytom: Ortofotomapa 2012 (aerial image)"
-msgstr ""
+msgstr "比托姆: 航拍图像(2012年)"
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
-msgstr ""
+msgstr "比托姆: 航拍图像(2014年)"
 
 msgid "Bytom: Budynki (buildings)"
-msgstr ""
+msgstr "比托姆: 建筑"
 
 msgid "Chorzów: Budynki (buildings)"
-msgstr ""
+msgstr "霍茹夫: 建筑"
 
 msgid "Częstochowa: Budynki (buildings)"
-msgstr ""
+msgstr "琴斯托霍瓦: 建筑"
 
 msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
-msgstr ""
+msgstr "琴斯托霍瓦: 航拍图像(2011年)"
 
 msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
-msgstr ""
+msgstr "琴斯托霍瓦: 航拍图像(2013年)"
 
 msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
-msgstr ""
+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 ""
+msgstr "卡托维兹: 建筑"
 
 msgid "Łódź: Budynki (buildings)"
-msgstr ""
+msgstr "罗兹: 建筑"
 
 msgid "Łódź: Ortofotomapa (aerial image)"
-msgstr ""
+msgstr "罗兹: 航拍图像"
 
 msgid "Powiat dębicki: Budynki (buildings)"
-msgstr ""
+msgstr "德比札郡: 建筑"
 
 msgid "Powiat lubaczowski: Budynki (buildings)"
-msgstr ""
+msgstr "卢巴丘夫郡: 建筑"
 
 msgid "Powiat łańcucki: Budynki (buildings)"
-msgstr ""
+msgstr "万楚特: 建筑"
 
 msgid "Powiat poznański: Budynki (buildings)"
-msgstr ""
+msgstr "波兹南: 建筑"
 
 msgid "Powiat poznański: Ortofotomapa (Aerial image)"
-msgstr ""
+msgstr "波兹南: 航拍图像"
 
 msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
-msgstr ""
+msgstr "罗普奇采-森济舒夫郡: 建筑"
 
 msgid "Powiat rzeszowski: Budynki (buildings)"
-msgstr ""
+msgstr "热舒夫郡: 建筑"
 
 msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
-msgstr ""
+msgstr "热舒夫郡: 航拍图像"
 
 msgid "Powiat stalowowolski: Budynki (buildings)"
-msgstr ""
+msgstr "斯塔洛瓦沃拉郡: 建筑"
 
 msgid "Poznań: Ortofotomapa 2014 (aerial image)"
-msgstr ""
+msgstr "波兹南: 航拍图像(2014年)"
 
 msgid "Przemyśl: Budynki (buildings)"
-msgstr ""
+msgstr "普热梅希尔: 建筑"
 
 msgid "Przemyśl: Ortofotomapa (aerial image)"
-msgstr ""
+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 ""
+msgstr "希隆斯克地区谢米亚诺维采: 建筑"
 
 msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
-msgstr ""
+msgstr "希维托赫洛维采: 航拍图像(2008年)"
 
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
-msgstr ""
+msgstr "希维托赫洛维采: 航拍图像(2009年)"
 
 msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
-msgstr ""
+msgstr "希维托赫洛维采: 航拍图像(2012年)"
 
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
-msgstr ""
+msgstr "扎布热: 航拍图像(2011年)"
 
 msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
-msgstr ""
+msgstr "弗罗茨瓦夫: 航拍图像(2015年)"
 
 msgid "ScanEx IRS"
-msgstr ""
+msgstr "ScanEx IRS"
 
 msgid "ScanEx SPOT"
-msgstr ""
+msgstr "ScanEx SPOT"
 
 msgid "imagico.de OSM images for mapping: Kerch Strait"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 刻赤海峡"
 
 msgid "State of bridge construction in August 2016 (true color)"
-msgstr ""
+msgstr "2016年8月桥梁建设状况(真彩色)"
 
 msgid "imagico.de OSM images for mapping: Pechora Sea Coast"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 伯朝拉海海岸"
 
 msgid "Sentinel-2 image of the Pechora Sea coast in autumn 2016 (true color)"
-msgstr ""
+msgstr "Sentinel-2在2016年秋季拍摄的伯朝拉海沿岸图像(真彩色)"
 
 msgid "imagico.de OSM images for mapping: Ushakov Island August 2016"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 乌沙科夫岛(2016年8月)"
 
 msgid "Up-to-date late summer imagery with few clouds (true color)"
-msgstr ""
+msgstr "最新的夏季下旬图像,少许云量(真彩色)"
 
 msgid "imagico.de OSM images for mapping: Northern Dvina delta at low tide"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 北德维纳河三角洲(低潮)"
 
 msgid "Beaches, tidal flats and other costal forms (true color)"
-msgstr ""
+msgstr "海滩、潮滩和其他形式的海岸(真彩色)"
 
 msgid ""
 "imagico.de OSM images for mapping: Northern and Polar Ural mountains August "
 "2016"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 北部和极地乌拉尔山脉(2016年8月)"
 
 msgid ""
 "Up-to-date late summer imagery with few clouds - caution: not all visible "
 "snow is glaciers (true color)"
-msgstr ""
+msgstr "夏季下旬的最新图像,有少许云层 - 警告:并非所有可见的雪都是冰川(真彩色)"
 
 msgid "imagico.de OSM images for mapping: Vostochny Cosmodrome"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 东方航天发射场"
 
 msgid "Recent image showing newest features (true color)"
-msgstr ""
+msgstr "展现了最新特性的图像(真彩色)"
 
 msgid "Freemap.sk Car"
 msgstr "Freemap.sk 汽车"
@@ -24592,163 +24706,163 @@ msgid "Freemap.sk Ski"
 msgstr "Freemap.sk 滑雪"
 
 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 "City of Cape Town 2013 Aerial"
-msgstr ""
+msgstr "开普敦城市航拍图像(2013年)"
 
 msgid ""
 "OpenStreetMap use only. City of Cape Town Aerial ortho-photography of the "
 "municipal area. 12cm ground sample distance"
-msgstr ""
+msgstr "仅可用于OpenStreetMap。开普敦城市都会区航拍图像。12厘米地面采样距离。"
 
 msgid "City of Cape Town 2015 Aerial"
-msgstr ""
+msgstr "开普敦城市航拍图像(2015年)"
 
 msgid ""
 "OpenStreetMap use only. City of Cape Town Aerial ortho-photography of the "
 "municipal area. 8cm ground sample distance"
-msgstr ""
+msgstr "仅可用于OpenStreetMap。开普敦城市都会区航拍图像。8厘米地面采样距离。"
 
 msgid "South Africa CD:NGI Aerial"
-msgstr ""
+msgstr "南非 CD:NGI 航拍图像"
 
 msgid "imagico.de OSM images for mapping: Leskov Island ASTER"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 列斯科夫岛(ASTER)"
 
 msgid "Missing in other image sources (true color with estimated blue)"
-msgstr ""
+msgstr "其他图像来源中遗漏的部分(真彩色包含预测的蓝色)"
 
 msgid "imagico.de OSM images for mapping: Scott Island"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 斯科特群岛"
 
 msgid "Missing in other image sources (true color)"
-msgstr ""
+msgstr "其他图像来源中遗漏的部分(真彩色)"
 
 msgid "imagico.de OSM images for mapping: Leskov Island Landsat"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 列斯科夫岛(Landsat)"
 
 msgid "imagico.de OSM images for mapping: Clerke Rocks"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 克拉克岩"
 
 msgid "imagico.de OSM images for mapping: Shag Rocks"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 沙格岩"
 
 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 "imagico.de OSM images for mapping: Adams Bridge"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 亚当桥"
 
 msgid "Supplementing incomplete coverage in other sources (true color)"
-msgstr ""
+msgstr "补充其他图像来源中覆盖不完整的部分(真彩色)"
 
 msgid "Kanton Aargau 25cm (AGIS 2011)"
-msgstr ""
+msgstr "阿尔高州(25厘米)(AGIS 2011年)"
 
 msgid "Kanton Aargau 25cm (AGIS 2014)"
-msgstr ""
+msgstr "阿尔高州(25厘米)(AGIS 2014年)"
 
 msgid "Kanton Aargau 25cm (AGIS 2016)"
-msgstr ""
+msgstr "阿尔高州(25厘米)(AGIS 2016年)"
 
 msgid "Kanton Zürich Orthophotos 2014/2015 10cm"
-msgstr ""
+msgstr "苏黎世州航拍图像(2014年/2015年)(10厘米)"
 
 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 "Canton Solothurn latest aerial imagery SOGIS RGB"
-msgstr ""
+msgstr "索洛图恩最新航拍图像 SOGIS RGB"
 
 msgid "Canton Solothurn latest aerial imagery SOGIS Infrared"
-msgstr ""
+msgstr "索洛图恩最新航拍图像 (SOGIS 红外线)"
 
 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 "Stadt Bern 10cm (2016)"
-msgstr ""
+msgstr "伯恩城市 (10厘米)(2016年)"
 
 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厘米/像素)"
 
 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 "Kanton Basel-Stadt 2015"
-msgstr ""
+msgstr "巴塞尔城航拍图像 (2015年)"
 
 msgid "Kanton Basel-Landschaft 10cm (2015)"
-msgstr ""
+msgstr "巴塞尔乡村 (10厘米)(2015年)"
 
 msgid "imagico.de OSM images for mapping: Cental Alps in late September 2016"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 中央阿尔卑斯山脉(2016年9月)"
 
 msgid ""
 "Up-to-date image for glacier mapping - beware of some fresh snow at higher "
 "altitudes (true color)"
-msgstr ""
+msgstr "用于冰川绘制的最新图像 - 请注意高海拔地区的一些新积雪(真彩色)"
 
 msgid "Taiwan e-Map Open Data"
 msgstr "台湾电子地图开放数据"
@@ -24757,221 +24871,225 @@ msgid "Taiwan e-Map Open Data (with Contour Line)"
 msgstr "台湾电子地图开放数据(带等高线)"
 
 msgid "The emap from Taiwan National Land Surveying and Mapping Center"
-msgstr ""
+msgstr "台湾国土测绘中心的电子地图"
 
 msgid "Taiwan Village Boundaries"
 msgstr "台湾村界"
 
 msgid "Taiwan Land-Section Data"
-msgstr ""
+msgstr "台湾地块数据"
 
 msgid "NLSC Open Data WMTS"
-msgstr ""
+msgstr "NLSC 开放数据 WMTS"
 
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 乞力马扎罗山(2016年)"
+
+msgid "Aşgabat (high resolution)"
+msgstr "阿什哈巴德 (高分辨率)"
 
 msgid "MSR Maps Topo"
-msgstr ""
+msgstr "MSR Maps 地形"
 
 msgid "MSR Maps Urban"
-msgstr ""
+msgstr "MSR Maps 城区"
 
 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 (2015)"
-msgstr ""
+msgstr "TIGER 道路 (较新但未校准)(2015年)"
 
 msgid ""
 "At zoom level 16+, public domain map data from the US Census. At lower "
 "zooms, only changes since 2006 minus changes already incorporated into "
 "OpenStreetMap"
 msgstr ""
+"在缩放级别16以上为来自美国人口普查的公共域图数据。在较低的缩放内,只有自2006年以来的变动并且除去了已经并入OpenStreetMap的那些更改。"
 
 msgid "MassGIS L3 Parcels"
-msgstr ""
+msgstr "MassGIS L3 区块"
 
 msgid "NC Latest Orthoimagery"
-msgstr ""
+msgstr "NC 最新正射影像"
 
 msgid ""
 "Most recent true color imagery for the state of North Carolina. The imagery "
 "has a pixel resolution of 6 inches and is comprised of imagery flown in "
 "2010, 2012, 2013, and 2014"
-msgstr ""
+msgstr "最新的南卡罗来纳州真彩色图像。包含2010年, 2012年, 2013年和2014年的图像,像素分辨率为6英寸。"
 
 msgid "NC Combined Orthoimagery"
-msgstr ""
+msgstr "NC 混合正射影像"
 
 msgid ""
 "This service represents orthoimagery collected from 1995-2013 for the state "
 "of North Carolina. The coverage area and pixel resolution varies for each "
 "year."
-msgstr ""
+msgstr "该服务展现了从1995年至2013年从北卡罗来纳州收集的正射影像。覆盖区域和分辨率随年份不同而有所区别。"
 
 msgid "U.S. Forest Service roads"
-msgstr ""
+msgstr "美国林业道路"
 
 msgid "imagico.de OSM images for mapping: Alaska Range"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 阿拉斯加山脉"
 
 msgid ""
 "Recent summer image of the Alaska Range for mapping natural features (true "
 "color)"
-msgstr ""
+msgstr "近期的阿拉斯加夏季图像,可用于绘制自然要素(真彩色)"
 
 msgid "imagico.de OSM images for mapping: Bogoslof Island"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 博戈斯洛夫岛"
 
 msgid "Recent image from after the eruption (true color)"
-msgstr ""
+msgstr "在火山喷发后的近期图像(真彩色)"
 
 msgid "imagico.de OSM images for mapping: Cook Inlet"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 库克湾"
 
 msgid "Tidal flats and glaciers in surrounding mountains (true color)"
-msgstr ""
+msgstr "被山脉环绕的潮汐平原和冰川(真彩色)"
 
 msgid "NJ 2015 Aerial Imagery (Infrared)"
-msgstr ""
+msgstr "NJ 航拍图像(2015年)(红外线)"
 
 msgid ""
 "Digital orthophotography of New Jersey, Near Infrared, 1 foot resolution"
-msgstr ""
+msgstr "新泽西州的数字正射影像, 近红外, 1英尺分辨率"
 
 msgid "NJ 2015 Aerial Imagery (Natural Color)"
-msgstr ""
+msgstr "NJ 航拍图像(2015年)(自然色)"
 
 msgid ""
 "Digital orthophotography of New Jersey, Natural Color, 1 foot resolution"
-msgstr ""
+msgstr "新泽西州的数字正射影像, 自然色, 1英尺分辨率"
 
 msgid "San Juan Metro Area: 2013 USACE Orthophotos"
-msgstr ""
+msgstr "圣胡安都会区: USACE正射影像(2013年)"
 
 msgid "WA 2013 aerial imagery for San Juan County"
-msgstr ""
+msgstr "WA 圣胡安航拍图像(2013年)"
 
 msgid ""
 "Public domain aerial imagery taken in May/June 2013 from San Juan County, "
 "WA. Resolution is 9 inch."
-msgstr ""
+msgstr "摄于2013年5月/6月,华盛顿州圣胡安的公共领域航拍图像。分辨率为9英寸。"
 
 msgid "WA 2016 aerial imagery for San Juan County"
-msgstr ""
+msgstr "WA 圣胡安航拍图像(2016年)"
 
 msgid ""
 "Public domain aerial imagery taken in May, June, and July from San Juan "
 "County, WA. Resolution is 6 inch countywide."
-msgstr ""
+msgstr "摄于5月,6月,7月,华盛顿州圣胡安的公共领域航拍图像。分辨率为6英寸。"
 
 msgid "WA Vector Streetmap for San Juan County"
-msgstr ""
+msgstr "WA 圣胡安矢量街图"
 
 msgid ""
 "Public domain street and address data from the San Juan County, WA. Updated "
 "at least quarterly."
-msgstr ""
+msgstr "华盛顿州圣胡安的公共领域街道和地址数据。至少每季度更新一次。"
 
 msgid "Texas Orthophoto"
-msgstr ""
+msgstr "德克萨斯州正射影像"
 
 msgid "Philadelphia 2015 Imagery"
-msgstr ""
+msgstr "费城(2015年)"
 
 msgid "MD Latest 6 Inch Aerial Imagery"
-msgstr ""
+msgstr "马里兰州最新航拍图像(6英寸)"
 
 msgid "Six Inch resolution aerial imagery for the State of Maryland"
-msgstr ""
+msgstr "马里兰州的6英寸分辨率航拍图像"
 
 msgid "MD Three Inch Aerial Imagery"
-msgstr ""
+msgstr "马里兰州航拍图像(3英寸)"
 
 msgid ""
 "Three Inch Resolution Imagery for the cities of Rockville, Gaithersburg and "
 "Annapolis"
-msgstr ""
+msgstr "洛克维尔,盖瑟斯堡和安纳波利斯的3英寸分辨率图像"
 
 msgid "MD Transportation Basemap"
-msgstr ""
+msgstr "马里兰州运输基本图"
 
 msgid ""
 "Maryland State Highway Administration road features and additional Maryland "
 "focused landmarks"
-msgstr ""
+msgstr "马里兰州公路管理局提供的道路特征,和额外的马里兰州重点地标"
 
 msgid "Delaware 2012 Orthophotography"
-msgstr ""
+msgstr "德拉瓦州正射影像(2012年)"
 
 msgid ""
 "This data set consists of 0.3-meter pixel resolution (approximately 1-foot), "
 "4-band true color and near infrared (R, G, B, IR) orthoimages covering New "
 "Castle, Kent and Sussex Counties in Delaware."
-msgstr ""
+msgstr "此数据包括了0.3米像素分辨率,4信道真彩色和近红外(R, G, B, IR)的图像。覆盖了德拉瓦州的纽卡斯尔,肯特和苏塞克斯。"
 
 msgid "imagico.de OSM images for mapping: Rwenzori Mountains"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 鲁文佐里山脉"
 
 msgid ""
 "Recent image of most of the remaining Rwenzori Mountains glaciers (false "
 "color IR)"
-msgstr ""
+msgstr "大部分剩余的鲁文佐里山脉冰川的近期图像(假色 IR)"
 
 msgid "imagico.de OSM images for mapping: Rwenzori Mountains 2016"
-msgstr ""
+msgstr "imagico.de 授权绘制的OSM图像: 鲁文佐里山脉(2016年)"
 
 msgid "Ukraine - Orthophotomaps 2012"
-msgstr ""
+msgstr "乌克兰 - 正射影像(2012年)"
 
 msgid "Works only from within Ukraine or with an Ukrainian proxy server."
-msgstr ""
+msgstr "只能在乌克兰或借由乌克兰的代理服务器使用。"
 
 msgid "Ukraine - Kyiv 2014 (DZK)"
-msgstr ""
+msgstr "乌克兰 - 基辅 (2014年)(DZK)"
 
 msgid "7th Series (OS7)"
-msgstr ""
+msgstr "7th Series (OS7)"
 
 msgid "OS New Popular Edition historic"
 msgstr ""
 
 msgid "OS OpenData StreetView"
-msgstr ""
+msgstr "OS OpenData 街道级"
 
 msgid "OS OpenData Locator"
-msgstr ""
+msgstr "OS OpenData 定位"
 
 msgid "Surrey Air Survey"
-msgstr ""
+msgstr "Surrey 天巡"
 
 msgid "NLS - OS 6-inch Scotland 1842-82"
-msgstr ""
+msgstr "NLS - OS 苏格兰(6英寸)(1842年-1882年)"
 
 msgid "NLS - OS 1:25k 1st Series 1937-61"
-msgstr ""
+msgstr "NLS - OS 1:25k 1st Series (1937年-1961年)"
 
 msgid "NLS - OS 1-inch 7th Series 1955-61"
-msgstr ""
+msgstr "NLS - OS 7th Series (1英寸)(1955-1961年)"
 
 msgid "NLS - OS 25-inch (Scotland) 1892-1905"
-msgstr ""
+msgstr "NLS - OS 苏格兰(25英寸)(1892年-1905年)"
 
 msgid "OS 1:25k historic (OSM-Limited)"
-msgstr ""
+msgstr "OS 1:25k 历史 (OSM限定)"
 
 msgid "OS Scottish Popular historic"
 msgstr "OS 苏格兰著名历史景点"
 
 msgid "NLS - Bartholomew Half Inch, 1897-1907"
-msgstr ""
+msgstr "NLS - 巴塞洛缪 (1/2英寸)(1897-1907)"
 
 msgid "OS Town Plans, Aberdeen 1866-1867 (NLS)"
 msgstr "OS Town Plans,阿伯丁(Aberdeen) 1866-1867 (NLS)"
@@ -24979,14 +25097,14 @@ msgstr "OS Town Plans,阿伯丁(Aberdeen) 1866-1867 (NLS)"
 msgid ""
 "Detailed town plan of Aberdeen 1866-1867, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的阿伯丁城市规划(1866年-1867年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Airdrie 1858 (NLS)"
 msgstr "OS Town Plans,艾尔德里(Airdrie) 1858 (NLS)"
 
 msgid ""
 "Detailed town plan of Airdrie 1858, courtesy of National Library of Scotland."
-msgstr ""
+msgstr "详细的艾尔德里城市规划(1858年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Alexandria 1859 (NLS)"
 msgstr "OS Town Plans,亚历山大(Alexandria) 1859 (NLS)"
@@ -24994,7 +25112,7 @@ msgstr "OS Town Plans,亚历山大(Alexandria) 1859 (NLS)"
 msgid ""
 "Detailed town plan of Alexandria 1859, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的亚历山大城市规划(1859年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Alloa 1861-1862 (NLS)"
 msgstr "OS Town Plans,阿洛厄(Alloa) 1861-1862 (NLS)"
@@ -25002,14 +25120,14 @@ msgstr "OS Town Plans,阿洛厄(Alloa) 1861-1862 (NLS)"
 msgid ""
 "Detailed town plan of Alloa 1861-1862, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的阿洛厄城市规划(1861年-1862年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Annan 1859 (NLS)"
 msgstr "OS Town Plans,安南(Annan) 1859 (NLS)"
 
 msgid ""
 "Detailed town plan of Annan 1859, courtesy of National Library of Scotland."
-msgstr ""
+msgstr "详细的安南城市规划(1859年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Arbroath 1858 (NLS)"
 msgstr "OS Town Plans,阿布罗斯(Arbroath) 1858 (NLS)"
@@ -25017,14 +25135,14 @@ msgstr "OS Town Plans,阿布罗斯(Arbroath) 1858 (NLS)"
 msgid ""
 "Detailed town plan of Arbroath 1858, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的阿布罗斯城市规划(1858年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Ayr 1855 (NLS)"
 msgstr "OS Town Plans,埃尔(Ayr) 1855 (NLS)"
 
 msgid ""
 "Detailed town plan of Ayr 1855, courtesy of National Library of Scotland."
-msgstr ""
+msgstr "详细的埃尔城市规划(1855年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Berwick-upon-Tweed 1852 (NLS)"
 msgstr "OS Town Plans,特威德河畔贝里克(Berwick-upon-Tweed) 1852 (NLS)"
@@ -25032,14 +25150,14 @@ msgstr "OS Town Plans,特威德河畔贝里克(Berwick-upon-Tweed) 1852 (NLS)"
 msgid ""
 "Detailed town plan of Berwick-upon-Tweed 1852, courtesy of National Library "
 "of Scotland."
-msgstr ""
+msgstr "详细的特威德河畔贝里克城市规划(1852年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Brechin 1862 (NLS)"
 msgstr "OS Town Plans,布里金(Brechin) 1862 (NLS)"
 
 msgid ""
 "Detailed town plan of Brechin 1862, courtesy of National Library of Scotland."
-msgstr ""
+msgstr "详细的布里金城市规划(1862年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Burntisland 1894 (NLS)"
 msgstr "OS Town Plans,本泰兰(Burntisland) 1894 (NLS)"
@@ -25047,7 +25165,7 @@ msgstr "OS Town Plans,本泰兰(Burntisland) 1894 (NLS)"
 msgid ""
 "Detailed town plan of Burntisland 1894, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的本泰兰城市规划(1894年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Campbelton 1865 (NLS)"
 msgstr "OS Town Plans,堪布尔顿(Campbelton) 1865 (NLS)"
@@ -25055,7 +25173,7 @@ msgstr "OS Town Plans,堪布尔顿(Campbelton) 1865 (NLS)"
 msgid ""
 "Detailed town plan of Campbelton 1865, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的坎贝尔顿城市规划(1865年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Coatbridge 1858 (NLS)"
 msgstr "OS Town Plans,科特布里奇(Coatbridge) 1858 (NLS)"
@@ -25063,14 +25181,14 @@ msgstr "OS Town Plans,科特布里奇(Coatbridge) 1858 (NLS)"
 msgid ""
 "Detailed town plan of Coatbridge 1858, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的科特布里奇城市规划(1858年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Cupar 1854 (NLS)"
 msgstr "OS Town Plans,库珀(Cupar) 1854 (NLS)"
 
 msgid ""
 "Detailed town plan of Cupar 1854, courtesy of National Library of Scotland."
-msgstr ""
+msgstr "详细的库珀城市规划(1854年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Cupar 1893-1894 (NLS)"
 msgstr "OS Town Plans,库珀(Cupar) 1893-1894 (NLS)"
@@ -25078,7 +25196,7 @@ msgstr "OS Town Plans,库珀(Cupar) 1893-1894 (NLS)"
 msgid ""
 "Detailed town plan of Cupar 1893-1894, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的科特布里奇城市规划(1893年-1894年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Dalkeith 1852 (NLS)"
 msgstr "OS Town Plans,达尔基斯(Dalkeith) 1852 (NLS)"
@@ -25086,7 +25204,7 @@ msgstr "OS Town Plans,达尔基斯(Dalkeith) 1852 (NLS)"
 msgid ""
 "Detailed town plan of Dalkeith 1852, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的达尔基斯城市规划(1852年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Dalkeith 1893 (NLS)"
 msgstr "OS Town Plans,达尔基斯(Dalkeith) 1893 (NLS)"
@@ -25094,7 +25212,7 @@ msgstr "OS Town Plans,达尔基斯(Dalkeith) 1893 (NLS)"
 msgid ""
 "Detailed town plan of Dalkeith 1893, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的达尔基斯城市规划(1893年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Dumbarton 1859 (NLS)"
 msgstr "OS Town Plans,敦巴顿(Dumbarton) 1859 (NLS)"
@@ -25102,7 +25220,7 @@ msgstr "OS Town Plans,敦巴顿(Dumbarton) 1859 (NLS)"
 msgid ""
 "Detailed town plan of Dumbarton 1859, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的敦巴顿城市规划(1859年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Dumfries 1850 (NLS)"
 msgstr "OS Town Plans,邓弗里斯(Dumfries) 1850 (NLS)"
@@ -25110,7 +25228,7 @@ msgstr "OS Town Plans,邓弗里斯(Dumfries) 1850 (NLS)"
 msgid ""
 "Detailed town plan of Dumfries 1850, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的邓弗里斯城市规划(1850年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Dumfries 1893 (NLS)"
 msgstr "OS Town Plans,邓弗里斯(Dumfries) 1893 (NLS)"
@@ -25118,7 +25236,7 @@ msgstr "OS Town Plans,邓弗里斯(Dumfries) 1893 (NLS)"
 msgid ""
 "Detailed town plan of Dumfries 1893, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的邓弗里斯城市规划(1893年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Dundee 1857-1858 (NLS)"
 msgstr "OS Town Plans,邓迪(Dundee) 1857-1858 (NLS)"
@@ -25126,7 +25244,7 @@ msgstr "OS Town Plans,邓迪(Dundee) 1857-1858 (NLS)"
 msgid ""
 "Detailed town plan of Dundee 1857-1858, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的邓迪城市规划(1857年-1858年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Dundee 1870-1872 (NLS)"
 msgstr "OS Town Plans,邓迪(Dundee) 1870-1872 (NLS)"
@@ -25134,7 +25252,7 @@ msgstr "OS Town Plans,邓迪(Dundee) 1870-1872 (NLS)"
 msgid ""
 "Detailed town plan of Dundee 1870-1872, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的邓迪城市规划(1870年-1872年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Dunfermline 1854 (NLS)"
 msgstr "OS Town Plans,邓弗姆林(Dunfermline) 1854 (NLS)"
@@ -25142,7 +25260,7 @@ msgstr "OS Town Plans,邓弗姆林(Dunfermline) 1854 (NLS)"
 msgid ""
 "Detailed town plan of Dunfermline 1854, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的邓弗姆林城市规划(1854年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Dunfermline 1894 (NLS)"
 msgstr "OS Town Plans,邓弗姆林(Dunfermline) 1894 (NLS)"
@@ -25150,7 +25268,7 @@ msgstr "OS Town Plans,邓弗姆林(Dunfermline) 1894 (NLS)"
 msgid ""
 "Detailed town plan of Dunfermline 1894, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的邓弗姆林城市规划(1894年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Edinburgh 1849-1851 (NLS)"
 msgstr "OS Town Plans,爱丁堡(Edinburgh) 1849-1851 (NLS)"
@@ -25158,7 +25276,7 @@ msgstr "OS Town Plans,爱丁堡(Edinburgh) 1849-1851 (NLS)"
 msgid ""
 "Detailed town plan of Edinburgh 1849-1851, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的爱丁堡城市规划(1849年-1851年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Edinburgh 1876-1877 (NLS)"
 msgstr "OS Town Plans,爱丁堡(Edinburgh) 1876-1877 (NLS)"
@@ -25166,7 +25284,7 @@ msgstr "OS Town Plans,爱丁堡(Edinburgh) 1876-1877 (NLS)"
 msgid ""
 "Detailed town plan of Edinburgh 1876-1877, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的爱丁堡城市规划(1876年-1877年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Edinburgh 1893-1894 (NLS)"
 msgstr "OS Town Plans,爱丁堡(Edinburgh) 1893-1894 (NLS)"
@@ -25174,22 +25292,22 @@ msgstr "OS Town Plans,爱丁堡(Edinburgh) 1893-1894 (NLS)"
 msgid ""
 "Detailed town plan of Edinburgh 1893-1894, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的爱丁堡城市规划(1893年-1894年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Edinburgh 1940s-1960s (NLS)"
-msgstr ""
+msgstr "OS 城市规划, 爱丁堡 (1940年代-1960年代)(NLS)"
 
 msgid ""
 "Detailed town plan of Edinburgh 1940s-1960s, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的爱丁堡城市规划(1940年代-1960年代),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Elgin 1868 (NLS)"
 msgstr "OS Town Plans,埃尔金(Elgin) 1868 (NLS)"
 
 msgid ""
 "Detailed town plan of Elgin 1868, courtesy of National Library of Scotland."
-msgstr ""
+msgstr "详细的埃尔金城市规划(1868年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Falkirk 1858-1859 (NLS)"
 msgstr "OS Town Plans,福尔柯克(Falkirk) 1858-1859 (NLS)"
@@ -25197,7 +25315,7 @@ msgstr "OS Town Plans,福尔柯克(Falkirk) 1858-1859 (NLS)"
 msgid ""
 "Detailed town plan of Falkirk 1858-1859, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的福尔柯克城市规划(1858年-1859年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Forfar 1860-1861 (NLS)"
 msgstr "OS Town Plans,福弗尔(Forfar) 1860-1861 (NLS)"
@@ -25205,14 +25323,14 @@ msgstr "OS Town Plans,福弗尔(Forfar) 1860-1861 (NLS)"
 msgid ""
 "Detailed town plan of Forfar 1860-1861, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的福弗尔城市规划(1860年-1861年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Forres 1868 (NLS)"
 msgstr "OS Town Plans,福里斯(Forres) 1868 (NLS)"
 
 msgid ""
 "Detailed town plan of Forres 1868, courtesy of National Library of Scotland."
-msgstr ""
+msgstr "详细的福里斯城市规划(1868年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Galashiels 1858 (NLS)"
 msgstr "OS Town Plans,加拉希尔斯(Galashiels) 1858 (NLS)"
@@ -25220,14 +25338,14 @@ msgstr "OS Town Plans,加拉希尔斯(Galashiels) 1858 (NLS)"
 msgid ""
 "Detailed town plan of Galashiels 1858, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的加拉希尔斯城市规划(1858年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Girvan 1857 (NLS)"
 msgstr "OS Town Plans,格文(Girvan) 1857 (NLS)"
 
 msgid ""
 "Detailed town plan of Girvan 1857, courtesy of National Library of Scotland."
-msgstr ""
+msgstr "详细的格文城市规划(1857年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Glasgow 1857-1858 (NLS)"
 msgstr "OS Town Plans,格拉斯哥(Glasgow) 1857-1858 (NLS)"
@@ -25235,7 +25353,7 @@ msgstr "OS Town Plans,格拉斯哥(Glasgow) 1857-1858 (NLS)"
 msgid ""
 "Detailed town plan of Glasgow 1857-1858, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的格拉斯哥城市规划(1857年-1858年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Glasgow 1892-1894 (NLS)"
 msgstr "OS Town Plans,格拉斯哥(Glasgow) 1892-1894 (NLS)"
@@ -25243,7 +25361,7 @@ msgstr "OS Town Plans,格拉斯哥(Glasgow) 1892-1894 (NLS)"
 msgid ""
 "Detailed town plan of Glasgow 1892-1894, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的格拉斯哥城市规划(1892年-1894年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Greenock 1857 (NLS)"
 msgstr "OS Town Plans,格里诺克(Greenock) 1857 (NLS)"
@@ -25251,7 +25369,7 @@ msgstr "OS Town Plans,格里诺克(Greenock) 1857 (NLS)"
 msgid ""
 "Detailed town plan of Greenock 1857, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的格林诺克城市规划(1857年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Haddington 1853 (NLS)"
 msgstr "OS Town Plans,哈丁顿(Haddington) 1853 (NLS)"
@@ -25259,7 +25377,7 @@ msgstr "OS Town Plans,哈丁顿(Haddington) 1853 (NLS)"
 msgid ""
 "Detailed town plan of Haddington 1853, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的哈丁顿城市规划(1853年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Haddington 1893 (NLS)"
 msgstr "OS Town Plans,哈丁顿(Haddington) 1893 (NLS)"
@@ -25267,7 +25385,7 @@ msgstr "OS Town Plans,哈丁顿(Haddington) 1893 (NLS)"
 msgid ""
 "Detailed town plan of Haddington 1893, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的哈丁顿城市规划(1893年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Hamilton 1858 (NLS)"
 msgstr "OS Town Plans,汉密尔顿(Hamilton) 1858 (NLS)"
@@ -25275,7 +25393,7 @@ msgstr "OS Town Plans,汉密尔顿(Hamilton) 1858 (NLS)"
 msgid ""
 "Detailed town plan of Hamilton 1858, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的汉密尔顿城市规划(1858年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Hawick 1857-1858 (NLS)"
 msgstr "OS Town Plans,霍伊克(Hawick) 1857-1858 (NLS)"
@@ -25283,7 +25401,7 @@ msgstr "OS Town Plans,霍伊克(Hawick) 1857-1858 (NLS)"
 msgid ""
 "Detailed town plan of Hawick 1857-1858, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的霍伊克城市规划(1857年-1858年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Inverness 1867-1868 (NLS)"
 msgstr "OS Town Plans,因弗内斯(Inverness) 1867-1868 (NLS)"
@@ -25291,14 +25409,14 @@ msgstr "OS Town Plans,因弗内斯(Inverness) 1867-1868 (NLS)"
 msgid ""
 "Detailed town plan of Inverness 1867-1868, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的因弗内斯城市规划(1867年-1868年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Irvine 1859 (NLS)"
 msgstr "OS Town Plans,尔湾(Irvine) 1859 (NLS)"
 
 msgid ""
 "Detailed town plan of Irvine 1859, courtesy of National Library of Scotland."
-msgstr ""
+msgstr "详细的埃尔文城市规划(1859年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Jedburgh 1858 (NLS)"
 msgstr "OS Town Plans,杰德堡(Jedburgh) 1858 (NLS)"
@@ -25306,14 +25424,14 @@ msgstr "OS Town Plans,杰德堡(Jedburgh) 1858 (NLS)"
 msgid ""
 "Detailed town plan of Jedburgh 1858, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的杰德堡城市规划(1858年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Kelso 1857 (NLS)"
 msgstr "OS Town Plans,凯尔索(Kelso) 1857 (NLS)"
 
 msgid ""
 "Detailed town plan of Kelso 1857, courtesy of National Library of Scotland."
-msgstr ""
+msgstr "详细的凯尔索城市规划(1857年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Kilmarnock 1857-1859 (NLS)"
 msgstr "OS Town Plans,基尔马诺克(Kilmarnock) 1857-1859 (NLS)"
@@ -25321,7 +25439,7 @@ msgstr "OS Town Plans,基尔马诺克(Kilmarnock) 1857-1859 (NLS)"
 msgid ""
 "Detailed town plan of Kilmarnock 1857-1859, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的基尔马诺克城市规划(1857年-1859年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Kirkcaldy 1855 (NLS)"
 msgstr "OS Town Plans,柯科迪(Kirkcaldy) 1855 (NLS)"
@@ -25329,7 +25447,7 @@ msgstr "OS Town Plans,柯科迪(Kirkcaldy) 1855 (NLS)"
 msgid ""
 "Detailed town plan of Kirkcaldy 1855, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的柯科迪城市规划(1855年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Kirkcaldy 1894 (NLS)"
 msgstr "OS Town Plans,柯科迪(Kirkcaldy) 1894 (NLS)"
@@ -25337,7 +25455,7 @@ msgstr "OS Town Plans,柯科迪(Kirkcaldy) 1894 (NLS)"
 msgid ""
 "Detailed town plan of Kirkcaldy 1894, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的柯科迪城市规划(1894年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Kirkcudbright 1850 (NLS)"
 msgstr "OS Town Plans,柯库布里(Kirkcudbright) 1850 (NLS)"
@@ -25345,7 +25463,7 @@ msgstr "OS Town Plans,柯库布里(Kirkcudbright) 1850 (NLS)"
 msgid ""
 "Detailed town plan of Kirkcudbright 1850, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的柯库布里城市规划(1850年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Kirkcudbright 1893 (NLS)"
 msgstr "OS Town Plans,柯库布里(Kirkcudbright) 1893 (NLS)"
@@ -25353,7 +25471,7 @@ msgstr "OS Town Plans,柯库布里(Kirkcudbright) 1893 (NLS)"
 msgid ""
 "Detailed town plan of Kirkcudbright 1893, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的柯库布里城市规划(1893年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Kirkintilloch 1859 (NLS)"
 msgstr "OS Town Plans,柯金蒂洛赫(Kirkintilloch) 1859 (NLS)"
@@ -25361,7 +25479,7 @@ msgstr "OS Town Plans,柯金蒂洛赫(Kirkintilloch) 1859 (NLS)"
 msgid ""
 "Detailed town plan of Kirkintilloch 1859, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的柯金蒂洛赫城市规划(1859年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Kirriemuir 1861 (NLS)"
 msgstr "OS Town Plans,基里缪尔(Kirriemuir) 1861 (NLS)"
@@ -25369,14 +25487,14 @@ msgstr "OS Town Plans,基里缪尔(Kirriemuir) 1861 (NLS)"
 msgid ""
 "Detailed town plan of Kirriemuir 1861, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的基里缪尔城市规划(1861年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Lanark 1858 (NLS)"
 msgstr "OS Town Plans,拉纳克(Lanark) 1858 (NLS)"
 
 msgid ""
 "Detailed town plan of Lanark 1858, courtesy of National Library of Scotland."
-msgstr ""
+msgstr "详细的拉纳克城市规划(1858年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Linlithgow 1856 (NLS)"
 msgstr "OS Town Plans,林利斯戈(Linlithgow) 1856 (NLS)"
@@ -25384,10 +25502,10 @@ msgstr "OS Town Plans,林利斯戈(Linlithgow) 1856 (NLS)"
 msgid ""
 "Detailed town plan of Linlithgow 1856, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的林利斯戈城市规划(1856年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Mayole 1856-1857 (NLS)"
-msgstr ""
+msgstr "OS 城市规划, Mayole (1856年-1857年)(NLS)"
 
 msgid ""
 "Detailed town plan of Mayole 1856-1857, courtesy of National Library of "
@@ -25400,7 +25518,7 @@ msgstr "OS Town Plans,蒙特罗斯(Montrose) 1861-1862 (NLS)"
 msgid ""
 "Detailed town plan of Montrose 1861-1862, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的蒙特罗斯城市规划(1861年-1862年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Musselburgh 1853 (NLS)"
 msgstr "OS Town Plans,马瑟尔堡(Musselburgh) 1853 (NLS)"
@@ -25408,7 +25526,7 @@ msgstr "OS Town Plans,马瑟尔堡(Musselburgh) 1853 (NLS)"
 msgid ""
 "Detailed town plan of Musselburgh 1853, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的马瑟尔堡城市规划(1853年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Musselburgh 1893 (NLS)"
 msgstr "OS Town Plans,马瑟尔堡(Musselburgh) 1893 (NLS)"
@@ -25416,7 +25534,7 @@ msgstr "OS Town Plans,马瑟尔堡(Musselburgh) 1893 (NLS)"
 msgid ""
 "Detailed town plan of Musselburgh 1893, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的马瑟尔堡城市规划(1893年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Nairn 1867-1868 (NLS)"
 msgstr "OS Town Plans,奈恩(Nairn) 1867-1868 (NLS)"
@@ -25424,7 +25542,7 @@ msgstr "OS Town Plans,奈恩(Nairn) 1867-1868 (NLS)"
 msgid ""
 "Detailed town plan of Nairn 1867-1868, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的奈恩城市规划(1867年-1868年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Oban 1867-1868 (NLS)"
 msgstr "OS Town Plans,奥本(Oban) 1867-1868 (NLS)"
@@ -25432,28 +25550,28 @@ msgstr "OS Town Plans,奥本(Oban) 1867-1868 (NLS)"
 msgid ""
 "Detailed town plan of Oban 1867-1868, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的奥本城市规划(1867年-1868年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Paisley 1858 (NLS)"
 msgstr "OS Town Plans,佩斯利(Paisley) 1858 (NLS)"
 
 msgid ""
 "Detailed town plan of Paisley 1858, courtesy of National Library of Scotland."
-msgstr ""
+msgstr "详细的佩斯利城市规划(1858年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Peebles 1856 (NLS)"
 msgstr "OS Town Plans,皮布尔斯(Peebles) 1856 (NLS)"
 
 msgid ""
 "Detailed town plan of Peebles 1856, courtesy of National Library of Scotland."
-msgstr ""
+msgstr "详细的皮布尔斯城市规划(1856年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Perth 1860 (NLS)"
 msgstr "OS Town Plans,珀斯(Perth) 1860 (NLS)"
 
 msgid ""
 "Detailed town plan of Perth 1860, courtesy of National Library of Scotland."
-msgstr ""
+msgstr "详细的珀斯城市规划(1860年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Peterhead 1868 (NLS)"
 msgstr "OS Town Plans,彼得黑德(Peterhead) 1868 (NLS)"
@@ -25461,7 +25579,7 @@ msgstr "OS Town Plans,彼得黑德(Peterhead) 1868 (NLS)"
 msgid ""
 "Detailed town plan of Peterhead 1868, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的彼得黑德城市规划(1868年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Port Glasgow 1856-1857 (NLS)"
 msgstr "OS Town Plans,格拉斯哥港(Port Glasgow) 1856-1857 (NLS)"
@@ -25469,7 +25587,7 @@ msgstr "OS Town Plans,格拉斯哥港(Port Glasgow) 1856-1857 (NLS)"
 msgid ""
 "Detailed town plan of Port Glasgow 1856-1857, courtesy of National Library "
 "of Scotland."
-msgstr ""
+msgstr "详细的格拉斯哥港城市规划(1856年-1857年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Portobello 1893-1894 (NLS)"
 msgstr "OS Town Plans,波托贝洛(Portobello) 1893-1894 (NLS)"
@@ -25477,7 +25595,7 @@ msgstr "OS Town Plans,波托贝洛(Portobello) 1893-1894 (NLS)"
 msgid ""
 "Detailed town plan of Portobello 1893-1894, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的波托贝洛城市规划(1893年-1894年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Rothesay 1862-1863 (NLS)"
 msgstr "OS Town Plans,罗斯西(Rothesay) 1862-1863 (NLS)"
@@ -25485,14 +25603,14 @@ msgstr "OS Town Plans,罗斯西(Rothesay) 1862-1863 (NLS)"
 msgid ""
 "Detailed town plan of Rothesay 1862-1863, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的罗斯西城市规划(1862年-1863年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Selkirk 1865 (NLS)"
 msgstr "OS Town Plans,塞尔扣克(Selkirk) 1865 (NLS)"
 
 msgid ""
 "Detailed town plan of Selkirk 1865, courtesy of National Library of Scotland."
-msgstr ""
+msgstr "详细的塞尔扣克城市规划(1865年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, St Andrews 1854 (NLS)"
 msgstr "OS Town Plans,圣安德鲁斯(St Andrews) 1854 (NLS)"
@@ -25500,7 +25618,7 @@ msgstr "OS Town Plans,圣安德鲁斯(St Andrews) 1854 (NLS)"
 msgid ""
 "Detailed town plan of St Andrews 1854, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的圣安德鲁斯城市规划(1854年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, St Andrews 1893 (NLS)"
 msgstr "OS Town Plans,圣安德鲁斯(St Andrews) 1893 (NLS)"
@@ -25508,7 +25626,7 @@ msgstr "OS Town Plans,圣安德鲁斯(St Andrews) 1893 (NLS)"
 msgid ""
 "Detailed town plan of St Andrews 1893, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的圣安德鲁斯城市规划(1893年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Stirling 1858 (NLS)"
 msgstr "OS Town Plans,斯特林(Stirling) 1858 (NLS)"
@@ -25516,7 +25634,7 @@ msgstr "OS Town Plans,斯特林(Stirling) 1858 (NLS)"
 msgid ""
 "Detailed town plan of Stirling 1858, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的斯特林城市规划(1858年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Stonehaven 1864 (NLS)"
 msgstr "OS Town Plans,斯通黑文(Stonehaven) 1864 (NLS)"
@@ -25524,7 +25642,7 @@ msgstr "OS Town Plans,斯通黑文(Stonehaven) 1864 (NLS)"
 msgid ""
 "Detailed town plan of Stonehaven 1864, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的斯通黑文城市规划(1864年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Stranraer 1847 (NLS)"
 msgstr "OS Town Plans,斯特兰拉尔(Stranraer) 1847 (NLS)"
@@ -25532,7 +25650,7 @@ msgstr "OS Town Plans,斯特兰拉尔(Stranraer) 1847 (NLS)"
 msgid ""
 "Detailed town plan of Stranraer 1847, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的斯特兰拉尔城市规划(1847年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Stranraer 1863-1877 (NLS)"
 msgstr "OS Town Plans,斯特兰拉尔(Stranraer) 1863-1877 (NLS)"
@@ -25540,7 +25658,7 @@ msgstr "OS Town Plans,斯特兰拉尔(Stranraer) 1863-1877 (NLS)"
 msgid ""
 "Detailed town plan of Stranraer 1863-1877, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的斯特兰拉尔城市规划(1863年-1877年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Stranraer 1893 (NLS)"
 msgstr "OS Town Plans,斯特兰拉尔(Stranraer) 1893 (NLS)"
@@ -25548,7 +25666,7 @@ msgstr "OS Town Plans,斯特兰拉尔(Stranraer) 1893 (NLS)"
 msgid ""
 "Detailed town plan of Stranraer 1893, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的斯特兰拉尔城市规划(1893年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Strathaven 1858 (NLS)"
 msgstr "OS Town Plans,斯特雷文(Strathaven) 1858 (NLS)"
@@ -25556,34 +25674,34 @@ msgstr "OS Town Plans,斯特雷文(Strathaven) 1858 (NLS)"
 msgid ""
 "Detailed town plan of Strathaven 1858, courtesy of National Library of "
 "Scotland."
-msgstr ""
+msgstr "详细的斯特雷文城市规划(1858年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Wick 1872 (NLS)"
 msgstr "OS Town Plans,维克(Wick) 1872 (NLS)"
 
 msgid ""
 "Detailed town plan of Wick 1872, courtesy of National Library of Scotland."
-msgstr ""
+msgstr "详细的维克城市规划(1872年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Wigtown 1848 (NLS)"
 msgstr "OS Town Plans,威格敦(Wigtown) 1848 (NLS)"
 
 msgid ""
 "Detailed town plan of Wigtown 1848, courtesy of National Library of Scotland."
-msgstr ""
+msgstr "详细的威格敦城市规划(1848年),由苏格兰国家图书馆提供。"
 
 msgid "OS Town Plans, Wigtown 1894 (NLS)"
 msgstr "OS Town Plans,威格敦(Wigtown) 1894 (NLS)"
 
 msgid ""
 "Detailed town plan of Wigtown 1894, courtesy of National Library of Scotland."
-msgstr ""
+msgstr "详细的威格敦城市规划(1894年),由苏格兰国家图书馆提供。"
 
 msgid "Landsat 233055"
 msgstr "Landsat 233055"
 
 msgid "Recent Landsat imagery"
-msgstr ""
+msgstr "最近的Landsat图像"
 
 msgid "Even housenumber in odd address interpolation."
 msgstr "奇地址插值中的偶门牌号。"
@@ -25592,21 +25710,21 @@ msgid "Odd housenumber in even address interpolation."
 msgstr "偶地址插值中的奇门牌号。"
 
 msgid "Way with {0}. Tag each housenumber separately if possible."
-msgstr ""
+msgstr "路径含有{0}。尽可能分开标注每个门牌号码"
 
 msgid ""
 "Object has no {0}, however, it has {1} and {2} whose value looks like a "
 "housenumber."
-msgstr ""
+msgstr "对象没有{0},然而其含有{1}和{2}这样类似门牌号码的值。"
 
 msgid "Same value of {0} and {1}"
-msgstr ""
+msgstr "{0}与{1}值相同"
 
 msgid "{0} without {1}"
 msgstr "{0} 没有 {1}"
 
 msgid "missing tag"
-msgstr ""
+msgstr "标签丢失"
 
 msgid "{0} without {1} or {2}"
 msgstr "{0} 没有 {1} 或 {2}"
@@ -25618,10 +25736,10 @@ msgid "{0} together with {1}"
 msgstr "{0} 带有 {1}"
 
 msgid "suspicious tag combination"
-msgstr ""
+msgstr "可疑的标签组合"
 
 msgid "two objects, one with {0} and one with {1} + {2} + {3}"
-msgstr ""
+msgstr "两个对象,其一含有{0},另一含有{1} + {2} + {3}"
 
 msgid "incomplete object: only {0}"
 msgstr "不完整的对象:只有 {0}"
@@ -25633,131 +25751,131 @@ msgid "{0} together with addr:*"
 msgstr "{0} 带有 addr:*"
 
 msgid "{0} together with {1} and conflicting values"
-msgstr ""
+msgstr "{0}与{1}并存,并且值冲突"
 
 msgid "{0} on suspicious object"
 msgstr "{0} 在可疑对象上"
 
 msgid "natural water used for swimming pool"
-msgstr ""
+msgstr "用于游泳池的天然水"
 
 msgid "sport without physical feature"
-msgstr ""
+msgstr "没有身体特征的运动"
 
 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}, {1} and {2}"
-msgstr ""
+msgstr "{0}、{1}和{2}具有相同值"
 
 msgid "{0} and {1} together with {2} and conflicting values"
-msgstr ""
+msgstr "{0}和{1}及{2}并存,并且值冲突"
 
 msgid "{0} on a relation without {1}"
-msgstr ""
+msgstr "{0}在没有{1}的一个关系上"
 
 msgid ""
 "Long waterway with {0} but without a tag which defines it as tunnel or "
 "underground. Remove {1} or add a tunnel tag if applicable. Also check "
 "crossing bridges and their {1} tags."
-msgstr ""
+msgstr "长的水路含有{0}但没有定义其为隧道或暗流的标签。若合适,去除{1}或添加隧道标签。同时检查越过桥梁及其{1}标签。"
 
 msgid ""
 "Short waterway with {0} but without a tag which defines it as tunnel or "
 "underground. Remove {1} or add a tunnel tag if applicable. Also check "
 "crossing bridges and their {1} tags."
-msgstr ""
+msgstr "短的水路含有{0}但没有定义其为隧道或暗流的标签。若合适,去除{1}或添加隧道标签。同时检查越过桥梁及其{1}标签。"
 
 msgid "{0} together with {1} and {2}. Remove {1} and {2}"
-msgstr ""
+msgstr "{0}以及{1}和{2}并存。去除{1}和{2}"
 
 msgid "Different number of lanes in the keys {0} and {1}"
-msgstr ""
+msgstr "在键{0}和键{1}中含有不同的车道数"
 
 msgid "possibly missing {0} tag"
-msgstr ""
+msgstr "可能缺少{0}标签"
 
 msgid "street with odd number of {0}, but without {1} and {2} or {3}"
-msgstr ""
+msgstr "街道含有奇数的{0},但没有{1}和{2}或{3}"
 
 msgid "{0} is deprecated"
 msgstr "{0} 已过时"
 
 msgid "deprecated tagging"
-msgstr ""
+msgstr "已弃用的标签"
 
 msgid "''{0}'' is meaningless, use more specific tags, e.g. ''{1}''"
-msgstr ""
+msgstr "''{0}'' 无意义,使用更特定的标签,例如''{1}''"
 
 msgid ""
 "''{0}'' does not specify the official mode of transportation, use ''{1}'' "
 "for example"
-msgstr ""
+msgstr "“{0}”无法注明官方的交通运输模式,可以使用“{1}”"
 
 msgid ""
 "{0}={1} is unspecific. Instead of ''{1}'' please give more information about "
 "what exactly should be fixed."
-msgstr ""
+msgstr "{0}={1}不特定。请给出更多关于修复的信息而不是''{1}''"
 
 msgid ""
 "Wrong usage of {0} tag. Remove {1}, because it is clear that the name is "
 "missing even without an additional tag."
-msgstr ""
+msgstr "标签{0}使用错误。去除{1},因为即使没有附加标签,该名称也缺省。"
 
 msgid ""
 "{0} is unspecific. Instead use the key fixme with the information what "
 "exactly should be fixed in the value of fixme."
-msgstr ""
+msgstr "{0}不特定。使用键fixme并在fixme的值中填写有关修复的具体信息。"
 
 msgid "{0} is deprecated. Please use instead a multipolygon."
-msgstr ""
+msgstr "{0}已弃用。请使用多重多边形。"
 
 msgid ""
 "{0} is deprecated. Please specify interval by using opening_hours syntax"
-msgstr ""
+msgstr "{0}已弃用。请使用opening_hours语法指明间隔"
 
 msgid ""
 "{0} is deprecated. Please delete this object and use a private layer instead"
-msgstr ""
+msgstr "{0}已弃用。请删除该对象并使用专用层"
 
 msgid "{0}={1} is unspecific. Please replace ''{1}'' by a specific value."
-msgstr ""
+msgstr "{0}={1}不特定。请用特定值替换“{1}”。"
 
 msgid "{0} should be replaced with {1}"
 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 ""
+msgstr "{0}={1}不特定。请用“left”、“right”或“both”替换“{1}”。"
 
 msgid "Unspecific tag {0}"
 msgstr "不具体的标签 {0}"
 
 msgid "Definition of {0} is unclear"
-msgstr ""
+msgstr "{0} 的定义模糊"
 
 msgid "{0} + {1} + {2}"
-msgstr ""
+msgstr "{0} + {1} + {2}"
 
 msgid ""
 "{0} is not recommended. Use the Reverse Ways function from the Tools menu."
-msgstr ""
+msgstr "不建议使用{0}。请使用工具菜单中的反转路径。"
 
 msgid "{0}"
-msgstr ""
+msgstr "{0}"
 
 msgid "key with uncommon character"
 msgstr "键值中的生僻字符"
 
 msgid "uncommon short key"
-msgstr ""
+msgstr "不常见的短键"
 
 msgid "{0} is inaccurate"
 msgstr "{0} 不准确"
@@ -25769,16 +25887,16 @@ msgid "{0} is deprecated. Use the {1}: key prefix instead."
 msgstr "{0} 已过时。应使用 {1}: 键值前缀。"
 
 msgid "questionable key (ending with a number)"
-msgstr ""
+msgstr "可疑的键(以数字结尾)"
 
 msgid "The key {0} has an uncommon value."
-msgstr ""
+msgstr "键{0}具有反常的值"
 
 msgid "misspelled value"
-msgstr ""
+msgstr "值拼写错误"
 
 msgid "wrong value: {0}"
-msgstr ""
+msgstr "错误的值:{0}"
 
 msgid "{0} on a node. Should be used on a way."
 msgstr "{0} 在节点上。应用于路径上。"
@@ -25787,7 +25905,7 @@ msgid "{0} on a node. Should be drawn as an area."
 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 "{0} 在路径上。应用于节点上。"
@@ -25796,7 +25914,7 @@ msgid "{0} on a way. Should be used in a relation"
 msgstr "{0} 在路径上。应用于关系中。"
 
 msgid "{0} together with {1} on a node. Remove {0}."
-msgstr ""
+msgstr "{0}以及{1}在某一点上。去除{0}。"
 
 msgid "{0} on a node"
 msgstr "{0} 在节点上"
@@ -25811,31 +25929,31 @@ msgid "Overlapping Areas"
 msgstr "重叠的区域"
 
 msgid "{0} inside {1}"
-msgstr "{1} 中的 {0}"
+msgstr "{0}在{1}内"
 
 msgid "Overlapping Identical Natural Areas"
-msgstr ""
+msgstr "重复相同的自然区域"
 
 msgid "Overlapping Identical Landuses"
 msgstr "重叠的相同土地用途"
 
 msgid "isolated node which must be connected to a way"
-msgstr ""
+msgstr "节点孤立,其必须连接至某一路径"
 
 msgid "node connects waterway and bridge"
-msgstr ""
+msgstr "节点连接水路和桥梁"
 
 msgid "{0} node connected to a highway"
-msgstr ""
+msgstr "{0}节点连接至桥梁"
 
 msgid "suspicious roundabout direction"
-msgstr ""
+msgstr "可疑的环岛方向"
 
 msgid "{0} on a large area"
-msgstr ""
+msgstr "{0}在大型区域上"
 
 msgid "{0} on a small area"
-msgstr ""
+msgstr "{0}在小型区域上"
 
 msgid "Too large building"
 msgstr "过大的建筑"
@@ -25843,37 +25961,37 @@ msgstr "过大的建筑"
 msgid ""
 "Node connects a power line or cable with an object which is not related to "
 "the power infrastructure."
-msgstr ""
+msgstr "节点将电线或电缆连接到一个无关电力设施的对象。"
 
 msgid ""
 "Waterway ends without a connection to another waterway or the direction of "
 "the waterway is wrong."
-msgstr ""
+msgstr "水路未与其他水路连接便终止,或水路的方向错误。"
 
 msgid "Coastline inside {1}"
-msgstr ""
+msgstr "海岸线在{1}内"
 
 msgid "{0} should be on the node where {1} and {2} intersect"
-msgstr ""
+msgstr "{0}应在{1}与{2}相交的节点上"
 
 msgid ""
 "{0} is the tag for the linear waterway. To tag the water area use {1} + {2} "
 "instead."
-msgstr ""
+msgstr "{0}是用于线性水路的标签。标注水域请使用{1} + {2}。"
 
 msgid "node connects highway and building"
-msgstr ""
+msgstr "节点连接道路和建筑"
 
 msgid ""
 "Object at Position 0.00E 0.00N. There is nothing at this position except an "
 "already mapped weather buoy."
-msgstr ""
+msgstr "对象在位置0.00E 0.00N。此处没有任何东西,除了一个已绘制的气象浮筏。"
 
 msgid "Ferry route is not connected to the road network or branches."
-msgstr ""
+msgstr "轮渡路线未连接至路网或分支路线。"
 
 msgid "Ferry route is not connected to a ferry terminal or branches."
-msgstr ""
+msgstr "轮渡路线未连接至轮渡码头或分支路线。"
 
 msgid "abbreviated street name"
 msgstr "缩写的街道名称"
@@ -25882,7 +26000,7 @@ msgid "wrong highway tag on a node"
 msgstr "节点上的错误公路标签"
 
 msgid "wrong crossing tag on a way"
-msgstr ""
+msgstr "在路径上的穿越标签错误"
 
 msgid "Unnamed unclassified highway"
 msgstr "未命名的未分类公路"
@@ -25891,88 +26009,91 @@ msgid "highway without a reference"
 msgstr "没有编号的公路"
 
 msgid "Unspecific highway type"
-msgstr ""
+msgstr "不特定的道路种类"
 
 msgid "{0} used with {1}"
-msgstr ""
+msgstr "{0}与{1}一同使用"
 
 msgid "{0} is deprecated, use {1} instead. Also check similar tags like {2}"
-msgstr ""
+msgstr "{0}已弃用,使用{1}。同时检查像{2}这样的类似标签"
 
 msgid ""
 "Value of ''{0}'' should either be ''{1}'' or ''{2}''. For sidewalks use "
 "''{3}'' instead."
-msgstr ""
+msgstr "''{0}''的值应为''{1}''或''{2}''中其一。对于人行道,使用''{3}''。"
 
 msgid "pedestrian railway crossing without {0}"
-msgstr ""
+msgstr "人行道铁路平交道没有{0}"
 
 msgid "railway crossing without {0}"
-msgstr ""
+msgstr "铁路平交道没有{0}"
 
 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 "层标签带有+符号"
 
 msgid "layer should be between -5 and 5"
-msgstr ""
+msgstr "层应该介于-5与5之间"
 
 msgid "{0} should have numbers only with optional .5 increments"
-msgstr ""
+msgstr "{0}应仅有可选的步进为.5的数字"
 
 msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
-msgstr ""
+msgstr "{0}:米为默认单位;若要多个单位,先空格再单位"
 
 msgid ""
 "{0}: tonne is default; period is separator; if units, put space then unit"
-msgstr ""
+msgstr "{0}:吨为默认单位;逗号为分隔符;若要多个单位,先空格再单位"
 
 msgid "unusual {0} format"
-msgstr ""
+msgstr "反常的{0}格式"
 
 msgid ""
 "{0}: kilometers is default; period is separator; if units, put space then "
 "unit"
-msgstr ""
+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 "反常的坡度;使用百分比/度或上/下"
 
 msgid "{0} must be a numeric value"
-msgstr ""
+msgstr "{0}必须为一数值"
 
 msgid "{0} must be a positive integer number"
-msgstr ""
+msgstr "{0}必须为一正整数"
 
 msgid "unusual value of {0}"
-msgstr ""
+msgstr "{0}的值反常"
 
 msgid "{0} must be a numeric value, in meters and without units"
-msgstr ""
+msgstr "{0}必须为一数值,以米计量且无单位"
 
 msgid "relation without type"
 msgstr "没有类型的关系"
 
 msgid "{0} relation without {0} tag"
-msgstr ""
+msgstr "{0}关系没有{0}标签"
+
+msgid "way with {0} is part of a bicycle route relation"
+msgstr "含有{0}的路径是自行车线路的一部分"
 
 msgid "religion without denomination"
 msgstr "没有教派的宗教"
@@ -25990,19 +26111,19 @@ msgid "street name contains ss"
 msgstr "街道名称中含有 ss"
 
 msgid "street name contains ß"
-msgstr ""
+msgstr "街道名含有ß"
 
 msgid "{0} is unnecessary"
-msgstr ""
+msgstr "{0}多余"
 
 msgid "unnecessary tag"
-msgstr ""
+msgstr "多余的标签"
 
 msgid "{0} is unnecessary for {1}"
-msgstr ""
+msgstr "{0}对于{1}多余"
 
 msgid "{0} makes no sense"
-msgstr ""
+msgstr "{0}无意义"
 
 msgid "Nodes duplicating parent way tags"
 msgstr "节点重复父路径的标签"
@@ -26010,72 +26131,72 @@ msgstr "节点重复父路径的标签"
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
-msgstr ""
+msgstr "维基百科标签没有指定的语言,使用''wikipedia''=''语言:页面标题''"
 
 msgid "wikipedia tag has an unknown language prefix"
-msgstr ""
+msgstr "维基百科标签有未知的语言前缀"
 
 msgid "wikipedia tag format is deprecated"
-msgstr ""
+msgstr "已弃用的维基百科标签格式"
 
 msgid "''wikipedia''=''language:page title''"
 msgstr "\"wikipedia\"=\"语言代码:页面标题\""
 
 msgid "wikipedia ''{0}'' language is obsolete, use ''{1}'' instead"
-msgstr ""
+msgstr "维基百科''{0}''语言过时,使用''{1}''"
 
 msgid "wikipedia ''{0}'' language is invalid, use ''{1}'' instead"
-msgstr ""
+msgstr "维基百科''{0}''语言无效,使用''{1}''"
 
 msgid "{0} tag should not have URL-encoded values like ''%27''"
-msgstr ""
+msgstr "{0}标签不应有类似''%27''的URL编码值"
 
 msgid "wikipedia title should not start with a space after language code"
-msgstr ""
+msgstr "在语言码后的维基百科标题不应以空格开头"
 
 msgid "wikipedia title should not have ''{0}'' prefix"
-msgstr ""
+msgstr "维基百科标题不应有''{0}''前缀"
 
 msgid "wikipedia page title should have first letter capitalized"
-msgstr ""
+msgstr "维基百科页面标题首字母应大写"
 
 msgid ""
 "wikipedia page title should have spaces instead of underscores (''_''→'' '')"
-msgstr ""
+msgstr "维基百科页面标题应有空格而不是(''_''→'' '')"
 
 msgid "wikipedia language seems to be duplicated, e.g. en:en:Foo"
-msgstr ""
+msgstr "维基百科语言似乎重复,例如en:en:Foo"
 
 msgid "wikidata tag must be in Qnnnn format, where n is a digit"
-msgstr ""
+msgstr "维基数据标签必须符合Qnnnn格式(n为数字)"
 
 msgid ""
 "wikipedia tag is set, but there is no wikidata tag. Wikipedia plugin might "
 "help with wikidata id lookups"
-msgstr ""
+msgstr "维基百科标签已设定,但是没有维基数据标签。维基百科插件可能可以帮助查找维基数据id"
 
 msgid ""
 "wikipedia tag is not set, but a ''{0}'' tag is. Make sure to use "
 "wikipedia=language:value together with wikidata tag."
-msgstr ""
+msgstr "维基百科标签未设定,但''{0}''标签已设定。确保将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 "Display fill colour of areas with place=*"
-msgstr ""
+msgstr "显示带有place=*区域的填充颜色"
 
 msgid "Areas are drawn with fill only around their inner edges"
-msgstr ""
+msgstr "仅在内边缘附近填充区域"
 
 msgid ""
 "Group common Address Interpolation inputs in a single dialog, as well as an "
@@ -26107,11 +26228,13 @@ msgid ""
 "Automatically assigns the address to a selected object in Austria. Data © "
 "Österreichisches Adressregister 2017, N 23806/2017."
 msgstr ""
+"自动分配地址给一选定的在奥地利的对象. Data © Österreichisches Adressregister 2017, N "
+"23806/2017."
 
 msgid ""
 "Allows the user to correct angle of buildings to 90 degrees, and aligns all "
 "loaded buildings to nearest road."
-msgstr ""
+msgstr "允许用户矫正建筑角度至90度,并且以最近的道路为准,校准所有加载的建筑。"
 
 msgid "Tools for drawing buildings."
 msgstr "绘制建筑物的工具。"
@@ -26144,7 +26267,7 @@ msgid ""
 msgstr "提供命令行让您创建自己的命令。请查阅链接以了解标准命令(arc、circle 等)"
 
 msgid "Tool for conflating data (matching and merging)."
-msgstr ""
+msgstr "用于合并数据的工具(匹配混合)"
 
 msgid "Downloads new data when you pan/zoom"
 msgstr "平移/缩放时下载新的数据"
@@ -26153,11 +26276,7 @@ msgid "Create a grid of ways."
 msgstr "建立路径的格线。"
 
 msgid "Customization of public public transport stops."
-msgstr ""
-
-msgid ""
-"Creating and handling address nodes and buildings within Czech Republic."
-msgstr "建立并处理捷克共和国中的地址节点与建筑。"
+msgstr "自定义公共交通站点"
 
 msgid ""
 "Allows to import various file formats into JOSM directly. Currently "
@@ -26176,7 +26295,7 @@ msgid "Downloads OSM data along a way"
 msgstr "沿着一条路径下载 OSM 数据"
 
 msgid "Dxf Import"
-msgstr ""
+msgstr "导入Dxf"
 
 msgid ""
 "Allows the user to anonymize timestamps and delete parts of huge GPX tracks "
@@ -26207,9 +26326,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr "与周围正在编辑地图的用户交流,当有人靠近时会显示通知。"
 
-msgid "Allows you to view a GeoJSON file as a layer."
-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."
@@ -26241,7 +26357,7 @@ msgid "Generate Imagery XML bounds from a multipolygon"
 msgstr "从多重多边形中生成图像 XML 边界"
 
 msgid "Export tiles from the imagery layer cache into the file system."
-msgstr ""
+msgstr "从图像层缓存中导出瓦片至文件系统"
 
 msgid ""
 "Database of imagery offsets: share and aquire imagery offsets with one "
@@ -26263,7 +26379,7 @@ msgstr "导入矢量图形(SVG)"
 msgid ""
 "Extends ImproveWayAccuracy mode with helpers to place nodes at accurate "
 "distances and angles."
-msgstr ""
+msgstr "扩展了提高路径精确模式,便于以精确距离和角度放置节点。"
 
 msgid "This plugin simplifies the mapping and editing of indoor corridors."
 msgstr "此插件简化室内走廊的绘制和编辑。"
@@ -26295,10 +26411,10 @@ msgstr "提供 Java 拓扑套件(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 ""
+msgstr "创建一个信道图,并检查一个信道的子集是否为一个结点,或者在一个信道子集中搜索节点。"
 
 msgid "Tools to help import Kartverket N50"
-msgstr ""
+msgstr "帮助导入Kartverket N50的工具"
 
 msgid "Helps vectorizing WMS images."
 msgstr "帮助将 WMS 图片矢量化。"
@@ -26316,7 +26432,7 @@ 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 ""
+msgstr "MapDust插件在地图上显示MapDust漏洞报告。使用此工具,您可以创建,关闭,无效化,重启和评论漏洞报告。"
 
 msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr "可使用户用 mapillary.com 上的图片工作"
@@ -26337,7 +26453,7 @@ 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. "
@@ -26350,7 +26466,7 @@ msgid ""
 msgstr "永久禁止使用 JOSM(警告:此插件会阻止 JOSM 加载,难以卸载)"
 
 msgid "Import OSM data in o5m format"
-msgstr ""
+msgstr "以o5m格式导入OSM数据"
 
 msgid "Convert data from Open Data portals to OSM layer"
 msgstr "将开放数据网站的数据转换为 OSM 图层"
@@ -26404,7 +26520,7 @@ msgid ""
 msgstr "显示地图上一点的额外信息。目前仅捷克 RUIAN 模块可用。"
 
 msgid "Read and write osmosis poly filter files"
-msgstr ""
+msgstr "读写osmosis多重过滤文件"
 
 msgid "Adds map printing to JOSM"
 msgstr "添加地图打印到 JOSM"
@@ -26412,7 +26528,7 @@ msgstr "添加地图打印到 JOSM"
 msgid ""
 "Provides validation and fixing for public transport route according to "
 "version 2 of the public transport schema"
-msgstr ""
+msgstr "为公共交通路线提供验证和修复,根据公共交通第二版模式"
 
 msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
@@ -26424,7 +26540,7 @@ msgstr "将所选的公共交通路线显示为图表"
 msgid ""
 "The RasterFiltersPlugin allows to choose and apply some images'' filters to "
 "some layers"
-msgstr ""
+msgstr "RasterFiltersPlugin允许为一些图层选择和应用一些图像过滤"
 
 msgid "Relation and multipolygon creating and editing panel."
 msgstr "关系及多重多边形的创建和编辑面板。"
@@ -26553,11 +26669,6 @@ msgid ""
 "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 "方便下载一整组互相联结的路径"
 
@@ -27176,13 +27287,13 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Create Mapillary layer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Create Mapillary layer"
 msgstr ""
 
 msgid "Download Mapillary images in current view"
@@ -28549,6 +28660,151 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "警告:无法将选项窗格置于最上层。异常为:{0}"
+
+msgid ""
+"To enable the cadastre WMS plugin, change\n"
+"the current projection to one of the cadastre\n"
+"projections and retry"
+msgstr ""
+"要启用 cadastre WMS 插件,\n"
+"请改变目前的投影法为 cadastre 投影法\n"
+"后再试一次"
+
+msgid "Change the current projection"
+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 "从法国 Cadastre WMS 下载图片"
+
+msgid "Cadastre: {0}"
+msgstr "Cadastre:{0}"
+
+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 ""
+"这张图片包含地理参照数据。\n"
+"您是否想要使用它们?"
+
+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 "{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 "位置 {0} 已经在画面上。缓存未加载。"
+
+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 "<html>输入镇、乡或城市名称。<br>使用在 www.cadastre.gouv.fr 已知的语法及标点。</html>"
+
+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 "重设 cookie"
+
+msgid "Get a new cookie (session timeout)"
+msgstr "取得新的 cookie(会话超时)"
+
+msgid "Save image as..."
+msgstr "图像另存为..."
+
+msgid "PNG files (*.png)"
+msgstr "PNG 文件(*.png)"
+
+msgid "GeoTiff files (*.tif)"
+msgstr "GeoTiff 文件(*.tif)"
+
+msgid "Export image (only raster images)"
+msgstr ""
+
+msgid ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+"发现一个以上的 WMS 图层\n"
+"请先选择它们中的一个,然后重试"
+
 msgid "on polygon"
 msgstr "在多边形上"
 
@@ -28564,6 +28820,277 @@ msgstr "下一编号"
 msgid "Enter addresses"
 msgstr "输入地址"
 
+msgid "Adjust WMS"
+msgstr "调整 WMS"
+
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
+msgstr "调整 WMS 图层的位置(只能为点阵图像保存)"
+
+msgid "Add \"source=...\" to elements?"
+msgstr "将“source=...”添加到元件?"
+
+msgid "Download from Cadastre"
+msgstr ""
+
+msgid "Objects:"
+msgstr ""
+
+msgid "Select to download buildings in the selected download area."
+msgstr ""
+
+msgid "address"
+msgstr "住址"
+
+msgid "Select to download addresses in the selected download area."
+msgstr ""
+
+msgid "symbol"
+msgstr "符号"
+
+msgid "Select to download symbols in the selected download area."
+msgstr ""
+
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
+
+msgid "parcel"
+msgstr "包裹"
+
+msgid "Select to download cadastral parcels in the selected download area."
+msgstr ""
+
+msgid "parcel number"
+msgstr "地号"
+
+msgid ""
+"Select to download cadastral parcel numbers in the selected download area."
+msgstr ""
+
+msgid "section"
+msgstr "节"
+
+msgid "Select to download cadastral sections in the selected download area."
+msgstr ""
+
+msgid "locality"
+msgstr "所在地"
+
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
+msgstr "合作社"
+
+msgid ""
+"Select to download municipality boundary in the selected download area."
+msgstr ""
+
+msgid ""
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
+msgstr ""
+
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
+msgstr ""
+
+msgid "Replace original background by JOSM background color."
+msgstr "以 JOSM 背景颜色取代原始背景。"
+
+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 "先在列表中选定一个 WMS 图层。"
+
+msgid "Don''t use relation for addresses (but \"addr:street\" on elements)."
+msgstr "不要为地址使用关系(但为元素使用“addr:street”)"
+
+msgid "off"
+msgstr "关"
+
+msgid "25 m"
+msgstr "25 m"
+
+msgid "50 m"
+msgstr "50 m"
+
+msgid "100 m"
+msgstr "100 m"
+
+msgid "high"
+msgstr "高"
+
+msgid "medium"
+msgstr "中"
+
+msgid "low"
+msgstr "低"
+
+msgid "Enable automatic caching."
+msgstr "启用自动缓存。"
+
+msgid "Max. cache size (in MB)"
+msgstr "最大缓存容量(MB)"
+
+msgid "French cadastre WMS"
+msgstr "法国 cadastre WMS"
+
+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 ""
+"在 www.cadastre.gouv.fr 的法国土地用途 wms<BR><BR>请先在这里阅读使用的条件与条款:<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>之后才上传以本插件所创建的数据。"
+
+msgid "<html>Value of key \"source\" when autosourcing is enabled</html>"
+msgstr "<html>当自动来源启用时设定键“source”的数值</html>"
+
+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 "设定 WMS 图层透明度。右边是不透明,左边是透明。"
+
+msgid "Draw a rectangle around downloaded data from WMS server."
+msgstr "在从 WMS 服务器下载的数据周围绘出一个矩形。"
+
+msgid "Image resolution:"
+msgstr "图片分辨率:"
+
+msgid "High resolution (1000x800)"
+msgstr "高分辨率(1000x800)"
+
+msgid "Medium resolution (800x600)"
+msgstr "中分辨率(800x600)"
+
+msgid "Low resolution (600x400)"
+msgstr "低分辨率(600x400)"
+
+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 "固定大小矩形(默认为 100m)"
+
+msgid "Fixed size (from 25 to 1000 meters)"
+msgstr "固定大小(从 25 到 100 米)"
+
+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 "如果抓取时有多个图层,则自动选择第一个 WMS 图层。"
+
+msgid "Enable this to use the tag \"add:street\" on nodes."
+msgstr "启用这个选项,以使用节点的“add:street”标签。"
+
+msgid "Unexpected file extension. {0}"
+msgstr ""
+
 msgid ""
 "Location \"{0}\" found in cache.\n"
 "Load cache first ?\n"
@@ -28624,248 +29151,6 @@ msgstr "选择自..."
 msgid "Select commune"
 msgstr "选择社区"
 
-msgid "Auto sourcing"
-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 "警告:无法将选项窗格置于最上层。异常为:{0}"
-
-msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
-msgstr ""
-"要启用 cadastre WMS 插件,\n"
-"请改变目前的投影法为 cadastre 投影法\n"
-"后再试一次"
-
-msgid "Change the current projection"
-msgstr ""
-
-msgid "Replace original background by JOSM background color."
-msgstr "以 JOSM 背景颜色取代原始背景。"
-
-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 "先在列表中选定一个 WMS 图层。"
-
-msgid "Don''t use relation for addresses (but \"addr:street\" on elements)."
-msgstr "不要为地址使用关系(但为元素使用“addr:street”)"
-
-msgid "off"
-msgstr "关"
-
-msgid "25 m"
-msgstr "25 m"
-
-msgid "50 m"
-msgstr "50 m"
-
-msgid "100 m"
-msgstr "100 m"
-
-msgid "high"
-msgstr "高"
-
-msgid "medium"
-msgstr "中"
-
-msgid "low"
-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 "最大缓存容量(MB)"
-
-msgid "French cadastre WMS"
-msgstr "法国 cadastre WMS"
-
-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 ""
-"在 www.cadastre.gouv.fr 的法国土地用途 wms<BR><BR>请先在这里阅读使用的条件与条款:<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>之后才上传以本插件所创建的数据。"
-
-msgid "<html>Value of key \"source\" when autosourcing is enabled</html>"
-msgstr "<html>当自动来源启用时设定键“source”的数值</html>"
-
-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 "设定 WMS 图层透明度。右边是不透明,左边是透明。"
-
-msgid "Draw a rectangle around downloaded data from WMS server."
-msgstr "在从 WMS 服务器下载的数据周围绘出一个矩形。"
-
-msgid "Image resolution:"
-msgstr "图片分辨率:"
-
-msgid "High resolution (1000x800)"
-msgstr "高分辨率(1000x800)"
-
-msgid "Medium resolution (800x600)"
-msgstr "中分辨率(800x600)"
-
-msgid "Low resolution (600x400)"
-msgstr "低分辨率(600x400)"
-
-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 "固定大小矩形(默认为 100m)"
-
-msgid "Fixed size (from 25 to 1000 meters)"
-msgstr "固定大小(从 25 到 100 米)"
-
-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 "如果抓取时有多个图层,则自动选择第一个 WMS 图层。"
-
-msgid "Enable this to use the tag \"add:street\" on nodes."
-msgstr "启用这个选项,以使用节点的“add:street”标签。"
-
-msgid "Unexpected file extension. {0}"
-msgstr ""
-
-msgid "Add \"source=...\" to elements?"
-msgstr "将“source=...”添加到元件?"
-
 msgid "Downloading {0}"
 msgstr "正在下载 {0}"
 
@@ -28910,119 +29195,6 @@ msgid ""
 "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 "从法国 Cadastre WMS 下载图片"
-
-msgid "Cadastre: {0}"
-msgstr "Cadastre:{0}"
-
-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 ""
-"这张图片包含地理参照数据。\n"
-"您是否想要使用它们?"
-
-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 "{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 "位置 {0} 已经在画面上。缓存未加载。"
-
-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 "<html>输入镇、乡或城市名称。<br>使用在 www.cadastre.gouv.fr 已知的语法及标点。</html>"
-
-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 "重设 cookie"
-
-msgid "Get a new cookie (session timeout)"
-msgstr "取得新的 cookie(会话超时)"
-
-msgid "Save image as..."
-msgstr "图像另存为..."
-
-msgid "PNG files (*.png)"
-msgstr "PNG 文件(*.png)"
-
-msgid "GeoTiff files (*.tif)"
-msgstr "GeoTiff 文件(*.tif)"
-
-msgid "Export image (only raster images)"
-msgstr ""
-
 msgid ""
 "Click first corner for image cropping\n"
 "(two points required)"
@@ -29074,19 +29246,6 @@ msgstr "点击剪裁图片的第二个角落"
 msgid "Click second Lambert crosspiece for georeferencing"
 msgstr ""
 
-msgid "Adjust WMS"
-msgstr "调整 WMS"
-
-msgid "Adjust the position of the WMS layer (saved for raster images only)"
-msgstr "调整 WMS 图层的位置(只能为点阵图像保存)"
-
-msgid ""
-"More than one WMS layer present\n"
-"Select one of them first, then retry"
-msgstr ""
-"发现一个以上的 WMS 图层\n"
-"请先选择它们中的一个,然后重试"
-
 msgid "Reset offset"
 msgstr "重置偏移"
 
@@ -29525,20 +29684,6 @@ msgid ""
 "to cancel the download."
 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 ""
-"选定的区域不能分离,因为它是某个关系的成员。\n"
-"在分离它之前,请先将区域自关系中删除。"
-
 msgid "TangoGPS Files (*.log)"
 msgstr "TangoGPS 文件(*.log)"
 
@@ -35340,26 +35485,6 @@ msgstr "循环"
 msgid "mute"
 msgstr "静音"
 
-msgid "Walking Papers Scanned Map"
-msgstr "Walking Papers Scanned Map"
-
-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 "输入 walking-papers.org URL 或 ID(在 URL 中 ?id= 之后的部分)"
-
-msgid "Could not read information from walking-papers.org the id \"{0}\""
-msgstr "无法从 walking-papers.org 读取 id“{0}”的信息"
-
-msgid "Walking Papers: {0}"
-msgstr "Walking Papers:{0}"
-
-msgid "Walking Papers layer ({0}) in zoom {1}"
-msgstr "Walking Papers 图层({0}),缩放级别 {1}"
-
 msgid "Way Download"
 msgstr "路径下载"
 
@@ -35530,6 +35655,26 @@ msgid ""
 "objects"
 msgstr "添加对应本文的“维基百科”标签到所选对象"
 
+msgid "Download from Wikosm API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "第二版“最终 WMS 超高速涡轮增压挑战”"
 
diff --git a/i18n/po/zh_TW.po b/i18n/po/zh_TW.po
index 9a3ef1a..26ddc94 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: 2017-09-02 22:59+0200\n"
-"PO-Revision-Date: 2017-08-09 11:34+0000\n"
+"POT-Creation-Date: 2017-09-29 03:46+0200\n"
+"PO-Revision-Date: 2017-10-01 08:10+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: 2017-09-03 05:06+0000\n"
-"X-Generator: Launchpad (build 18446)\n"
+"X-Launchpad-Export-Date: 2017-10-02 04:31+0000\n"
+"X-Generator: Launchpad (build 18471)\n"
 "Language: zh_TW\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -384,6 +384,33 @@ msgstr "刪除"
 msgid "Delete selected objects."
 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 "你準備要刪除在下載的區域外的節點。<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 "
+"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] "你即將刪除 {0} 關聯:{1}<br/>通常不太會刪除,而且上傳到伺器器後很難輕易復原。br/>你真的要刪除嗎?"
+
+msgid "Delete relation?"
+msgstr "刪除關聯?"
+
 msgid "Delete Layer"
 msgstr "刪除圖層"
 
@@ -418,7 +445,7 @@ msgid "Download data"
 msgstr "下載資料"
 
 msgid "Download map data from a server of your choice"
-msgstr ""
+msgstr "從選擇伺服器下載地圖資料"
 
 msgid ""
 "<html>This action will require {0} individual<br>download requests. Do you "
@@ -1297,27 +1324,14 @@ msgstr " [id: {0}]"
 msgid "Segment {0}: {1}"
 msgstr "區間 {0}: {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 "關聯成員的角色全部複製到新的路徑上。<br>必要時你應該查驗和修正。"
+msgid "Search preset"
+msgstr "搜尋預設組合"
 
-msgid ""
-"A relation membership was copied to all new ways.<br>You should verify this "
-"and correct it when necessary."
-msgstr "關聯成員全部複雜到新的路徑上。<br>必要時你應該檢核和修正。"
+msgid "Show preset search dialog"
+msgstr "顯示預設組合對話盒"
 
-msgid "Split way {0} into {1} part"
-msgid_plural "Split way {0} into {1} parts"
-msgstr[0] "將路徑 {0} 分割成 {1} 部分"
+msgid "Search presets"
+msgstr "搜尋預設組合"
 
 msgid "Discourage upload"
 msgstr "取消上傳"
@@ -2373,6 +2387,8 @@ msgid ""
 "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 "結合"
@@ -2387,7 +2403,7 @@ msgid "logical not"
 msgstr "邏輯反相"
 
 msgid "use parenthesis to group expressions"
-msgstr ""
+msgstr "使用參數群組表示式"
 
 msgid "objects"
 msgstr "物件"
@@ -2408,10 +2424,10 @@ msgid "object without useful tags"
 msgstr "物件缺少有用的標籤"
 
 msgid "all objects that use the address preset"
-msgstr ""
+msgstr "所有使用地址預設組合的物件"
 
 msgid "all objects that use any preset under the Geography/Nature group"
-msgstr ""
+msgstr "所有使用地理/自然群組預設組合的物件"
 
 msgid "metadata"
 msgstr "中繼資料"
@@ -2531,7 +2547,7 @@ msgid_plural "Searching in {0} objects"
 msgstr[0] "正在搜尋 {0} 個物件"
 
 msgid "Automatically truncating value of tag ''{0}'' on deleted object {1}"
-msgstr ""
+msgstr "自動截斷已刪除對象 {1} 上標籤 “{0}” 的值"
 
 msgid ""
 "Length of value for tag ''{0}'' on object {1} exceeds the max. allowed "
@@ -2712,34 +2728,6 @@ msgid "Delete {0} relation"
 msgid_plural "Delete {0} relations"
 msgstr[0] "刪除 {0} 個關聯"
 
-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 "你準備要刪除在下載的區域外的節點。<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 "
-"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] "移動 {0} 個節點"
@@ -2766,6 +2754,28 @@ msgstr[0] "已選取 {0} 項物件"
 msgid "Sequence: {0}"
 msgstr "次序:{0}"
 
+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 "關聯成員的角色全部複製到新的路徑上。<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] "將路徑 {0} 分割成 {1} 部分"
+
 msgid "Transform {0} node"
 msgid_plural "Transform {0} nodes"
 msgstr[0] "變形 {0} 節點"
@@ -2881,6 +2891,18 @@ msgstr "不合規定的緯度數值「{0}」"
 msgid "Illegal longitude value ''{0}''"
 msgstr "不合規定的經度數值「{0}」"
 
+msgid "Failed to create missing preferences directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing preferences directory: {0}</html>"
+msgstr ""
+
+msgid "Failed to create missing user data directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing user data directory: {0}</html>"
+msgstr ""
+
 msgid "Failed to create missing cache directory: {0}"
 msgstr "無法建立消失的快取目錄:{0}"
 
@@ -2988,6 +3010,9 @@ msgstr "英制"
 msgid "Nautical Mile"
 msgstr "海浬"
 
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr "參數「{0}」應為非空的數值,卻收到「{1}」"
+
 msgid "UNKNOWN"
 msgstr "不明"
 
@@ -3031,6 +3056,9 @@ msgctxt "compass"
 msgid "E"
 msgstr "東"
 
+msgid "Unable to parse as coordinate value: ''{0}''"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr "影像日期:{0}"
 
@@ -3670,6 +3698,60 @@ msgstr ""
 msgid "Custom Projection"
 msgstr "自訂投影法"
 
+msgid "Error: {0}"
+msgstr ""
+
+msgid "JOSM projection command line interface"
+msgstr ""
+
+msgid "Description"
+msgstr "描述"
+
+msgid "Converts coordinates from one coordinate reference system to another."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Show this help"
+msgstr "顯示此說明訊息"
+
+msgid "Switch input and output crs"
+msgstr ""
+
+msgid "Switch order of input coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "Switch order of output coordinates (east/north, lon/lat)"
+msgstr ""
+
+msgid "<crs>"
+msgstr ""
+
+msgid ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
+msgstr ""
+
+msgid "[file]"
+msgstr ""
+
+msgid ""
+"Reads input data from one or more files listed as positional arguments. When "
+"no files are given, or the filename is \"-\", data is read from standard "
+"input."
+msgstr ""
+
+msgid "Examples"
+msgstr "範例"
+
+msgid ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
+msgstr ""
+
+msgid "Unable to parse number ''{0}''"
+msgstr ""
+
 msgid "GRS80"
 msgstr "GRS80"
 
@@ -4713,9 +4795,6 @@ msgctxt "layer"
 msgid "Offset"
 msgstr "偏移"
 
-msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr "參數「{0}」應為非空的數值,卻收到「{1}」"
-
 msgid "Outdated Java version"
 msgstr "過期的 JAVA 版本"
 
@@ -4761,6 +4840,9 @@ msgstr "初始化內部邊界資料"
 msgid "Initializing OSM API"
 msgstr "初始化 OSM API"
 
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr "移除圖層 {0} 因為它在設定的 API 中是不允許的。"
+
 msgid "Initializing internal traffic data"
 msgstr "初始化內部資料"
 
@@ -4782,9 +4864,6 @@ msgstr "用法"
 msgid "options"
 msgstr "選項"
 
-msgid "Show this help"
-msgstr "顯示此說明訊息"
-
 msgid "Standard unix geometry argument"
 msgstr "標準 unix 幾何引數"
 
@@ -4985,6 +5064,13 @@ msgid ""
 "now?"
 msgstr ""
 
+msgid "You have {0} unread message."
+msgid_plural "You have {0} unread messages."
+msgstr[0] "你有 {0} 則未讀的訊息。"
+
+msgid "Click here to see your inbox."
+msgstr "點這裡觀看收到來信。"
+
 msgctxt "menu"
 msgid "File"
 msgstr "檔案"
@@ -5157,7 +5243,7 @@ msgid "The geographic longitude at the mouse pointer."
 msgstr "滑鼠指標所在的地理經度。"
 
 msgid "System of measurement changed to {0}"
-msgstr ""
+msgstr "使用的測量單位變更為{0}"
 
 msgid "Default (open, closed, new)"
 msgstr ""
@@ -5237,6 +5323,10 @@ msgstr "請輸入拼貼索引"
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr "目前的數值在指定的縮放等級中是無法使用的拼貼索引"
 
+msgid ""
+"Opening the bug report failed. Please report manually using this website:"
+msgstr ""
+
 msgid "You have encountered a bug in JOSM"
 msgstr "你遇到了 JOSM 的程式錯誤"
 
@@ -6785,7 +6875,7 @@ msgid "Validation results"
 msgstr "驗證的結果"
 
 msgid "Lookup"
-msgstr ""
+msgstr "查詢"
 
 msgid "Looks up the selected primitives in the error list."
 msgstr ""
@@ -7009,6 +7099,9 @@ msgstr "從本地端快取移除詳細資料檢視面板中的變更集"
 msgid "Update the changeset from the OSM server"
 msgstr "從 OSM 伺服器更新變更集"
 
+msgid "View changeset"
+msgstr ""
+
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
@@ -7233,9 +7326,6 @@ 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."
@@ -7428,7 +7518,7 @@ msgid "Add a new key/value pair to all objects"
 msgstr "將新的設定鍵/數值配對加入到所有的物件"
 
 msgid "Add Tag"
-msgstr ""
+msgstr "新增標籤"
 
 msgid "Edit the value of the selected key for all objects"
 msgstr "編輯所有物件選取設定鍵的數值"
@@ -7437,13 +7527,13 @@ msgid "Edit Tags"
 msgstr ""
 
 msgid "Go to OSM wiki for tag help"
-msgstr ""
+msgstr "移至 OSM wiki 找標籤說明"
 
 msgid "Launch browser with wiki help for selected object"
 msgstr "執行瀏覽器顯示選取物件的 wiki 說明"
 
 msgid "Go to Taginfo"
-msgstr ""
+msgstr "移至 Taginfo"
 
 msgid "Launch browser with Taginfo statistics for selected object"
 msgstr ""
@@ -8116,7 +8206,7 @@ msgid "Download referrers (parent relations and ways)"
 msgstr "下載參照 (上層關聯與路徑)"
 
 msgid "Download from OSM"
-msgstr ""
+msgstr "從 OSM 下載"
 
 msgid "Data Sources and Types:"
 msgstr "資料來源和類型:"
@@ -8157,17 +8247,17 @@ msgstr "下載區域確定,大小應該會被伺服器接受"
 msgid "Download from Overpass API"
 msgstr ""
 
+msgid ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
+msgstr "在下面貼上 Overpass 檢索,或是用 Overpass Turbo 檢索精靈產生檢索"
+
 msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr "使用 Overpass Turbo 檢索精靈工具建構 Overpass 檢索"
 
 msgid "Query Wizard"
 msgstr ""
 
-msgid ""
-"Place your Overpass query below or generate one using the Overpass Turbo "
-"Query Wizard"
-msgstr "在下面貼上 Overpass 檢索,或是用 Overpass Turbo 檢索精靈產生檢索"
-
 msgid "Your saved queries:"
 msgstr ""
 
@@ -8194,33 +8284,6 @@ msgstr ""
 msgid "Edit selected snippet"
 msgstr ""
 
-msgid "history"
-msgstr "歷史"
-
-msgid "Please select an item first"
-msgstr ""
-
-msgid "Edit item"
-msgstr ""
-
-msgid "Add snippet"
-msgstr ""
-
-msgid "Query cannot be empty"
-msgstr ""
-
-msgid "This name can be used for the item"
-msgstr ""
-
-msgid "Item with this name already exists"
-msgstr ""
-
-msgid "The item cannot be created with provided name"
-msgstr ""
-
-msgid "The item cannot be created with an empty query"
-msgstr ""
-
 msgid "Overpass Turbo Query Wizard"
 msgstr ""
 
@@ -8344,6 +8407,33 @@ msgstr "快速地圖"
 msgid "Tile Numbers"
 msgstr "拼貼數"
 
+msgid "history"
+msgstr "歷史"
+
+msgid "Please select an item first"
+msgstr ""
+
+msgid "Edit item"
+msgstr ""
+
+msgid "Add snippet"
+msgstr ""
+
+msgid "Query cannot be empty"
+msgstr ""
+
+msgid "This name can be used for the item"
+msgstr ""
+
+msgid "Item with this name already exists"
+msgstr ""
+
+msgid "The item cannot be created with provided name"
+msgstr ""
+
+msgid "The item cannot be created with an empty query"
+msgstr ""
+
 msgid "JOSM Help Browser"
 msgstr "JOSM 協助文件瀏覽器"
 
@@ -8482,6 +8572,12 @@ msgstr "縮放到目前資料圖層的這個節點"
 msgid "Open a history browser with the history of this node"
 msgstr "開啟歷史紀錄瀏覽器觀看這個節點的歷史紀錄"
 
+msgid "View changeset in web browser"
+msgstr ""
+
+msgid "Open {0}"
+msgstr ""
+
 msgid "Way {0}"
 msgstr "路徑 {0}"
 
@@ -8491,6 +8587,9 @@ msgstr "關聯 {0}"
 msgid "Object"
 msgstr "物件"
 
+msgid "Open Changeset Manager"
+msgstr ""
+
 msgid "Changeset comment"
 msgstr "變更集評論"
 
@@ -8642,6 +8741,9 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr ""
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "提供關於你所上傳變更的簡短評論:"
 
@@ -9610,7 +9712,7 @@ msgid "Cache stats: {0}"
 msgstr "快娶狀態:{0}"
 
 msgid "{0} ({1}), automatically downloading in zoom {2}"
-msgstr ""
+msgstr "{0} ({1}),自動在 zoom {2} 下載"
 
 msgid "{0} ({1}), downloading in zoom {2}"
 msgstr ""
@@ -9684,9 +9786,6 @@ msgid "{0} track"
 msgid_plural "{0} tracks"
 msgstr[0] "{0} 個軌跡"
 
-msgid "Description"
-msgstr "描述"
-
 msgid "Timespan"
 msgstr "時間跨度"
 
@@ -12348,7 +12447,7 @@ msgid "Display coordinates as"
 msgstr "顯示坐標為"
 
 msgid "System of measurement"
-msgstr "測量的系統"
+msgstr "測量單位"
 
 msgid "Map Projection"
 msgstr "地圖投影法"
@@ -12871,15 +12970,6 @@ msgstr "預設次級元件沒有上層"
 msgid "Error parsing {0}: "
 msgstr "分析 {0} 時發生錯誤: "
 
-msgid "Search preset"
-msgstr "搜尋預設組合"
-
-msgid "Show preset search dialog"
-msgstr "顯示預設組合對話盒"
-
-msgid "Search presets"
-msgstr "搜尋預設組合"
-
 msgid "Presets"
 msgstr "預設組合"
 
@@ -12987,6 +13077,9 @@ msgstr "所有檔案 (*.*)"
 msgid "Received error page:"
 msgstr ""
 
+msgid "{0}... [please type its number]"
+msgstr ""
+
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
@@ -13217,6 +13310,8 @@ msgid ""
 "property ''java.net.useSystemProxies'' was missing at startup time.  Will "
 "not use a proxy."
 msgstr ""
+"Java 虛擬機器沒有設定好能在系統設定查找 proxies,啟動時 ''java.net.useSystemProxies'' 內容找不到,不會使用 "
+"proxy。"
 
 msgid "Parsing response from server..."
 msgstr "正在分析伺服器的回應..."
@@ -13236,13 +13331,6 @@ msgstr "不明的模式 {0}。"
 msgid "get number of unread messages"
 msgstr "取得未讀訊息數量"
 
-msgid "You have {0} unread message."
-msgid_plural "You have {0} unread messages."
-msgstr[0] "你有 {0} 則未讀的訊息。"
-
-msgid "Click here to see your inbox."
-msgstr "點這裡觀看收到來信。"
-
 msgid "Message notifier"
 msgstr "訊息通知"
 
@@ -13305,9 +13393,6 @@ msgid ""
 "{1}."
 msgstr "它支援通訊協定版本 0.6,但伺服器說它支援 {0} 到 {1} 版。"
 
-msgid "Removed layer {0} because it is not allowed by the configured API."
-msgstr "移除圖層 {0} 因為它在設定的 API 中是不允許的。"
-
 msgid "Unexpected format of ID replied by the server. Got ''{0}''."
 msgstr "伺服器回覆未預期的 id 格式,取得「{0}」"
 
@@ -14549,9 +14634,6 @@ msgid ""
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
 
-msgid "{0}... [please type its number]"
-msgstr ""
-
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
@@ -14647,10 +14729,6 @@ msgid "Failed to load XML schema."
 msgstr "無法載入 XML schema。"
 
 msgid ""
-"Opening the bug report failed. Please report manually using this website:"
-msgstr ""
-
-msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
@@ -15238,6 +15316,10 @@ msgctxt "sidewalk"
 msgid "no"
 msgstr "無"
 
+msgctxt "sidewalk"
+msgid "separate"
+msgstr ""
+
 msgid "Service type"
 msgstr "運輸路線類型"
 
@@ -17275,8 +17357,9 @@ msgid "Bay"
 msgstr "海灣"
 
 msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
-msgstr "大範圍水域被陸地包圍,但仍有寬廣開口。"
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
+msgstr ""
 
 msgid "Shipping"
 msgstr "船運"
@@ -23101,6 +23184,9 @@ msgstr "標記的路徑路線:騎馬"
 msgid "Waymarked Trails: Winter Sports"
 msgstr "標記的路徑路線:冬季運動"
 
+msgid "Wikimedia Map"
+msgstr ""
+
 msgid "OSM Inspector: Geometry"
 msgstr "OSM 檢驗工具:幾何"
 
@@ -23159,6 +23245,9 @@ msgstr ""
 msgid "IGN topographical map (TMS)"
 msgstr ""
 
+msgid "IGN topographical map (WMTS)"
+msgstr ""
+
 msgid "IGN topographical map (WMS)"
 msgstr ""
 
@@ -23240,6 +23329,21 @@ msgstr ""
 msgid "IGN orthophoto Rosario (WMTS)"
 msgstr ""
 
+msgid "IGN orthophoto Salta (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 1 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 2 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 3 (WMTS)"
+msgstr ""
+
+msgid "IGN orthophoto Salta 4 (WMTS)"
+msgstr ""
+
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr ""
 
@@ -23261,9 +23365,6 @@ msgstr ""
 msgid "IGN orthophoto Santa Fe and Paraná (WMTS)"
 msgstr ""
 
-msgid "IGN orthophoto Trelew (WMTS)"
-msgstr ""
-
 msgid "IGN orthophoto Tucumán (WMTS)"
 msgstr ""
 
@@ -23858,6 +23959,9 @@ msgstr ""
 msgid "Berlin aerial photograph 2016"
 msgstr ""
 
+msgid "Berlin aerial photograph 2017"
+msgstr ""
+
 msgid "Deutsche Bahn VzG lines Nov 2013"
 msgstr ""
 
@@ -24269,6 +24373,9 @@ msgstr "盧森堡Inspire Water"
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
+msgid "INEGI Digital Map of Mexico (WMS)"
+msgstr ""
+
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
@@ -24712,6 +24819,9 @@ msgstr "台灣國土測繪中心開放資料 WMTS"
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr ""
 
+msgid "Aşgabat (high resolution)"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr "微軟研究院地形圖"
 
@@ -25915,6 +26025,9 @@ msgstr "關聯沒有類型 (type)"
 msgid "{0} relation without {0} tag"
 msgstr "關聯 {0} 沒有 {0} 標籤"
 
+msgid "way with {0} is part of a bicycle route relation"
+msgstr ""
+
 msgid "religion without denomination"
 msgstr "宗教沒有加教派"
 
@@ -25993,7 +26106,7 @@ msgstr ""
 msgid ""
 "wikipedia tag is set, but there is no wikidata tag. Wikipedia plugin might "
 "help with wikidata id lookups"
-msgstr ""
+msgstr "設好維基百科標籤,但沒有維基數據標籤。維基百科外掛可以幫忙查維基數據編號"
 
 msgid ""
 "wikipedia tag is not set, but a ''{0}'' tag is. Make sure to use "
@@ -26095,10 +26208,6 @@ msgid "Customization of public public transport stops."
 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 ""
@@ -26146,9 +26255,6 @@ msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr "跟正在編輯附近地圖的使用者聊聊:當有其他人接近時通知。"
 
-msgid "Allows you to view a GeoJSON file as a layer."
-msgstr "讓你可以將 GeoJSON 檔案作為圖層觀看。"
-
 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."
@@ -26494,11 +26600,6 @@ msgid ""
 "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 "方便的下載一整組互相聯結的路徑"
 
@@ -26811,7 +26912,7 @@ msgid "Enter key mode"
 msgstr ""
 
 msgid "Auto add tags"
-msgstr ""
+msgstr "自動新增標籤"
 
 msgid "Autosimplify"
 msgstr ""
@@ -27108,15 +27209,15 @@ msgstr "Mapillary 物件圖層"
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr "顯示 Mapillary 偵測出來的地圖物件的圖層"
 
+msgid "Start Mapillary layer"
+msgstr "開始 Mapillary 圖層"
+
 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 影像"
 
@@ -27377,7 +27478,7 @@ msgid "Logout"
 msgstr "登出"
 
 msgid "Go to setting and log in to Mapillary before uploading."
-msgstr ""
+msgstr "移至設定和上傳前登錄 Mapillary。"
 
 msgid "Upload selected sequence"
 msgstr ""
@@ -27512,7 +27613,7 @@ msgid "Could not open the URL {0} in a browser"
 msgstr ""
 
 msgid "Downloading map objects…"
-msgstr ""
+msgstr "下載地圖物件..."
 
 msgid "All map objects loaded."
 msgstr ""
@@ -27521,7 +27622,7 @@ msgid "Too many map objects, zoom in to see all."
 msgstr ""
 
 msgid "Downloading map objects failed!"
-msgstr ""
+msgstr "下載地圖物件物敗!"
 
 msgid "Mapillary objects"
 msgstr ""
@@ -27590,7 +27691,7 @@ msgid "Supported image formats (JPG and PNG)"
 msgstr ""
 
 msgid "Downloading Mapillary images"
-msgstr ""
+msgstr "下載 Mapillary 影像"
 
 msgid "Total Mapillary images: {0}"
 msgstr ""
@@ -28440,6 +28541,151 @@ msgstr[1] ""
 msgid "No address nodes inside buildings found"
 msgstr ""
 
+msgid "Auto sourcing"
+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 "警告:無法將選項窗格置於最上層。異常為:{0}"
+
+msgid ""
+"To enable the cadastre WMS plugin, change\n"
+"the current projection to one of the cadastre\n"
+"projections and retry"
+msgstr ""
+"要啟用 cadastre WMS 外掛程式,\n"
+"請改變目前的投影法為 cadastre 投影法\n"
+"後再試一次"
+
+msgid "Change the current projection"
+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 "從法國 Cadastre WMS 下載圖片"
+
+msgid "Cadastre: {0}"
+msgstr "Cadastre: {0}"
+
+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 ""
+"這張圖片包含地理參照資料。\n"
+"你是否想要使用它們?"
+
+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 "{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 "位置 {0} 已經在畫面上。快取未載入。"
+
+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 "<html>輸入鎮、鄉或城市名稱。<br>使用在 www.cadastre.gouv.fr 已知的語法及標點。</html>"
+
+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 "重設 cookie"
+
+msgid "Get a new cookie (session timeout)"
+msgstr "取得新的 cookie (作業階段逾時)"
+
+msgid "Save image as..."
+msgstr "影像另存為..."
+
+msgid "PNG files (*.png)"
+msgstr "PNG 檔案 (*.png)"
+
+msgid "GeoTiff files (*.tif)"
+msgstr "GeoTiff 檔案 (*.tif)"
+
+msgid "Export image (only raster images)"
+msgstr ""
+
+msgid ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+"發現一個以上的 WMS 圖層\n"
+"請先選擇它們中的一個,然後重試"
+
 msgid "on polygon"
 msgstr "於多邊形"
 
@@ -28455,89 +28701,82 @@ msgstr "下一個在"
 msgid "Enter addresses"
 msgstr "編輯地址"
 
-msgid ""
-"Location \"{0}\" found in cache.\n"
-"Load cache first ?\n"
-"(No = new cache)"
+msgid "Adjust WMS"
+msgstr "調整 WMS"
+
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
 msgstr ""
-"在快取中找到位置「{0}」。\n"
-"是否先載入快取?\n"
-"(否 = 新增快取)"
 
-msgid "Select Feuille"
+msgid "Add \"source=...\" to elements?"
+msgstr "將「source=...」加入元件?"
+
+msgid "Download from Cadastre"
 msgstr ""
 
-msgid ""
-"Error loading file.\n"
-"Probably an old version of the cache file."
+msgid "Objects:"
 msgstr ""
-"載入檔案時發生錯誤。\n"
-"可能是舊版的快取檔案。"
 
-msgid "Lambert Zone {0} cache file (.{0})"
-msgstr "蘭勃特區 {0} 快取檔案 (.{0})"
+msgid "Select to download buildings in the selected download area."
+msgstr ""
 
-msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
-msgstr "蘭勃特 CC9 區 {0} 快取檔案 (.CC{0})"
+msgid "address"
+msgstr "住址"
 
-msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
-msgstr "Guadeloupe Fort-Marigot 快取檔案 (.UTM1)"
+msgid "Select to download addresses in the selected download area."
+msgstr ""
 
-msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
-msgstr "Guadeloupe Ste-Anne 快取檔案 (.UTM2)"
+msgid "symbol"
+msgstr "符號"
 
-msgid "Martinique Fort Desaix cache file (.UTM3)"
-msgstr "Martinique Fort Desaix 快取檔案 (.UTM3)"
+msgid "Select to download symbols in the selected download area."
+msgstr ""
 
-msgid "Reunion RGR92 cache file (.UTM4)"
-msgstr "Reunion RGR92 快取檔案 (.UTM4)"
+msgid "Select to download water bodies in the selected download area."
+msgstr ""
 
-msgid "CadastreGrabber: Illegal url."
-msgstr "CadastreGrabber: 不合規定的 URL 網址。"
+msgid "parcel"
+msgstr ""
 
-msgid ""
-"Cannot open a new client session.\n"
-"Server in maintenance or temporary overloaded."
+msgid "Select to download cadastral parcels in the selected download area."
 msgstr ""
-"不能開啟新的客戶端 session。\n"
-"伺服器正在維護或是暫時過載。"
+
+msgid "parcel number"
+msgstr "地號"
 
 msgid ""
-"Town/city {0} not found or not available\n"
-"or action canceled"
+"Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
-"城/鎮 {0} 找不到或無法使用\n"
-"或是動作已取消"
 
-msgid "Choose from..."
-msgstr "選擇自..."
+msgid "section"
+msgstr ""
 
-msgid "Select commune"
+msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
 
-msgid "Auto sourcing"
-msgstr "自動來源"
+msgid "locality"
+msgstr "所在地"
 
-msgid ""
-"Please enable at least two WMS layers in the cadastre-fr plugin "
-"configuration.\n"
-"Layers ''Building'' and ''Parcel'' added by default."
+msgid "Select to download localities in the selected download area."
+msgstr ""
+
+msgid "commune"
 msgstr ""
 
 msgid ""
-"Warning: failed to put option pane dialog always on top. Exception was: {0}"
-msgstr "警告:無法將選項窗格置於最上層。異常為:{0}"
+"Select to download municipality boundary in the selected download area."
+msgstr ""
 
 msgid ""
-"To enable the cadastre WMS plugin, change\n"
-"the current projection to one of the cadastre\n"
-"projections and retry"
+"<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
-"要啟用 cadastre WMS 外掛程式,\n"
-"請改變目前的投影法為 cadastre 投影法\n"
-"後再試一次"
 
-msgid "Change the current projection"
+msgid "Recipient"
+msgstr ""
+
+msgid "Diffusion restriction"
+msgstr ""
+
+msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
@@ -28588,27 +28827,6 @@ msgstr "中"
 msgid "low"
 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 "啟用自動快取。"
 
@@ -28754,8 +28972,65 @@ msgstr "啟用這個選項來使用節點的 \"add:street\" 標籤。"
 msgid "Unexpected file extension. {0}"
 msgstr ""
 
-msgid "Add \"source=...\" to elements?"
-msgstr "將「source=...」加入元件?"
+msgid ""
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
+msgstr ""
+"在快取中找到位置「{0}」。\n"
+"是否先載入快取?\n"
+"(否 = 新增快取)"
+
+msgid "Select Feuille"
+msgstr ""
+
+msgid ""
+"Error loading file.\n"
+"Probably an old version of the cache file."
+msgstr ""
+"載入檔案時發生錯誤。\n"
+"可能是舊版的快取檔案。"
+
+msgid "Lambert Zone {0} cache file (.{0})"
+msgstr "蘭勃特區 {0} 快取檔案 (.{0})"
+
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgstr "蘭勃特 CC9 區 {0} 快取檔案 (.CC{0})"
+
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgstr "Guadeloupe Fort-Marigot 快取檔案 (.UTM1)"
+
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgstr "Guadeloupe Ste-Anne 快取檔案 (.UTM2)"
+
+msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgstr "Martinique Fort Desaix 快取檔案 (.UTM3)"
+
+msgid "Reunion RGR92 cache file (.UTM4)"
+msgstr "Reunion RGR92 快取檔案 (.UTM4)"
+
+msgid "CadastreGrabber: Illegal url."
+msgstr "CadastreGrabber: 不合規定的 URL 網址。"
+
+msgid ""
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
+msgstr ""
+"不能開啟新的客戶端 session。\n"
+"伺服器正在維護或是暫時過載。"
+
+msgid ""
+"Town/city {0} not found or not available\n"
+"or action canceled"
+msgstr ""
+"城/鎮 {0} 找不到或無法使用\n"
+"或是動作已取消"
+
+msgid "Choose from..."
+msgstr "選擇自..."
+
+msgid "Select commune"
+msgstr ""
 
 msgid "Downloading {0}"
 msgstr "正在下載 {0}"
@@ -28801,119 +29076,6 @@ msgid ""
 "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 "從法國 Cadastre WMS 下載圖片"
-
-msgid "Cadastre: {0}"
-msgstr "Cadastre: {0}"
-
-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 ""
-"這張圖片包含地理參照資料。\n"
-"你是否想要使用它們?"
-
-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 "{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 "位置 {0} 已經在畫面上。快取未載入。"
-
-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 "<html>輸入鎮、鄉或城市名稱。<br>使用在 www.cadastre.gouv.fr 已知的語法及標點。</html>"
-
-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 "重設 cookie"
-
-msgid "Get a new cookie (session timeout)"
-msgstr "取得新的 cookie (作業階段逾時)"
-
-msgid "Save image as..."
-msgstr "影像另存為..."
-
-msgid "PNG files (*.png)"
-msgstr "PNG 檔案 (*.png)"
-
-msgid "GeoTiff files (*.tif)"
-msgstr "GeoTiff 檔案 (*.tif)"
-
-msgid "Export image (only raster images)"
-msgstr ""
-
 msgid ""
 "Click first corner for image cropping\n"
 "(two points required)"
@@ -28965,19 +29127,6 @@ msgstr "點選剪裁圖片的第二個角落"
 msgid "Click second Lambert crosspiece for georeferencing"
 msgstr ""
 
-msgid "Adjust WMS"
-msgstr "調整 WMS"
-
-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 ""
-"發現一個以上的 WMS 圖層\n"
-"請先選擇它們中的一個,然後重試"
-
 msgid "Reset offset"
 msgstr "重設偏移"
 
@@ -29416,20 +29565,6 @@ msgid ""
 "to cancel the download."
 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 ""
-"選取的區域不能分離,因為它是某個關聯的成員。\n"
-"在分離它之前請先將區域自關聯中移除。"
-
 msgid "TangoGPS Files (*.log)"
 msgstr "TangoGPS 檔案 (*.log)"
 
@@ -32684,7 +32819,7 @@ msgid "Create administrative boundary relations"
 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 ""
@@ -35063,7 +35198,7 @@ msgid "Select last modified nodes"
 msgstr "選擇前次修改的節點"
 
 msgid "Select last modified ways"
-msgstr ""
+msgstr "選擇最後變動路徑"
 
 msgid "Select Way Nodes"
 msgstr "選擇路徑節點"
@@ -35075,7 +35210,7 @@ msgid "Undo selection"
 msgstr "重作選取項目"
 
 msgid "Reselect last added object or selection form history"
-msgstr ""
+msgstr "再次選擇最後新增物件,或從選擇表單歷史"
 
 msgid "Unselect nodes"
 msgstr "取消選取節點"
@@ -35203,26 +35338,6 @@ 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 "顯示先前掃描並上傳到 walking-papers.org 的地圖"
-
-msgid ""
-"Enter a walking-papers.org URL or ID (the bit after the ?id= in the URL)"
-msgstr "輸入 walking-papers.org URL 或 ID (在 URL 中  ?id= 之後的部分)"
-
-msgid "Could not read information from walking-papers.org the id \"{0}\""
-msgstr "無法從 walking-papers.org 讀取 id「{0}」的資訊"
-
-msgid "Walking Papers: {0}"
-msgstr "Walking Papers:{0}"
-
-msgid "Walking Papers layer ({0}) in zoom {1}"
-msgstr "Walking Papers 圖層 ({0}),於縮放 {1}"
-
 msgid "Way Download"
 msgstr "路徑下載"
 
@@ -35391,6 +35506,26 @@ msgid ""
 "objects"
 msgstr "添加與本文對應的維基百科「標籤」至已選擇物件"
 
+msgid "Download from Wikosm API"
+msgstr "從 Wikosm API 下載"
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Wikosm snippet list"
+msgstr "顯示/隱藏Wikosm片段列表"
+
+msgid "help"
+msgstr "說明"
+
+msgid "Server: "
+msgstr "伺服器: "
+
+msgid "Wikidata+OSM server"
+msgstr "Wikidata+OSM 伺服器"
+
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/josm-latest.jnlp b/josm-latest.jnlp
index 4e5d9df..d69c3b5 100644
--- a/josm-latest.jnlp
+++ b/josm-latest.jnlp
@@ -19,7 +19,7 @@
         <all-permissions/>
     </security>
     <resources>
-        <java version="1.8+"/>
+        <java version="1.8+" java-vm-args="--add-modules=java.activation,java.se.ee --add-exports=java.base/sun.security.util=ALL-UNNAMED --add-exports=java.base/sun.security.x509=ALL-UNNAMED --add-exports=java.desktop/com.apple.eawt=ALL-UNNAMED --add-exports=java.desktop/com.sun.imageio.spi=ALL-UNNAMED --add-exports=javafx.graphics/com.sun.javafx.application=ALL-UNNAMED --add-exports=jdk.deploy/com.sun.deploy.config=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=jav [...]
         <jar href="josm-latest.jar"/>
         <property name="java.util.Arrays.useLegacyMergeSort" value="true"/>
     </resources>
diff --git a/josm.jnlp b/josm.jnlp
index f500e73..87f6a19 100644
--- a/josm.jnlp
+++ b/josm.jnlp
@@ -19,7 +19,7 @@
         <all-permissions/>
     </security>
     <resources>
-        <java version="1.8+"/>
+        <java version="1.8+" java-vm-args="--add-modules=java.activation,java.se.ee --add-exports=java.base/sun.security.util=ALL-UNNAMED --add-exports=java.base/sun.security.x509=ALL-UNNAMED --add-exports=java.desktop/com.apple.eawt=ALL-UNNAMED --add-exports=java.desktop/com.sun.imageio.spi=ALL-UNNAMED --add-exports=javafx.graphics/com.sun.javafx.application=ALL-UNNAMED --add-exports=jdk.deploy/com.sun.deploy.config=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=jav [...]
         <jar href="josm-tested.jar"/>
         <property name="java.util.Arrays.useLegacyMergeSort" value="true"/>
     </resources>
diff --git a/linux/latest/usr/bin/josm-latest b/linux/latest/usr/bin/josm-latest
index 5108cab..7645d89 100755
--- a/linux/latest/usr/bin/josm-latest
+++ b/linux/latest/usr/bin/josm-latest
@@ -46,8 +46,8 @@ fi
 
 if [ "$JAVACMD" ]; then
     echo "Using $JAVACMD to execute josm-latest." || true
-    if [[ $JAVACMD == *"java-9"* ]]; then
-        JAVA_OPTS="--add-modules java.se.ee $JAVA_OPTS"
+    if [ "`expr match \"${JAVACMD}\" 'java-9'`" != "0" ]; then
+        JAVA_OPTS="--add-modules java.activation,java.se.ee $JAVA_OPTS"
     fi
     set +e
     while true; do
diff --git a/linux/tested/usr/bin/josm b/linux/tested/usr/bin/josm
index 18dce38..cc2c3e0 100755
--- a/linux/tested/usr/bin/josm
+++ b/linux/tested/usr/bin/josm
@@ -46,8 +46,8 @@ fi
 
 if [ "$JAVACMD" ]; then
     echo "Using $JAVACMD to execute josm." || true
-    if [[ $JAVACMD == *"java-9"* ]]; then
-        JAVA_OPTS="--add-modules java.se.ee $JAVA_OPTS"
+    if [ "`expr match \"${JAVACMD}\" 'java-9'`" != "0" ]; then
+        JAVA_OPTS="--add-modules java.activation,java.se.ee $JAVA_OPTS"
     fi
     set +e
     while true; do
diff --git a/netbeans/nbproject/project.properties b/netbeans/nbproject/project.properties
index 7f46600..3373c80 100644
--- a/netbeans/nbproject/project.properties
+++ b/netbeans/nbproject/project.properties
@@ -42,7 +42,7 @@ file.reference.fest-assert-1.0.jar=../test/lib/fest/fest-assert-1.0.jar
 file.reference.fest-reflect-1.1.jar=../test/lib/fest/fest-reflect-1.1.jar
 file.reference.fest-swing-1.1.jar=../test/lib/fest/fest-swing-1.1.jar
 file.reference.fest-util-1.0.jar=../test/lib/fest/fest-util-1.0.jar
-file.reference.findbugs.jar=../tools/findbugs/findbugs.jar
+file.reference.spotbugs.jar=../tools/spotbugs/spotbugs.jar
 file.reference.guava-21.0.jar=../test/lib/reflections/guava-21.0.jar
 file.reference.hamcrest-core-1.3.jar=../test/lib/junit/hamcrest-core-1.3.jar
 file.reference.javassist-3.21.0-GA.jar=../test/lib/reflections/javassist-3.21.0-GA.jar
@@ -92,7 +92,7 @@ javac.test.classpath=\
     ${file.reference.unitils-core-3.4.6.jar}:\
     ${file.reference.system-rules-1.16.1.jar}:\
     ${file.reference.wiremock-standalone-2.7.1.jar}:\
-    ${file.reference.findbugs.jar}:\
+    ${file.reference.spotbugs.jar}:\
     ${file.reference.commons-testing-2.1.0.jar}
 javac.test.processorpath=\
     ${javac.test.classpath}
diff --git a/scripts/TagInfoExtract.groovy b/scripts/TagInfoExtract.groovy
index b5dc528..03babad 100644
--- a/scripts/TagInfoExtract.groovy
+++ b/scripts/TagInfoExtract.groovy
@@ -16,6 +16,8 @@ import java.nio.file.Path
 import javax.imageio.ImageIO
 
 import org.openstreetmap.josm.Main
+import org.openstreetmap.josm.actions.DeleteAction
+import org.openstreetmap.josm.command.DeleteCommand
 import org.openstreetmap.josm.data.Version
 import org.openstreetmap.josm.data.coor.LatLon
 import org.openstreetmap.josm.data.osm.Node
@@ -42,6 +44,7 @@ import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetType
 import org.openstreetmap.josm.gui.tagging.presets.items.KeyedItem
 import org.openstreetmap.josm.gui.tagging.presets.items.KeyedItem.MatchType
 import org.openstreetmap.josm.io.CachedFile
+import org.openstreetmap.josm.spi.preferences.Config
 import org.openstreetmap.josm.tools.Logging
 import org.openstreetmap.josm.tools.RightAndLefthandTraffic
 import org.openstreetmap.josm.tools.Territories
@@ -379,10 +382,13 @@ class TagInfoExtract {
         Main.determinePlatformHook()
         Logging.setLogLevel(Logging.LEVEL_INFO)
         Main.pref.enableSaveOnPut(false)
+        Config.setPreferencesInstance(Main.pref)
+        Config.setBaseDirectoriesProvider(Main.pref);
         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())
+        DeleteCommand.setDeletionCallback(DeleteAction.defaultDeletionCallback)
         Territories.initialize()
         RightAndLefthandTraffic.initialize()
 
diff --git a/scripts/since_xxx.py b/scripts/since_xxx.py
index 8606a36..b810d0b 100755
--- a/scripts/since_xxx.py
+++ b/scripts/since_xxx.py
@@ -11,23 +11,34 @@ number that is to be expected for the next commit.
 
 import xml.etree.ElementTree as ElementTree
 import subprocess
+import re
 
-svn_info_local = subprocess.check_output("svn info --xml".split(" "))
-rep_url = ElementTree.fromstring(svn_info_local).findtext("./entry/repository/root")
-svn_info_server = subprocess.check_output("svn info --xml".split(" ") + [rep_url])
-rev = int(ElementTree.fromstring(svn_info_server).find("./entry").get("revision")) + 1
-svn_status = subprocess.check_output("svn status --xml".split(" "))
-for el in ElementTree.fromstring(svn_status).findall("./target/entry"):
-    if  el.find('wc-status').get("item") not in ["added", "modified"]:
-        continue
-    path = el.get("path")
-    if not path.endswith('.java'):
-        continue
-    with open(path, 'r') as f:
-        filedata = f.read()
-    filedata2 = filedata.replace("@since xxx", "@since {}".format(rev))
-    if filedata != filedata2:
-        print("replacing '@since xxx' with '@since {}' in '{}'".format(rev, path))
-        with open(path, 'w') as f:
-            f.write(filedata2)
+revision = None
+
+def main():
+    svn_status = subprocess.check_output("svn status --xml".split(" "))
+    for el in ElementTree.fromstring(svn_status).findall("./target/entry"):
+        if  el.find('wc-status').get("item") not in ["added", "modified"]:
+            continue
+        path = el.get("path")
+        if not path.endswith('.java'):
+            continue
+        with open(path, 'r') as f:
+            filedata = f.read()
+        filedata2 = re.sub("@since xxx", lambda _: "@since {}".format(get_revision()), filedata)
+        if filedata != filedata2:
+            print("replacing '@since xxx' with '@since {}' in '{}'".format(get_revision(), path))
+            with open(path, 'w') as f:
+                f.write(filedata2)
+
+def get_revision():
+    global revision
+    if revision is not None:
+        return revision
+    svn_info_local = subprocess.check_output("svn info --xml".split(" "))
+    rep_url = ElementTree.fromstring(svn_info_local).findtext("./entry/repository/root")
+    svn_info_server = subprocess.check_output("svn info --xml".split(" ") + [rep_url])
+    revision = int(ElementTree.fromstring(svn_info_server).find("./entry").get("revision")) + 1
+    return revision
     
+main()
diff --git a/src/gnu/getopt/Getopt.java b/src/gnu/getopt/Getopt.java
index 90b2c6c..51e7705 100644
--- a/src/gnu/getopt/Getopt.java
+++ b/src/gnu/getopt/Getopt.java
@@ -20,11 +20,10 @@
 
 package gnu.getopt;
 
-import static org.openstreetmap.josm.tools.I18n.tr;
-
 import java.text.MessageFormat;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.function.Function;
 
 /**************************************************************************/
 
@@ -581,7 +580,23 @@ Getopt(String progname, String[] argv, String optstring,
 
 /**************************************************************************/
 
+private static Function<String, String> tr = Function.identity();
+
+/**
+ * Set the global translation handler for Getopt.
+ *
+ * This needs to be done before any call to {@link Getopt} or {@link LongOpt}
+ * constructor.
+ * @param tr function that takes messages in English and returns the localized message
+ */
+public static void setI18nHandler(Function<String, String> tr) {
+    Getopt.tr = tr;
+}
+
 static class OptI18n {
+
+    private final Map<String, String> trns = new HashMap<>();
+
     public  OptI18n() {
         add("getopt.ambigious", tr("{0}: option ''{1}'' is ambiguous"));
         add("getopt.arguments1", tr("{0}: option ''--{1}'' does not allow an argument"));
@@ -595,7 +610,9 @@ static class OptI18n {
         add("getopt.invalidValue", tr("Invalid value {0} for parameter ''has_arg''"));
     }
 
-    Map<String, String> trns = new HashMap<String, String>();
+    private String tr(String s) {
+        return Getopt.tr.apply(s);
+    }
 
     private void add(String key, String value) {
         trns.put(key, value);
diff --git a/src/org/apache/commons/jcs/JCS.java b/src/org/apache/commons/jcs/JCS.java
index a51da23..282988b 100644
--- a/src/org/apache/commons/jcs/JCS.java
+++ b/src/org/apache/commons/jcs/JCS.java
@@ -49,65 +49,6 @@ public abstract class JCS
     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
-     * 
-     * @deprecated Duplicate of getInstance(String)
-     */
-    @Deprecated
-	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
-     * 
-     * @deprecated Duplicate of getInstance(String, ICompositeCacheAttributes)
-     */
-    @Deprecated
-	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
-     * 
-     * @deprecated Duplicate of getInstance(String, ICompositeCacheAttributes, IElementAttributes)
-     */
-    @Deprecated
-	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>
@@ -221,7 +162,7 @@ public abstract class JCS
         CompositeCache<K, V> cache = getCacheManager().getCache( region, icca, eattr );
         return new CacheAccess<K, V>( cache );
     }
-    
+
     /**
      * Get a GroupCacheAccess which accesses the provided region.
      * <p>
diff --git a/src/org/apache/commons/jcs/admin/servlet/JCSAdminServlet.java b/src/org/apache/commons/jcs/admin/servlet/JCSAdminServlet.java
deleted file mode 100644
index 8c3ec26..0000000
--- a/src/org/apache/commons/jcs/admin/servlet/JCSAdminServlet.java
+++ /dev/null
@@ -1,180 +0,0 @@
-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
-     *
-     */
-    @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
deleted file mode 100644
index 1c993cb..0000000
--- a/src/org/apache/commons/jcs/admin/servlet/JCSAdminServletDefault.vm
+++ /dev/null
@@ -1,64 +0,0 @@
-## 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
deleted file mode 100644
index 8bbbf06..0000000
--- a/src/org/apache/commons/jcs/admin/servlet/JCSAdminServletRegionDetail.vm
+++ /dev/null
@@ -1,50 +0,0 @@
-## 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/disk/block/BlockDisk.java b/src/org/apache/commons/jcs/auxiliary/disk/block/BlockDisk.java
index 261026a..8d3e046 100644
--- a/src/org/apache/commons/jcs/auxiliary/disk/block/BlockDisk.java
+++ b/src/org/apache/commons/jcs/auxiliary/disk/block/BlockDisk.java
@@ -375,19 +375,6 @@ public class BlockDisk
      * Calculates the file offset for a particular block.
      * <p>
      * @param block number
-     * @return the byte offset for this block in the file as an int; may overflow
-     * @deprecated (since 2.0) use {@link #calculateByteOffsetForBlockAsLong(int)} instead
-     */
-    @Deprecated
-    protected int calculateByteOffsetForBlock( int block )
-    {
-        return block * blockSizeBytes;
-    }
-
-    /**
-     * Calculates the file offset for a particular block.
-     * <p>
-     * @param block number
      * @return the byte offset for this block in the file as a long
      * @since 2.0
      */
diff --git a/src/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCacheAttributes.java b/src/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCacheAttributes.java
index 8eeba42..d14202a 100644
--- a/src/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCacheAttributes.java
+++ b/src/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCacheAttributes.java
@@ -63,10 +63,10 @@ public class JDBCDiskCacheAttributes
     private boolean testBeforeInsert = true;
 
     /** This is the default limit on the maximum number of active connections. */
-    public static final int DEFAULT_MAX_ACTIVE = 10;
+    public static final int DEFAULT_MAX_TOTAL = 10;
 
     /** Max connections allowed */
-    private int maxActive = DEFAULT_MAX_ACTIVE;
+    private int maxTotal = DEFAULT_MAX_TOTAL;
 
     /** This is the default setting for the cleanup routine. */
     public static final int DEFAULT_SHRINKER_INTERVAL_SECONDS = 300;
@@ -243,19 +243,19 @@ public class JDBCDiskCacheAttributes
     }
 
     /**
-     * @param maxActive The maxActive to set.
+     * @param maxTotal The maxTotal to set.
      */
-    public void setMaxActive( int maxActive )
+    public void setMaxTotal( int maxActive )
     {
-        this.maxActive = maxActive;
+        this.maxTotal = maxActive;
     }
 
     /**
-     * @return Returns the maxActive.
+     * @return Returns the maxTotal.
      */
-    public int getMaxActive()
+    public int getMaxTotal()
     {
-        return maxActive;
+        return maxTotal;
     }
 
     /**
@@ -322,7 +322,7 @@ public class JDBCDiskCacheAttributes
         buf.append( "\n DriverClassName [" + getDriverClassName() + "]" );
         buf.append( "\n TableName [" + getTableName() + "]" );
         buf.append( "\n TestBeforeInsert [" + isTestBeforeInsert() + "]" );
-        buf.append( "\n MaxActive [" + getMaxActive() + "]" );
+        buf.append( "\n MaxActive [" + getMaxTotal() + "]" );
         buf.append( "\n AllowRemoveAll [" + isAllowRemoveAll() + "]" );
         buf.append( "\n ShrinkerIntervalSeconds [" + getShrinkerIntervalSeconds() + "]" );
         buf.append( "\n useDiskShrinker [" + isUseDiskShrinker() + "]" );
diff --git a/src/org/apache/commons/jcs/auxiliary/disk/jdbc/dsfactory/SharedPoolDataSourceFactory.java b/src/org/apache/commons/jcs/auxiliary/disk/jdbc/dsfactory/SharedPoolDataSourceFactory.java
index 9345777..d5417a8 100644
--- a/src/org/apache/commons/jcs/auxiliary/disk/jdbc/dsfactory/SharedPoolDataSourceFactory.java
+++ b/src/org/apache/commons/jcs/auxiliary/disk/jdbc/dsfactory/SharedPoolDataSourceFactory.java
@@ -24,9 +24,9 @@ import java.sql.SQLException;
 import javax.sql.ConnectionPoolDataSource;
 import javax.sql.DataSource;
 
-import org.apache.commons.dbcp.cpdsadapter.DriverAdapterCPDS;
-import org.apache.commons.dbcp.datasources.InstanceKeyDataSource;
-import org.apache.commons.dbcp.datasources.SharedPoolDataSource;
+import org.apache.commons.dbcp2.cpdsadapter.DriverAdapterCPDS;
+import org.apache.commons.dbcp2.datasources.InstanceKeyDataSource;
+import org.apache.commons.dbcp2.datasources.SharedPoolDataSource;
 import org.apache.commons.jcs.auxiliary.disk.jdbc.JDBCDiskCacheAttributes;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -79,7 +79,7 @@ public class SharedPoolDataSourceFactory implements DataSourceFactory
         SharedPoolDataSource dataSource = new SharedPoolDataSource();
         initJdbc2Pool(dataSource, config);
         dataSource.setConnectionPoolDataSource(cpds);
-        dataSource.setMaxActive(config.getMaxActive());
+        dataSource.setMaxTotal(config.getMaxTotal());
         this.ds = dataSource;
     }
 
@@ -127,7 +127,6 @@ public class SharedPoolDataSourceFactory implements DataSourceFactory
         cpds.setUrl(config.getUrl());
         cpds.setUser(config.getUserName());
         cpds.setPassword(config.getPassword());
-        cpds.setMaxActive(config.getMaxActive());
 
         return cpds;
     }
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/AbstractRemoteCacheNoWaitFacade.java b/src/org/apache/commons/jcs/auxiliary/remote/AbstractRemoteCacheNoWaitFacade.java
index 30ae72c..da541d5 100644
--- a/src/org/apache/commons/jcs/auxiliary/remote/AbstractRemoteCacheNoWaitFacade.java
+++ b/src/org/apache/commons/jcs/auxiliary/remote/AbstractRemoteCacheNoWaitFacade.java
@@ -30,9 +30,7 @@ import java.util.Set;
 import org.apache.commons.jcs.auxiliary.AbstractAuxiliaryCache;
 import org.apache.commons.jcs.auxiliary.remote.behavior.IRemoteCacheAttributes;
 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.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;
@@ -82,37 +80,6 @@ public abstract class AbstractRemoteCacheNoWaitFacade<K, V>
     }
 
     /**
-     * Constructs with the given remote cache, and fires events to any listeners.
-     * <p>
-     * @param noWaits
-     * @param rca
-     * @param cacheMgr
-     * @param cacheEventLogger
-     * @param elementSerializer
-     * @deprecated Unused parameter cacheMgr scheduled for removal
-     */
-    @Deprecated
-    public AbstractRemoteCacheNoWaitFacade( List<ICache<K, V>> noWaits, RemoteCacheAttributes rca,
-                                    ICompositeCacheManager cacheMgr, ICacheEventLogger cacheEventLogger,
-                                    IElementSerializer elementSerializer )
-    {
-        if ( log.isDebugEnabled() )
-        {
-            log.debug( "CONSTRUCTING NO WAIT FACADE" );
-        }
-        this.remoteCacheAttributes = rca;
-        setCacheEventLogger( cacheEventLogger );
-        setElementSerializer( elementSerializer );
-        this.noWaits = new ArrayList<RemoteCacheNoWait<K,V>>();
-        for (ICache<K, V> nw : noWaits)
-        {
-            RemoteCacheNoWait<K,V> rcnw = (RemoteCacheNoWait<K,V>)nw;
-            ((RemoteCache<K, V>)rcnw.getRemoteCache()).setFacade(this);
-            this.noWaits.add(rcnw);
-        }
-    }
-
-    /**
      * Put an element in the cache.
      * <p>
      * @param ce
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/RemoteCacheNoWaitFacade.java b/src/org/apache/commons/jcs/auxiliary/remote/RemoteCacheNoWaitFacade.java
index eb88eed..3fd4e46 100644
--- a/src/org/apache/commons/jcs/auxiliary/remote/RemoteCacheNoWaitFacade.java
+++ b/src/org/apache/commons/jcs/auxiliary/remote/RemoteCacheNoWaitFacade.java
@@ -24,8 +24,6 @@ import java.util.List;
 import org.apache.commons.jcs.auxiliary.remote.behavior.IRemoteCacheAttributes;
 import org.apache.commons.jcs.auxiliary.remote.server.behavior.RemoteType;
 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;
@@ -68,29 +66,6 @@ public class RemoteCacheNoWaitFacade<K, V>
     }
 
     /**
-     * Constructs with the given remote cache, and fires events to any listeners.
-     * <p>
-     * @param noWaits
-     * @param rca
-     * @param cacheMgr
-     * @param cacheEventLogger
-     * @param elementSerializer
-     * @param cacheFactory
-     * @deprecated Unused parameter cacheMgr scheduled for removal
-     */
-    @Deprecated
-    public RemoteCacheNoWaitFacade( List<ICache<K, V>> noWaits,
-                                    RemoteCacheAttributes rca,
-                                    ICompositeCacheManager cacheMgr,
-                                    ICacheEventLogger cacheEventLogger,
-                                    IElementSerializer elementSerializer,
-                                    RemoteCacheFactory cacheFactory)
-    {
-        super( noWaits, rca, cacheMgr, cacheEventLogger, elementSerializer );
-        this.cacheFactory = cacheFactory;
-    }
-
-    /**
      * Begin the failover process if this is a local cache. Clustered remote caches do not failover.
      * <p>
      * @param rcnw The no wait in error.
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
index 71cd9ec..9862887 100644
--- a/src/org/apache/commons/jcs/auxiliary/remote/http/client/AbstractHttpClient.java
+++ b/src/org/apache/commons/jcs/auxiliary/remote/http/client/AbstractHttpClient.java
@@ -1,7 +1,5 @@
 package org.apache.commons.jcs.auxiliary.remote.http.client;
 
-import java.io.IOException;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -21,14 +19,18 @@ import java.io.IOException;
  * 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 java.io.IOException;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.http.HttpResponse;
+import org.apache.http.HttpVersion;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.config.CookieSpecs;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.methods.HttpUriRequest;
+import org.apache.http.client.methods.RequestBuilder;
+import org.apache.http.impl.client.HttpClientBuilder;
 
 /**
  * This class simply configures the http multithreaded connection manager.
@@ -37,12 +39,12 @@ import org.apache.commons.logging.LogFactory;
  */
 public abstract class AbstractHttpClient
 {
-    /** The connection manager. */
-    private MultiThreadedHttpConnectionManager connectionManager;
-
     /** The client */
     private HttpClient httpClient;
 
+    /** The protocol version */
+    private HttpVersion httpVersion;
+
     /** Configuration settings. */
     private RemoteHttpCacheAttributes remoteHttpCacheAttributes;
 
@@ -58,84 +60,87 @@ public abstract class AbstractHttpClient
     public AbstractHttpClient( RemoteHttpCacheAttributes remoteHttpCacheAttributes )
     {
         this.remoteHttpCacheAttributes = remoteHttpCacheAttributes;
-        this.connectionManager = new MultiThreadedHttpConnectionManager();
-        this.httpClient = new HttpClient(this.connectionManager);
 
-        configureClient();
+        String httpVersion = getRemoteHttpCacheAttributes().getHttpVersion();
+        if ( "1.1".equals( httpVersion ) )
+        {
+            this.httpVersion = HttpVersion.HTTP_1_1;
+        }
+        else if ( "1.0".equals( httpVersion ) )
+        {
+            this.httpVersion = HttpVersion.HTTP_1_0;
+        }
+        else
+        {
+            log.warn( "Unrecognized value for 'httpVersion': [" + httpVersion + "], defaulting to 1.1" );
+            this.httpVersion = HttpVersion.HTTP_1_1;
+        }
+
+        HttpClientBuilder builder = HttpClientBuilder.create();
+        configureClient(builder);
+        this.httpClient = builder.build();
     }
 
     /**
      * Configures the http client.
+     *
+     * @param builder client builder to configure
      */
-    protected void configureClient()
+    protected void configureClient(HttpClientBuilder builder)
     {
         if ( getRemoteHttpCacheAttributes().getMaxConnectionsPerHost() > 0 )
         {
-            this.connectionManager.getParams()
-                .setMaxTotalConnections(getRemoteHttpCacheAttributes().getMaxConnectionsPerHost());
-            this.connectionManager.getParams()
-                .setDefaultMaxConnectionsPerHost(getRemoteHttpCacheAttributes().getMaxConnectionsPerHost());
-        }
-
-        this.connectionManager.getParams().setSoTimeout( getRemoteHttpCacheAttributes().getSocketTimeoutMillis() );
-
-        String httpVersion = getRemoteHttpCacheAttributes().getHttpVersion();
-        if ( httpVersion != null )
-        {
-            if ( "1.1".equals( httpVersion ) )
-            {
-                this.httpClient.getParams().setParameter( "http.protocol.version", HttpVersion.HTTP_1_1 );
-            }
-            else if ( "1.0".equals( httpVersion ) )
-            {
-                this.httpClient.getParams().setParameter( "http.protocol.version", HttpVersion.HTTP_1_0 );
-            }
-            else
-            {
-                log.warn( "Unrecognized value for 'httpVersion': [" + httpVersion + "]" );
-            }
+            builder.setMaxConnTotal(getRemoteHttpCacheAttributes().getMaxConnectionsPerHost());
+            builder.setMaxConnPerRoute(getRemoteHttpCacheAttributes().getMaxConnectionsPerHost());
         }
 
-        this.connectionManager.getParams()
-            .setConnectionTimeout(getRemoteHttpCacheAttributes().getConnectionTimeoutMillis());
-
-        // By default we instruct HttpClient to ignore cookies.
-        this.httpClient.getParams().setCookiePolicy( CookiePolicy.IGNORE_COOKIES );
+        builder.setDefaultRequestConfig(RequestConfig.custom()
+                .setConnectTimeout(getRemoteHttpCacheAttributes().getConnectionTimeoutMillis())
+                .setSocketTimeout(getRemoteHttpCacheAttributes().getSocketTimeoutMillis())
+                // By default we instruct HttpClient to ignore cookies.
+                .setCookieSpec(CookieSpecs.IGNORE_COOKIES)
+                .build());
     }
 
     /**
-     * Extracted method that can be overwritten to do additional things to the post before the call
-     * is made.
+     * Execute the web service call
      * <p>
-     * @param post the post that is about to get executed.
+     * @param builder builder for the post request
+     *
+     * @return the call response
+     *
      * @throws IOException on i/o error
      */
-    protected final void doWebserviceCall( HttpMethod post )
+    protected final HttpResponse doWebserviceCall( RequestBuilder builder )
         throws IOException
     {
-        HttpState httpState = preProcessWebserviceCall( post );
-        this.httpClient.executeMethod( null, post, httpState );
-        postProcessWebserviceCall( post, httpState );
+        preProcessWebserviceCall( builder.setVersion(httpVersion) );
+        HttpUriRequest request = builder.build();
+        HttpResponse httpResponse = this.httpClient.execute( request );
+        postProcessWebserviceCall( request, httpResponse );
+
+        return httpResponse;
     }
 
     /**
-     * Called before the executeMethod on the client.
+     * Called before the execute call on the client.
      * <p>
-     * @param post http method
-     * @return HttpState
+     * @param requestBuilder http method request builder
+     *
      * @throws IOException
      */
-    protected abstract HttpState preProcessWebserviceCall( HttpMethod post )
+    protected abstract void preProcessWebserviceCall( RequestBuilder requestBuilder )
         throws IOException;
 
     /**
-     * Called after the executeMethod on the client.
+     * Called after the execute call on the client.
      * <p>
-     * @param post http method
-     * @param httpState state
+     * @param request http request
+     * @param httpState result of execution
+     *
      * @throws IOException
      */
-    protected abstract void postProcessWebserviceCall( HttpMethod post, HttpState httpState )
+    protected abstract void postProcessWebserviceCall( HttpUriRequest request, HttpResponse httpState )
         throws IOException;
 
     /**
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
index a19ef51..3bf3c99 100644
--- a/src/org/apache/commons/jcs/auxiliary/remote/http/client/RemoteHttpCacheDispatcher.java
+++ b/src/org/apache/commons/jcs/auxiliary/remote/http/client/RemoteHttpCacheDispatcher.java
@@ -20,21 +20,20 @@ package org.apache.commons.jcs.auxiliary.remote.http.client;
  */
 
 import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
-
-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 java.nio.charset.Charset;
+
 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 org.apache.http.HttpException;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.HttpUriRequest;
+import org.apache.http.client.methods.RequestBuilder;
+import org.apache.http.entity.ByteArrayEntity;
+import org.apache.http.util.EntityUtils;
 
 /** Calls the service. */
 public class RemoteHttpCacheDispatcher
@@ -42,7 +41,7 @@ public class RemoteHttpCacheDispatcher
     implements IRemoteCacheDispatcher
 {
     /** Parameter encoding */
-    private static final String DEFAULT_ENCODING = "UTF-8";
+    private static final Charset DEFAULT_ENCODING = Charset.forName("UTF-8");
 
     /** Named of the parameter */
     private static final String PARAMETER_REQUEST_TYPE = "RequestType";
@@ -85,9 +84,9 @@ public class RemoteHttpCacheDispatcher
         {
             byte[] requestAsByteArray = serializer.serialize( remoteCacheRequest );
 
-            String url = addParameters( remoteCacheRequest, getRemoteHttpCacheAttributes().getUrl() );
-
-            byte[] responseAsByteArray = processRequest( requestAsByteArray, url );
+            byte[] responseAsByteArray = processRequest( requestAsByteArray,
+                    remoteCacheRequest,
+                    getRemoteHttpCacheAttributes().getUrl());
 
             RemoteCacheResponse<T> remoteCacheResponse = null;
             try
@@ -107,121 +106,88 @@ public class RemoteHttpCacheDispatcher
     }
 
     /**
-     * @param requestAsByteArray
-     * @param url
+     * Process single request
+     *
+     * @param requestAsByteArray request body
+     * @param remoteCacheRequest the cache request
+     * @param url target url
+     *
      * @return byte[] - the response
+     *
      * @throws IOException
      * @throws HttpException
      */
-    protected byte[] processRequest( byte[] requestAsByteArray, String url )
+    protected <K, V> byte[] processRequest( byte[] requestAsByteArray,
+            RemoteCacheRequest<K, V> remoteCacheRequest, 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;
-    }
+        RequestBuilder builder = RequestBuilder.post( url ).setCharset( DEFAULT_ENCODING );
 
-    /**
-     * @param remoteCacheRequest
-     * @param baseUrl
-     * @return String
-     */
-    protected <K, V> String addParameters( RemoteCacheRequest<K, V> remoteCacheRequest, String baseUrl )
-    {
-        StringBuilder url = new StringBuilder( baseUrl == null ? "" : baseUrl );
-
-        try
+        if ( getRemoteHttpCacheAttributes().isIncludeCacheNameAsParameter()
+            && remoteCacheRequest.getCacheName() != null )
         {
-            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(), DEFAULT_ENCODING ) );
-                }
-            }
-            if ( getRemoteHttpCacheAttributes().isIncludeKeysAndPatternsAsParameter() )
-            {
-                String keyValue = "";
-                switch ( remoteCacheRequest.getRequestType() )
-                {
-                    case GET:
-                    case REMOVE:
-                    case GET_KEYSET:
-                        keyValue = remoteCacheRequest.getKey() + "";
-                        break;
-                    case GET_MATCHING:
-                        keyValue = remoteCacheRequest.getPattern();
-                        break;
-                    case GET_MULTIPLE:
-                        keyValue = remoteCacheRequest.getKeySet() + "";
-                        break;
-                    case UPDATE:
-                        keyValue = remoteCacheRequest.getCacheElement().getKey() + "";
-                        break;
-                    default:
-                        break;
-                }
-                String encodedKeyValue = URLEncoder.encode( keyValue, DEFAULT_ENCODING );
-                url.append( "&" + PARAMETER_KEY + "=" + encodedKeyValue );
-            }
-            if ( getRemoteHttpCacheAttributes().isIncludeRequestTypeasAsParameter() )
-            {
-                url.append( "&"
-                    + PARAMETER_REQUEST_TYPE
-                    + "="
-                    + URLEncoder.encode( remoteCacheRequest.getRequestType().toString(), DEFAULT_ENCODING ) );
-            }
+            builder.addParameter( PARAMETER_CACHE_NAME, remoteCacheRequest.getCacheName() );
         }
-        catch ( UnsupportedEncodingException e )
+        if ( getRemoteHttpCacheAttributes().isIncludeKeysAndPatternsAsParameter() )
         {
-            log.error( "Couldn't encode URL.", e );
+            String keyValue = "";
+            switch ( remoteCacheRequest.getRequestType() )
+            {
+                case GET:
+                case REMOVE:
+                case GET_KEYSET:
+                    keyValue = remoteCacheRequest.getKey().toString();
+                    break;
+                case GET_MATCHING:
+                    keyValue = remoteCacheRequest.getPattern();
+                    break;
+                case GET_MULTIPLE:
+                    keyValue = remoteCacheRequest.getKeySet().toString();
+                    break;
+                case UPDATE:
+                    keyValue = remoteCacheRequest.getCacheElement().getKey().toString();
+                    break;
+                default:
+                    break;
+            }
+            builder.addParameter( PARAMETER_KEY, keyValue );
         }
-
-        if ( log.isDebugEnabled() )
+        if ( getRemoteHttpCacheAttributes().isIncludeRequestTypeasAsParameter() )
         {
-            log.debug( "Url: " + url.toString() );
+            builder.addParameter( PARAMETER_REQUEST_TYPE,
+                remoteCacheRequest.getRequestType().toString() );
         }
 
-        return url.toString();
+        builder.setEntity(new ByteArrayEntity( requestAsByteArray ));
+        HttpResponse httpResponse = doWebserviceCall( builder );
+        byte[] response = EntityUtils.toByteArray( httpResponse.getEntity() );
+        return response;
     }
 
     /**
-     * Called before the executeMethod on the client.
+     * Called before the execute call on the client.
      * <p>
-     * @param post http method
-     * @return HttpState
+     * @param requestBuilder http method request builder
+     *
      * @throws IOException
      */
     @Override
-    protected HttpState preProcessWebserviceCall( HttpMethod post )
+    protected void preProcessWebserviceCall( RequestBuilder requestBuilder )
         throws IOException
     {
         // do nothing. Child can override.
-        return null;
     }
 
     /**
-     * Called after the executeMethod on the client.
+     * Called after the execute call on the client.
      * <p>
-     * @param post http method
-     * @param httpState state
+     * @param request http request
+     * @param httpState result of execution
+     *
      * @throws IOException
      */
     @Override
-    protected void postProcessWebserviceCall( HttpMethod post, HttpState httpState )
+    protected void postProcessWebserviceCall( HttpUriRequest request, HttpResponse httpState )
         throws IOException
     {
         // do nothing. Child can override.
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/server/RemoteCacheServer.java b/src/org/apache/commons/jcs/auxiliary/remote/server/RemoteCacheServer.java
index 271f7ca..507f109 100644
--- a/src/org/apache/commons/jcs/auxiliary/remote/server/RemoteCacheServer.java
+++ b/src/org/apache/commons/jcs/auxiliary/remote/server/RemoteCacheServer.java
@@ -36,7 +36,6 @@ import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.locks.ReentrantLock;
 
 import org.apache.commons.jcs.access.exception.CacheException;
-import org.apache.commons.jcs.auxiliary.remote.RemoteUtils;
 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;
@@ -127,7 +126,7 @@ public class RemoteCacheServer<K, V>
      * Constructor for the RemoteCacheServer object. This initializes the server with the values
      * from the properties object.
      * <p>
-     * @param rcsa 
+     * @param rcsa
      * @param config cache hub configuration
      * @throws RemoteException
      */
@@ -157,69 +156,6 @@ public class RemoteCacheServer<K, V>
     }
 
     /**
-     * Constructor for the RemoteCacheServer object. This initializes the server with the values
-     * from the config file.
-     * <p>
-     * @param rcsa
-     * @throws RemoteException
-     * 
-     * @deprecated Use version with Properties object instead
-     */
-    @Deprecated
-    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
-     * 
-     * @deprecated Use version with Properties object instead
-     */
-    @Deprecated
-    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
-     * 
-     * @deprecated Use version with Properties parameter instead
-     */
-    @Deprecated
-    private void init( String propFile ) throws RemoteException
-    {
-        String propFileName = propFile == null ? DFEAULT_REMOTE_CONFIGURATION_FILE : propFile;
-        
-        Properties prop = null;
-        try
-        {
-            prop = RemoteUtils.loadProps(propFileName);
-        }
-        catch (IOException e)
-        {
-            throw new RemoteException(e.getMessage(), e);
-        }
-        
-        init(prop);
-    }
-    
-    /**
      * Initialize the RMI Cache Server from a properties object.
      * <p>
      * @param prop the configuration properties
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/server/RemoteCacheServerFactory.java b/src/org/apache/commons/jcs/auxiliary/remote/server/RemoteCacheServerFactory.java
index 2b6f1a3..e0c616e 100644
--- a/src/org/apache/commons/jcs/auxiliary/remote/server/RemoteCacheServerFactory.java
+++ b/src/org/apache/commons/jcs/auxiliary/remote/server/RemoteCacheServerFactory.java
@@ -94,56 +94,6 @@ public class RemoteCacheServerFactory
      * <p>
      * A remote cache is either a local cache or a cluster cache.
      * <p>
-     * @param host the host name 
-     * @param port the port number
-     * @param propFile the remote cache hub configuration file
-     * @throws IOException
-     * 
-     * @deprecated Use startup(String, int, Properties) instead
-     */
-    @Deprecated
-    public static void startup( String host, int port, String propFile )
-        throws IOException
-    {
-        if ( log.isInfoEnabled() )
-        {
-            log.info( "ConfigFileName = [" + propFile + "]" );
-        }
-        Properties props = RemoteUtils.loadProps( propFile );
-        startup(host, port, props);
-    }
-
-    /**
-     * 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 the host name 
-     * @param port the port number
-     * @param props the remote cache hub configuration
-     * @param propFile the remote cache hub configuration file
-     * @throws IOException
-     * 
-     * @deprecated Use startup(String, int, Properties) instead
-     */
-    @Deprecated
-    public static void startup( String host, int port, Properties props, String propFile )
-        throws IOException
-    {
-        if ( log.isWarnEnabled() )
-        {
-            log.warn( "ConfigFileName = [" + propFile + "] ignored" );
-        }
-        startup(host, port, props);
-    }
-
-    /**
-     * 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
@@ -516,12 +466,12 @@ public class RemoteCacheServerFactory
 
     /**
      * Look up the remote cache service admin instance
-     *  
+     *
      * @param config the configuration properties
      * @param port the local port
      * @return the admin object instance
-     * 
-     * @throws Exception if lookup fails 
+     *
+     * @throws Exception if lookup fails
      */
     private static ICacheServiceAdmin lookupCacheServiceAdmin(Properties config, int port) throws Exception
     {
@@ -537,10 +487,10 @@ public class RemoteCacheServerFactory
         {
             log.debug( "server found" );
         }
-        
+
         return (ICacheServiceAdmin) obj;
     }
-    
+
     /**
      * @param serviceName the serviceName to set
      */
diff --git a/src/org/apache/commons/jcs/engine/AbstractCacheEventQueue.java b/src/org/apache/commons/jcs/engine/AbstractCacheEventQueue.java
index 9f37b0c..55b0af8 100644
--- a/src/org/apache/commons/jcs/engine/AbstractCacheEventQueue.java
+++ b/src/org/apache/commons/jcs/engine/AbstractCacheEventQueue.java
@@ -102,33 +102,6 @@ public abstract class AbstractCacheEventQueue<K, V>
     }
 
     /**
-     * If they queue has an active thread it is considered alive.
-     * <p>
-     * @return The alive value
-     * 
-     * @deprecated The alive-logic is not used 
-     */
-    @Deprecated
-	@Override
-    public boolean isAlive()
-    {
-        return true;
-    }
-
-    /**
-     * Sets whether the queue is actively processing -- if there are working threads.
-     * <p>
-     * @param aState
-     * 
-     * @deprecated The alive-logic is not used 
-     */
-    @Deprecated
-	public void setAlive( boolean aState )
-    {
-        // do nothing
-    }
-
-    /**
      * @return The listenerId value
      */
     @Override
diff --git a/src/org/apache/commons/jcs/engine/behavior/ICacheEventQueue.java b/src/org/apache/commons/jcs/engine/behavior/ICacheEventQueue.java
index a29ed33..3676385 100644
--- a/src/org/apache/commons/jcs/engine/behavior/ICacheEventQueue.java
+++ b/src/org/apache/commons/jcs/engine/behavior/ICacheEventQueue.java
@@ -95,15 +95,6 @@ public interface ICacheEventQueue<K, V>
     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
diff --git a/src/org/apache/commons/jcs/engine/memory/util/DefaultMemoryElementDescriptor.java b/src/org/apache/commons/jcs/engine/memory/util/DefaultMemoryElementDescriptor.java
deleted file mode 100644
index e06b2f6..0000000
--- a/src/org/apache/commons/jcs/engine/memory/util/DefaultMemoryElementDescriptor.java
+++ /dev/null
@@ -1,45 +0,0 @@
-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;
-
-/**
- * This wrapper is needed for double linked lists.
- *
- * @deprecated Use MemoryElementDescriptor directly
- */
- at Deprecated
-public class DefaultMemoryElementDescriptor<K, V>
-    extends MemoryElementDescriptor<K, V>
-{
-    /** Don't change */
-    private static final long serialVersionUID = -1905161209035522460L;
-
-    /**
-     * Constructs a usable MemoryElementDescriptor.
-     * <p>
-     * @param ce
-     */
-    public DefaultMemoryElementDescriptor( ICacheElement<K, V> ce )
-    {
-        super( ce );
-    }
-}
diff --git a/src/org/apache/commons/jcs/utils/config/PropertySetter.java b/src/org/apache/commons/jcs/utils/config/PropertySetter.java
index f33800d..c6502e4 100644
--- a/src/org/apache/commons/jcs/utils/config/PropertySetter.java
+++ b/src/org/apache/commons/jcs/utils/config/PropertySetter.java
@@ -1,5 +1,14 @@
 package org.apache.commons.jcs.utils.config;
 
+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;
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -22,15 +31,6 @@ package org.apache.commons.jcs.utils.config;
 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
@@ -265,7 +265,6 @@ public class PropertySetter
         }
         else if( type.isEnum() )
         {
-            @SuppressWarnings("unchecked") // type check in if()
             Enum<?> en = Enum.valueOf(type.asSubclass(Enum.class), v );
             return en;
         }
diff --git a/src/org/apache/commons/jcs/utils/threadpool/ThreadPoolManager.java b/src/org/apache/commons/jcs/utils/threadpool/ThreadPoolManager.java
index 93ca842..44a73bb 100644
--- a/src/org/apache/commons/jcs/utils/threadpool/ThreadPoolManager.java
+++ b/src/org/apache/commons/jcs/utils/threadpool/ThreadPoolManager.java
@@ -107,7 +107,7 @@ public class ThreadPoolManager
     {
     	return createPool(config, threadNamePrefix, Thread.NORM_PRIORITY);
     }
-    
+
     /**
      * Creates a pool based on the configuration info.
      * <p>
@@ -183,12 +183,12 @@ public class ThreadPoolManager
     public ScheduledExecutorService createSchedulerPool( PoolConfiguration config, String threadNamePrefix, int threadPriority )
     {
     	ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(
-    			config.getMaximumPoolSize(), 
+    			config.getMaximumPoolSize(),
     			new DaemonThreadFactory(threadNamePrefix, threadPriority));
 
         return scheduler;
     }
-    
+
     /**
      * 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.
@@ -222,7 +222,7 @@ public class ThreadPoolManager
                     log.warn("Failed to close pool " + pool, t);
                 }
             }
-            
+
             for ( ScheduledExecutorService pool : INSTANCE.schedulerPools.values() )
             {
                 try
@@ -234,7 +234,7 @@ public class ThreadPoolManager
                     log.warn("Failed to close pool " + pool, t);
                 }
             }
-            
+
             INSTANCE = null;
         }
     }
@@ -280,23 +280,6 @@ public class ThreadPoolManager
 
         return pool;
     }
-    
-    /**
-     * 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.
-     * 
-     * @deprecated Use getExecutorService() instead
-     */
-    @Deprecated
-	public ThreadPoolExecutor getPool( String name )
-    {
-    	return (ThreadPoolExecutor) getExecutorService(name);
-    }
 
     /**
      * Returns a scheduler pool by name. If a pool by this name does not exist in the configuration file or
@@ -389,7 +372,7 @@ public class ThreadPoolManager
     {
     	return loadConfig(root, defaultConfig);
     }
-    
+
     /**
      * Configures the PoolConfiguration settings.
      * <p>
diff --git a/src/org/openstreetmap/josm/CLIModule.java b/src/org/openstreetmap/josm/CLIModule.java
new file mode 100644
index 0000000..721236d
--- /dev/null
+++ b/src/org/openstreetmap/josm/CLIModule.java
@@ -0,0 +1,27 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm;
+
+/**
+ * A command line interface module.
+ * <p>
+ * The user can provide an action keyword as first argument. This will invoke the
+ * corresponding {@code CLIModule}, which has its own set of options and will do
+ * a specific job.
+ * @since 12793
+ */
+public interface CLIModule {
+
+    /**
+     * Get the action keyword that the user needs to provide as first command
+     * line argument to invoke this module.
+     * @return the action keyword of this module
+     */
+    String getActionKeyword();
+
+    /**
+     * Process the remaining command line arguments and run any of the requested actions.
+     * @param argArray command line arguments without the initial action keyword
+     */
+    void processArguments(String[] argArray);
+
+}
diff --git a/src/org/openstreetmap/josm/Main.java b/src/org/openstreetmap/josm/Main.java
index 3a1c69e..70c71b3 100644
--- a/src/org/openstreetmap/josm/Main.java
+++ b/src/org/openstreetmap/josm/Main.java
@@ -16,7 +16,6 @@ import java.util.EnumSet;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
-import java.util.Locale;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
@@ -32,8 +31,9 @@ import org.openstreetmap.josm.actions.JosmAction;
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.Preferences;
 import org.openstreetmap.josm.data.UndoRedoHandler;
-import org.openstreetmap.josm.data.cache.JCSCacheManager;
-import org.openstreetmap.josm.data.coor.CoordinateFormat;
+import org.openstreetmap.josm.data.coor.conversion.CoordinateFormatManager;
+import org.openstreetmap.josm.data.coor.conversion.DecimalDegreesCoordinateFormat;
+import org.openstreetmap.josm.data.coor.conversion.ICoordinateFormat;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.projection.Projection;
@@ -48,13 +48,14 @@ import org.openstreetmap.josm.gui.preferences.ToolbarPreferences;
 import org.openstreetmap.josm.io.FileWatcher;
 import org.openstreetmap.josm.io.OnlineResource;
 import org.openstreetmap.josm.io.OsmApi;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.JosmRuntimeException;
 import org.openstreetmap.josm.tools.Logging;
+import org.openstreetmap.josm.tools.Platform;
 import org.openstreetmap.josm.tools.PlatformHook;
 import org.openstreetmap.josm.tools.PlatformHookOsx;
-import org.openstreetmap.josm.tools.PlatformHookUnixoid;
 import org.openstreetmap.josm.tools.PlatformHookWindows;
 import org.openstreetmap.josm.tools.Shortcut;
 import org.openstreetmap.josm.tools.Utils;
@@ -136,7 +137,7 @@ public abstract class Main {
     /**
      * The commands undo/redo handler.
      */
-    public final UndoRedoHandler undoRedo = MainApplication.undoRedo;
+    public final UndoRedoHandler undoRedo = new UndoRedoHandler();
 
     /**
      * The main menu bar at top of screen.
@@ -629,13 +630,26 @@ public abstract class Main {
     }
 
     /**
-     * Gets the data set of the active edit layer.
-     * @return That data set, <code>null</code> if there is no edit layer.
+     * Gets the active edit data set.
+     * @return That data set, <code>null</code>.
      * @since 12691
      */
-    public DataSet getEditDataSet() {
-        return null;
-    }
+    public abstract DataSet getEditDataSet();
+
+    /**
+     * Sets the active data set.
+     * @param ds New edit data set, or <code>null</code>
+     * @since 12718
+     */
+    public abstract void setEditDataSet(DataSet ds);
+
+    /**
+     * Determines if the list of data sets managed by JOSM contains {@code ds}.
+     * @param ds the data set to look for
+     * @return {@code true} if the list of data sets managed by JOSM contains {@code ds}
+     * @since 12718
+     */
+    public abstract boolean containsDataSet(DataSet ds);
 
     /**
      * Registers a {@code JosmAction} and its shortcut.
@@ -710,12 +724,11 @@ public abstract class Main {
      */
     public static void preConstructorInit() {
         // init default coordinate format
-        try {
-            CoordinateFormat.setCoordinateFormat(CoordinateFormat.valueOf(Main.pref.get("coordinates")));
-        } catch (IllegalArgumentException iae) {
-            Logging.trace(iae);
-            CoordinateFormat.setCoordinateFormat(CoordinateFormat.DECIMAL_DEGREES);
+        ICoordinateFormat fmt = CoordinateFormatManager.getCoordinateFormat(Config.getPref().get("coordinates"));
+        if (fmt == null) {
+            fmt = DecimalDegreesCoordinateFormat.INSTANCE;
         }
+        CoordinateFormatManager.setCoordinateFormat(fmt);
     }
 
     /**
@@ -742,7 +755,6 @@ public abstract class Main {
     protected void shutdown() {
         if (!GraphicsEnvironment.isHeadless()) {
             ImageProvider.shutdown(false);
-            JCSCacheManager.shutdown();
         }
         try {
             pref.saveDefaults();
@@ -759,22 +771,7 @@ public abstract class Main {
      * @since 1849
      */
     public static void determinePlatformHook() {
-        String os = System.getProperty("os.name");
-        if (os == null) {
-            Logging.warn("Your operating system has no name, so I'm guessing its some kind of *nix.");
-            platform = new PlatformHookUnixoid();
-        } 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(Locale.ENGLISH).startsWith("mac os x")) {
-            platform = new PlatformHookOsx();
-        } else {
-            Logging.warn("I don't know your operating system '"+os+"', so I'm guessing its some kind of *nix.");
-            platform = new PlatformHookUnixoid();
-        }
+        platform = Platform.determinePlatform().accept(PlatformHook.CONSTRUCT_FROM_PLATFORM);
     }
 
     /* ----------------------------------------------------------------------------------------- */
@@ -1010,8 +1007,8 @@ public abstract class Main {
      * @since 6897
      */
     public static String getJOSMWebsite() {
-        if (Main.pref != null)
-            return Main.pref.get("josm.url", JOSM_WEBSITE);
+        if (Config.getPref() != null)
+            return Config.getPref().get("josm.url", JOSM_WEBSITE);
         return JOSM_WEBSITE;
     }
 
@@ -1031,8 +1028,8 @@ public abstract class Main {
      * @since 6897
      */
     public static String getOSMWebsite() {
-        if (Main.pref != null)
-            return Main.pref.get("osm.url", OSM_WEBSITE);
+        if (Config.getPref() != null)
+            return Config.getPref().get("osm.url", OSM_WEBSITE);
         return OSM_WEBSITE;
     }
 
@@ -1055,8 +1052,8 @@ public abstract class Main {
      * @since 7678
      */
     public static String getBaseBrowseUrl() {
-        if (Main.pref != null)
-            return Main.pref.get("osm-browse.url", getOSMWebsiteDependingOnSelectedApi());
+        if (Config.getPref() != null)
+            return Config.getPref().get("osm-browse.url", getOSMWebsiteDependingOnSelectedApi());
         return getOSMWebsiteDependingOnSelectedApi();
     }
 
@@ -1066,8 +1063,8 @@ public abstract class Main {
      * @since 7678
      */
     public static String getBaseUserUrl() {
-        if (Main.pref != null)
-            return Main.pref.get("osm-user.url", getOSMWebsiteDependingOnSelectedApi() + "/user");
+        if (Config.getPref() != null)
+            return Config.getPref().get("osm-user.url", getOSMWebsiteDependingOnSelectedApi() + "/user");
         return getOSMWebsiteDependingOnSelectedApi() + "/user";
     }
 
diff --git a/src/org/openstreetmap/josm/actions/AddNodeAction.java b/src/org/openstreetmap/josm/actions/AddNodeAction.java
index 54b786d..90fe9a9 100644
--- a/src/org/openstreetmap/josm/actions/AddNodeAction.java
+++ b/src/org/openstreetmap/josm/actions/AddNodeAction.java
@@ -11,6 +11,7 @@ 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.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.gui.MainApplication;
@@ -65,8 +66,9 @@ public final class AddNodeAction extends JosmAction {
         Node nnew = new Node(coordinates);
 
         // add the node
-        MainApplication.undoRedo.add(new AddCommand(nnew));
-        getLayerManager().getEditDataSet().setSelected(nnew);
+        DataSet ds = getLayerManager().getEditDataSet();
+        MainApplication.undoRedo.add(new AddCommand(ds, nnew));
+        ds.setSelected(nnew);
         MapView mapView = MainApplication.getMap().mapView;
         if (mapView != null && !mapView.getRealBounds().contains(nnew.getCoor())) {
             AutoScaleAction.zoomTo(Collections.<OsmPrimitive>singleton(nnew));
diff --git a/src/org/openstreetmap/josm/actions/AutoScaleAction.java b/src/org/openstreetmap/josm/actions/AutoScaleAction.java
index 6cc1db7..e544d7e 100644
--- a/src/org/openstreetmap/josm/actions/AutoScaleAction.java
+++ b/src/org/openstreetmap/josm/actions/AutoScaleAction.java
@@ -36,6 +36,7 @@ import org.openstreetmap.josm.gui.dialogs.ConflictDialog;
 import org.openstreetmap.josm.gui.dialogs.LayerListDialog;
 import org.openstreetmap.josm.gui.dialogs.ValidatorDialog.ValidatorBoundingXYVisitor;
 import org.openstreetmap.josm.gui.layer.Layer;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Shortcut;
 
@@ -261,7 +262,7 @@ public class AutoScaleAction extends JosmAction {
         v.visit(error);
         if (v.getBounds() == null)
             return null;
-        v.enlargeBoundingBox(Main.pref.getDouble("validator.zoom-enlarge-bbox", 0.0002));
+        v.enlargeBoundingBox(Config.getPref().getDouble("validator.zoom-enlarge-bbox", 0.0002));
         return v;
     }
 
@@ -313,13 +314,13 @@ public class AutoScaleAction extends JosmAction {
         v.enlargeBoundingBoxLogarithmically(100);
         // Make the bounding box at least 100 meter wide to
         // ensure reasonable zoom level when zooming onto single nodes.
-        v.enlargeToMinSize(Main.pref.getDouble("zoom_to_selection_min_size_in_meter", 100));
+        v.enlargeToMinSize(Config.getPref().getDouble("zoom_to_selection_min_size_in_meter", 100));
         return v;
     }
 
     private BoundingXYVisitor modeDownload(BoundingXYVisitor v) {
         if (lastZoomTime > 0 &&
-                System.currentTimeMillis() - lastZoomTime > Main.pref.getLong("zoom.bounds.reset.time", TimeUnit.SECONDS.toMillis(10))) {
+                System.currentTimeMillis() - lastZoomTime > Config.getPref().getLong("zoom.bounds.reset.time", TimeUnit.SECONDS.toMillis(10))) {
             lastZoomTime = -1;
         }
         final DataSet dataset = getLayerManager().getEditDataSet();
diff --git a/src/org/openstreetmap/josm/actions/CreateCircleAction.java b/src/org/openstreetmap/josm/actions/CreateCircleAction.java
index 3a68c20..9a729bf 100644
--- a/src/org/openstreetmap/josm/actions/CreateCircleAction.java
+++ b/src/org/openstreetmap/josm/actions/CreateCircleAction.java
@@ -24,6 +24,7 @@ import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.SequenceCommand;
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.coor.LatLon;
+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;
@@ -129,14 +130,8 @@ public final class CreateCircleAction extends JosmAction {
         if (!isEnabled())
             return;
 
-        int numberOfNodesInCircle = Main.pref.getInteger("createcircle.nodecount", 16);
-        if (numberOfNodesInCircle < 1) {
-            numberOfNodesInCircle = 1;
-        } else if (numberOfNodesInCircle > 100) {
-            numberOfNodesInCircle = 100;
-        }
-
-        Collection<OsmPrimitive> sel = getLayerManager().getEditDataSet().getSelected();
+        DataSet ds = getLayerManager().getEditDataSet();
+        Collection<OsmPrimitive> sel = ds.getSelected();
         List<Node> nodes = OsmPrimitive.getFilteredList(sel, Node.class);
         List<Way> ways = OsmPrimitive.getFilteredList(sel, Way.class);
 
@@ -166,17 +161,10 @@ public final class CreateCircleAction extends JosmAction {
 
         if (nodes.size() == 2) {
             // diameter: two single nodes needed or a way with two nodes
-            Node n1 = nodes.get(0);
-            double x1 = n1.getEastNorth().east();
-            double y1 = n1.getEastNorth().north();
-            Node n2 = nodes.get(1);
-            double x2 = n2.getEastNorth().east();
-            double y2 = n2.getEastNorth().north();
-
-            // calculate the center (xc/yc)
-            double xc = 0.5 * (x1 + x2);
-            double yc = 0.5 * (y1 + y2);
-            center = new EastNorth(xc, yc);
+            EastNorth n1 = nodes.get(0).getEastNorth();
+            EastNorth n2 = nodes.get(1).getEastNorth();
+
+            center = n1.getCenter(n2);
         } else {
             // triangle: three single nodes needed or a way with three nodes
             center = Geometry.getCenter(nodes);
@@ -188,8 +176,23 @@ 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 = n1.distance(center);
+
+        // see #10777
+        LatLon ll1 = Main.getProjection().eastNorth2latlon(n1);
+        LatLon ll2 = Main.getProjection().eastNorth2latlon(center);
+
+        double radiusInMeters = ll1.greatCircleDistance(ll2);
+
+        int numberOfNodesInCircle = (int) Math.ceil(6.0 * Math.pow(radiusInMeters, 0.5));
+        // an odd number of nodes makes the distribution uneven
+        if ((numberOfNodesInCircle % 2) == 1) {
+            // add 1 to make it even
+            numberOfNodesInCircle += 1;
+        }
+        if (numberOfNodesInCircle < 6) {
+            numberOfNodesInCircle = 6;
+        }
 
         // Order nodes by angle
         PolarNode[] angles = new PolarNode[nodes.size()];
@@ -221,7 +224,7 @@ public final class CreateCircleAction extends JosmAction {
                 }
                 Node n = new Node(ll);
                 nodesToAdd.add(n);
-                cmds.add(new AddCommand(n));
+                cmds.add(new AddCommand(ds, n));
             }
         }
         nodesToAdd.add(nodesToAdd.get(0)); // close the circle
@@ -233,11 +236,11 @@ public final class CreateCircleAction extends JosmAction {
         if (existingWay == null) {
             Way newWay = new Way();
             newWay.setNodes(nodesToAdd);
-            cmds.add(new AddCommand(newWay));
+            cmds.add(new AddCommand(ds, newWay));
         } else {
             Way newWay = new Way(existingWay);
             newWay.setNodes(nodesToAdd);
-            cmds.add(new ChangeCommand(existingWay, newWay));
+            cmds.add(new ChangeCommand(ds, existingWay, newWay));
         }
 
         MainApplication.undoRedo.add(new SequenceCommand(tr("Create Circle"), cmds));
diff --git a/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java b/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java
index df94ec7..2690953 100644
--- a/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java
+++ b/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java
@@ -20,7 +20,6 @@ import java.util.TreeSet;
 import javax.swing.JOptionPane;
 import javax.swing.SwingUtilities;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.relation.DownloadSelectedIncompleteMembersAction;
 import org.openstreetmap.josm.command.AddCommand;
 import org.openstreetmap.josm.command.ChangeCommand;
@@ -42,6 +41,7 @@ import org.openstreetmap.josm.gui.dialogs.relation.DownloadRelationTask;
 import org.openstreetmap.josm.gui.dialogs.relation.RelationEditor;
 import org.openstreetmap.josm.gui.dialogs.relation.sort.RelationSorter;
 import org.openstreetmap.josm.gui.util.GuiHelper;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Pair;
 import org.openstreetmap.josm.tools.Shortcut;
 import org.openstreetmap.josm.tools.Utils;
@@ -114,7 +114,7 @@ public class CreateMultipolygonAction extends JosmAction {
                     // uses 'SwingUtilities.invokeLater' to fire events so we have to do the same.)
                     SwingUtilities.invokeLater(() -> {
                             MainApplication.getMap().relationListDialog.selectRelation(relation);
-                            if (Main.pref.getBoolean("multipoly.show-relation-editor", false)) {
+                            if (Config.getPref().getBoolean("multipoly.show-relation-editor", false)) {
                                 //Open relation edit window, if set up in preferences
                                 RelationEditor editor = RelationEditor.getEditor(
                                         MainApplication.getLayerManager().getEditLayer(), relation, null);
@@ -247,7 +247,7 @@ public class CreateMultipolygonAction extends JosmAction {
         final List<Command> list = removeTagsFromWaysIfNeeded(relation);
         final String commandName;
         if (existingRelation == null) {
-            list.add(new AddCommand(relation));
+            list.add(new AddCommand(selectedWays.iterator().next().getDataSet(), relation));
             commandName = getName(false);
         } else {
             list.add(new ChangeCommand(existingRelation, relation));
@@ -381,7 +381,7 @@ public class CreateMultipolygonAction extends JosmAction {
         }
 
         // filter out empty key conflicts - we need second iteration
-        if (!Main.pref.getBoolean("multipoly.alltags", false)) {
+        if (!Config.getPref().getBoolean("multipoly.alltags", false)) {
             for (RelationMember m : relation.getMembers()) {
                 if (m.hasRole() && "outer".equals(m.getRole()) && m.isWay()) {
                     for (String key : values.keySet()) {
@@ -397,7 +397,7 @@ public class CreateMultipolygonAction extends JosmAction {
             values.remove(key);
         }
 
-        for (String linearTag : Main.pref.getCollection("multipoly.lineartagstokeep", DEFAULT_LINEAR_TAGS)) {
+        for (String linearTag : Config.getPref().getList("multipoly.lineartagstokeep", DEFAULT_LINEAR_TAGS)) {
             values.remove(linearTag);
         }
 
@@ -407,7 +407,7 @@ public class CreateMultipolygonAction extends JosmAction {
         values.put("area", OsmUtils.TRUE_VALUE);
 
         List<Command> commands = new ArrayList<>();
-        boolean moveTags = Main.pref.getBoolean("multipoly.movetags", true);
+        boolean moveTags = Config.getPref().getBoolean("multipoly.movetags", true);
 
         for (Entry<String, String> entry : values.entrySet()) {
             List<OsmPrimitive> affectedWays = new ArrayList<>();
diff --git a/src/org/openstreetmap/josm/actions/DeleteAction.java b/src/org/openstreetmap/josm/actions/DeleteAction.java
index 530143b..b117b5f 100644
--- a/src/org/openstreetmap/josm/actions/DeleteAction.java
+++ b/src/org/openstreetmap/josm/actions/DeleteAction.java
@@ -3,14 +3,27 @@ package org.openstreetmap.josm.actions;
 
 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.GridBagLayout;
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
 import java.util.Collection;
 
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.command.DeleteCommand.DeletionCallback;
+import org.openstreetmap.josm.data.osm.DefaultNameFormatter;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.Relation;
+import org.openstreetmap.josm.data.osm.RelationToChildReference;
+import org.openstreetmap.josm.gui.ConditionalOptionPaneUtil;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.MapFrame;
+import org.openstreetmap.josm.gui.dialogs.DeleteFromRelationConfirmationDialog;
+import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
 import org.openstreetmap.josm.tools.Shortcut;
 
 /**
@@ -20,6 +33,31 @@ import org.openstreetmap.josm.tools.Shortcut;
 public final class DeleteAction extends JosmAction {
 
     /**
+     * The default {@link DeletionCallback} for {@code DeleteCommand}.
+     * @since 12760
+     */
+    public static final DeletionCallback defaultDeletionCallback = new DeletionCallback() {
+        @Override
+        public boolean checkAndConfirmOutlyingDelete(Collection<? extends OsmPrimitive> primitives,
+                Collection<? extends OsmPrimitive> ignore) {
+            return DeleteAction.checkAndConfirmOutlyingDelete(primitives, ignore);
+        }
+
+        @Override
+        public boolean confirmRelationDeletion(Collection<Relation> relations) {
+            return DeleteAction.confirmRelationDeletion(relations);
+        }
+
+        @Override
+        public boolean confirmDeletionFromRelation(Collection<RelationToChildReference> references) {
+            DeleteFromRelationConfirmationDialog dialog = DeleteFromRelationConfirmationDialog.getInstance();
+            dialog.getModel().populate(references);
+            dialog.setVisible(true);
+            return !dialog.isCanceled();
+        }
+    };
+
+    /**
      * Constructs a new {@code DeleteAction}.
      */
     public DeleteAction() {
@@ -45,4 +83,59 @@ public final class DeleteAction extends JosmAction {
     protected void updateEnabledState(Collection<? extends OsmPrimitive> selection) {
         setEnabled(selection != null && !selection.isEmpty());
     }
+
+    /**
+     * Check whether user is about to delete data outside of the download area.
+     * Request confirmation if he is.
+     * @param primitives the primitives to operate on
+     * @param ignore {@code null} or a primitive to be ignored
+     * @return true, if operating on outlying primitives is OK; false, otherwise
+     * @since 12749 (moved from DeleteCommand)
+     */
+    public static boolean checkAndConfirmOutlyingDelete(Collection<? extends OsmPrimitive> primitives,
+            Collection<? extends OsmPrimitive> ignore) {
+        return checkAndConfirmOutlyingOperation("delete",
+                tr("Delete confirmation"),
+                tr("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?"),
+                tr("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?"),
+                primitives, ignore);
+    }
+
+    /**
+     * Confirm before deleting a relation, as it is a common newbie error.
+     * @param relations relation to check for deletion
+     * @return {@code true} if user confirms the deletion
+     * @since 12760
+     */
+    public static boolean confirmRelationDeletion(Collection<Relation> relations) {
+        JPanel msg = new JPanel(new GridBagLayout());
+        msg.add(new JMultilineLabel("<html>" + trn(
+                "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?",
+                "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?",
+                relations.size(), relations.size(), DefaultNameFormatter.getInstance().formatAsHtmlUnorderedList(relations, 20))
+                + "</html>"));
+        return ConditionalOptionPaneUtil.showConfirmationDialog(
+                "delete_relations",
+                Main.parent,
+                msg,
+                tr("Delete relation?"),
+                JOptionPane.YES_NO_OPTION,
+                JOptionPane.QUESTION_MESSAGE,
+                JOptionPane.YES_OPTION);
+    }
 }
diff --git a/src/org/openstreetmap/josm/actions/DialogsToggleAction.java b/src/org/openstreetmap/josm/actions/DialogsToggleAction.java
index 4d0e4d6..af67d42 100644
--- a/src/org/openstreetmap/josm/actions/DialogsToggleAction.java
+++ b/src/org/openstreetmap/josm/actions/DialogsToggleAction.java
@@ -7,9 +7,9 @@ import static org.openstreetmap.josm.tools.I18n.tr;
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.MapFrame;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Shortcut;
 
@@ -35,14 +35,14 @@ public class DialogsToggleAction extends ToggleAction {
               false
         );
         putValue("help", ht("/ToggleDialogs"));
-        setSelected(Main.pref.getBoolean("draw.dialogspanel", true));
+        setSelected(Config.getPref().getBoolean("draw.dialogspanel", true));
         notifySelectedState();
     }
 
     @Override
     public void actionPerformed(ActionEvent e) {
         toggleSelectedState(e);
-        Main.pref.put("draw.dialogspanel", isSelected());
+        Config.getPref().putBoolean("draw.dialogspanel", isSelected());
         notifySelectedState();
         setMode();
     }
@@ -51,19 +51,19 @@ public class DialogsToggleAction extends ToggleAction {
         if (MainApplication.isDisplayingMapView()) {
             boolean selected = isSelected();
             if (!selected) {
-                toolbarPreviouslyVisible = Main.pref.getBoolean("toolbar.visible", true);
-                sideToolbarPreviouslyVisible = Main.pref.getBoolean("sidetoolbar.visible", true);
+                toolbarPreviouslyVisible = Config.getPref().getBoolean("toolbar.visible", true);
+                sideToolbarPreviouslyVisible = Config.getPref().getBoolean("sidetoolbar.visible", true);
             }
             MapFrame map = MainApplication.getMap();
             map.setDialogsPanelVisible(selected);
-            map.statusLine.setVisible(selected || Main.pref.getBoolean("statusbar.always-visible", true));
-            MainApplication.getMenu().setVisible(selected || Main.pref.getBoolean("menu.always-visible", true));
+            map.statusLine.setVisible(selected || Config.getPref().getBoolean("statusbar.always-visible", true));
+            MainApplication.getMenu().setVisible(selected || Config.getPref().getBoolean("menu.always-visible", true));
             // Toolbars listen to preference changes, use it here
-            if (!Main.pref.getBoolean("toolbar.always-visible", true) && (!selected || toolbarPreviouslyVisible)) {
-                Main.pref.put("toolbar.visible", selected);
+            if (!Config.getPref().getBoolean("toolbar.always-visible", true) && (!selected || toolbarPreviouslyVisible)) {
+                Config.getPref().putBoolean("toolbar.visible", selected);
             }
-            if (!Main.pref.getBoolean("sidetoolbar.always-visible", true) && (!selected || sideToolbarPreviouslyVisible)) {
-                Main.pref.put("sidetoolbar.visible", selected);
+            if (!Config.getPref().getBoolean("sidetoolbar.always-visible", true) && (!selected || sideToolbarPreviouslyVisible)) {
+                Config.getPref().putBoolean("sidetoolbar.visible", selected);
             }
             map.mapView.rememberLastPositionOnScreen();
         }
diff --git a/src/org/openstreetmap/josm/actions/FollowLineAction.java b/src/org/openstreetmap/josm/actions/FollowLineAction.java
index 3d1c8a7..5876280 100644
--- a/src/org/openstreetmap/josm/actions/FollowLineAction.java
+++ b/src/org/openstreetmap/josm/actions/FollowLineAction.java
@@ -14,12 +14,12 @@ import org.openstreetmap.josm.actions.mapmode.DrawAction;
 import org.openstreetmap.josm.command.ChangeCommand;
 import org.openstreetmap.josm.command.SelectCommand;
 import org.openstreetmap.josm.command.SequenceCommand;
+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.MainApplication;
 import org.openstreetmap.josm.gui.MapFrame;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.tools.Shortcut;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -60,14 +60,14 @@ public class FollowLineAction extends JosmAction {
 
     @Override
     public void actionPerformed(ActionEvent evt) {
-        OsmDataLayer osmLayer = getLayerManager().getEditLayer();
-        if (osmLayer == null)
+        DataSet ds = getLayerManager().getEditDataSet();
+        if (ds == null)
             return;
         MapFrame map = MainApplication.getMap();
         if (!(map.mapMode instanceof DrawAction)) return; // We are not on draw mode
 
-        Collection<Node> selectedPoints = osmLayer.data.getSelectedNodes();
-        Collection<Way> selectedLines = osmLayer.data.getSelectedWays();
+        Collection<Node> selectedPoints = ds.getSelectedNodes();
+        Collection<Way> selectedLines = ds.getSelectedWays();
         if ((selectedPoints.size() > 1) || (selectedLines.size() != 1)) // Unsuitable selection
             return;
 
@@ -114,8 +114,8 @@ public class FollowLineAction extends JosmAction {
                 newFollower.addNode(newPoint);
             }
             MainApplication.undoRedo.add(new SequenceCommand(tr("Follow line"),
-                    new ChangeCommand(follower, newFollower),
-                    new SelectCommand(newFollower.isClosed() // see #10028 - unselect last node when closing a way
+                    new ChangeCommand(ds, follower, newFollower),
+                    new SelectCommand(ds, newFollower.isClosed() // see #10028 - unselect last node when closing a way
                             ? Arrays.<OsmPrimitive>asList(follower)
                             : Arrays.<OsmPrimitive>asList(follower, newPoint)
                     ))
diff --git a/src/org/openstreetmap/josm/actions/FullscreenToggleAction.java b/src/org/openstreetmap/josm/actions/FullscreenToggleAction.java
index 7c8e9e4..a20e696 100644
--- a/src/org/openstreetmap/josm/actions/FullscreenToggleAction.java
+++ b/src/org/openstreetmap/josm/actions/FullscreenToggleAction.java
@@ -21,6 +21,7 @@ import javax.swing.KeyStroke;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.util.GuiHelper;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Shortcut;
 
 /**
@@ -45,14 +46,14 @@ public class FullscreenToggleAction extends ToggleAction {
         putValue("toolbar", "fullscreen");
         MainApplication.getToolbar().register(this);
         gd = GraphicsEnvironment.isHeadless() ? null : GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
-        setSelected(Main.pref.getBoolean("draw.fullscreen", false));
+        setSelected(Config.getPref().getBoolean("draw.fullscreen", false));
         notifySelectedState();
     }
 
     @Override
     public void actionPerformed(ActionEvent e) {
         toggleSelectedState(e);
-        Main.pref.put("draw.fullscreen", isSelected());
+        Config.getPref().putBoolean("draw.fullscreen", isSelected());
         notifySelectedState();
         setMode();
     }
@@ -95,7 +96,7 @@ public class FullscreenToggleAction extends ToggleAction {
         // the good thing is: fullscreen works without exclusive mode,
         // since windows (or java?) draws the undecorated window full-
         // screen by default (it's a simulated mode, but should be ok)
-        String exclusive = Main.pref.get("draw.fullscreen.exclusive-mode", "auto");
+        String exclusive = Config.getPref().get("draw.fullscreen.exclusive-mode", "auto");
         if (("true".equals(exclusive) || ("auto".equals(exclusive) && !Main.isPlatformWindows())) && gd != null) {
             gd.setFullScreenWindow(selected ? frame : null);
         }
diff --git a/src/org/openstreetmap/josm/actions/JoinAreasAction.java b/src/org/openstreetmap/josm/actions/JoinAreasAction.java
index 5f5a0b4..e1c905d 100644
--- a/src/org/openstreetmap/josm/actions/JoinAreasAction.java
+++ b/src/org/openstreetmap/josm/actions/JoinAreasAction.java
@@ -24,12 +24,12 @@ import javax.swing.JOptionPane;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.ReverseWayAction.ReverseWayResult;
-import org.openstreetmap.josm.actions.SplitWayAction.SplitWayResult;
 import org.openstreetmap.josm.command.AddCommand;
 import org.openstreetmap.josm.command.ChangeCommand;
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.DeleteCommand;
 import org.openstreetmap.josm.command.SequenceCommand;
+import org.openstreetmap.josm.command.SplitWayCommand;
 import org.openstreetmap.josm.data.UndoRedoHandler;
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.osm.DataSet;
@@ -60,6 +60,7 @@ public class JoinAreasAction extends JosmAction {
     // This will be used to commit commands and unite them into one large command sequence at the end
     private final transient LinkedList<Command> cmds = new LinkedList<>();
     private int cmdsCount;
+    private DataSet ds;
     private final transient List<Relation> addedRelations = new LinkedList<>();
 
     /**
@@ -503,7 +504,7 @@ public class JoinAreasAction extends JosmAction {
         }
 
         // TODO: Only display this warning when nodes outside dataSourceArea are deleted
-        boolean ok = Command.checkAndConfirmOutlyingOperation("joinarea", tr("Join area confirmation"),
+        boolean ok = checkAndConfirmOutlyingOperation("joinarea", tr("Join area confirmation"),
                 trn("The selected way has nodes outside of the downloaded data region.",
                     "The selected ways have nodes outside of the downloaded data region.",
                     ways.size()) + "<br/>"
@@ -537,7 +538,7 @@ public class JoinAreasAction extends JosmAction {
             // see #11026 - Because <ways> is a dynamic filtered (on ways) of a filtered (on selected objects) collection,
             // retrieve effective dataset before joining the ways (which affects the selection, thus, the <ways> collection)
             // Dataset retrieving allows to call this code without relying on Main.getCurrentDataSet(), thus, on a mapview instance
-            DataSet ds = ways.iterator().next().getDataSet();
+            ds = ways.iterator().next().getDataSet();
 
             // Do the job of joining areas
             JoinAreasResult result = joinAreas(areas);
@@ -692,7 +693,7 @@ public class JoinAreasAction extends JosmAction {
 
         // Delete the discarded inner ways
         if (!discardedWays.isEmpty()) {
-            Command deleteCmd = DeleteCommand.delete(getLayerManager().getEditLayer(), discardedWays, true);
+            Command deleteCmd = DeleteCommand.delete(discardedWays, true);
             if (deleteCmd != null) {
                 cmds.add(deleteCmd);
                 commitCommands(marktr("Delete Ways that are not part of an inner multipolygon"));
@@ -1017,12 +1018,12 @@ public class JoinAreasAction extends JosmAction {
         List<List<Node>> chunks = buildNodeChunks(way, nodes);
 
         if (chunks.size() > 1) {
-            SplitWayResult split = SplitWayAction.splitWay(getLayerManager().getEditLayer(), way, chunks,
-                    Collections.<OsmPrimitive>emptyList(), SplitWayAction.Strategy.keepFirstChunk());
+            SplitWayCommand split = SplitWayCommand.splitWay(way, chunks,
+                    Collections.<OsmPrimitive>emptyList(), SplitWayCommand.Strategy.keepFirstChunk());
 
             if (split != null) {
                 //execute the command, we need the results
-                cmds.add(split.getCommand());
+                cmds.add(split);
                 commitCommands(marktr("Split ways into fragments"));
 
                 result.add(split.getOriginalWay());
@@ -1466,7 +1467,7 @@ public class JoinAreasAction extends JosmAction {
         for (Way w : inner) {
             newRel.addMember(new RelationMember("inner", w));
         }
-        cmds.add(layer != null ? new AddCommand(layer, newRel) :
+        cmds.add(layer != null ? new AddCommand(layer.data, newRel) :
             new AddCommand(inner.iterator().next().getDataSet(), newRel));
         addedRelations.add(newRel);
 
@@ -1537,16 +1538,17 @@ public class JoinAreasAction extends JosmAction {
             cmds.add(new ChangeCommand(r.rel, newRel));
         }
 
-        OsmDataLayer layer = getLayerManager().getEditLayer();
         Relation newRel;
+        RelationRole soleOuter;
         switch (multiouters.size()) {
         case 0:
             return;
         case 1:
             // Found only one to be part of a multipolygon relation, so just add it back as well
-            newRel = new Relation(multiouters.get(0).rel);
-            newRel.addMember(new RelationMember(multiouters.get(0).role, outer));
-            cmds.add(new ChangeCommand(multiouters.get(0).rel, newRel));
+            soleOuter = multiouters.get(0);
+            newRel = new Relation(soleOuter.rel);
+            newRel.addMember(new RelationMember(soleOuter.role, outer));
+            cmds.add(new ChangeCommand(ds, soleOuter.rel, newRel));
             return;
         default:
             // Create a new relation with all previous members and (Way)outer as outer.
@@ -1566,7 +1568,7 @@ public class JoinAreasAction extends JosmAction {
                 relationsToDelete.add(r.rel);
             }
             newRel.addMember(new RelationMember("outer", outer));
-            cmds.add(layer != null ? new AddCommand(layer, newRel) : new AddCommand(outer.getDataSet(), newRel));
+            cmds.add(new AddCommand(ds, newRel));
         }
     }
 
diff --git a/src/org/openstreetmap/josm/actions/JoinNodeWayAction.java b/src/org/openstreetmap/josm/actions/JoinNodeWayAction.java
index 5193110..441434c 100644
--- a/src/org/openstreetmap/josm/actions/JoinNodeWayAction.java
+++ b/src/org/openstreetmap/josm/actions/JoinNodeWayAction.java
@@ -18,16 +18,17 @@ import java.util.Set;
 import java.util.SortedSet;
 import java.util.TreeSet;
 
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.command.ChangeCommand;
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.MoveCommand;
 import org.openstreetmap.josm.command.SequenceCommand;
 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.data.osm.WaySegment;
-import org.openstreetmap.josm.data.projection.Projections;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.MapView;
 import org.openstreetmap.josm.tools.Geometry;
@@ -83,13 +84,13 @@ public class JoinNodeWayAction extends JosmAction {
     public void actionPerformed(ActionEvent e) {
         if (!isEnabled())
             return;
-        Collection<Node> selectedNodes = getLayerManager().getEditDataSet().getSelectedNodes();
+        DataSet ds = getLayerManager().getEditDataSet();
+        Collection<Node> selectedNodes = ds.getSelectedNodes();
         Collection<Command> cmds = new LinkedList<>();
         Map<Way, MultiMap<Integer, Node>> data = new HashMap<>();
 
         // If the user has selected some ways, only join the node to these.
-        boolean restrictToSelectedWays =
-                !getLayerManager().getEditDataSet().getSelectedWays().isEmpty();
+        boolean restrictToSelectedWays = !ds.getSelectedWays().isEmpty();
 
         // Planning phase: decide where we'll insert the nodes and put it all in "data"
         MapView mapView = MainApplication.getMap().mapView;
@@ -136,10 +137,12 @@ public class JoinNodeWayAction extends JosmAction {
                 final Set<Node> nodesInSegment = innerEntry.get(segmentIndex);
                 if (joinWayToNode) {
                     for (Node node : nodesInSegment) {
-                        EastNorth newPosition = Geometry.closestPointToSegment(w.getNode(segmentIndex).getEastNorth(),
-                                                                            w.getNode(segmentIndex+1).getEastNorth(),
-                                                                            node.getEastNorth());
-                        MoveCommand c = new MoveCommand(node, Projections.inverseProject(newPosition));
+                        EastNorth newPosition = Geometry.closestPointToSegment(
+                                w.getNode(segmentIndex).getEastNorth(),
+                                w.getNode(segmentIndex+1).getEastNorth(),
+                                node.getEastNorth());
+                        MoveCommand c = new MoveCommand(
+                                node, Main.getProjection().eastNorth2latlon(newPosition));
                         // Avoid moving a given node several times at the same position in case of overlapping ways
                         if (!cmds.contains(c)) {
                             cmds.add(c);
@@ -154,7 +157,7 @@ public class JoinNodeWayAction extends JosmAction {
             }
             Way wnew = new Way(w);
             wnew.setNodes(wayNodes);
-            cmds.add(new ChangeCommand(w, wnew));
+            cmds.add(new ChangeCommand(ds, w, wnew));
         }
 
         if (cmds.isEmpty()) return;
diff --git a/src/org/openstreetmap/josm/actions/JosmAction.java b/src/org/openstreetmap/josm/actions/JosmAction.java
index 9bbc638..2b4025b 100644
--- a/src/org/openstreetmap/josm/actions/JosmAction.java
+++ b/src/org/openstreetmap/josm/actions/JosmAction.java
@@ -3,6 +3,7 @@ package org.openstreetmap.josm.actions;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
 
+import java.awt.GridBagLayout;
 import java.awt.event.KeyEvent;
 import java.util.Collection;
 import java.util.concurrent.CancellationException;
@@ -10,13 +11,17 @@ import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
 
 import javax.swing.AbstractAction;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.data.SelectionChangedListener;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.event.DatasetEventManager.FireMode;
 import org.openstreetmap.josm.data.osm.event.SelectionEventManager;
+import org.openstreetmap.josm.gui.ConditionalOptionPaneUtil;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.layer.LayerManager.LayerAddEvent;
 import org.openstreetmap.josm.gui.layer.LayerManager.LayerChangeListener;
@@ -26,6 +31,7 @@ import org.openstreetmap.josm.gui.layer.MainLayerManager;
 import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeEvent;
 import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeListener;
 import org.openstreetmap.josm.gui.progress.swing.PleaseWaitProgressMonitor;
+import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
 import org.openstreetmap.josm.tools.Destroyable;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Logging;
@@ -393,4 +399,53 @@ public abstract class JosmAction extends AbstractAction implements Destroyable {
             return "SelectionChangeAdapter [" + JosmAction.this + ']';
         }
     }
+
+    /**
+     * Check whether user is about to operate on data outside of the download area.
+     * Request confirmation if he is.
+     *
+     * @param operation the operation name which is used for setting some preferences
+     * @param dialogTitle the title of the dialog being displayed
+     * @param outsideDialogMessage the message text to be displayed when data is outside of the download area
+     * @param incompleteDialogMessage the message text to be displayed when data is incomplete
+     * @param primitives the primitives to operate on
+     * @param ignore {@code null} or a primitive to be ignored
+     * @return true, if operating on outlying primitives is OK; false, otherwise
+     * @since 12749 (moved from Command)
+     */
+    public static boolean checkAndConfirmOutlyingOperation(String operation,
+            String dialogTitle, String outsideDialogMessage, String incompleteDialogMessage,
+            Collection<? extends OsmPrimitive> primitives,
+            Collection<? extends OsmPrimitive> ignore) {
+        int checkRes = Command.checkOutlyingOrIncompleteOperation(primitives, ignore);
+        if ((checkRes & Command.IS_OUTSIDE) != 0) {
+            JPanel msg = new JPanel(new GridBagLayout());
+            msg.add(new JMultilineLabel("<html>" + outsideDialogMessage + "</html>"));
+            boolean answer = ConditionalOptionPaneUtil.showConfirmationDialog(
+                    operation + "_outside_nodes",
+                    Main.parent,
+                    msg,
+                    dialogTitle,
+                    JOptionPane.YES_NO_OPTION,
+                    JOptionPane.QUESTION_MESSAGE,
+                    JOptionPane.YES_OPTION);
+            if (!answer)
+                return false;
+        }
+        if ((checkRes & Command.IS_INCOMPLETE) != 0) {
+            JPanel msg = new JPanel(new GridBagLayout());
+            msg.add(new JMultilineLabel("<html>" + incompleteDialogMessage + "</html>"));
+            boolean answer = ConditionalOptionPaneUtil.showConfirmationDialog(
+                    operation + "_incomplete",
+                    Main.parent,
+                    msg,
+                    dialogTitle,
+                    JOptionPane.YES_NO_OPTION,
+                    JOptionPane.QUESTION_MESSAGE,
+                    JOptionPane.YES_OPTION);
+            if (!answer)
+                return false;
+        }
+        return true;
+    }
 }
diff --git a/src/org/openstreetmap/josm/actions/JumpToAction.java b/src/org/openstreetmap/josm/actions/JumpToAction.java
index c5a0ad7..4262cea 100644
--- a/src/org/openstreetmap/josm/actions/JumpToAction.java
+++ b/src/org/openstreetmap/josm/actions/JumpToAction.java
@@ -19,6 +19,7 @@ import javax.swing.event.DocumentListener;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.coor.conversion.LatLonParser;
 import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.MapView;
@@ -160,7 +161,7 @@ public class JumpToAction extends JosmAction {
                 ll = new LatLon(Double.parseDouble(lat.getText()), Double.parseDouble(lon.getText()));
             } catch (NumberFormatException ex) {
                 try {
-                    ll = LatLon.parse(lat.getText() + "; " + lon.getText());
+                    ll = LatLonParser.parse(lat.getText() + "; " + lon.getText());
                 } catch (IllegalArgumentException ex2) {
                     JOptionPane.showMessageDialog(Main.parent,
                             tr("Could not parse Latitude, Longitude or Zoom. Please check."),
diff --git a/src/org/openstreetmap/josm/actions/MapRectifierWMSmenuAction.java b/src/org/openstreetmap/josm/actions/MapRectifierWMSmenuAction.java
index 412b1af..f14b3b1 100644
--- a/src/org/openstreetmap/josm/actions/MapRectifierWMSmenuAction.java
+++ b/src/org/openstreetmap/josm/actions/MapRectifierWMSmenuAction.java
@@ -26,7 +26,7 @@ import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryType;
 import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.datatransfer.ClipboardUtils;
-import org.openstreetmap.josm.gui.layer.WMSLayer;
+import org.openstreetmap.josm.gui.layer.ImageryLayer;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
 import org.openstreetmap.josm.gui.widgets.UrlLabel;
 import org.openstreetmap.josm.io.imagery.WMSImagery.WMSGetCapabilitiesException;
@@ -246,7 +246,7 @@ public class MapRectifierWMSmenuAction extends JosmAction {
                 return;
             }
         }
-        MainApplication.getLayerManager().addLayer(new WMSLayer(info));
+        MainApplication.getLayerManager().addLayer(ImageryLayer.create(info));
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/actions/MergeNodesAction.java b/src/org/openstreetmap/josm/actions/MergeNodesAction.java
index 1b40c4d..af36730 100644
--- a/src/org/openstreetmap/josm/actions/MergeNodesAction.java
+++ b/src/org/openstreetmap/josm/actions/MergeNodesAction.java
@@ -39,6 +39,7 @@ import org.openstreetmap.josm.gui.MapView;
 import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.gui.conflict.tags.CombinePrimitiveResolverDialog;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Logging;
@@ -113,7 +114,7 @@ public class MergeNodesAction extends JosmAction {
         if (size == 1) // to avoid division by 0 in mode 2
             return candidates.get(0);
 
-        switch (Main.pref.getInteger("merge-nodes.mode", 0)) {
+        switch (Config.getPref().getInt("merge-nodes.mode", 0)) {
         case 0:
             return candidates.get(size - 1);
         case 1:
diff --git a/src/org/openstreetmap/josm/actions/MoveAction.java b/src/org/openstreetmap/josm/actions/MoveAction.java
index 3b5d0fd..89a13dd 100644
--- a/src/org/openstreetmap/josm/actions/MoveAction.java
+++ b/src/org/openstreetmap/josm/actions/MoveAction.java
@@ -143,7 +143,7 @@ public class MoveAction extends JosmAction {
                     && affectedNodes.equals(((MoveCommand) c).getParticipatingPrimitives())) {
                 ((MoveCommand) c).moveAgain(distx, disty);
             } else {
-                c = new MoveCommand(selection, distx, disty);
+                c = new MoveCommand(ds, selection, distx, disty);
                 MainApplication.undoRedo.add(c);
             }
         } finally {
diff --git a/src/org/openstreetmap/josm/actions/OpenFileAction.java b/src/org/openstreetmap/josm/actions/OpenFileAction.java
index c686638..6527d1a 100644
--- a/src/org/openstreetmap/josm/actions/OpenFileAction.java
+++ b/src/org/openstreetmap/josm/actions/OpenFileAction.java
@@ -31,6 +31,7 @@ import javax.swing.SwingUtilities;
 import javax.swing.filechooser.FileFilter;
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.PreferencesUtils;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.MapFrame;
@@ -39,6 +40,7 @@ import org.openstreetmap.josm.gui.io.importexport.AllFormatsImporter;
 import org.openstreetmap.josm.gui.io.importexport.FileImporter;
 import org.openstreetmap.josm.gui.widgets.AbstractFileChooser;
 import org.openstreetmap.josm.io.OsmTransferException;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.MultiMap;
 import org.openstreetmap.josm.tools.Shortcut;
@@ -329,12 +331,12 @@ public class OpenFileAction extends DiskAccessAction {
             }
 
             if (recordHistory) {
-                Collection<String> oldFileHistory = Main.pref.getCollection("file-open.history");
+                Collection<String> oldFileHistory = Config.getPref().getList("file-open.history");
                 fileHistory.addAll(oldFileHistory);
                 // remove the files which failed to load from the list
                 fileHistory.removeAll(failedAll);
-                int maxsize = Math.max(0, Main.pref.getInteger("file-open.history.max-size", 15));
-                Main.pref.putCollectionBounded("file-open.history", maxsize, fileHistory);
+                int maxsize = Math.max(0, Config.getPref().getInt("file-open.history.max-size", 15));
+                PreferencesUtils.putListBounded(Config.getPref(), "file-open.history", maxsize, new ArrayList<>(fileHistory));
             }
         }
 
diff --git a/src/org/openstreetmap/josm/actions/OpenLocationAction.java b/src/org/openstreetmap/josm/actions/OpenLocationAction.java
index 78b3286..7013b89 100644
--- a/src/org/openstreetmap/josm/actions/OpenLocationAction.java
+++ b/src/org/openstreetmap/josm/actions/OpenLocationAction.java
@@ -43,6 +43,7 @@ import org.openstreetmap.josm.gui.HelpAwareOptionPane;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.progress.swing.PleaseWaitProgressMonitor;
 import org.openstreetmap.josm.gui.widgets.HistoryComboBox;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Shortcut;
@@ -103,7 +104,7 @@ public class OpenLocationAction extends JosmAction {
      * @param cbHistory the history combo box
      */
     protected void restoreUploadAddressHistory(HistoryComboBox cbHistory) {
-        List<String> cmtHistory = new LinkedList<>(Main.pref.getCollection(getClass().getName() + ".uploadAddressHistory",
+        List<String> cmtHistory = new LinkedList<>(Config.getPref().getList(getClass().getName() + ".uploadAddressHistory",
                 new LinkedList<String>()));
         // we have to reverse the history, because ComboBoxHistory will reverse it again in addElement()
         //
@@ -117,7 +118,7 @@ public class OpenLocationAction extends JosmAction {
      */
     protected void remindUploadAddressHistory(HistoryComboBox cbHistory) {
         cbHistory.addCurrentItemToHistory();
-        Main.pref.putCollection(getClass().getName() + ".uploadAddressHistory", cbHistory.getHistory());
+        Config.getPref().putList(getClass().getName() + ".uploadAddressHistory", cbHistory.getHistory());
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/actions/PreferenceToggleAction.java b/src/org/openstreetmap/josm/actions/PreferenceToggleAction.java
index 29962cd..d3faec9 100644
--- a/src/org/openstreetmap/josm/actions/PreferenceToggleAction.java
+++ b/src/org/openstreetmap/josm/actions/PreferenceToggleAction.java
@@ -2,10 +2,12 @@
 package org.openstreetmap.josm.actions;
 
 import java.awt.event.ActionEvent;
+
 import javax.swing.JCheckBoxMenuItem;
+
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.Preferences;
-import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.data.preferences.BooleanProperty;
 
 /**
@@ -49,7 +51,7 @@ public class PreferenceToggleAction extends JosmAction implements PreferenceChan
     }
 
     @Override
-    public void preferenceChanged(Preferences.PreferenceChangeEvent e) {
+    public void preferenceChanged(PreferenceChangeEvent e) {
         checkbox.setSelected(pref.get());
     }
 }
diff --git a/src/org/openstreetmap/josm/actions/PurgeAction.java b/src/org/openstreetmap/josm/actions/PurgeAction.java
index 353d456..2bd9d9a 100644
--- a/src/org/openstreetmap/josm/actions/PurgeAction.java
+++ b/src/org/openstreetmap/josm/actions/PurgeAction.java
@@ -35,6 +35,7 @@ import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.OsmPrimitivRenderer;
 import org.openstreetmap.josm.gui.help.HelpUtil;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Shortcut;
@@ -98,7 +99,7 @@ public class PurgeAction extends JosmAction {
                 return;
 
             clearUndoRedo = cbClearUndoRedo.isSelected();
-            Main.pref.put("purge.clear_undo_redo", clearUndoRedo);
+            Config.getPref().putBoolean("purge.clear_undo_redo", clearUndoRedo);
         }
 
         MainApplication.undoRedo.add(cmd);
@@ -117,7 +118,7 @@ public class PurgeAction extends JosmAction {
     public PurgeCommand getPurgeCommand(Collection<OsmPrimitive> sel) {
         layer = getLayerManager().getEditLayer();
         toPurgeAdditionally = new ArrayList<>();
-        PurgeCommand cmd = PurgeCommand.build(layer, sel, toPurgeAdditionally);
+        PurgeCommand cmd = PurgeCommand.build(sel, toPurgeAdditionally);
         modified = cmd.getParticipatingPrimitives().stream().anyMatch(OsmPrimitive::isModified);
         return cmd;
     }
@@ -179,7 +180,7 @@ public class PurgeAction extends JosmAction {
         }
 
         cbClearUndoRedo = new JCheckBox(tr("Clear Undo/Redo buffer"));
-        cbClearUndoRedo.setSelected(Main.pref.getBoolean("purge.clear_undo_redo", false));
+        cbClearUndoRedo.setSelected(Config.getPref().getBoolean("purge.clear_undo_redo", false));
 
         pnl.add(new JSeparator(), GBC.eol().fill(GBC.HORIZONTAL).insets(0, 5, 0, 5));
         pnl.add(cbClearUndoRedo, GBC.eol());
diff --git a/src/org/openstreetmap/josm/actions/RedoAction.java b/src/org/openstreetmap/josm/actions/RedoAction.java
index 3d6af09..546e210 100644
--- a/src/org/openstreetmap/josm/actions/RedoAction.java
+++ b/src/org/openstreetmap/josm/actions/RedoAction.java
@@ -8,9 +8,9 @@ import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.UndoRedoHandler.CommandQueueListener;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.MapFrame;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.tools.Shortcut;
 
 /**
@@ -18,7 +18,7 @@ import org.openstreetmap.josm.tools.Shortcut;
  *
  * @author imi
  */
-public class RedoAction extends JosmAction implements OsmDataLayer.CommandQueueListener {
+public class RedoAction extends JosmAction implements CommandQueueListener {
 
     /**
      * Construct the action with "Redo" as label.
diff --git a/src/org/openstreetmap/josm/actions/RenameLayerAction.java b/src/org/openstreetmap/josm/actions/RenameLayerAction.java
index 8de5696..e7bd82e 100644
--- a/src/org/openstreetmap/josm/actions/RenameLayerAction.java
+++ b/src/org/openstreetmap/josm/actions/RenameLayerAction.java
@@ -17,6 +17,7 @@ import javax.swing.JOptionPane;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ImageProvider;
 
 /**
@@ -65,7 +66,7 @@ public class RenameLayerAction extends AbstractAction {
         panel.add(filerename);
         filerename.setEnabled(file != null);
         if (filerename.isEnabled()) {
-            filerename.setSelected(Main.pref.getBoolean("layer.rename-file", true));
+            filerename.setSelected(Config.getPref().getBoolean("layer.rename-file", true));
         }
 
         final JOptionPane optionPane = new InitialValueOptionPane(panel, name);
@@ -80,7 +81,7 @@ public class RenameLayerAction extends AbstractAction {
 
         String nameText = name.getText();
         if (filerename.isEnabled()) {
-            Main.pref.put("layer.rename-file", filerename.isSelected());
+            Config.getPref().putBoolean("layer.rename-file", filerename.isSelected());
             if (filerename.isSelected()) {
                 String newname = nameText;
                 if (newname.indexOf('/') == -1 && newname.indexOf('\\') == -1) {
diff --git a/src/org/openstreetmap/josm/actions/RestartAction.java b/src/org/openstreetmap/josm/actions/RestartAction.java
index 2ae2319..eaceece 100644
--- a/src/org/openstreetmap/josm/actions/RestartAction.java
+++ b/src/org/openstreetmap/josm/actions/RestartAction.java
@@ -18,6 +18,7 @@ import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane.ButtonSpec;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.io.SaveLayersDialog;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Shortcut;
@@ -94,7 +95,7 @@ public class RestartAction extends JosmAction {
             cmd = getCommands();
         }
         Logging.info("Restart "+cmd);
-        if (Logging.isDebugEnabled() && Main.pref.getBoolean("restart.debug.simulation")) {
+        if (Logging.isDebugEnabled() && Config.getPref().getBoolean("restart.debug.simulation")) {
             Logging.debug("Restart cancelled to get debug info");
             return;
         }
diff --git a/src/org/openstreetmap/josm/actions/ReverseWayAction.java b/src/org/openstreetmap/josm/actions/ReverseWayAction.java
index 2fa4097..c91fdf4 100644
--- a/src/org/openstreetmap/josm/actions/ReverseWayAction.java
+++ b/src/org/openstreetmap/josm/actions/ReverseWayAction.java
@@ -15,7 +15,6 @@ import java.util.List;
 
 import javax.swing.JOptionPane;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.command.ChangeCommand;
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.SequenceCommand;
@@ -27,6 +26,7 @@ import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.Notification;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Shortcut;
 import org.openstreetmap.josm.tools.UserCancelException;
@@ -153,10 +153,10 @@ public final class ReverseWayAction extends JosmAction {
         wnew.setNodes(nodesCopy);
 
         Collection<Command> corrCmds = Collections.<Command>emptyList();
-        if (Main.pref.getBoolean("tag-correction.reverse-way", true)) {
+        if (Config.getPref().getBoolean("tag-correction.reverse-way", true)) {
             corrCmds = (new ReverseWayTagCorrector()).execute(w, wnew);
         }
-        return new ReverseWayResult(wnew, corrCmds, new ChangeCommand(w.getDataSet(), w, wnew));
+        return new ReverseWayResult(wnew, corrCmds, new ChangeCommand(w, wnew));
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/actions/SaveActionBase.java b/src/org/openstreetmap/josm/actions/SaveActionBase.java
index 214ebea..34f85c2 100644
--- a/src/org/openstreetmap/josm/actions/SaveActionBase.java
+++ b/src/org/openstreetmap/josm/actions/SaveActionBase.java
@@ -15,11 +15,13 @@ import javax.swing.JOptionPane;
 import javax.swing.filechooser.FileFilter;
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.PreferencesUtils;
 import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.io.importexport.FileExporter;
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.widgets.AbstractFileChooser;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Shortcut;
 
@@ -228,11 +230,11 @@ public abstract class SaveActionBase extends DiskAccessAction {
             return;
         }
 
-        int maxsize = Math.max(0, Main.pref.getInteger("file-open.history.max-size", 15));
-        Collection<String> oldHistory = Main.pref.getCollection("file-open.history");
+        int maxsize = Math.max(0, Config.getPref().getInt("file-open.history.max-size", 15));
+        Collection<String> oldHistory = Config.getPref().getList("file-open.history");
         List<String> history = new LinkedList<>(oldHistory);
         history.remove(filepath);
         history.add(0, filepath);
-        Main.pref.putCollectionBounded("file-open.history", maxsize, history);
+        PreferencesUtils.putListBounded(Config.getPref(), "file-open.history", maxsize, history);
     }
 }
diff --git a/src/org/openstreetmap/josm/actions/SaveAsAction.java b/src/org/openstreetmap/josm/actions/SaveAsAction.java
index 3a4838f..02d8c01 100644
--- a/src/org/openstreetmap/josm/actions/SaveAsAction.java
+++ b/src/org/openstreetmap/josm/actions/SaveAsAction.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.KeyEvent;
 import java.io.File;
diff --git a/src/org/openstreetmap/josm/actions/SearchNotesDownloadAction.java b/src/org/openstreetmap/josm/actions/SearchNotesDownloadAction.java
index a322d1a..e8f2e9e 100644
--- a/src/org/openstreetmap/josm/actions/SearchNotesDownloadAction.java
+++ b/src/org/openstreetmap/josm/actions/SearchNotesDownloadAction.java
@@ -21,6 +21,7 @@ import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.gui.widgets.HistoryComboBox;
 import org.openstreetmap.josm.io.OsmApi;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -40,7 +41,7 @@ public class SearchNotesDownloadAction extends JosmAction {
     @Override
     public void actionPerformed(ActionEvent e) {
         HistoryComboBox searchTermBox = new HistoryComboBox();
-        List<String> searchHistory = new LinkedList<>(Main.pref.getCollection(HISTORY_KEY, new LinkedList<String>()));
+        List<String> searchHistory = new LinkedList<>(Config.getPref().getList(HISTORY_KEY, new LinkedList<String>()));
         Collections.reverse(searchHistory);
         searchTermBox.setPossibleItems(searchHistory);
 
@@ -69,7 +70,7 @@ public class SearchNotesDownloadAction extends JosmAction {
         }
 
         searchTermBox.addCurrentItemToHistory();
-        Main.pref.putCollection(HISTORY_KEY, searchTermBox.getHistory());
+        Config.getPref().putList(HISTORY_KEY, searchTermBox.getHistory());
 
         performSearch(searchTerm);
     }
@@ -90,8 +91,8 @@ public class SearchNotesDownloadAction extends JosmAction {
             Logging.trace(ignore);
         }
 
-        int noteLimit = Main.pref.getInteger("osm.notes.downloadLimit", 1000);
-        int closedLimit = Main.pref.getInteger("osm.notes.daysClosed", 7);
+        int noteLimit = Config.getPref().getInt("osm.notes.downloadLimit", 1000);
+        int closedLimit = Config.getPref().getInt("osm.notes.daysClosed", 7);
 
         StringBuilder sb = new StringBuilder(128);
         sb.append(OsmApi.getOsmApi().getBaseUrl())
diff --git a/src/org/openstreetmap/josm/actions/ShowStatusReportAction.java b/src/org/openstreetmap/josm/actions/ShowStatusReportAction.java
index b4e67df..6a40628 100644
--- a/src/org/openstreetmap/josm/actions/ShowStatusReportAction.java
+++ b/src/org/openstreetmap/josm/actions/ShowStatusReportAction.java
@@ -26,17 +26,18 @@ import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Version;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.DatasetConsistencyTest;
-import org.openstreetmap.josm.data.preferences.Setting;
+import org.openstreetmap.josm.spi.preferences.Setting;
 import org.openstreetmap.josm.data.preferences.sources.MapPaintPrefHelper;
 import org.openstreetmap.josm.data.preferences.sources.PresetPrefHelper;
-import org.openstreetmap.josm.data.preferences.sources.ValidatorPrefHelper;
 import org.openstreetmap.josm.data.preferences.sources.SourcePrefHelper;
+import org.openstreetmap.josm.data.preferences.sources.ValidatorPrefHelper;
 import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.bugreport.DebugTextDisplay;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.io.OsmApi;
 import org.openstreetmap.josm.plugins.PluginHandler;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.PlatformHookUnixoid;
 import org.openstreetmap.josm.tools.Shortcut;
@@ -229,11 +230,11 @@ public final class ShowStatusReportAction extends JosmAction {
         final String envJavaHomeAlt = Main.isPlatformWindows() ? "%JAVA_HOME%" : "${JAVA_HOME}";
         final String propJavaHome = System.getProperty("java.home");
         final String propJavaHomeAlt = "<java.home>";
-        final String prefDir = Main.pref.getPreferencesDirectory().toString();
+        final String prefDir = Config.getDirs().getPreferencesDirectory(false).toString();
         final String prefDirAlt = "<josm.pref>";
-        final String userDataDir = Main.pref.getUserDataDirectory().toString();
+        final String userDataDir = Config.getDirs().getUserDataDirectory(false).toString();
         final String userDataDirAlt = "<josm.userdata>";
-        final String userCacheDir = Main.pref.getCacheDirectory().toString();
+        final String userCacheDir = Config.getDirs().getCacheDirectory(false).toString();
         final String userCacheDirAlt = "<josm.cache>";
         final String userHomeDir = System.getProperty("user.home");
         final String userHomeDirAlt = Main.isPlatformWindows() ? "%UserProfile%" : "${HOME}";
diff --git a/src/org/openstreetmap/josm/actions/SimplifyWayAction.java b/src/org/openstreetmap/josm/actions/SimplifyWayAction.java
index e45a459..6dd86b8 100644
--- a/src/org/openstreetmap/josm/actions/SimplifyWayAction.java
+++ b/src/org/openstreetmap/josm/actions/SimplifyWayAction.java
@@ -33,6 +33,7 @@ import org.openstreetmap.josm.gui.HelpAwareOptionPane;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane.ButtonSpec;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.Notification;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Shortcut;
 
@@ -52,7 +53,7 @@ public class SimplifyWayAction extends JosmAction {
     }
 
     protected boolean confirmWayWithNodesOutsideBoundingBox(List<? extends OsmPrimitive> primitives) {
-        return DeleteCommand.checkAndConfirmOutlyingDelete(primitives, null);
+        return DeleteAction.checkAndConfirmOutlyingDelete(primitives, null);
     }
 
     protected void alertSelectAtLeastOneWay() {
@@ -164,7 +165,7 @@ public class SimplifyWayAction extends JosmAction {
      * @since 6411
      */
     public final SequenceCommand simplifyWay(Way w) {
-        return simplifyWay(w, Main.pref.getDouble("simplify-way.max-error", 3.0));
+        return simplifyWay(w, Config.getPref().getDouble("simplify-way.max-error", 3.0));
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/actions/SplitWayAction.java b/src/org/openstreetmap/josm/actions/SplitWayAction.java
index 53a77fa..f9e82c3 100644
--- a/src/org/openstreetmap/josm/actions/SplitWayAction.java
+++ b/src/org/openstreetmap/josm/actions/SplitWayAction.java
@@ -10,15 +10,10 @@ import java.awt.GridBagLayout;
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.HashSet;
 import java.util.Iterator;
-import java.util.LinkedList;
 import java.util.List;
-import java.util.Optional;
-import java.util.Set;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import javax.swing.DefaultListCellRenderer;
@@ -29,16 +24,13 @@ import javax.swing.JPanel;
 import javax.swing.ListSelectionModel;
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.command.AddCommand;
-import org.openstreetmap.josm.command.ChangeCommand;
 import org.openstreetmap.josm.command.Command;
-import org.openstreetmap.josm.command.SequenceCommand;
+import org.openstreetmap.josm.command.SplitWayCommand;
 import org.openstreetmap.josm.data.osm.DefaultNameFormatter;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.PrimitiveId;
 import org.openstreetmap.josm.data.osm.Relation;
-import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.osm.WaySegment;
 import org.openstreetmap.josm.gui.ExtendedDialog;
@@ -46,7 +38,6 @@ import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.MapFrame;
 import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
-import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.Shortcut;
 
@@ -62,7 +53,9 @@ public class SplitWayAction extends JosmAction {
      * Represents the result of a {@link SplitWayAction}
      * @see SplitWayAction#splitWay
      * @see SplitWayAction#split
+     * @deprecated To be removed end of 2017. Use {@link SplitWayCommand} instead
      */
+    @Deprecated
     public static class SplitWayResult {
         private final Command command;
         private final List<? extends PrimitiveId> newSelection;
@@ -83,6 +76,17 @@ public class SplitWayAction extends JosmAction {
         }
 
         /**
+         * @param command The command to be performed to split the way (which is saved for later retrieval with {@link #getCommand})
+         * @since 12828
+         */
+        protected SplitWayResult(SplitWayCommand command) {
+            this.command = command;
+            this.newSelection = command.getNewSelection();
+            this.originalWay = command.getOriginalWay();
+            this.newWays = command.getNewWays();
+        }
+
+        /**
          * Replies the command to be performed to split the way
          * @return The command to be performed to split the way
          */
@@ -193,7 +197,7 @@ public class SplitWayAction extends JosmAction {
 
         // Finally, applicableWays contains only one perfect way
         final Way selectedWay = applicableWays.get(0);
-        final List<List<Node>> wayChunks = buildSplitChunks(selectedWay, selectedNodes);
+        final List<List<Node>> wayChunks = SplitWayCommand.buildSplitChunks(selectedWay, selectedNodes);
         if (wayChunks != null) {
             List<Relation> selectedRelations = OsmPrimitive.getFilteredList(selection, Relation.class);
             final List<OsmPrimitive> sel = new ArrayList<>(selectedWays.size() + selectedRelations.size());
@@ -201,7 +205,7 @@ public class SplitWayAction extends JosmAction {
             sel.addAll(selectedRelations);
 
             final List<Way> newWays = createNewWaysFromChunks(selectedWay, wayChunks);
-            final Way wayToKeep = Strategy.keepLongestChunk().determineWayToKeep(newWays);
+            final Way wayToKeep = SplitWayCommand.Strategy.keepLongestChunk().determineWayToKeep(newWays);
 
             if (ExpertToggleAction.isExpert() && !selectedWay.isNew()) {
                 final ExtendedDialog dialog = new SegmentToKeepSelectionDialog(selectedWay, newWays, wayToKeep, sel);
@@ -213,11 +217,7 @@ public class SplitWayAction extends JosmAction {
                 }
             }
             if (wayToKeep != null) {
-                final SplitWayResult result = doSplitWay(getLayerManager().getEditLayer(), selectedWay, wayToKeep, newWays, sel);
-                MainApplication.undoRedo.add(result.getCommand());
-                if (!result.getNewSelection().isEmpty()) {
-                    getLayerManager().getEditDataSet().setSelected(result.getNewSelection());
-                }
+                doSplitWay(selectedWay, wayToKeep, newWays, sel);
             }
         }
     }
@@ -293,12 +293,7 @@ public class SplitWayAction extends JosmAction {
             super.buttonAction(buttonIndex, evt);
             toggleSaveState(); // necessary since #showDialog() does not handle it due to the non-modal dialog
             if (getValue() == 1) {
-                SplitWayResult result = doSplitWay(MainApplication.getLayerManager().getEditLayer(),
-                        selectedWay, list.getSelectedValue(), newWays, selection);
-                MainApplication.undoRedo.add(result.getCommand());
-                if (!result.getNewSelection().isEmpty()) {
-                    MainApplication.getLayerManager().getEditDataSet().setSelected(result.getNewSelection());
-                }
+                doSplitWay(selectedWay, list.getSelectedValue(), newWays, selection);
             }
         }
     }
@@ -322,7 +317,9 @@ public class SplitWayAction extends JosmAction {
      *
      * @since 8954
      * @since 10599 (functional interface)
+     * @deprecated to be removed end of 2017. Use {@link org.openstreetmap.josm.command.SplitWayCommand.Strategy} instead
      */
+    @Deprecated
     @FunctionalInterface
     public interface Strategy {
 
@@ -339,15 +336,7 @@ public class SplitWayAction extends JosmAction {
          * @return strategy which selects the way chunk with the highest node count to keep
          */
         static Strategy keepLongestChunk() {
-            return wayChunks -> {
-                    Way wayToKeep = null;
-                    for (Way i : wayChunks) {
-                        if (wayToKeep == null || i.getNodesCount() > wayToKeep.getNodesCount()) {
-                            wayToKeep = i;
-                        }
-                    }
-                    return wayToKeep;
-                };
+            return SplitWayCommand.Strategy.keepLongestChunk()::determineWayToKeep;
         }
 
         /**
@@ -355,7 +344,7 @@ public class SplitWayAction extends JosmAction {
          * @return strategy which selects the first way chunk
          */
         static Strategy keepFirstChunk() {
-            return wayChunks -> wayChunks.iterator().next();
+            return SplitWayCommand.Strategy.keepFirstChunk()::determineWayToKeep;
         }
     }
 
@@ -406,65 +395,11 @@ public class SplitWayAction extends JosmAction {
      * @param wayToSplit the way to split. Must not be null.
      * @param splitPoints the nodes where the way is split. Must not be null.
      * @return the list of chunks
+     * @deprecated To be removed end of 2017. Use {@link SplitWayCommand#buildSplitChunks} instead
      */
+    @Deprecated
     public static List<List<Node>> buildSplitChunks(Way wayToSplit, List<Node> splitPoints) {
-        CheckParameterUtil.ensureParameterNotNull(wayToSplit, "wayToSplit");
-        CheckParameterUtil.ensureParameterNotNull(splitPoints, "splitPoints");
-
-        Set<Node> nodeSet = new HashSet<>(splitPoints);
-        List<List<Node>> wayChunks = new LinkedList<>();
-        List<Node> currentWayChunk = new ArrayList<>();
-        wayChunks.add(currentWayChunk);
-
-        Iterator<Node> it = wayToSplit.getNodes().iterator();
-        while (it.hasNext()) {
-            Node currentNode = it.next();
-            boolean atEndOfWay = currentWayChunk.isEmpty() || !it.hasNext();
-            currentWayChunk.add(currentNode);
-            if (nodeSet.contains(currentNode) && !atEndOfWay) {
-                currentWayChunk = new ArrayList<>();
-                currentWayChunk.add(currentNode);
-                wayChunks.add(currentWayChunk);
-            }
-        }
-
-        // Handle circular ways specially.
-        // If you split at a circular way at two nodes, you just want to split
-        // it at these points, not also at the former endpoint.
-        // So if the last node is the same first node, join the last and the
-        // first way chunk.
-        List<Node> lastWayChunk = wayChunks.get(wayChunks.size() - 1);
-        if (wayChunks.size() >= 2
-                && wayChunks.get(0).get(0) == lastWayChunk.get(lastWayChunk.size() - 1)
-                && !nodeSet.contains(wayChunks.get(0).get(0))) {
-            if (wayChunks.size() == 2) {
-                new Notification(
-                        tr("You must select two or more nodes to split a circular way."))
-                        .setIcon(JOptionPane.WARNING_MESSAGE)
-                        .show();
-                return null;
-            }
-            lastWayChunk.remove(lastWayChunk.size() - 1);
-            lastWayChunk.addAll(wayChunks.get(0));
-            wayChunks.remove(wayChunks.size() - 1);
-            wayChunks.set(0, lastWayChunk);
-        }
-
-        if (wayChunks.size() < 2) {
-            if (wayChunks.get(0).get(0) == wayChunks.get(0).get(wayChunks.get(0).size() - 1)) {
-                new Notification(
-                        tr("You must select two or more nodes to split a circular way."))
-                        .setIcon(JOptionPane.WARNING_MESSAGE)
-                        .show();
-            } else {
-                new Notification(
-                        tr("The way cannot be split at the selected nodes. (Hint: Select nodes in the middle of the way.)"))
-                        .setIcon(JOptionPane.WARNING_MESSAGE)
-                        .show();
-            }
-            return null;
-        }
-        return wayChunks;
+        return SplitWayCommand.buildSplitChunks(wayToSplit, splitPoints);
     }
 
     /**
@@ -472,16 +407,11 @@ public class SplitWayAction extends JosmAction {
      * @param way the original way whose  keys are transferred
      * @param wayChunks the way chunks
      * @return the new way objects
+     * @deprecated To be removed end of 2017. Use {@link SplitWayCommand#createNewWaysFromChunks} instead
      */
+    @Deprecated
     protected static List<Way> createNewWaysFromChunks(Way way, Iterable<List<Node>> wayChunks) {
-        final List<Way> newWays = new ArrayList<>();
-        for (List<Node> wayChunk : wayChunks) {
-            Way wayToAdd = new Way();
-            wayToAdd.setKeys(way.getKeys());
-            wayToAdd.setNodes(wayChunk);
-            newWays.add(wayToAdd);
-        }
-        return newWays;
+        return SplitWayCommand.createNewWaysFromChunks(way, wayChunks);
     }
 
     /**
@@ -497,10 +427,33 @@ public class SplitWayAction extends JosmAction {
      * @param wayChunks the list of way chunks into the way is split. Must not be null.
      * @param selection The list of currently selected primitives
      * @return the result from the split operation
+     * @deprecated to be removed end of 2017. Use {@link #splitWay(Way, List, Collection)} instead
      */
+    @Deprecated
     public static SplitWayResult splitWay(OsmDataLayer layer, Way way, List<List<Node>> wayChunks,
             Collection<? extends OsmPrimitive> selection) {
-        return splitWay(layer, way, wayChunks, selection, Strategy.keepLongestChunk());
+        return splitWay(way, wayChunks, selection);
+    }
+
+    /**
+     * Splits the way {@code way} into chunks of {@code wayChunks} and replies
+     * the result of this process in an instance of {@link SplitWayResult}.
+     *
+     * Note that changes are not applied to the data yet. You have to
+     * submit the command in {@link SplitWayResult#getCommand()} first,
+     * i.e. {@code Main.main.undoredo.add(result.getCommand())}.
+     *
+     * @param way the way to split. Must not be null.
+     * @param wayChunks the list of way chunks into the way is split. Must not be null.
+     * @param selection The list of currently selected primitives
+     * @return the result from the split operation
+     * @since 12718
+     * @deprecated to be removed end of 2017. Use {@link #splitWay(Way, List, Collection)} instead
+     */
+    @Deprecated
+    public static SplitWayResult splitWay(Way way, List<List<Node>> wayChunks,
+            Collection<? extends OsmPrimitive> selection) {
+        return splitWay(way, wayChunks, selection, Strategy.keepLongestChunk());
     }
 
     /**
@@ -520,209 +473,48 @@ public class SplitWayAction extends JosmAction {
      * @param splitStrategy The strategy used to determine which way chunk should reuse the old id and its history
      * @return the result from the split operation
      * @since 8954
+     * @deprecated to be removed end of 2017. Use {@link #splitWay(Way, List, Collection, Strategy)} instead
      */
+    @Deprecated
     public static SplitWayResult splitWay(OsmDataLayer layer, Way way, List<List<Node>> wayChunks,
             Collection<? extends OsmPrimitive> selection, Strategy splitStrategy) {
-        // build a list of commands, and also a new selection list
-        final List<OsmPrimitive> newSelection = new ArrayList<>(selection.size() + wayChunks.size());
-        newSelection.addAll(selection);
-
-        // Create all potential new ways
-        final List<Way> newWays = createNewWaysFromChunks(way, wayChunks);
-
-        // Determine which part reuses the existing way
-        final Way wayToKeep = splitStrategy.determineWayToKeep(newWays);
-
-        return wayToKeep != null ? doSplitWay(layer, way, wayToKeep, newWays, newSelection) : null;
+        return splitWay(way, wayChunks, selection, splitStrategy);
     }
 
-    static SplitWayResult doSplitWay(OsmDataLayer layer, Way way, Way wayToKeep, List<Way> newWays,
-                                   List<OsmPrimitive> newSelection) {
-
-        Collection<Command> commandList = new ArrayList<>(newWays.size());
-        Collection<String> nowarnroles = Main.pref.getCollection("way.split.roles.nowarn",
-                Arrays.asList("outer", "inner", "forward", "backward", "north", "south", "east", "west"));
+    /**
+     * Splits the way {@code way} into chunks of {@code wayChunks} and replies
+     * the result of this process in an instance of {@link SplitWayResult}.
+     * The {@link org.openstreetmap.josm.actions.SplitWayAction.Strategy} is used to determine which
+     * way chunk should reuse the old id and its history.
+     *
+     * Note that changes are not applied to the data yet. You have to
+     * submit the command in {@link SplitWayResult#getCommand()} first,
+     * i.e. {@code Main.main.undoredo.add(result.getCommand())}.
+     *
+     * @param way the way to split. Must not be null.
+     * @param wayChunks the list of way chunks into the way is split. Must not be null.
+     * @param selection The list of currently selected primitives
+     * @param splitStrategy The strategy used to determine which way chunk should reuse the old id and its history
+     * @return the result from the split operation
+     * @since 12718
+     * @deprecated to be removed end of 2017. Use {@link SplitWayCommand#splitWay} instead
+     */
+    @Deprecated
+    public static SplitWayResult splitWay(Way way, List<List<Node>> wayChunks,
+            Collection<? extends OsmPrimitive> selection, Strategy splitStrategy) {
+        SplitWayCommand cmd = SplitWayCommand.splitWay(way, wayChunks, selection, splitStrategy::determineWayToKeep);
+        return cmd != null ? new SplitWayResult(cmd) : null;
+    }
 
+    static void doSplitWay(Way way, Way wayToKeep, List<Way> newWays, List<OsmPrimitive> newSelection) {
         final MapFrame map = MainApplication.getMap();
         final boolean isMapModeDraw = map != null && map.mapMode == map.mapModeDraw;
-
-        // Change the original way
-        final Way changedWay = new Way(way);
-        changedWay.setNodes(wayToKeep.getNodes());
-        commandList.add(layer != null ? new ChangeCommand(layer, way, changedWay) : new ChangeCommand(way.getDataSet(), way, changedWay));
-        if (!isMapModeDraw && !newSelection.contains(way)) {
-            newSelection.add(way);
-        }
-        final int indexOfWayToKeep = newWays.indexOf(wayToKeep);
-        newWays.remove(wayToKeep);
-
-        if (!isMapModeDraw) {
-            newSelection.addAll(newWays);
-        }
-        for (Way wayToAdd : newWays) {
-            commandList.add(layer != null ? new AddCommand(layer, wayToAdd) : new AddCommand(way.getDataSet(), wayToAdd));
-        }
-
-        boolean warnmerole = false;
-        boolean warnme = false;
-        // now copy all relations to new way also
-
-        for (Relation r : OsmPrimitive.getFilteredList(way.getReferrers(), Relation.class)) {
-            if (!r.isUsable()) {
-                continue;
-            }
-            Relation c = null;
-            String type = Optional.ofNullable(r.get("type")).orElse("");
-
-            int ic = 0;
-            int ir = 0;
-            List<RelationMember> relationMembers = r.getMembers();
-            for (RelationMember rm: relationMembers) {
-                if (rm.isWay() && rm.getMember() == way) {
-                    boolean insert = true;
-                    if ("restriction".equals(type) || "destination_sign".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)) {
-                            OsmPrimitive via = findVia(r, type);
-                            List<Node> nodes = new ArrayList<>();
-                            if (via != null) {
-                                if (via instanceof Node) {
-                                    nodes.add((Node) via);
-                                } else if (via instanceof Way) {
-                                    nodes.add(((Way) via).lastNode());
-                                    nodes.add(((Way) via).firstNode());
-                                }
-                            }
-                            Way res = null;
-                            for (Node n : nodes) {
-                                if (changedWay.isFirstLastNode(n)) {
-                                    res = way;
-                                }
-                            }
-                            if (res == null) {
-                                for (Way wayToAdd : newWays) {
-                                    for (Node n : nodes) {
-                                        if (wayToAdd.isFirstLastNode(n)) {
-                                            res = wayToAdd;
-                                        }
-                                    }
-                                }
-                                if (res != null) {
-                                    if (c == null) {
-                                        c = new Relation(r);
-                                    }
-                                    c.addMember(new RelationMember(role, res));
-                                    c.removeMembersFor(way);
-                                    insert = false;
-                                }
-                            } else {
-                                insert = false;
-                            }
-                        } else if (!"via".equals(role)) {
-                            warnme = true;
-                        }
-                    } else if (!("route".equals(type)) && !("multipolygon".equals(type))) {
-                        warnme = true;
-                    }
-                    if (c == null) {
-                        c = new Relation(r);
-                    }
-
-                    if (insert) {
-                        if (rm.hasRole() && !nowarnroles.contains(rm.getRole())) {
-                            warnmerole = true;
-                        }
-
-                        Boolean backwards = null;
-                        int k = 1;
-                        while (ir - k >= 0 || ir + k < relationMembers.size()) {
-                            if ((ir - k >= 0) && relationMembers.get(ir - k).isWay()) {
-                                Way w = relationMembers.get(ir - k).getWay();
-                                if ((w.lastNode() == way.firstNode()) || w.firstNode() == way.firstNode()) {
-                                    backwards = Boolean.FALSE;
-                                } else if ((w.firstNode() == way.lastNode()) || w.lastNode() == way.lastNode()) {
-                                    backwards = Boolean.TRUE;
-                                }
-                                break;
-                            }
-                            if ((ir + k < relationMembers.size()) && relationMembers.get(ir + k).isWay()) {
-                                Way w = relationMembers.get(ir + k).getWay();
-                                if ((w.lastNode() == way.firstNode()) || w.firstNode() == way.firstNode()) {
-                                    backwards = Boolean.TRUE;
-                                } else if ((w.firstNode() == way.lastNode()) || w.lastNode() == way.lastNode()) {
-                                    backwards = Boolean.FALSE;
-                                }
-                                break;
-                            }
-                            k++;
-                        }
-
-                        int j = ic;
-                        final List<Way> waysToAddBefore = newWays.subList(0, indexOfWayToKeep);
-                        for (Way wayToAdd : waysToAddBefore) {
-                            RelationMember em = new RelationMember(rm.getRole(), wayToAdd);
-                            j++;
-                            if (Boolean.TRUE.equals(backwards)) {
-                                c.addMember(ic + 1, em);
-                            } else {
-                                c.addMember(j - 1, em);
-                            }
-                        }
-                        final List<Way> waysToAddAfter = newWays.subList(indexOfWayToKeep, newWays.size());
-                        for (Way wayToAdd : waysToAddAfter) {
-                            RelationMember em = new RelationMember(rm.getRole(), wayToAdd);
-                            j++;
-                            if (Boolean.TRUE.equals(backwards)) {
-                                c.addMember(ic, em);
-                            } else {
-                                c.addMember(j, em);
-                            }
-                        }
-                        ic = j;
-                    }
-                }
-                ic++;
-                ir++;
-            }
-
-            if (c != null) {
-                commandList.add(layer != null ? new ChangeCommand(layer, r, c) : new ChangeCommand(r.getDataSet(), r, c));
-            }
+        final SplitWayCommand result = SplitWayCommand.doSplitWay(way, wayToKeep, newWays, !isMapModeDraw ? newSelection : null);
+        MainApplication.undoRedo.add(result);
+        List<? extends PrimitiveId> newSel = result.getNewSelection();
+        if (newSel != null && !newSel.isEmpty()) {
+            MainApplication.getLayerManager().getEditDataSet().setSelected(newSel);
         }
-        if (warnmerole) {
-            new Notification(
-                    tr("A role based relation membership was copied to all new ways.<br>You should verify this and correct it when necessary."))
-                    .setIcon(JOptionPane.WARNING_MESSAGE)
-                    .show();
-        } else if (warnme) {
-            new Notification(
-                    tr("A relation membership was copied to all new ways.<br>You should verify this and correct it when necessary."))
-                    .setIcon(JOptionPane.WARNING_MESSAGE)
-                    .show();
-        }
-
-        return new SplitWayResult(
-                new SequenceCommand(
-                        /* for correct i18n of plural forms - see #9110 */
-                        trn("Split way {0} into {1} part", "Split way {0} into {1} parts", newWays.size() + 1,
-                                way.getDisplayName(DefaultNameFormatter.getInstance()), newWays.size() + 1),
-                        commandList
-                        ),
-                        newSelection,
-                        way,
-                        newWays
-                );
-    }
-
-    static OsmPrimitive findVia(Relation r, String type) {
-        for (RelationMember rmv : r.getMembers()) {
-            if (("restriction".equals(type) && "via".equals(rmv.getRole()))
-             || ("destination_sign".equals(type) && rmv.hasRole("sign", "intersection"))) {
-                return rmv.getMember();
-            }
-        }
-        return null;
     }
 
     /**
@@ -740,10 +532,34 @@ public class SplitWayAction extends JosmAction {
      * @param atNodes the list of nodes where the way is split. Must not be null.
      * @param selection The list of currently selected primitives
      * @return the result from the split operation
+     * @deprecated to be removed end of 2017. Use {@link #split(Way, List, Collection)} instead
      */
+    @Deprecated
     public static SplitWayResult split(OsmDataLayer layer, Way way, List<Node> atNodes, Collection<? extends OsmPrimitive> selection) {
+        return split(way, atNodes, selection);
+    }
+
+    /**
+     * Splits the way {@code way} at the nodes in {@code atNodes} and replies
+     * the result of this process in an instance of {@link SplitWayResult}.
+     *
+     * Note that changes are not applied to the data yet. You have to
+     * submit the command in {@link SplitWayResult#getCommand()} first,
+     * i.e. {@code Main.main.undoredo.add(result.getCommand())}.
+     *
+     * Replies null if the way couldn't be split at the given nodes.
+     *
+     * @param way the way to split. Must not be null.
+     * @param atNodes the list of nodes where the way is split. Must not be null.
+     * @param selection The list of currently selected primitives
+     * @return the result from the split operation
+     * @since 12718
+     * @deprecated to be removed end of 2017. Use {@link #splitWay(Way, List, Collection)} instead
+     */
+    @Deprecated
+    public static SplitWayResult split(Way way, List<Node> atNodes, Collection<? extends OsmPrimitive> selection) {
         List<List<Node>> chunks = buildSplitChunks(way, atNodes);
-        return chunks != null ? splitWay(layer, way, chunks, selection) : null;
+        return chunks != null ? splitWay(way, chunks, selection) : null;
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSearchAction.java b/src/org/openstreetmap/josm/actions/TaggingPresetSearchAction.java
similarity index 85%
rename from src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSearchAction.java
rename to src/org/openstreetmap/josm/actions/TaggingPresetSearchAction.java
index 5271353..32c806f 100644
--- a/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSearchAction.java
+++ b/src/org/openstreetmap/josm/actions/TaggingPresetSearchAction.java
@@ -1,18 +1,19 @@
 // License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui.tagging.presets;
+package org.openstreetmap.josm.actions;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
 
-import org.openstreetmap.josm.actions.JosmAction;
 import org.openstreetmap.josm.gui.MainApplication;
+import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetSearchDialog;
 import org.openstreetmap.josm.tools.Shortcut;
 
 /**
  * The tagging presets search action (F3).
  * @since 3388
+ * @since 12834 (moved from {@code gui.tagging.presets} package)
  */
 public class TaggingPresetSearchAction extends JosmAction {
 
diff --git a/src/org/openstreetmap/josm/actions/UnGlueAction.java b/src/org/openstreetmap/josm/actions/UnGlueAction.java
index 07f4c3e..c7c78ca 100644
--- a/src/org/openstreetmap/josm/actions/UnGlueAction.java
+++ b/src/org/openstreetmap/josm/actions/UnGlueAction.java
@@ -302,7 +302,7 @@ public class UnGlueAction extends JosmAction {
         final Node n = new Node(selectedNode, true);
 
         List<Command> cmds = new LinkedList<>();
-        cmds.add(new AddCommand(n));
+        cmds.add(new AddCommand(selectedNode.getDataSet(), n));
         if (dialog != null) {
             dialog.update(selectedNode, Collections.singletonList(n), cmds);
         }
@@ -439,7 +439,7 @@ public class UnGlueAction extends JosmAction {
         // clone the node for the way
         Node newNode = new Node(originalNode, true /* clear OSM ID */);
         newNodes.add(newNode);
-        cmds.add(new AddCommand(newNode));
+        cmds.add(new AddCommand(originalNode.getDataSet(), newNode));
 
         List<Node> nn = new ArrayList<>();
         for (Node pushNode : w.getNodes()) {
@@ -582,7 +582,7 @@ public class UnGlueAction extends JosmAction {
             if (n == selectedNode) {
                 if (seen) {
                     Node newNode = new Node(n, true /* clear OSM ID */);
-                    cmds.add(new AddCommand(newNode));
+                    cmds.add(new AddCommand(selectedNode.getDataSet(), newNode));
                     newNodes.add(newNode);
                     addNodes.add(newNode);
                 } else {
@@ -662,7 +662,7 @@ public class UnGlueAction extends JosmAction {
             primitives.addAll(selectedNodes);
         if (selectedNode != null)
             primitives.add(selectedNode);
-        final boolean ok = Command.checkAndConfirmOutlyingOperation("unglue",
+        final boolean ok = checkAndConfirmOutlyingOperation("unglue",
                 tr("Unglue confirmation"),
                 tr("You are about to unglue nodes outside of the area you have downloaded."
                         + "<br>"
diff --git a/src/org/openstreetmap/josm/actions/UndoAction.java b/src/org/openstreetmap/josm/actions/UndoAction.java
index 5037e44..f475262 100644
--- a/src/org/openstreetmap/josm/actions/UndoAction.java
+++ b/src/org/openstreetmap/josm/actions/UndoAction.java
@@ -8,9 +8,9 @@ import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.UndoRedoHandler.CommandQueueListener;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.MapFrame;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.tools.Shortcut;
 
 /**
@@ -18,7 +18,7 @@ import org.openstreetmap.josm.tools.Shortcut;
  *
  * @author imi
  */
-public class UndoAction extends JosmAction implements OsmDataLayer.CommandQueueListener {
+public class UndoAction extends JosmAction implements CommandQueueListener {
 
     /**
      * Construct the action with "Undo" as label.
diff --git a/src/org/openstreetmap/josm/actions/UploadSelectionAction.java b/src/org/openstreetmap/josm/actions/UploadSelectionAction.java
index a52f3aa..b99a683 100644
--- a/src/org/openstreetmap/josm/actions/UploadSelectionAction.java
+++ b/src/org/openstreetmap/josm/actions/UploadSelectionAction.java
@@ -17,14 +17,13 @@ import javax.swing.SwingUtilities;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.APIDataSet;
-import org.openstreetmap.josm.data.osm.Changeset;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.DefaultNameFormatter;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.Way;
-import org.openstreetmap.josm.data.osm.visitor.Visitor;
+import org.openstreetmap.josm.data.osm.visitor.OsmPrimitiveVisitor;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
 import org.openstreetmap.josm.gui.io.UploadSelectionDialog;
@@ -182,7 +181,7 @@ public class UploadSelectionAction extends JosmAction {
      * list of candidate primitives.
      *
      */
-    static class UploadHullBuilder implements Visitor {
+    static class UploadHullBuilder implements OsmPrimitiveVisitor {
         private Set<OsmPrimitive> hull;
 
         UploadHullBuilder() {
@@ -226,11 +225,6 @@ public class UploadSelectionAction extends JosmAction {
             }
         }
 
-        @Override
-        public void visit(Changeset cs) {
-            // do nothing
-        }
-
         /**
          * Builds the "hull" of primitives to be uploaded given a base collection
          * of osm primitives.
diff --git a/src/org/openstreetmap/josm/actions/audio/AudioBackAction.java b/src/org/openstreetmap/josm/actions/audio/AudioBackAction.java
index f4c892b..d52f003 100644
--- a/src/org/openstreetmap/josm/actions/audio/AudioBackAction.java
+++ b/src/org/openstreetmap/josm/actions/audio/AudioBackAction.java
@@ -9,10 +9,10 @@ import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
 import java.io.IOException;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
 import org.openstreetmap.josm.io.audio.AudioPlayer;
 import org.openstreetmap.josm.io.audio.AudioUtil;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Shortcut;
 
 /**
@@ -35,7 +35,7 @@ public class AudioBackAction extends AbstractAudioAction {
         try {
             if (AudioPlayer.playing() || AudioPlayer.paused())
                 AudioPlayer.play(AudioPlayer.url(), AudioPlayer.position()
-                - Main.pref.getDouble("audio.forwardbackamount", 10.0));
+                - Config.getPref().getDouble("audio.forwardbackamount", 10.0));
             else
                 MarkerLayer.playAudio();
         } catch (IOException | InterruptedException ex) {
diff --git a/src/org/openstreetmap/josm/actions/audio/AudioFastSlowAction.java b/src/org/openstreetmap/josm/actions/audio/AudioFastSlowAction.java
index 9fc802d..ab83c80 100644
--- a/src/org/openstreetmap/josm/actions/audio/AudioFastSlowAction.java
+++ b/src/org/openstreetmap/josm/actions/audio/AudioFastSlowAction.java
@@ -4,9 +4,9 @@ package org.openstreetmap.josm.actions.audio;
 import java.awt.event.ActionEvent;
 import java.io.IOException;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.io.audio.AudioPlayer;
 import org.openstreetmap.josm.io.audio.AudioUtil;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Shortcut;
 
 /**
@@ -28,7 +28,7 @@ public abstract class AudioFastSlowAction extends AbstractAudioAction {
      */
     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);
+        multiplier = Config.getPref().getDouble("audio.fastfwdmultiplier", 1.3);
         if (!fast)
             multiplier = 1.0 / multiplier;
     }
diff --git a/src/org/openstreetmap/josm/actions/audio/AudioFwdAction.java b/src/org/openstreetmap/josm/actions/audio/AudioFwdAction.java
index 6a0bd1a..0eed041 100644
--- a/src/org/openstreetmap/josm/actions/audio/AudioFwdAction.java
+++ b/src/org/openstreetmap/josm/actions/audio/AudioFwdAction.java
@@ -8,10 +8,10 @@ import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
 import java.io.IOException;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
 import org.openstreetmap.josm.io.audio.AudioPlayer;
 import org.openstreetmap.josm.io.audio.AudioUtil;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Shortcut;
 
 /**
@@ -33,7 +33,7 @@ public class AudioFwdAction extends AbstractAudioAction {
         try {
             if (AudioPlayer.playing() || AudioPlayer.paused())
                 AudioPlayer.play(AudioPlayer.url(), AudioPlayer.position()
-                + Main.pref.getDouble("audio.forwardbackamount", 10.0));
+                + Config.getPref().getDouble("audio.forwardbackamount", 10.0));
             else
                 MarkerLayer.playAudio();
         } catch (IOException | InterruptedException ex) {
diff --git a/src/org/openstreetmap/josm/actions/downloadtasks/ChangesetQueryTask.java b/src/org/openstreetmap/josm/actions/downloadtasks/ChangesetQueryTask.java
index b49bd9e..ca26d0a 100644
--- a/src/org/openstreetmap/josm/actions/downloadtasks/ChangesetQueryTask.java
+++ b/src/org/openstreetmap/josm/actions/downloadtasks/ChangesetQueryTask.java
@@ -9,8 +9,8 @@ import java.io.IOException;
 import javax.swing.JOptionPane;
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.UserIdentityManager;
 import org.openstreetmap.josm.data.osm.UserInfo;
-import org.openstreetmap.josm.gui.JosmUserIdentityManager;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.io.ChangesetQuery;
 import org.openstreetmap.josm.io.OsmServerUserInfoReader;
@@ -47,14 +47,14 @@ public class ChangesetQueryTask extends AbstractChangesetDownloadTask {
             getProgressMonitor().indeterminateSubTask(tr("Determine user id for current user..."));
 
             UserInfo info = userInfoReader.fetchUserInfo(getProgressMonitor().createSubTaskMonitor(1, false));
-            JosmUserIdentityManager im = JosmUserIdentityManager.getInstance();
+            UserIdentityManager im = UserIdentityManager.getInstance();
             im.setFullyIdentified(im.getUserName(), info);
         }
 
         @Override
         protected void realRun() throws SAXException, IOException, OsmTransferException {
             try {
-                JosmUserIdentityManager im = JosmUserIdentityManager.getInstance();
+                UserIdentityManager im = UserIdentityManager.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.
@@ -62,7 +62,7 @@ public class ChangesetQueryTask extends AbstractChangesetDownloadTask {
                     if (im.isPartiallyIdentified()) {
                         fullyIdentifyCurrentUser();
                     }
-                    query = query.forUser(JosmUserIdentityManager.getInstance().getUserId());
+                    query = query.forUser(UserIdentityManager.getInstance().getUserId());
                 }
                 if (isCanceled())
                     return;
diff --git a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadGpsTask.java b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadGpsTask.java
index 91ec947..a832e11 100644
--- a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadGpsTask.java
+++ b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadGpsTask.java
@@ -12,7 +12,6 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Stream;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.Bounds.ParseMethod;
 import org.openstreetmap.josm.data.ProjectionBounds;
@@ -34,6 +33,7 @@ import org.openstreetmap.josm.io.OsmServerLocationReader;
 import org.openstreetmap.josm.io.OsmServerLocationReader.GpxUrlPattern;
 import org.openstreetmap.josm.io.OsmServerReader;
 import org.openstreetmap.josm.io.OsmTransferException;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.xml.sax.SAXException;
 
@@ -168,7 +168,7 @@ public class DownloadGpsTask extends AbstractDownloadTask<GpxData> {
         }
 
         private GpxLayer findGpxMergeLayer() {
-            boolean merge = Main.pref.getBoolean("download.gps.mergeWithLocal", false);
+            boolean merge = Config.getPref().getBoolean("download.gps.mergeWithLocal", false);
             Layer active = MainApplication.getLayerManager().getActiveLayer();
             if (active instanceof GpxLayer && (merge || ((GpxLayer) active).data.fromServer))
                 return (GpxLayer) active;
diff --git a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadSessionTask.java b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadSessionTask.java
index 37c2556..565fc52 100644
--- a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadSessionTask.java
+++ b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadSessionTask.java
@@ -8,11 +8,11 @@ import java.net.URISyntaxException;
 import java.net.URL;
 import java.util.concurrent.Future;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.SessionLoadAction.Loader;
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.HttpClient;
 import org.openstreetmap.josm.tools.Logging;
 
@@ -77,6 +77,6 @@ public class DownloadSessionTask extends AbstractDownloadTask<Object> {
      */
     @Override
     public boolean isSafeForRemotecontrolRequests() {
-        return Main.pref.getBoolean("remotecontrol.import.allow_session", false);
+        return Config.getPref().getBoolean("remotecontrol.import.allow_session", false);
     }
 }
diff --git a/src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java b/src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java
index 673f5b6..8a13bcb 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java
@@ -12,7 +12,6 @@ import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.DeleteCommand;
 import org.openstreetmap.josm.data.osm.DataSet;
@@ -29,6 +28,7 @@ import org.openstreetmap.josm.gui.layer.MainLayerManager;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.util.HighlightHelper;
 import org.openstreetmap.josm.gui.util.ModifierExListener;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Shortcut;
@@ -110,7 +110,7 @@ public class DeleteAction extends MapMode implements ModifierExListener {
         if (!isEnabled())
             return;
 
-        drawTargetHighlight = Main.pref.getBoolean("draw.target-highlight", true);
+        drawTargetHighlight = Config.getPref().getBoolean("draw.target-highlight", true);
 
         MapFrame map = MainApplication.getMap();
         map.mapView.addMouseListener(this);
@@ -150,9 +150,9 @@ public class DeleteAction extends MapMode implements ModifierExListener {
 
         Command c;
         if (ctrl) {
-            c = DeleteCommand.deleteWithReferences(editLayer, lm.getEditDataSet().getSelected());
+            c = DeleteCommand.deleteWithReferences(lm.getEditDataSet().getSelected());
         } else {
-            c = DeleteCommand.delete(editLayer, lm.getEditDataSet().getSelected(), !alt /* also delete nodes in way */);
+            c = DeleteCommand.delete(lm.getEditDataSet().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) {
@@ -351,7 +351,7 @@ public class DeleteAction extends MapMode implements ModifierExListener {
         CheckParameterUtil.ensureParameterNotNull(layer, "layer");
         CheckParameterUtil.ensureParameterNotNull(toDelete, "toDelete");
 
-        final Command cmd = DeleteCommand.delete(layer, toDelete);
+        final Command cmd = DeleteCommand.delete(toDelete);
         if (cmd != null) {
             // cmd can be null if the user cancels dialogs DialogCommand displays
             MainApplication.undoRedo.add(cmd);
@@ -403,20 +403,19 @@ public class DeleteAction extends MapMode implements ModifierExListener {
      */
     private Command buildDeleteCommands(MouseEvent e, int modifiers, boolean silent) {
         DeleteParameters parameters = getDeleteParameters(e, modifiers);
-        OsmDataLayer editLayer = getLayerManager().getEditLayer();
         switch (parameters.mode) {
         case node:
-            return DeleteCommand.delete(editLayer, Collections.singleton(parameters.nearestNode), false, silent);
+            return DeleteCommand.delete(Collections.singleton(parameters.nearestNode), false, silent);
         case node_with_references:
-            return DeleteCommand.deleteWithReferences(editLayer, Collections.singleton(parameters.nearestNode), silent);
+            return DeleteCommand.deleteWithReferences(Collections.singleton(parameters.nearestNode), silent);
         case segment:
-            return DeleteCommand.deleteWaySegment(editLayer, parameters.nearestSegment);
+            return DeleteCommand.deleteWaySegment(parameters.nearestSegment);
         case way:
-            return DeleteCommand.delete(editLayer, Collections.singleton(parameters.nearestSegment.way), false, silent);
+            return DeleteCommand.delete(Collections.singleton(parameters.nearestSegment.way), false, silent);
         case way_with_nodes:
-            return DeleteCommand.delete(editLayer, Collections.singleton(parameters.nearestSegment.way), true, silent);
+            return DeleteCommand.delete(Collections.singleton(parameters.nearestSegment.way), true, silent);
         case way_with_references:
-            return DeleteCommand.deleteWithReferences(editLayer, Collections.singleton(parameters.nearestSegment.way), true);
+            return DeleteCommand.deleteWithReferences(Collections.singleton(parameters.nearestSegment.way), true);
         default:
             return null;
         }
diff --git a/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java b/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
index 44a32d4..0507301 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
@@ -226,11 +226,12 @@ public class DrawAction extends MapMode implements MapViewPaintable, DataSelecti
 
         // update selection to reflect which way being modified
         OsmDataLayer editLayer = getLayerManager().getEditLayer();
-        if (editLayer != null && getCurrentBaseNode() != null && !editLayer.data.selectionEmpty()) {
+        Node baseNode = getCurrentBaseNode();
+        if (editLayer != null && baseNode != null && !editLayer.data.selectionEmpty()) {
             DataSet currentDataSet = editLayer.data;
-            Way continueFrom = getWayForNode(getCurrentBaseNode());
-            if (alt && continueFrom != null && (!getCurrentBaseNode().isSelected() || continueFrom.isSelected())) {
-                addRemoveSelection(currentDataSet, getCurrentBaseNode(), continueFrom);
+            Way continueFrom = getWayForNode(baseNode);
+            if (alt && continueFrom != null && (!baseNode.isSelected() || continueFrom.isSelected())) {
+                addRemoveSelection(currentDataSet, baseNode, continueFrom);
                 needsRepaint = true;
             } else if (!alt && continueFrom != null && !continueFrom.isSelected()) {
                 currentDataSet.addSelected(continueFrom);
@@ -486,7 +487,7 @@ public class DrawAction extends MapMode implements MapViewPaintable, DataSelecti
                         );
                 return;
             }
-            cmds.add(new AddCommand(n));
+            cmds.add(new AddCommand(ds, n));
 
             if (!ctrl) {
                 // Insert the node into all the nearby way segments
@@ -575,7 +576,7 @@ public class DrawAction extends MapMode implements MapViewPaintable, DataSelecti
                 if (way == null) {
                     way = new Way();
                     way.addNode(n0);
-                    cmds.add(new AddCommand(way));
+                    cmds.add(new AddCommand(ds, way));
                     wayToSelect = way;
                 } else {
                     int i;
diff --git a/src/org/openstreetmap/josm/actions/mapmode/DrawSnapHelper.java b/src/org/openstreetmap/josm/actions/mapmode/DrawSnapHelper.java
index e156eda..8f8c32c 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/DrawSnapHelper.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/DrawSnapHelper.java
@@ -31,6 +31,7 @@ import org.openstreetmap.josm.gui.MapViewState.MapViewPoint;
 import org.openstreetmap.josm.gui.draw.MapViewPath;
 import org.openstreetmap.josm.gui.draw.SymbolShape;
 import org.openstreetmap.josm.gui.widgets.PopupMenuLauncher;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -236,7 +237,7 @@ class DrawSnapHelper {
     }
 
     private void computeSnapAngles() {
-        snapAngles = Main.pref.getCollection(DRAW_ANGLESNAP_ANGLES,
+        snapAngles = Config.getPref().getList(DRAW_ANGLESNAP_ANGLES,
                 Arrays.asList("0", "30", "45", "60", "90", "120", "135", "150", "180"))
                 .stream()
                 .mapToDouble(DrawSnapHelper::parseSnapAngle)
@@ -258,7 +259,7 @@ class DrawSnapHelper {
      * @param angles The angles
      */
     public void saveAngles(String... angles) {
-        Main.pref.putCollection(DRAW_ANGLESNAP_ANGLES, Arrays.asList(angles));
+        Config.getPref().putList(DRAW_ANGLESNAP_ANGLES, Arrays.asList(angles));
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java b/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java
index 88d6cc6..97ea94c 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java
@@ -39,6 +39,7 @@ import org.openstreetmap.josm.command.SequenceCommand;
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.osm.DataIntegrityProblemException;
+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;
@@ -56,6 +57,7 @@ import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.util.KeyPressReleaseListener;
 import org.openstreetmap.josm.gui.util.ModifierExListener;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Geometry;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Logging;
@@ -305,21 +307,21 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
 
     @Override
     protected void readPreferences() {
-        initialMoveDelay = Main.pref.getInteger("edit.initial-move-delay", 200);
-        initialMoveThreshold = Main.pref.getInteger("extrude.initial-move-threshold", 1);
+        initialMoveDelay = Config.getPref().getInt("edit.initial-move-delay", 200);
+        initialMoveThreshold = Config.getPref().getInt("extrude.initial-move-threshold", 1);
         mainColor = new ColorProperty(marktr("Extrude: main line"), Color.RED).get();
         helperColor = new ColorProperty(marktr("Extrude: helper line"), Color.ORANGE).get();
-        helperStrokeDash = GuiHelper.getCustomizedStroke(Main.pref.get("extrude.stroke.helper-line", "1 4"));
+        helperStrokeDash = GuiHelper.getCustomizedStroke(Config.getPref().get("extrude.stroke.helper-line", "1 4"));
         helperStrokeRA = new BasicStroke(1);
-        symbolSize = Main.pref.getDouble("extrude.angle-symbol-radius", 8);
-        nodeDragWithoutCtrl = Main.pref.getBoolean("extrude.drag-nodes-without-ctrl", false);
-        oldLineStroke = GuiHelper.getCustomizedStroke(Main.pref.get("extrude.ctrl.stroke.old-line", "1"));
-        mainStroke = GuiHelper.getCustomizedStroke(Main.pref.get("extrude.stroke.main", "3"));
+        symbolSize = Config.getPref().getDouble("extrude.angle-symbol-radius", 8);
+        nodeDragWithoutCtrl = Config.getPref().getBoolean("extrude.drag-nodes-without-ctrl", false);
+        oldLineStroke = GuiHelper.getCustomizedStroke(Config.getPref().get("extrude.ctrl.stroke.old-line", "1"));
+        mainStroke = GuiHelper.getCustomizedStroke(Config.getPref().get("extrude.stroke.main", "3"));
 
-        ignoreSharedNodes = Main.pref.getBoolean("extrude.ignore-shared-nodes", true);
+        ignoreSharedNodes = Config.getPref().getBoolean("extrude.ignore-shared-nodes", true);
         dualAlignCheckboxMenuItem.getAction().setEnabled(true);
-        useRepeatedShortcut = Main.pref.getBoolean("extrude.dualalign.toggleOnRepeatedX", true);
-        keepSegmentDirection = Main.pref.getBoolean("extrude.dualalign.keep-segment-direction", true);
+        useRepeatedShortcut = Config.getPref().getBoolean("extrude.dualalign.toggleOnRepeatedX", true);
+        keepSegmentDirection = Config.getPref().getBoolean("extrude.dualalign.keep-segment-direction", true);
     }
 
     @Override
@@ -591,9 +593,9 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
             n.setEastNorth(Geometry.closestPointToSegment(a, b, n.getEastNorth()));
             Way wnew = new Way(ws.way);
             wnew.addNode(ws.lowerIndex+1, n);
-            SequenceCommand cmds = new SequenceCommand(tr("Add a new node to an existing way"),
-                    new AddCommand(n), new ChangeCommand(ws.way, wnew));
-            MainApplication.undoRedo.add(cmds);
+            DataSet ds = ws.way.getDataSet();
+            MainApplication.undoRedo.add(new SequenceCommand(tr("Add a new node to an existing way"),
+                    new AddCommand(ds, n), new ChangeCommand(ds, ws.way, wnew)));
         }
     }
 
@@ -602,7 +604,8 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
      */
     private void createNewRectangle() {
         if (selectedSegment == null) return;
-        // crete a new rectangle
+        DataSet ds = getLayerManager().getEditDataSet();
+        // create a new rectangle
         Collection<Command> cmds = new LinkedList<>();
         Node third = new Node(newN2en);
         Node fourth = new Node(newN1en);
@@ -617,14 +620,14 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
         // ... and close the way
         wnew.addNode(selectedSegment.getFirstNode());
         // undo support
-        cmds.add(new AddCommand(third));
+        cmds.add(new AddCommand(ds, third));
         if (!dualAlignSegmentCollapsed) {
-            cmds.add(new AddCommand(fourth));
+            cmds.add(new AddCommand(ds, fourth));
         }
-        cmds.add(new AddCommand(wnew));
+        cmds.add(new AddCommand(ds, wnew));
         Command c = new SequenceCommand(tr("Extrude Way"), cmds);
         MainApplication.undoRedo.add(c);
-        getLayerManager().getEditDataSet().setSelected(wnew);
+        ds.setSelected(wnew);
     }
 
     /**
@@ -633,6 +636,7 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
      * Uses {@link #newN1en}, {@link #newN2en} calculated by {@link #calculateBestMovementAndNewNodes}
      */
     private void performExtrusion() {
+        DataSet ds = getLayerManager().getEditDataSet();
         // create extrusion
         Collection<Command> cmds = new LinkedList<>();
         Way wnew = new Way(selectedSegment.way);
@@ -660,7 +664,7 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
             wnew.addNode(insertionPoint, n1New);
             wnew.removeNode(n1Old);
             wayWasModified = true;
-            cmds.add(new AddCommand(n1New));
+            cmds.add(new AddCommand(ds, n1New));
             changedNodes.add(n1New);
         } else {
             //introduce new node
@@ -668,7 +672,7 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
             wnew.addNode(insertionPoint, n1New);
             wayWasModified = true;
             insertionPoint++;
-            cmds.add(new AddCommand(n1New));
+            cmds.add(new AddCommand(ds, n1New));
             changedNodes.add(n1New);
         }
 
@@ -690,14 +694,14 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
             wnew.addNode(insertionPoint, n2New);
             wnew.removeNode(n2Old);
             wayWasModified = true;
-            cmds.add(new AddCommand(n2New));
+            cmds.add(new AddCommand(ds, n2New));
             changedNodes.add(n2New);
         } else {
             //introduce new node
             Node n2New = new Node(Main.getProjection().eastNorth2latlon(newN2en));
             wnew.addNode(insertionPoint, n2New);
             wayWasModified = true;
-            cmds.add(new AddCommand(n2New));
+            cmds.add(new AddCommand(ds, n2New));
             changedNodes.add(n2New);
         }
 
diff --git a/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java b/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java
index 0b7f907..b2eaaee 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java
@@ -398,12 +398,13 @@ public class ImproveWayAccuracyAction extends MapMode implements
             return;
         }
 
+        DataSet ds = getLayerManager().getEditDataSet();
         updateKeyModifiers(e);
         mousePos = e.getPoint();
 
         if (state == State.SELECTING) {
             if (targetWay != null) {
-                getLayerManager().getEditDataSet().setSelected(targetWay.getPrimitiveId());
+                ds.setSelected(targetWay.getPrimitiveId());
                 updateStateByCurrentSelection();
             }
         } else if (state == State.IMPROVING) {
@@ -424,7 +425,7 @@ public class ImproveWayAccuracyAction extends MapMode implements
                 // Creating a new node
                 Node virtualNode = new Node(mv.getEastNorth(mousePos.x,
                         mousePos.y));
-                virtualCmds.add(new AddCommand(virtualNode));
+                virtualCmds.add(new AddCommand(ds, virtualNode));
 
                 // Looking for candidateSegment copies in ways that are
                 // referenced
@@ -487,7 +488,7 @@ public class ImproveWayAccuracyAction extends MapMode implements
                     nodes.remove(candidateNode);
                     newWay.setNodes(nodes);
                     if (nodes.size() < 2) {
-                        final Command deleteCmd = DeleteCommand.delete(getLayerManager().getEditLayer(), Collections.singleton(targetWay), true);
+                        final Command deleteCmd = DeleteCommand.delete(Collections.singleton(targetWay), true);
                         if (deleteCmd != null) {
                             MainApplication.undoRedo.add(deleteCmd);
                         }
@@ -499,7 +500,7 @@ public class ImproveWayAccuracyAction extends MapMode implements
                             tr("Cannot delete node that has tags"),
                             tr("Error"), JOptionPane.ERROR_MESSAGE);
                 } else {
-                    final Command deleteCmd = DeleteCommand.delete(getLayerManager().getEditLayer(), Collections.singleton(candidateNode), true);
+                    final Command deleteCmd = DeleteCommand.delete(Collections.singleton(candidateNode), true);
                     if (deleteCmd != null) {
                         MainApplication.undoRedo.add(deleteCmd);
                     }
diff --git a/src/org/openstreetmap/josm/actions/mapmode/MapMode.java b/src/org/openstreetmap/josm/actions/mapmode/MapMode.java
index a4a7efa..0984515 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/MapMode.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/MapMode.java
@@ -10,14 +10,14 @@ import java.awt.event.MouseMotionListener;
 import java.util.Collection;
 import java.util.Collections;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.JosmAction;
-import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
-import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.MapFrame;
 import org.openstreetmap.josm.gui.layer.Layer;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Shortcut;
 
@@ -71,7 +71,7 @@ public abstract class MapMode extends JosmAction implements MouseListener, Mouse
      * @param shortcut a ready-created shortcut object or null if you don't want a shortcut.
      * @param mapFrame unused but kept for plugin compatibility. Can be {@code null}
      * @param cursor cursor displayed when map mode is active
-     * @deprecated use {@link #MapMode(String, String, String, Shortcut, Cursor) instead}
+     * @deprecated use {@link #MapMode(String, String, String, Shortcut, Cursor)} instead
      */
     @Deprecated
     public MapMode(String name, String iconName, String tooltip, Shortcut shortcut, MapFrame mapFrame, Cursor cursor) {
@@ -85,7 +85,7 @@ public abstract class MapMode extends JosmAction implements MouseListener, Mouse
      * @param tooltip  a longer description of the action that will be displayed in the tooltip.
      * @param mapFrame unused but kept for plugin compatibility. Can be {@code null}
      * @param cursor cursor displayed when map mode is active
-     * @deprecated use {@link #MapMode(String, String, String, Cursor) instead}
+     * @deprecated use {@link #MapMode(String, String, String, Cursor)} instead
      */
     @Deprecated
     public MapMode(String name, String iconName, String tooltip, MapFrame mapFrame, Cursor cursor) {
@@ -97,7 +97,7 @@ public abstract class MapMode extends JosmAction implements MouseListener, Mouse
      */
     public void enterMode() {
         putValue("active", Boolean.TRUE);
-        Main.pref.addPreferenceChangeListener(this);
+        Config.getPref().addPreferenceChangeListener(this);
         readPreferences();
         MainApplication.getMap().mapView.setNewCursor(cursor, this);
         updateStatusLine();
@@ -108,7 +108,7 @@ public abstract class MapMode extends JosmAction implements MouseListener, Mouse
      */
     public void exitMode() {
         putValue("active", Boolean.FALSE);
-        Main.pref.removePreferenceChangeListener(this);
+        Config.getPref().removePreferenceChangeListener(this);
         MainApplication.getMap().mapView.resetCursor(this);
     }
 
diff --git a/src/org/openstreetmap/josm/actions/mapmode/ParallelWays.java b/src/org/openstreetmap/josm/actions/mapmode/ParallelWays.java
index 9582c7e..36d4bad 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/ParallelWays.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/ParallelWays.java
@@ -10,10 +10,12 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.command.AddCommand;
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.SequenceCommand;
 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.NodeGraph;
 import org.openstreetmap.josm.data.osm.Way;
@@ -185,12 +187,13 @@ public class ParallelWays {
     }
 
     private List<Command> makeAddWayAndNodesCommandList() {
+        DataSet ds = Main.main.getEditDataSet();
         List<Command> commands = new ArrayList<>(sortedNodes.size() + ways.size());
         for (int i = 0; i < sortedNodes.size() - (isClosedPath() ? 1 : 0); i++) {
-            commands.add(new AddCommand(sortedNodes.get(i)));
+            commands.add(new AddCommand(ds, sortedNodes.get(i)));
         }
         for (Way w : ways) {
-            commands.add(new AddCommand(w));
+            commands.add(new AddCommand(ds, w));
         }
         return commands;
     }
diff --git a/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java b/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
index a5f2318..ca3a295 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
@@ -50,6 +50,7 @@ import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.util.KeyPressReleaseListener;
 import org.openstreetmap.josm.gui.util.ModifierExListener;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Pair;
@@ -201,11 +202,11 @@ public class SelectAction extends MapMode implements ModifierExListener, KeyPres
         super.enterMode();
         mv.addMouseListener(this);
         mv.addMouseMotionListener(this);
-        mv.setVirtualNodesEnabled(Main.pref.getInteger("mappaint.node.virtual-size", 8) != 0);
-        drawTargetHighlight = Main.pref.getBoolean("draw.target-highlight", true);
-        initialMoveDelay = Main.pref.getInteger("edit.initial-move-delay", 200);
-        initialMoveThreshold = Main.pref.getInteger("edit.initial-move-threshold", 5);
-        repeatedKeySwitchLassoOption = Main.pref.getBoolean("mappaint.select.toggle-lasso-on-repeated-S", true);
+        mv.setVirtualNodesEnabled(Config.getPref().getInt("mappaint.node.virtual-size", 8) != 0);
+        drawTargetHighlight = Config.getPref().getBoolean("draw.target-highlight", true);
+        initialMoveDelay = Config.getPref().getInt("edit.initial-move-delay", 200);
+        initialMoveThreshold = Config.getPref().getInt("edit.initial-move-threshold", 5);
+        repeatedKeySwitchLassoOption = Config.getPref().getBoolean("mappaint.select.toggle-lasso-on-repeated-S", true);
         cycleManager.init();
         virtualManager.init();
         // This is required to update the cursors when ctrl/shift/alt is pressed
@@ -708,7 +709,7 @@ public class SelectAction extends MapMode implements ModifierExListener, KeyPres
                 if (c instanceof MoveCommand && affectedNodes.equals(((MoveCommand) c).getParticipatingPrimitives())) {
                     ((MoveCommand) c).saveCheckpoint();
                     ((MoveCommand) c).applyVectorTo(currentEN);
-                } else {
+                } else if (!selection.isEmpty()) {
                     c = new MoveCommand(selection, startEN, currentEN);
                     MainApplication.undoRedo.add(c);
                 }
@@ -827,7 +828,7 @@ public class SelectAction extends MapMode implements ModifierExListener, KeyPres
                 MainApplication.undoRedo.undo();
             }
         }
-        int max = Main.pref.getInteger("warn.move.maxelements", 20), limit = max;
+        int max = Config.getPref().getInt("warn.move.maxelements", 20), limit = max;
         for (OsmPrimitive osm : getLayerManager().getEditDataSet().getSelected()) {
             if (osm instanceof Way) {
                 limit -= ((Way) osm).getNodes().size();
@@ -1038,8 +1039,8 @@ public class SelectAction extends MapMode implements ModifierExListener, KeyPres
          * read preferences
          */
         private void init() {
-            waitForMouseUpParameter = Main.pref.getBoolean("mappaint.select.waits-for-mouse-up", false);
-            multipleMatchesParameter = Main.pref.getBoolean("selectaction.cycles.multiple.matches", false);
+            waitForMouseUpParameter = Config.getPref().getBoolean("mappaint.select.waits-for-mouse-up", false);
+            multipleMatchesParameter = Config.getPref().getBoolean("selectaction.cycles.multiple.matches", false);
         }
 
         /**
@@ -1174,10 +1175,10 @@ public class SelectAction extends MapMode implements ModifierExListener, KeyPres
         private int virtualSpace;
 
         private void init() {
-            nodeVirtualSize = Main.pref.getInteger("mappaint.node.virtual-size", 8);
-            int virtualSnapDistSq = Main.pref.getInteger("mappaint.node.virtual-snap-distance", 8);
+            nodeVirtualSize = Config.getPref().getInt("mappaint.node.virtual-size", 8);
+            int virtualSnapDistSq = Config.getPref().getInt("mappaint.node.virtual-snap-distance", 8);
             virtualSnapDistSq2 = virtualSnapDistSq*virtualSnapDistSq;
-            virtualSpace = Main.pref.getInteger("mappaint.node.virtual-space", 70);
+            virtualSpace = Config.getPref().getInt("mappaint.node.virtual-space", 70);
         }
 
         /**
@@ -1234,20 +1235,21 @@ public class SelectAction extends MapMode implements ModifierExListener, KeyPres
         }
 
         private void createMiddleNodeFromVirtual(EastNorth currentEN) {
+            DataSet ds = getLayerManager().getEditDataSet();
             Collection<Command> virtualCmds = new LinkedList<>();
-            virtualCmds.add(new AddCommand(virtualNode));
+            virtualCmds.add(new AddCommand(ds, virtualNode));
             for (WaySegment virtualWay : virtualWays) {
                 Way w = virtualWay.way;
                 Way wnew = new Way(w);
                 wnew.addNode(virtualWay.lowerIndex + 1, virtualNode);
-                virtualCmds.add(new ChangeCommand(w, wnew));
+                virtualCmds.add(new ChangeCommand(ds, w, wnew));
             }
-            virtualCmds.add(new MoveCommand(virtualNode, startEN, currentEN));
+            virtualCmds.add(new MoveCommand(ds, virtualNode, startEN, currentEN));
             String text = trn("Add and move a virtual new node to way",
                     "Add and move a virtual new node to {0} ways", virtualWays.size(),
                     virtualWays.size());
             MainApplication.undoRedo.add(new SequenceCommand(text, virtualCmds));
-            getLayerManager().getEditDataSet().setSelected(Collections.singleton((OsmPrimitive) virtualNode));
+            ds.setSelected(Collections.singleton((OsmPrimitive) virtualNode));
             clear();
         }
 
diff --git a/src/org/openstreetmap/josm/actions/relation/EditRelationAction.java b/src/org/openstreetmap/josm/actions/relation/EditRelationAction.java
index 2f2b7e8..13d9844 100644
--- a/src/org/openstreetmap/josm/actions/relation/EditRelationAction.java
+++ b/src/org/openstreetmap/josm/actions/relation/EditRelationAction.java
@@ -18,6 +18,7 @@ import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.dialogs.relation.RelationEditor;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ImageProvider;
 
 /**
@@ -69,7 +70,7 @@ public class EditRelationAction extends AbstractRelationAction {
     @Override
     public void actionPerformed(ActionEvent e) {
         if (!isEnabled() || relations.isEmpty()) return;
-        if (relations.size() > Main.pref.getInteger("warn.open.maxrelations", 5) &&
+        if (relations.size() > Config.getPref().getInt("warn.open.maxrelations", 5) &&
             /* I18N english text for value 1 makes no real sense, never called for values <= maxrel (usually 5) */
             JOptionPane.OK_OPTION != JOptionPane.showConfirmDialog(Main.parent,
                     "<html>"+trn("You are about to open <b>{0}</b> different relation editor simultaneously.<br/>Do you want to continue?",
diff --git a/src/org/openstreetmap/josm/actions/relation/RecentRelationsAction.java b/src/org/openstreetmap/josm/actions/relation/RecentRelationsAction.java
index 17d2e41..7279150 100644
--- a/src/org/openstreetmap/josm/actions/relation/RecentRelationsAction.java
+++ b/src/org/openstreetmap/josm/actions/relation/RecentRelationsAction.java
@@ -18,13 +18,13 @@ import javax.swing.KeyStroke;
 import javax.swing.plaf.basic.BasicArrowButton;
 
 import org.openstreetmap.josm.actions.JosmAction;
+import org.openstreetmap.josm.data.UndoRedoHandler.CommandQueueListener;
 import org.openstreetmap.josm.data.osm.DefaultNameFormatter;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.SideButton;
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer.CommandQueueListener;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Shortcut;
 
diff --git a/src/org/openstreetmap/josm/actions/search/SearchAction.java b/src/org/openstreetmap/josm/actions/search/SearchAction.java
index 9ff8b39..25eb3b0 100644
--- a/src/org/openstreetmap/josm/actions/search/SearchAction.java
+++ b/src/org/openstreetmap/josm/actions/search/SearchAction.java
@@ -5,6 +5,7 @@ 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.Component;
 import java.awt.Cursor;
 import java.awt.Dimension;
 import java.awt.FlowLayout;
@@ -56,6 +57,7 @@ import org.openstreetmap.josm.data.osm.search.SearchSetting;
 import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.MapFrame;
+import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
 import org.openstreetmap.josm.gui.mappaint.mapcss.MapCSSException;
 import org.openstreetmap.josm.gui.preferences.ToolbarPreferences;
@@ -65,6 +67,7 @@ import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetSelector;
 import org.openstreetmap.josm.gui.widgets.AbstractTextComponentValidator;
 import org.openstreetmap.josm.gui.widgets.HistoryComboBox;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.JosmRuntimeException;
 import org.openstreetmap.josm.tools.Logging;
@@ -110,7 +113,7 @@ public class SearchAction extends JosmAction implements ParameterizedAction {
             }
         });
 
-        for (String s: Main.pref.getCollection("search.history", Collections.<String>emptyList())) {
+        for (String s: Config.getPref().getList("search.history", Collections.<String>emptyList())) {
             SearchSetting ss = SearchSetting.readFromString(s);
             if (ss != null) {
                 searchHistory.add(ss);
@@ -138,7 +141,7 @@ public class SearchAction extends JosmAction implements ParameterizedAction {
             searchHistory.remove(s);
             searchHistory.addFirst(new SearchSetting(s));
         }
-        int maxsize = Main.pref.getInteger("search.history-size", DEFAULT_SEARCH_HISTORY_SIZE);
+        int maxsize = Config.getPref().getInt("search.history-size", DEFAULT_SEARCH_HISTORY_SIZE);
         while (searchHistory.size() > maxsize) {
             searchHistory.removeLast();
         }
@@ -146,7 +149,7 @@ public class SearchAction extends JosmAction implements ParameterizedAction {
         for (SearchSetting item: searchHistory) {
             savedHistory.add(item.writeToString());
         }
-        Main.pref.putCollection("search.history", savedHistory);
+        Config.getPref().putList("search.history", new ArrayList<>(savedHistory));
     }
 
     /**
@@ -668,7 +671,7 @@ public class SearchAction extends JosmAction implements ParameterizedAction {
          * @param foundMatches The number of matches added to the result.
          * @param setting The setting used.
          */
-        void receiveSearchResult(DataSet ds, Collection<OsmPrimitive> result, int foundMatches, SearchSetting setting);
+        void receiveSearchResult(DataSet ds, Collection<OsmPrimitive> result, int foundMatches, SearchSetting setting, Component parent);
     }
 
     /**
@@ -677,7 +680,7 @@ public class SearchAction extends JosmAction implements ParameterizedAction {
     private static class SelectSearchReceiver implements SearchReceiver {
 
         @Override
-        public void receiveSearchResult(DataSet ds, Collection<OsmPrimitive> result, int foundMatches, SearchSetting setting) {
+        public void receiveSearchResult(DataSet ds, Collection<OsmPrimitive> result, int foundMatches, SearchSetting setting, Component parent) {
             ds.setSelected(result);
             MapFrame map = MainApplication.getMap();
             if (foundMatches == 0) {
@@ -698,12 +701,7 @@ public class SearchAction extends JosmAction implements ParameterizedAction {
                     map.statusLine.setHelpText(msg);
                 }
                 if (!GraphicsEnvironment.isHeadless()) {
-                    JOptionPane.showMessageDialog(
-                            Main.parent,
-                            msg,
-                            tr("Warning"),
-                            JOptionPane.WARNING_MESSAGE
-                    );
+                    new Notification(msg).show();
                 }
             } else {
                 map.statusLine.setHelpText(tr("Found {0} matches", foundMatches));
@@ -720,7 +718,7 @@ public class SearchAction extends JosmAction implements ParameterizedAction {
 
         @Override
         public void receiveSearchResult(DataSet ds, Collection<OsmPrimitive> result, int foundMatches,
-                SearchSetting setting) {
+                SearchSetting setting, Component parent) {
                     this.result = result;
         }
     }
@@ -825,7 +823,7 @@ public class SearchAction extends JosmAction implements ParameterizedAction {
             if (canceled) {
                 return;
             }
-            resultReceiver.receiveSearchResult(ds, selection, foundMatches, setting);
+            resultReceiver.receiveSearchResult(ds, selection, foundMatches, setting, getProgressMonitor().getWindowParent());
         }
     }
 
diff --git a/src/org/openstreetmap/josm/actions/upload/FixDataHook.java b/src/org/openstreetmap/josm/actions/upload/FixDataHook.java
index f1618e3..b614cb3 100644
--- a/src/org/openstreetmap/josm/actions/upload/FixDataHook.java
+++ b/src/org/openstreetmap/josm/actions/upload/FixDataHook.java
@@ -11,7 +11,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.command.ChangePropertyCommand;
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.SequenceCommand;
@@ -20,6 +19,7 @@ import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.Tag;
 import org.openstreetmap.josm.gui.MainApplication;
+import org.openstreetmap.josm.spi.preferences.Config;
 
 /**
  * Fixes defective data entries for all modified objects before upload
@@ -186,7 +186,7 @@ public class FixDataHook implements UploadHook {
      */
     @Override
     public boolean checkUpload(APIDataSet apiDataSet) {
-        if (Main.pref.getBoolean("fix.data.on.upload", true)) {
+        if (Config.getPref().getBoolean("fix.data.on.upload", true)) {
             Collection<Command> cmds = new LinkedList<>();
 
             for (OsmPrimitive osm : apiDataSet.getPrimitives()) {
diff --git a/src/org/openstreetmap/josm/command/AddCommand.java b/src/org/openstreetmap/josm/command/AddCommand.java
index 8c107aa..dd418e8 100644
--- a/src/org/openstreetmap/josm/command/AddCommand.java
+++ b/src/org/openstreetmap/josm/command/AddCommand.java
@@ -35,7 +35,9 @@ public class AddCommand extends Command {
     /**
      * Creates the command and specify the element to add in the context of the current edit layer, if any.
      * @param osm The primitive to add
+     * @deprecated to be removed end of 2017. Use {@link #AddCommand(DataSet, OsmPrimitive)} instead
      */
+    @Deprecated
     public AddCommand(OsmPrimitive osm) {
         this.osm = Objects.requireNonNull(osm, "osm");
     }
@@ -44,7 +46,9 @@ public class AddCommand extends Command {
      * Creates the command and specify the element to add in the context of the given data layer.
      * @param layer The data layer. Must not be {@code null}
      * @param osm The primitive to add
+     * @deprecated to be removed end of 2017. Use {@link #AddCommand(DataSet, OsmPrimitive)} instead
      */
+    @Deprecated
     public AddCommand(OsmDataLayer layer, OsmPrimitive osm) {
         super(layer);
         this.osm = Objects.requireNonNull(osm, "osm");
diff --git a/src/org/openstreetmap/josm/command/AddPrimitivesCommand.java b/src/org/openstreetmap/josm/command/AddPrimitivesCommand.java
index 7b8d536..821f178 100644
--- a/src/org/openstreetmap/josm/command/AddPrimitivesCommand.java
+++ b/src/org/openstreetmap/josm/command/AddPrimitivesCommand.java
@@ -38,7 +38,9 @@ public class AddPrimitivesCommand extends Command {
     /**
      * Constructs a new {@code AddPrimitivesCommand} to add data to the current edit layer.
      * @param data The OSM primitives data to add. Must not be {@code null}
+     * @deprecated to be removed end of 2017. Use {@link #AddPrimitivesCommand(List, DataSet)} instead
      */
+    @Deprecated
     public AddPrimitivesCommand(List<PrimitiveData> data) {
         this(data, data);
     }
@@ -48,7 +50,9 @@ public class AddPrimitivesCommand extends Command {
      * @param data The OSM primitives to add. Must not be {@code null}
      * @param toSelect The OSM primitives to select at the end. Can be {@code null}
      * @since 5953
+     * @deprecated to be removed end of 2017. Use {@link #AddPrimitivesCommand(List, List, DataSet)} instead
      */
+    @Deprecated
     public AddPrimitivesCommand(List<PrimitiveData> data, List<PrimitiveData> toSelect) {
         init(data, toSelect);
     }
@@ -58,12 +62,36 @@ public class AddPrimitivesCommand extends Command {
      * @param data The OSM primitives data to add. Must not be {@code null}
      * @param toSelect The OSM primitives to select at the end. Can be {@code null}
      * @param layer The target data layer. Must not be {@code null}
+     * @deprecated to be removed end of 2017. Use {@link #AddPrimitivesCommand(List, List, DataSet)} instead
      */
+    @Deprecated
     public AddPrimitivesCommand(List<PrimitiveData> data, List<PrimitiveData> toSelect, OsmDataLayer layer) {
         super(layer);
         init(data, toSelect);
     }
 
+    /**
+     * Constructs a new {@code AddPrimitivesCommand} to add data to the given data set.
+     * @param data The OSM primitives data to add. Must not be {@code null}
+     * @param toSelect The OSM primitives to select at the end. Can be {@code null}
+     * @param ds The target data set. Must not be {@code null}
+     * @since 12718
+     */
+    public AddPrimitivesCommand(List<PrimitiveData> data, List<PrimitiveData> toSelect, DataSet ds) {
+        super(ds);
+        init(data, toSelect);
+    }
+
+    /**
+     * Constructs a new {@code AddPrimitivesCommand} to add data to the given data set.
+     * @param data The OSM primitives data to add and select. Must not be {@code null}
+     * @param ds The target data set. Must not be {@code null}
+     * @since 12726
+     */
+    public AddPrimitivesCommand(List<PrimitiveData> data, DataSet ds) {
+        this(data, data, ds);
+    }
+
     private void init(List<PrimitiveData> data, List<PrimitiveData> toSelect) {
         CheckParameterUtil.ensureParameterNotNull(data, "data");
         this.data = new ArrayList<>(data);
diff --git a/src/org/openstreetmap/josm/command/ChangeCommand.java b/src/org/openstreetmap/josm/command/ChangeCommand.java
index f59e498..1ae699b 100644
--- a/src/org/openstreetmap/josm/command/ChangeCommand.java
+++ b/src/org/openstreetmap/josm/command/ChangeCommand.java
@@ -29,14 +29,12 @@ public class ChangeCommand extends Command {
     private final OsmPrimitive newOsm;
 
     /**
-     * Constructs a new {@code ChangeCommand} in the context of the current edit layer, if any.
-     * @param osm The existing primitive to modify
+     * Constructs a new {@code ChangeCommand} in the context of {@code osm} data set.
+     * @param osm The existing primitive to modify. It must belong to a data set
      * @param newOsm The new primitive
      */
     public ChangeCommand(OsmPrimitive osm, OsmPrimitive newOsm) {
-        this.osm = osm;
-        this.newOsm = newOsm;
-        sanityChecks();
+        this(osm.getDataSet(), osm, newOsm);
     }
 
     /**
@@ -44,7 +42,9 @@ public class ChangeCommand extends Command {
      * @param layer The data layer
      * @param osm The existing primitive to modify
      * @param newOsm The new primitive
+     * @deprecated to be removed end of 2017. Use {@link #ChangeCommand(DataSet, OsmPrimitive, OsmPrimitive)} instead
      */
+    @Deprecated
     public ChangeCommand(OsmDataLayer layer, OsmPrimitive osm, OsmPrimitive newOsm) {
         super(layer);
         this.osm = osm;
diff --git a/src/org/openstreetmap/josm/command/ChangeNodesCommand.java b/src/org/openstreetmap/josm/command/ChangeNodesCommand.java
index 58eef21..6923449 100644
--- a/src/org/openstreetmap/josm/command/ChangeNodesCommand.java
+++ b/src/org/openstreetmap/josm/command/ChangeNodesCommand.java
@@ -9,6 +9,7 @@ import java.util.Objects;
 
 import javax.swing.Icon;
 
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.DefaultNameFormatter;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -35,6 +36,18 @@ public class ChangeNodesCommand extends Command {
      * @param newNodes The new list of nodes for the given way
      */
     public ChangeNodesCommand(Way way, List<Node> newNodes) {
+        this(way.getDataSet(), way, newNodes);
+    }
+
+    /**
+     * Constructs a new {@code ChangeNodesCommand}.
+     * @param ds The target data set. Must not be {@code null}
+     * @param way The way to modify
+     * @param newNodes The new list of nodes for the given way
+     * @since 12726
+     */
+    public ChangeNodesCommand(DataSet ds, Way way, List<Node> newNodes) {
+        super(ds);
         this.way = way;
         this.newNodes = newNodes;
         if (newNodes.isEmpty()) {
diff --git a/src/org/openstreetmap/josm/command/ChangePropertyCommand.java b/src/org/openstreetmap/josm/command/ChangePropertyCommand.java
index fdc7756..1d17797 100644
--- a/src/org/openstreetmap/josm/command/ChangePropertyCommand.java
+++ b/src/org/openstreetmap/josm/command/ChangePropertyCommand.java
@@ -12,6 +12,7 @@ import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.NoSuchElementException;
 import java.util.Objects;
 import java.util.stream.Collectors;
 
@@ -71,22 +72,40 @@ public class ChangePropertyCommand extends Command {
     /**
      * Creates a command to change multiple tags of multiple objects
      *
-     * @param objects the objects to modify
+     * @param ds The target data set. Must not be {@code null}
+     * @param objects the objects to modify. Must not be empty
      * @param tags the tags to set
+     * @since 12726
      */
-    public ChangePropertyCommand(Collection<? extends OsmPrimitive> objects, Map<String, String> tags) {
+    public ChangePropertyCommand(DataSet ds, Collection<? extends OsmPrimitive> objects, Map<String, String> tags) {
+        super(ds);
         this.tags = tags;
         init(objects);
     }
 
     /**
+     * Creates a command to change multiple tags of multiple objects
+     *
+     * @param objects the objects to modify. Must not be empty, and objects must belong to a data set
+     * @param tags the tags to set
+     * @throws NullPointerException if objects is null or contain null item
+     * @throws NoSuchElementException if objects is empty
+     */
+    public ChangePropertyCommand(Collection<? extends OsmPrimitive> objects, Map<String, String> tags) {
+        this(objects.iterator().next().getDataSet(), objects, tags);
+    }
+
+    /**
      * Creates a command to change one tag of multiple objects
      *
-     * @param objects the objects to modify
+     * @param objects the objects to modify. Must not be empty, and objects must belong to a data set
      * @param key the key of the tag to set
      * @param value the value of the key to set
+     * @throws NullPointerException if objects is null or contain null item
+     * @throws NoSuchElementException if objects is empty
      */
     public ChangePropertyCommand(Collection<? extends OsmPrimitive> objects, String key, String value) {
+        super(objects.iterator().next().getDataSet());
         this.tags = new HashMap<>(1);
         this.tags.put(key, value);
         init(objects);
@@ -95,9 +114,10 @@ public class ChangePropertyCommand extends Command {
     /**
      * Creates a command to change one tag of one object
      *
-     * @param object the object to modify
+     * @param object the object to modify. Must belong to a data set
      * @param key the key of the tag to set
      * @param value the value of the key to set
+     * @throws NullPointerException if object is null
      */
     public ChangePropertyCommand(OsmPrimitive object, String key, String value) {
         this(Arrays.asList(object), key, value);
@@ -119,12 +139,16 @@ public class ChangePropertyCommand extends Command {
                 String newVal = tag.getValue();
 
                 if (newVal == null || newVal.isEmpty()) {
-                    if (oldVal != null)
+                    if (oldVal != null) {
                         // new value is null and tag exists (will delete tag)
                         modified = true;
-                } else if (oldVal == null || !newVal.equals(oldVal))
+                        break;
+                    }
+                } else if (oldVal == null || !newVal.equals(oldVal)) {
                     // new value is not null and is different from current value
                     modified = true;
+                    break;
+                }
             }
             if (modified)
                 this.objects.add(osm);
diff --git a/src/org/openstreetmap/josm/command/ChangePropertyKeyCommand.java b/src/org/openstreetmap/josm/command/ChangePropertyKeyCommand.java
index bffb2a8..cb8ac7c 100644
--- a/src/org/openstreetmap/josm/command/ChangePropertyKeyCommand.java
+++ b/src/org/openstreetmap/josm/command/ChangePropertyKeyCommand.java
@@ -9,10 +9,12 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.NoSuchElementException;
 import java.util.Objects;
 
 import javax.swing.Icon;
 
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.validation.util.NameVisitor;
 import org.openstreetmap.josm.tools.ImageProvider;
@@ -65,7 +67,7 @@ public class ChangePropertyKeyCommand extends Command {
     /**
      * Constructs a new {@code ChangePropertyKeyCommand}.
      *
-     * @param object the object subject to change replacement
+     * @param object the object subject to change replacement. Must not be null, and belong to a data set
      * @param key The key to replace
      * @param newKey the new value of the key
      * @since 6329
@@ -77,11 +79,27 @@ public class ChangePropertyKeyCommand extends Command {
     /**
      * Constructs a new {@code ChangePropertyKeyCommand}.
      *
-     * @param objects all objects subject to change replacement
+     * @param objects all objects subject to change replacement. Must not be null or empty, and objects must belong to a data set
      * @param key The key to replace
      * @param newKey the new value of the key
+     * @throws NullPointerException if objects is null or contain null item
+     * @throws NoSuchElementException if objects is empty
      */
     public ChangePropertyKeyCommand(Collection<? extends OsmPrimitive> objects, String key, String newKey) {
+        this(objects.iterator().next().getDataSet(), objects, key, newKey);
+    }
+
+    /**
+     * Constructs a new {@code ChangePropertyKeyCommand}.
+     *
+     * @param ds The target data set. Must not be {@code null}
+     * @param objects all objects subject to change replacement.
+     * @param key The key to replace
+     * @param newKey the new value of the key
+     * @since 12726
+     */
+    public ChangePropertyKeyCommand(DataSet ds, Collection<? extends OsmPrimitive> objects, String key, String newKey) {
+        super(ds);
         this.objects = new LinkedList<>(objects);
         this.key = key;
         this.newKey = newKey;
diff --git a/src/org/openstreetmap/josm/command/ChangeRelationMemberRoleCommand.java b/src/org/openstreetmap/josm/command/ChangeRelationMemberRoleCommand.java
index 1621de0..6d734cd 100644
--- a/src/org/openstreetmap/josm/command/ChangeRelationMemberRoleCommand.java
+++ b/src/org/openstreetmap/josm/command/ChangeRelationMemberRoleCommand.java
@@ -36,19 +36,17 @@ public class ChangeRelationMemberRoleCommand extends Command {
 
     /**
      * Constructs a new {@code ChangeRelationMemberRoleCommand}.
-     * @param relation The relation to be changed
+     * @param relation The relation to be changed. Must not be null, and belong to a data set
      * @param position Member position
      * @param newRole New role
      */
     public ChangeRelationMemberRoleCommand(Relation relation, int position, String newRole) {
-        this.relation = relation;
-        this.position = position;
-        this.newRole = newRole;
+        this(relation.getDataSet(), relation, position, newRole);
     }
 
     /**
      * Constructs a new {@code ChangeRelationMemberRoleCommand}.
-     * @param dataSet The data set the role is in
+     * @param dataSet The data set the role is in. Must not be {@code null}
      * @param relation The relation to be changed
      * @param position Member position
      * @param newRole New role
diff --git a/src/org/openstreetmap/josm/command/Command.java b/src/org/openstreetmap/josm/command/Command.java
index 5b1ae5c..2d08bd6 100644
--- a/src/org/openstreetmap/josm/command/Command.java
+++ b/src/org/openstreetmap/josm/command/Command.java
@@ -1,7 +1,6 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.command;
 
-import java.awt.GridBagLayout;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
@@ -10,9 +9,6 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Objects;
 
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.coor.LatLon;
@@ -22,19 +18,17 @@ import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.PrimitiveData;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.Way;
-import org.openstreetmap.josm.data.osm.visitor.AbstractVisitor;
-import org.openstreetmap.josm.gui.ConditionalOptionPaneUtil;
+import org.openstreetmap.josm.data.osm.visitor.OsmPrimitiveVisitor;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
-import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 
 /**
  * Classes implementing Command modify a dataset in a specific way. A command is
  * one atomic action on a specific dataset, such as move or delete.
  *
- * The command remembers the {@link OsmDataLayer} it is operating on.
+ * The command remembers the {@link DataSet} it is operating on.
  *
  * @author imi
  * @since 21 (creation)
@@ -49,7 +43,7 @@ public abstract class Command implements PseudoCommand {
     /** IS_INCOMPLETE: operation on incomplete target */
     public static final int IS_INCOMPLETE = 2;
 
-    private static final class CloneVisitor extends AbstractVisitor {
+    private static final class CloneVisitor implements OsmPrimitiveVisitor {
         public final Map<OsmPrimitive, PrimitiveData> orig = new LinkedHashMap<>();
 
         @Override
@@ -134,7 +128,11 @@ public abstract class Command implements PseudoCommand {
     /** the map of OsmPrimitives in the original state to OsmPrimitives in cloned state */
     private Map<OsmPrimitive, PrimitiveData> cloneMap = new HashMap<>();
 
-    /** the layer which this command is applied to */
+    /**
+     * the layer which this command is applied to
+     * @deprecated to be removed end of 2017. Use {@link #data} instead
+     */
+    @Deprecated
     private final OsmDataLayer layer;
 
     /** the dataset which this command is applied to */
@@ -142,10 +140,12 @@ public abstract class Command implements PseudoCommand {
 
     /**
      * Creates a new command in the context of the current edit layer, if any
+     * @deprecated to be removed end of 2017. Use {@link #Command(DataSet)} instead
      */
+    @Deprecated
     public Command() {
         this.layer = MainApplication.getLayerManager().getEditLayer();
-        this.data = layer != null ? layer.data : null;
+        this.data = layer != null ? layer.data : Main.main.getEditDataSet();
     }
 
     /**
@@ -153,7 +153,9 @@ public abstract class Command implements PseudoCommand {
      *
      * @param layer the data layer. Must not be null.
      * @throws IllegalArgumentException if layer is null
+     * @deprecated to be removed end of 2017. Use {@link #Command(DataSet)} instead
      */
+    @Deprecated
     public Command(OsmDataLayer layer) {
         CheckParameterUtil.ensureParameterNotNull(layer, "layer");
         this.layer = layer;
@@ -215,7 +217,9 @@ public abstract class Command implements PseudoCommand {
      *
      * @param oldLayer the old layer that was removed
      * @return true if this command is invalid after that layer is removed.
+     * @deprecated to be removed end of 2017.
      */
+    @Deprecated
     public boolean invalidBecauselayerRemoved(Layer oldLayer) {
         return layer == oldLayer;
     }
@@ -233,7 +237,9 @@ public abstract class Command implements PseudoCommand {
     /**
      * Replies the layer this command is (or was) applied to.
      * @return the layer this command is (or was) applied to
+     * @deprecated to be removed end of 2017. Use {@link #getAffectedDataSet} instead
      */
+    @Deprecated
     protected OsmDataLayer getLayer() {
         return layer;
     }
@@ -291,54 +297,6 @@ public abstract class Command implements PseudoCommand {
     }
 
     /**
-     * Check whether user is about to operate on data outside of the download area.
-     * Request confirmation if he is.
-     *
-     * @param operation the operation name which is used for setting some preferences
-     * @param dialogTitle the title of the dialog being displayed
-     * @param outsideDialogMessage the message text to be displayed when data is outside of the download area
-     * @param incompleteDialogMessage the message text to be displayed when data is incomplete
-     * @param primitives the primitives to operate on
-     * @param ignore {@code null} or a primitive to be ignored
-     * @return true, if operating on outlying primitives is OK; false, otherwise
-     */
-    public static boolean checkAndConfirmOutlyingOperation(String operation,
-            String dialogTitle, String outsideDialogMessage, String incompleteDialogMessage,
-            Collection<? extends OsmPrimitive> primitives,
-            Collection<? extends OsmPrimitive> ignore) {
-        int checkRes = checkOutlyingOrIncompleteOperation(primitives, ignore);
-        if ((checkRes & IS_OUTSIDE) != 0) {
-            JPanel msg = new JPanel(new GridBagLayout());
-            msg.add(new JMultilineLabel("<html>" + outsideDialogMessage + "</html>"));
-            boolean answer = ConditionalOptionPaneUtil.showConfirmationDialog(
-                    operation + "_outside_nodes",
-                    Main.parent,
-                    msg,
-                    dialogTitle,
-                    JOptionPane.YES_NO_OPTION,
-                    JOptionPane.QUESTION_MESSAGE,
-                    JOptionPane.YES_OPTION);
-            if (!answer)
-                return false;
-        }
-        if ((checkRes & IS_INCOMPLETE) != 0) {
-            JPanel msg = new JPanel(new GridBagLayout());
-            msg.add(new JMultilineLabel("<html>" + incompleteDialogMessage + "</html>"));
-            boolean answer = ConditionalOptionPaneUtil.showConfirmationDialog(
-                    operation + "_incomplete",
-                    Main.parent,
-                    msg,
-                    dialogTitle,
-                    JOptionPane.YES_NO_OPTION,
-                    JOptionPane.QUESTION_MESSAGE,
-                    JOptionPane.YES_OPTION);
-            if (!answer)
-                return false;
-        }
-        return true;
-    }
-
-    /**
      * Ensures that all primitives that are participating in this command belong to the affected data set.
      *
      * Commands may use this in their update methods to check the consitency of the primitives they operate on.
@@ -370,7 +328,9 @@ public abstract class Command implements PseudoCommand {
     /**
      * Invalidate all layers that were affected by this command.
      * @see Layer#invalidate()
+     * @deprecated to be removed end of 2017.
      */
+    @Deprecated
     public void invalidateAffectedLayers() {
         OsmDataLayer layer = getLayer();
         if (layer != null) {
diff --git a/src/org/openstreetmap/josm/command/DeleteCommand.java b/src/org/openstreetmap/josm/command/DeleteCommand.java
index 1b6a682..914e270 100644
--- a/src/org/openstreetmap/josm/command/DeleteCommand.java
+++ b/src/org/openstreetmap/josm/command/DeleteCommand.java
@@ -5,7 +5,6 @@ import static org.openstreetmap.josm.tools.I18n.marktr;
 import static org.openstreetmap.josm.tools.I18n.tr;
 import static org.openstreetmap.josm.tools.I18n.trn;
 
-import java.awt.GridBagLayout;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -21,12 +20,7 @@ import java.util.Objects;
 import java.util.Set;
 
 import javax.swing.Icon;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
 
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.actions.SplitWayAction;
-import org.openstreetmap.josm.actions.SplitWayAction.SplitWayResult;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.DefaultNameFormatter;
 import org.openstreetmap.josm.data.osm.Node;
@@ -37,16 +31,15 @@ import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.RelationToChildReference;
 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.dialogs.DeleteFromRelationConfirmationDialog;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
-import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Utils;
 
 /**
  * A command to delete a number of primitives from the dataset.
+ * To be used correctly, this class requires an initial call to {@link #setDeletionCallback(DeletionCallback)} to
+ * allow interactive confirmation actions.
  * @since 23
  */
 public class DeleteCommand extends Command {
@@ -74,11 +67,54 @@ public class DeleteCommand extends Command {
 
         @Override
         public String toString() {
-            return "DeleteChildCommand [osm=" + osm + "]";
+            return "DeleteChildCommand [osm=" + osm + ']';
         }
     }
 
     /**
+     * Called when a deletion operation must be checked and confirmed by user.
+     * @since 12749
+     */
+    public interface DeletionCallback {
+        /**
+         * Check whether user is about to delete data outside of the download area.
+         * Request confirmation if he is.
+         * @param primitives the primitives to operate on
+         * @param ignore {@code null} or a primitive to be ignored
+         * @return true, if operating on outlying primitives is OK; false, otherwise
+         */
+        boolean checkAndConfirmOutlyingDelete(Collection<? extends OsmPrimitive> primitives, Collection<? extends OsmPrimitive> ignore);
+
+        /**
+         * Confirm before deleting a relation, as it is a common newbie error.
+         * @param relations relation to check for deletion
+         * @return {@code true} if user confirms the deletion
+         * @since 12760
+         */
+        boolean confirmRelationDeletion(Collection<Relation> relations);
+
+        /**
+         * Confirm before removing a collection of primitives from their parent relations.
+         * @param references the list of relation-to-child references
+         * @return {@code true} if user confirms the deletion
+         * @since 12763
+         */
+        boolean confirmDeletionFromRelation(Collection<RelationToChildReference> references);
+    }
+
+    private static volatile DeletionCallback callback;
+
+    /**
+     * Sets the global {@link DeletionCallback}.
+     * @param deletionCallback the new {@code DeletionCallback}. Must not be null
+     * @throws NullPointerException if {@code deletionCallback} is null
+     * @since 12749
+     */
+    public static void setDeletionCallback(DeletionCallback deletionCallback) {
+        callback = Objects.requireNonNull(deletionCallback);
+    }
+
+    /**
      * The primitives that get deleted.
      */
     private final Collection<? extends OsmPrimitive> toDelete;
@@ -87,13 +123,11 @@ public class DeleteCommand extends Command {
     /**
      * Constructor. Deletes a collection of primitives in the current edit layer.
      *
-     * @param data the primitives to delete. Must neither be null nor empty.
+     * @param data the primitives to delete. Must neither be null nor empty, and belong to a data set
      * @throws IllegalArgumentException if data is null or empty
      */
     public DeleteCommand(Collection<? extends OsmPrimitive> data) {
-        CheckParameterUtil.ensureParameterNotNull(data, "data");
-        this.toDelete = data;
-        checkConsistency();
+        this(data.iterator().next().getDataSet(), data);
     }
 
     /**
@@ -107,27 +141,42 @@ public class DeleteCommand extends Command {
     }
 
     /**
-     * Constructor for a single data item. Use the collection constructor to delete multiple
-     * objects.
+     * Constructor for a single data item. Use the collection constructor to delete multiple objects.
      *
      * @param layer the layer context for deleting this primitive. Must not be null.
      * @param data the primitive to delete. Must not be null.
      * @throws IllegalArgumentException if data is null
      * @throws IllegalArgumentException if layer is null
+     * @deprecated to be removed end of 2017. Use {@link #DeleteCommand(DataSet, OsmPrimitive)} instead
      */
+    @Deprecated
     public DeleteCommand(OsmDataLayer layer, OsmPrimitive data) {
         this(layer, Collections.singleton(data));
     }
 
     /**
-     * Constructor for a collection of data to be deleted in the context of
-     * a specific layer
+     * Constructor for a single data item. Use the collection constructor to delete multiple objects.
+     *
+     * @param dataset the data set context for deleting this primitive. Must not be null.
+     * @param data the primitive to delete. Must not be null.
+     * @throws IllegalArgumentException if data is null
+     * @throws IllegalArgumentException if layer is null
+     * @since 12718
+     */
+    public DeleteCommand(DataSet dataset, OsmPrimitive data) {
+        this(dataset, Collections.singleton(data));
+    }
+
+    /**
+     * Constructor for a collection of data to be deleted in the context of a specific layer
      *
      * @param layer the layer context for deleting these primitives. Must not be null.
      * @param data the primitives to delete. Must neither be null nor empty.
      * @throws IllegalArgumentException if layer is null
      * @throws IllegalArgumentException if data is null or empty
+     * @deprecated to be removed end of 2017. Use {@link #DeleteCommand(DataSet, Collection)} instead
      */
+    @Deprecated
     public DeleteCommand(OsmDataLayer layer, Collection<? extends OsmPrimitive> data) {
         super(layer);
         CheckParameterUtil.ensureParameterNotNull(data, "data");
@@ -136,8 +185,7 @@ public class DeleteCommand extends Command {
     }
 
     /**
-     * Constructor for a collection of data to be deleted in the context of
-     * a specific data set
+     * Constructor for a collection of data to be deleted in the context of a specific data set
      *
      * @param dataset the dataset context for deleting these primitives. Must not be null.
      * @param data the primitives to delete. Must neither be null nor empty.
@@ -285,18 +333,36 @@ public class DeleteCommand extends Command {
      * @param silent  Set to true if the user should not be bugged with additional dialogs
      * @return command A command to perform the deletions, or null of there is nothing to delete.
      * @throws IllegalArgumentException if layer is null
+     * @deprecated to be removed end of 2017. Use {@link #deleteWithReferences(Collection, boolean)} instead
      */
+    @Deprecated
     public static Command deleteWithReferences(OsmDataLayer layer, Collection<? extends OsmPrimitive> selection, boolean silent) {
-        CheckParameterUtil.ensureParameterNotNull(layer, "layer");
+        return deleteWithReferences(selection, silent);
+    }
+
+    /**
+     * Delete the primitives and everything they reference.
+     *
+     * If a node is deleted, the node and all ways and relations the node is part of are deleted as well.
+     * If a way is deleted, all relations the way is member of are also deleted.
+     * If a way is deleted, only the way and no nodes are deleted.
+     *
+     * @param selection The list of all object to be deleted.
+     * @param silent  Set to true if the user should not be bugged with additional dialogs
+     * @return command A command to perform the deletions, or null of there is nothing to delete.
+     * @throws IllegalArgumentException if layer is null
+     * @since 12718
+     */
+    public static Command deleteWithReferences(Collection<? extends OsmPrimitive> selection, boolean silent) {
         if (selection == null || selection.isEmpty()) return null;
         Set<OsmPrimitive> parents = OsmPrimitive.getReferrer(selection);
         parents.addAll(selection);
 
         if (parents.isEmpty())
             return null;
-        if (!silent && !checkAndConfirmOutlyingDelete(parents, null))
+        if (!silent && !callback.checkAndConfirmOutlyingDelete(parents, null))
             return null;
-        return new DeleteCommand(layer, parents);
+        return new DeleteCommand(parents.iterator().next().getDataSet(), parents);
     }
 
     /**
@@ -306,13 +372,31 @@ public class DeleteCommand extends Command {
      * If a way is deleted, all relations the way is member of are also deleted.
      * If a way is deleted, only the way and no nodes are deleted.
      *
-     * @param layer the {@link OsmDataLayer} in whose context primitives are deleted. Must not be null.
+     * @param layer unused
      * @param selection The list of all object to be deleted.
      * @return command A command to perform the deletions, or null of there is nothing to delete.
      * @throws IllegalArgumentException if layer is null
+     * @deprecated to be removed end of 2017. Use {@link #deleteWithReferences(Collection)} instead
      */
+    @Deprecated
     public static Command deleteWithReferences(OsmDataLayer layer, Collection<? extends OsmPrimitive> selection) {
-        return deleteWithReferences(layer, selection, false);
+        return deleteWithReferences(selection);
+    }
+
+    /**
+     * Delete the primitives and everything they reference.
+     *
+     * If a node is deleted, the node and all ways and relations the node is part of are deleted as well.
+     * If a way is deleted, all relations the way is member of are also deleted.
+     * If a way is deleted, only the way and no nodes are deleted.
+     *
+     * @param selection The list of all object to be deleted.
+     * @return command A command to perform the deletions, or null of there is nothing to delete.
+     * @throws IllegalArgumentException if layer is null
+     * @since 12718
+     */
+    public static Command deleteWithReferences(Collection<? extends OsmPrimitive> selection) {
+        return deleteWithReferences(selection, false);
     }
 
     /**
@@ -324,12 +408,31 @@ public class DeleteCommand extends Command {
      * If this would cause ways with less than 2 nodes to be created, delete these ways instead. If
      * they are part of a relation, inform the user and do not delete.
      *
-     * @param layer the {@link OsmDataLayer} in whose context the primitives are deleted
+     * @param layer unused
      * @param selection the objects to delete.
      * @return command a command to perform the deletions, or null if there is nothing to delete.
+     * @deprecated to be removed end of 2017. Use {@link #delete(Collection)} instead
      */
+    @Deprecated
     public static Command delete(OsmDataLayer layer, Collection<? extends OsmPrimitive> selection) {
-        return delete(layer, selection, true, false);
+        return delete(selection);
+    }
+
+    /**
+     * Try to delete all given primitives.
+     *
+     * If a node is used by a way, it's removed from that way. If a node or a way is used by a
+     * relation, inform the user and do not delete.
+     *
+     * If this would cause ways with less than 2 nodes to be created, delete these ways instead. If
+     * they are part of a relation, inform the user and do not delete.
+     *
+     * @param selection the objects to delete.
+     * @return command a command to perform the deletions, or null if there is nothing to delete.
+     * @since 12718
+     */
+    public static Command delete(Collection<? extends OsmPrimitive> selection) {
+        return delete(selection, true, false);
     }
 
     /**
@@ -375,14 +478,34 @@ public class DeleteCommand extends Command {
      * If this would cause ways with less than 2 nodes to be created, delete these ways instead. If
      * they are part of a relation, inform the user and do not delete.
      *
-     * @param layer the {@link OsmDataLayer} in whose context the primitives are deleted
+     * @param layer unused
      * @param selection the objects to delete.
      * @param alsoDeleteNodesInWay <code>true</code> if nodes should be deleted as well
      * @return command a command to perform the deletions, or null if there is nothing to delete.
+     * @deprecated to be removed end of 2017. Use {@link #delete(Collection, boolean)} instead
      */
+    @Deprecated
     public static Command delete(OsmDataLayer layer, Collection<? extends OsmPrimitive> selection,
             boolean alsoDeleteNodesInWay) {
-        return delete(layer, selection, alsoDeleteNodesInWay, false /* not silent */);
+        return delete(selection, alsoDeleteNodesInWay);
+    }
+
+    /**
+     * Try to delete all given primitives.
+     *
+     * If a node is used by a way, it's removed from that way. If a node or a way is used by a
+     * relation, inform the user and do not delete.
+     *
+     * If this would cause ways with less than 2 nodes to be created, delete these ways instead. If
+     * they are part of a relation, inform the user and do not delete.
+     *
+     * @param selection the objects to delete.
+     * @param alsoDeleteNodesInWay <code>true</code> if nodes should be deleted as well
+     * @return command a command to perform the deletions, or null if there is nothing to delete.
+     * @since 12718
+     */
+    public static Command delete(Collection<? extends OsmPrimitive> selection, boolean alsoDeleteNodesInWay) {
+        return delete(selection, alsoDeleteNodesInWay, false /* not silent */);
     }
 
     /**
@@ -394,21 +517,42 @@ public class DeleteCommand extends Command {
      * If this would cause ways with less than 2 nodes to be created, delete these ways instead. If
      * they are part of a relation, inform the user and do not delete.
      *
-     * @param layer the {@link OsmDataLayer} in whose context the primitives are deleted
+     * @param layer unused
      * @param selection the objects to delete.
      * @param alsoDeleteNodesInWay <code>true</code> if nodes should be deleted as well
      * @param silent set to true if the user should not be bugged with additional questions
      * @return command a command to perform the deletions, or null if there is nothing to delete.
+     * @deprecated to be removed end of 2017. Use {@link #delete(Collection, boolean, boolean)} instead
      */
+    @Deprecated
     public static Command delete(OsmDataLayer layer, Collection<? extends OsmPrimitive> selection,
             boolean alsoDeleteNodesInWay, boolean silent) {
+        return delete(selection, alsoDeleteNodesInWay, silent);
+    }
+
+    /**
+     * Try to delete all given primitives.
+     *
+     * If a node is used by a way, it's removed from that way. If a node or a way is used by a
+     * relation, inform the user and do not delete.
+     *
+     * If this would cause ways with less than 2 nodes to be created, delete these ways instead. If
+     * they are part of a relation, inform the user and do not delete.
+     *
+     * @param selection the objects to delete.
+     * @param alsoDeleteNodesInWay <code>true</code> if nodes should be deleted as well
+     * @param silent set to true if the user should not be bugged with additional questions
+     * @return command a command to perform the deletions, or null if there is nothing to delete.
+     * @since 12718
+     */
+    public static Command delete(Collection<? extends OsmPrimitive> selection, boolean alsoDeleteNodesInWay, boolean silent) {
         if (selection == null || selection.isEmpty())
             return null;
 
         Set<OsmPrimitive> primitivesToDelete = new HashSet<>(selection);
 
         Collection<Relation> relationsToDelete = Utils.filteredCollection(primitivesToDelete, Relation.class);
-        if (!relationsToDelete.isEmpty() && !silent && !confirmRelationDeletion(relationsToDelete))
+        if (!relationsToDelete.isEmpty() && !silent && !callback.confirmRelationDeletion(relationsToDelete))
             return null;
 
         if (alsoDeleteNodesInWay) {
@@ -417,7 +561,7 @@ public class DeleteCommand extends Command {
             primitivesToDelete.addAll(nodesToDelete);
         }
 
-        if (!silent && !checkAndConfirmOutlyingDelete(
+        if (!silent && !callback.checkAndConfirmOutlyingDelete(
                 primitivesToDelete, Utils.filteredCollection(primitivesToDelete, Way.class)))
             return null;
 
@@ -439,12 +583,8 @@ public class DeleteCommand extends Command {
         if (!silent) {
             Set<RelationToChildReference> references = RelationToChildReference.getRelationToChildReferences(primitivesToDelete);
             references.removeIf(ref -> ref.getParent().isDeleted());
-            if (!references.isEmpty()) {
-                DeleteFromRelationConfirmationDialog dialog = DeleteFromRelationConfirmationDialog.getInstance();
-                dialog.getModel().populate(references);
-                dialog.setVisible(true);
-                if (dialog.isCanceled())
-                    return null;
+            if (!references.isEmpty() && !callback.confirmDeletionFromRelation(references)) {
+                return null;
             }
         }
 
@@ -459,8 +599,7 @@ public class DeleteCommand extends Command {
         // build the delete command
         //
         if (!primitivesToDelete.isEmpty()) {
-            cmds.add(layer != null ? new DeleteCommand(layer, primitivesToDelete) :
-                new DeleteCommand(primitivesToDelete.iterator().next().getDataSet(), primitivesToDelete));
+            cmds.add(new DeleteCommand(primitivesToDelete.iterator().next().getDataSet(), primitivesToDelete));
         }
 
         return new SequenceCommand(tr("Delete"), cmds);
@@ -468,13 +607,25 @@ public class DeleteCommand extends Command {
 
     /**
      * Create a command that deletes a single way segment. The way may be split by this.
-     * @param layer The layer the segment is in.
+     * @param layer unused
      * @param ws The way segment that should be deleted
      * @return A matching command to safely delete that segment.
+     * @deprecated to be removed end of 2017. Use {@link #deleteWaySegment(WaySegment)} instead
      */
+    @Deprecated
     public static Command deleteWaySegment(OsmDataLayer layer, WaySegment ws) {
+        return deleteWaySegment(ws);
+    }
+
+    /**
+     * Create a command that deletes a single way segment. The way may be split by this.
+     * @param ws The way segment that should be deleted
+     * @return A matching command to safely delete that segment.
+     * @since 12718
+     */
+    public static Command deleteWaySegment(WaySegment ws) {
         if (ws.way.getNodesCount() < 3)
-            return delete(layer, Collections.singleton(ws.way), false);
+            return delete(Collections.singleton(ws.way), false);
 
         if (ws.way.isClosed()) {
             // If the way is circular (first and last nodes are the same), the way shouldn't be splitted
@@ -505,52 +656,10 @@ public class DeleteCommand extends Command {
             wnew.setNodes(n1);
             return new ChangeCommand(ws.way, wnew);
         } else {
-            SplitWayResult split = SplitWayAction.splitWay(layer, ws.way, Arrays.asList(n1, n2), Collections.<OsmPrimitive>emptyList());
-            return split != null ? split.getCommand() : null;
+            return SplitWayCommand.splitWay(ws.way, Arrays.asList(n1, n2), Collections.<OsmPrimitive>emptyList());
         }
     }
 
-    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."
-                        + "<br>"
-                        + "This can cause problems because other objects (that you do not see) might use them."
-                        + "<br>"
-                        + "Do you really want to delete?"),
-                tr("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?"),
-                primitives, ignore);
-    }
-
-    private static boolean confirmRelationDeletion(Collection<Relation> relations) {
-        JPanel msg = new JPanel(new GridBagLayout());
-        msg.add(new JMultilineLabel("<html>" + trn(
-                "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?",
-                "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?",
-                relations.size(), relations.size(), DefaultNameFormatter.getInstance().formatAsHtmlUnorderedList(relations, 20))
-                + "</html>"));
-        return ConditionalOptionPaneUtil.showConfirmationDialog(
-                "delete_relations",
-                Main.parent,
-                msg,
-                tr("Delete relation?"),
-                JOptionPane.YES_NO_OPTION,
-                JOptionPane.QUESTION_MESSAGE,
-                JOptionPane.YES_OPTION);
-    }
-
     @Override
     public int hashCode() {
         return Objects.hash(super.hashCode(), toDelete, clonedPrimitives);
diff --git a/src/org/openstreetmap/josm/command/MoveCommand.java b/src/org/openstreetmap/josm/command/MoveCommand.java
index 39fd4d5..0646f83 100644
--- a/src/org/openstreetmap/josm/command/MoveCommand.java
+++ b/src/org/openstreetmap/josm/command/MoveCommand.java
@@ -8,16 +8,18 @@ import java.util.Collections;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.NoSuchElementException;
 import java.util.Objects;
 
 import javax.swing.Icon;
 
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.coor.LatLon;
+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.visitor.AllNodesVisitor;
-import org.openstreetmap.josm.data.projection.Projections;
 import org.openstreetmap.josm.tools.ImageProvider;
 
 /**
@@ -69,7 +71,8 @@ public class MoveCommand extends Command {
      * @param position The new location (lat/lon)
      */
     public MoveCommand(Node node, LatLon position) {
-        this(Collections.singleton((OsmPrimitive) node), Projections.project(position).subtract(node.getEastNorth()));
+        this(Collections.singleton((OsmPrimitive) node),
+                Main.getProjection().latlon2eastNorth(position).subtract(node.getEastNorth()));
     }
 
     /**
@@ -83,11 +86,28 @@ public class MoveCommand extends Command {
 
     /**
      * Constructs a new {@code MoveCommand} and assign the initial object set and movement vector.
-     * @param objects The primitives to move
+     * @param objects The primitives to move. Must neither be null nor empty. Objects must belong to a data set
      * @param x X difference movement. Coordinates are in northern/eastern
      * @param y Y difference movement. Coordinates are in northern/eastern
+     * @throws NullPointerException if objects is null or contain null item
+     * @throws NoSuchElementException if objects is empty
      */
     public MoveCommand(Collection<OsmPrimitive> objects, double x, double y) {
+        this(objects.iterator().next().getDataSet(), objects, x, y);
+    }
+
+    /**
+     * Constructs a new {@code MoveCommand} and assign the initial object set and movement vector.
+     * @param ds the dataset context for moving these primitives. Must not be null.
+     * @param objects The primitives to move. Must neither be null.
+     * @param x X difference movement. Coordinates are in northern/eastern
+     * @param y Y difference movement. Coordinates are in northern/eastern
+     * @throws NullPointerException if objects is null or contain null item
+     * @throws NoSuchElementException if objects is empty
+     * @since 12759
+     */
+    public MoveCommand(DataSet ds, Collection<OsmPrimitive> objects, double x, double y) {
+        super(ds);
         startEN = null;
         saveCheckpoint(); // (0,0) displacement will be saved
         this.x = x;
@@ -101,30 +121,50 @@ public class MoveCommand extends Command {
 
     /**
      * Constructs a new {@code MoveCommand} to move a collection of primitives.
+     * @param ds the dataset context for moving these primitives. Must not be null.
      * @param objects The primitives to move
      * @param start The starting position (northern/eastern)
      * @param end The ending position (northern/eastern)
+     * @since 12759
      */
-    public MoveCommand(Collection<OsmPrimitive> objects, EastNorth start, EastNorth end) {
-        this(
-                Objects.requireNonNull(objects, "objects"),
-                Objects.requireNonNull(end, "end").getX() - Objects.requireNonNull(start, "start").getX(),
-                Objects.requireNonNull(end, "end").getY() - Objects.requireNonNull(start, "start").getY());
+    public MoveCommand(DataSet ds, Collection<OsmPrimitive> objects, EastNorth start, EastNorth end) {
+        this(Objects.requireNonNull(ds, "ds"),
+             Objects.requireNonNull(objects, "objects"),
+             Objects.requireNonNull(end, "end").getX() - Objects.requireNonNull(start, "start").getX(),
+             Objects.requireNonNull(end, "end").getY() - Objects.requireNonNull(start, "start").getY());
         startEN = start;
     }
 
     /**
+     * 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.requireNonNull(objects, "objects").iterator().next().getDataSet(), objects, start, end);
+    }
+
+    /**
+     * Constructs a new {@code MoveCommand} to move a primitive.
+     * @param ds the dataset context for moving these primitives. Must not be null.
+     * @param p The primitive to move
+     * @param start The starting position (northern/eastern)
+     * @param end The ending position (northern/eastern)
+     * @since 12759
+     */
+    public MoveCommand(DataSet ds, OsmPrimitive p, EastNorth start, EastNorth end) {
+        this(ds, Collections.singleton(Objects.requireNonNull(p, "p")), start, end);
+    }
+
+    /**
      * 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(Objects.requireNonNull(p, "p")),
-                Objects.requireNonNull(end, "end").getX() - Objects.requireNonNull(start, "start").getX(),
-                Objects.requireNonNull(end, "end").getY() - Objects.requireNonNull(start, "start").getY());
-        startEN = start;
+        this(Collections.singleton(Objects.requireNonNull(p, "p")), start, end);
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/command/PurgeCommand.java b/src/org/openstreetmap/josm/command/PurgeCommand.java
index a345165..fa79f0c 100644
--- a/src/org/openstreetmap/josm/command/PurgeCommand.java
+++ b/src/org/openstreetmap/josm/command/PurgeCommand.java
@@ -15,7 +15,6 @@ import java.util.Set;
 
 import javax.swing.Icon;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.conflict.Conflict;
 import org.openstreetmap.josm.data.conflict.ConflictCollection;
 import org.openstreetmap.josm.data.osm.DataSet;
@@ -31,6 +30,7 @@ import org.openstreetmap.josm.data.osm.Storage;
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.osm.WayData;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ImageProvider;
 
 /**
@@ -53,7 +53,9 @@ public class PurgeCommand extends Command {
      * @param layer OSM data layer
      * @param toPurge primitives to purge
      * @param makeIncomplete primitives to make incomplete
+     * @deprecated to be removed end of 2017. Use {@link #PurgeCommand(DataSet, Collection, Collection)} instead
      */
+    @Deprecated
     public PurgeCommand(OsmDataLayer layer, Collection<OsmPrimitive> toPurge, Collection<OsmPrimitive> makeIncomplete) {
         super(layer);
         init(toPurge, makeIncomplete);
@@ -318,8 +320,21 @@ public class PurgeCommand extends Command {
      * @param toPurgeAdditionally optional list that will be filled with primitives to be purged that have not been in the selection
      * @return command to purge selected OSM primitives
      * @since 12688
+     * @deprecated to be removed end of 2017. Use {@link #build(Collection, List)} instead
      */
+    @Deprecated
     public static PurgeCommand build(OsmDataLayer layer, Collection<OsmPrimitive> sel, List<OsmPrimitive> toPurgeAdditionally) {
+        return build(sel, toPurgeAdditionally);
+    }
+
+    /**
+     * Creates a new {@code PurgeCommand} to purge selected OSM primitives.
+     * @param sel selected OSM primitives
+     * @param toPurgeAdditionally optional list that will be filled with primitives to be purged that have not been in the selection
+     * @return command to purge selected OSM primitives
+     * @since 12718
+     */
+    public static PurgeCommand build(Collection<OsmPrimitive> sel, List<OsmPrimitive> toPurgeAdditionally) {
         Set<OsmPrimitive> toPurge = new HashSet<>(sel);
         // finally, contains all objects that are purged
         Set<OsmPrimitive> toPurgeChecked = new HashSet<>();
@@ -368,7 +383,7 @@ public class PurgeCommand extends Command {
             }
 
         // Add untagged way nodes. Do not add nodes that have other referrers not yet to-be-purged.
-        if (Main.pref.getBoolean("purge.add_untagged_waynodes", true)) {
+        if (Config.getPref().getBoolean("purge.add_untagged_waynodes", true)) {
             Set<OsmPrimitive> wayNodes = new HashSet<>();
             for (OsmPrimitive osm : toPurgeChecked) {
                 if (osm instanceof Way) {
@@ -393,7 +408,7 @@ public class PurgeCommand extends Command {
             }
         }
 
-        if (Main.pref.getBoolean("purge.add_relations_with_only_incomplete_members", true)) {
+        if (Config.getPref().getBoolean("purge.add_relations_with_only_incomplete_members", true)) {
             Set<Relation> relSet = new HashSet<>();
             for (OsmPrimitive osm : toPurgeChecked) {
                 for (OsmPrimitive parent : osm.getReferrers()) {
@@ -422,8 +437,7 @@ public class PurgeCommand extends Command {
             }
         }
 
-        return layer != null ? new PurgeCommand(layer, toPurgeChecked, makeIncomplete)
-                : new PurgeCommand(toPurgeChecked.iterator().next().getDataSet(), toPurgeChecked, makeIncomplete);
+        return new PurgeCommand(toPurgeChecked.iterator().next().getDataSet(), toPurgeChecked, makeIncomplete);
     }
 
     private static boolean hasOnlyIncompleteMembers(
diff --git a/src/org/openstreetmap/josm/command/RemoveNodesCommand.java b/src/org/openstreetmap/josm/command/RemoveNodesCommand.java
index a947393..8773912 100644
--- a/src/org/openstreetmap/josm/command/RemoveNodesCommand.java
+++ b/src/org/openstreetmap/josm/command/RemoveNodesCommand.java
@@ -32,10 +32,11 @@ public class RemoveNodesCommand extends Command {
 
     /**
      * Constructs a new {@code RemoveNodesCommand}.
-     * @param way The way to modify
+     * @param way The way to modify. Must not be null, and belong to a data set
      * @param rmNodes The list of nodes to remove
      */
     public RemoveNodesCommand(Way way, List<Node> rmNodes) {
+        super(way.getDataSet());
         this.way = way;
         this.rmNodes = new HashSet<>(rmNodes);
     }
diff --git a/src/org/openstreetmap/josm/command/SelectCommand.java b/src/org/openstreetmap/josm/command/SelectCommand.java
index d97ce6f..22ca7b2 100644
--- a/src/org/openstreetmap/josm/command/SelectCommand.java
+++ b/src/org/openstreetmap/josm/command/SelectCommand.java
@@ -27,7 +27,9 @@ public class SelectCommand extends Command {
     /**
      * Constructs a new select command.
      * @param newSelection the primitives to select when executing the command.
+     * @deprecated to be removed end of 2017. Use {@link #SelectCommand(DataSet, Collection)} instead
      */
+    @Deprecated
     public SelectCommand(Collection<OsmPrimitive> newSelection) {
         if (newSelection == null || newSelection.isEmpty()) {
             this.newSelection = Collections.emptySet();
diff --git a/src/org/openstreetmap/josm/command/SequenceCommand.java b/src/org/openstreetmap/josm/command/SequenceCommand.java
index 536ccf3..d53e26f 100644
--- a/src/org/openstreetmap/josm/command/SequenceCommand.java
+++ b/src/org/openstreetmap/josm/command/SequenceCommand.java
@@ -10,7 +10,9 @@ import java.util.Objects;
 
 import javax.swing.Icon;
 
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -31,12 +33,14 @@ public class SequenceCommand extends Command {
 
     /**
      * Create the command by specifying the list of commands to execute.
+     * @param ds The target data set. Must not be {@code null}
      * @param name The description text
      * @param sequenz The sequence that should be executed
      * @param continueOnError Determines if the sequence execution should continue after one of its commands fails
-     * @since 11874
+     * @since 12726
      */
-    public SequenceCommand(String name, Collection<Command> sequenz, boolean continueOnError) {
+    public SequenceCommand(DataSet ds, String name, Collection<Command> sequenz, boolean continueOnError) {
+        super(ds);
         this.name = name;
         this.sequence = sequenz.toArray(new Command[sequenz.size()]);
         this.continueOnError = continueOnError;
@@ -45,6 +49,17 @@ public class SequenceCommand extends Command {
     /**
      * Create the command by specifying the list of commands to execute.
      * @param name The description text
+     * @param sequenz The sequence that should be executed. Must not be null or empty
+     * @param continueOnError Determines if the sequence execution should continue after one of its commands fails
+     * @since 11874
+     */
+    public SequenceCommand(String name, Collection<Command> sequenz, boolean continueOnError) {
+        this(sequenz.iterator().next().getAffectedDataSet(), name, sequenz, continueOnError);
+    }
+
+    /**
+     * Create the command by specifying the list of commands to execute.
+     * @param name The description text
      * @param sequenz The sequence that should be executed.
      */
     public SequenceCommand(String name, Collection<Command> sequenz) {
@@ -135,7 +150,13 @@ public class SequenceCommand extends Command {
         this.sequenceComplete = sequenceComplete;
     }
 
+    /**
+     * Invalidate all layers that were affected by this command.
+     * @see Layer#invalidate()
+     * @deprecated to be removed end of 2017.
+     */
     @Override
+    @Deprecated
     public void invalidateAffectedLayers() {
         super.invalidateAffectedLayers();
         for (Command c : sequence) {
diff --git a/src/org/openstreetmap/josm/command/SplitWayCommand.java b/src/org/openstreetmap/josm/command/SplitWayCommand.java
new file mode 100644
index 0000000..683a681
--- /dev/null
+++ b/src/org/openstreetmap/josm/command/SplitWayCommand.java
@@ -0,0 +1,472 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.command;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+import static org.openstreetmap.josm.tools.I18n.trn;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.Set;
+import java.util.function.Consumer;
+
+import org.openstreetmap.josm.data.osm.DefaultNameFormatter;
+import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.PrimitiveId;
+import org.openstreetmap.josm.data.osm.Relation;
+import org.openstreetmap.josm.data.osm.RelationMember;
+import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.spi.preferences.Config;
+import org.openstreetmap.josm.tools.CheckParameterUtil;
+import org.openstreetmap.josm.tools.Logging;
+
+/**
+ * Splits a way into multiple ways (all identical except for their node list).
+ *
+ * Ways are just split at the selected nodes.  The nodes remain in their
+ * original order.  Selected nodes at the end of a way are ignored.
+ *
+ * @since 12828 ({@code SplitWayAction} converted to a {@link Command})
+ */
+public class SplitWayCommand extends SequenceCommand {
+
+    private static volatile Consumer<String> warningNotifier = Logging::warn;
+
+    /**
+     * Sets the global warning notifier.
+     * @param notifier warning notifier in charge of displaying warning message, if any. Must not be null
+     */
+    public static void setWarningNotifier(Consumer<String> notifier) {
+        warningNotifier = Objects.requireNonNull(notifier);
+    }
+
+    private final List<? extends PrimitiveId> newSelection;
+    private final Way originalWay;
+    private final List<Way> newWays;
+
+    /**
+     * Create a new {@code SplitWayCommand}.
+     * @param name The description text
+     * @param commandList The sequence of commands that should be executed.
+     * @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 SplitWayCommand(String name, Collection<Command> commandList,
+            List<? extends PrimitiveId> newSelection, Way originalWay, List<Way> newWays) {
+        super(name, commandList);
+        this.newSelection = newSelection;
+        this.originalWay = originalWay;
+        this.newWays = newWays;
+    }
+
+    /**
+     * Replies the new list of selected primitives ids
+     * @return The new list of selected primitives ids
+     */
+    public List<? extends PrimitiveId> getNewSelection() {
+        return newSelection;
+    }
+
+    /**
+     * Replies the original way being split
+     * @return The original way being split
+     */
+    public Way getOriginalWay() {
+        return originalWay;
+    }
+
+    /**
+     * Replies the resulting new ways
+     * @return The resulting new ways
+     */
+    public List<Way> getNewWays() {
+        return newWays;
+    }
+
+    /**
+     * Determines which way chunk should reuse the old id and its history
+     */
+    @FunctionalInterface
+    public interface Strategy {
+
+        /**
+         * Determines which way chunk should reuse the old id and its history.
+         *
+         * @param wayChunks the way chunks
+         * @return the way to keep
+         */
+        Way determineWayToKeep(Iterable<Way> wayChunks);
+
+        /**
+         * Returns a strategy which selects the way chunk with the highest node count to keep.
+         * @return strategy which selects the way chunk with the highest node count to keep
+         */
+        static Strategy keepLongestChunk() {
+            return wayChunks -> {
+                    Way wayToKeep = null;
+                    for (Way i : wayChunks) {
+                        if (wayToKeep == null || i.getNodesCount() > wayToKeep.getNodesCount()) {
+                            wayToKeep = i;
+                        }
+                    }
+                    return wayToKeep;
+                };
+        }
+
+        /**
+         * Returns a strategy which selects the first way chunk.
+         * @return strategy which selects the first way chunk
+         */
+        static Strategy keepFirstChunk() {
+            return wayChunks -> wayChunks.iterator().next();
+        }
+    }
+
+    /**
+     * Splits the nodes of {@code wayToSplit} into a list of node sequences
+     * which are separated at the nodes in {@code splitPoints}.
+     *
+     * This method displays warning messages if {@code wayToSplit} and/or
+     * {@code splitPoints} aren't consistent.
+     *
+     * Returns null, if building the split chunks fails.
+     *
+     * @param wayToSplit the way to split. Must not be null.
+     * @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) {
+        CheckParameterUtil.ensureParameterNotNull(wayToSplit, "wayToSplit");
+        CheckParameterUtil.ensureParameterNotNull(splitPoints, "splitPoints");
+
+        Set<Node> nodeSet = new HashSet<>(splitPoints);
+        List<List<Node>> wayChunks = new LinkedList<>();
+        List<Node> currentWayChunk = new ArrayList<>();
+        wayChunks.add(currentWayChunk);
+
+        Iterator<Node> it = wayToSplit.getNodes().iterator();
+        while (it.hasNext()) {
+            Node currentNode = it.next();
+            boolean atEndOfWay = currentWayChunk.isEmpty() || !it.hasNext();
+            currentWayChunk.add(currentNode);
+            if (nodeSet.contains(currentNode) && !atEndOfWay) {
+                currentWayChunk = new ArrayList<>();
+                currentWayChunk.add(currentNode);
+                wayChunks.add(currentWayChunk);
+            }
+        }
+
+        // Handle circular ways specially.
+        // If you split at a circular way at two nodes, you just want to split
+        // it at these points, not also at the former endpoint.
+        // So if the last node is the same first node, join the last and the
+        // first way chunk.
+        List<Node> lastWayChunk = wayChunks.get(wayChunks.size() - 1);
+        if (wayChunks.size() >= 2
+                && wayChunks.get(0).get(0) == lastWayChunk.get(lastWayChunk.size() - 1)
+                && !nodeSet.contains(wayChunks.get(0).get(0))) {
+            if (wayChunks.size() == 2) {
+                warningNotifier.accept(tr("You must select two or more nodes to split a circular way."));
+                return null;
+            }
+            lastWayChunk.remove(lastWayChunk.size() - 1);
+            lastWayChunk.addAll(wayChunks.get(0));
+            wayChunks.remove(wayChunks.size() - 1);
+            wayChunks.set(0, lastWayChunk);
+        }
+
+        if (wayChunks.size() < 2) {
+            if (wayChunks.get(0).get(0) == wayChunks.get(0).get(wayChunks.get(0).size() - 1)) {
+                warningNotifier.accept(
+                        tr("You must select two or more nodes to split a circular way."));
+            } else {
+                warningNotifier.accept(
+                        tr("The way cannot be split at the selected nodes. (Hint: Select nodes in the middle of the way.)"));
+            }
+            return null;
+        }
+        return wayChunks;
+    }
+
+    /**
+     * Creates new way objects for the way chunks and transfers the keys from the original way.
+     * @param way the original way whose  keys are transferred
+     * @param wayChunks the way chunks
+     * @return the new way objects
+     */
+    public static List<Way> createNewWaysFromChunks(Way way, Iterable<List<Node>> wayChunks) {
+        final List<Way> newWays = new ArrayList<>();
+        for (List<Node> wayChunk : wayChunks) {
+            Way wayToAdd = new Way();
+            wayToAdd.setKeys(way.getKeys());
+            wayToAdd.setNodes(wayChunk);
+            newWays.add(wayToAdd);
+        }
+        return newWays;
+    }
+
+    /**
+     * Splits the way {@code way} into chunks of {@code wayChunks} and replies
+     * the result of this process in an instance of {@link SplitWayCommand}.
+     *
+     * Note that changes are not applied to the data yet. You have to
+     * submit the command first, i.e. {@code Main.main.undoredo.add(result)}.
+     *
+     * @param way the way to split. Must not be null.
+     * @param wayChunks the list of way chunks into the way is split. Must not be null.
+     * @param selection The list of currently selected primitives
+     * @return the result from the split operation
+     */
+    public static SplitWayCommand splitWay(Way way, List<List<Node>> wayChunks, Collection<? extends OsmPrimitive> selection) {
+        return splitWay(way, wayChunks, selection, Strategy.keepLongestChunk());
+    }
+
+    /**
+     * Splits the way {@code way} into chunks of {@code wayChunks} and replies
+     * the result of this process in an instance of {@link SplitWayCommand}.
+     * The {@link org.openstreetmap.josm.actions.SplitWayAction.Strategy} is used to determine which
+     * way chunk should reuse the old id and its history.
+     *
+     * Note that changes are not applied to the data yet. You have to
+     * submit the command first, i.e. {@code Main.main.undoredo.add(result)}.
+     *
+     * @param way the way to split. Must not be null.
+     * @param wayChunks the list of way chunks into the way is split. Must not be null.
+     * @param selection The list of currently selected primitives
+     * @param splitStrategy The strategy used to determine which way chunk should reuse the old id and its history
+     * @return the result from the split operation
+     */
+    public static SplitWayCommand splitWay(Way way, List<List<Node>> wayChunks,
+            Collection<? extends OsmPrimitive> selection, Strategy splitStrategy) {
+        // build a list of commands, and also a new selection list
+        final List<OsmPrimitive> newSelection = new ArrayList<>(selection.size() + wayChunks.size());
+        newSelection.addAll(selection);
+
+        // Create all potential new ways
+        final List<Way> newWays = createNewWaysFromChunks(way, wayChunks);
+
+        // Determine which part reuses the existing way
+        final Way wayToKeep = splitStrategy.determineWayToKeep(newWays);
+
+        return wayToKeep != null ? doSplitWay(way, wayToKeep, newWays, newSelection) : null;
+    }
+
+    /**
+     * Effectively constructs the {@link SplitWayCommand}.
+     * This method is only public for {@code SplitWayAction}.
+     *
+     * @param way the way to split. Must not be null.
+     * @param wayToKeep way chunk which should reuse the old id and its history
+     * @param newWays potential new ways
+     * @param newSelection new selection list to update (optional: can be null)
+     * @return the {@code SplitWayCommand}
+     */
+    public static SplitWayCommand doSplitWay(Way way, Way wayToKeep, List<Way> newWays, List<OsmPrimitive> newSelection) {
+
+        Collection<Command> commandList = new ArrayList<>(newWays.size());
+        Collection<String> nowarnroles = Config.getPref().getList("way.split.roles.nowarn",
+                Arrays.asList("outer", "inner", "forward", "backward", "north", "south", "east", "west"));
+
+        //final MapFrame map = MainApplication.getMap();
+        //final boolean isMapModeDraw = map != null && map.mapMode == map.mapModeDraw;
+
+        // Change the original way
+        final Way changedWay = new Way(way);
+        changedWay.setNodes(wayToKeep.getNodes());
+        commandList.add(new ChangeCommand(way, changedWay));
+        if (/*!isMapModeDraw &&*/ newSelection != null && !newSelection.contains(way)) {
+            newSelection.add(way);
+        }
+        final int indexOfWayToKeep = newWays.indexOf(wayToKeep);
+        newWays.remove(wayToKeep);
+
+        if (/*!isMapModeDraw &&*/ newSelection != null) {
+            newSelection.addAll(newWays);
+        }
+        for (Way wayToAdd : newWays) {
+            commandList.add(new AddCommand(way.getDataSet(), wayToAdd));
+        }
+
+        boolean warnmerole = false;
+        boolean warnme = false;
+        // now copy all relations to new way also
+
+        for (Relation r : OsmPrimitive.getFilteredList(way.getReferrers(), Relation.class)) {
+            if (!r.isUsable()) {
+                continue;
+            }
+            Relation c = null;
+            String type = Optional.ofNullable(r.get("type")).orElse("");
+
+            int ic = 0;
+            int ir = 0;
+            List<RelationMember> relationMembers = r.getMembers();
+            for (RelationMember rm: relationMembers) {
+                if (rm.isWay() && rm.getMember() == way) {
+                    boolean insert = true;
+                    if ("restriction".equals(type) || "destination_sign".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)) {
+                            OsmPrimitive via = findVia(r, type);
+                            List<Node> nodes = new ArrayList<>();
+                            if (via != null) {
+                                if (via instanceof Node) {
+                                    nodes.add((Node) via);
+                                } else if (via instanceof Way) {
+                                    nodes.add(((Way) via).lastNode());
+                                    nodes.add(((Way) via).firstNode());
+                                }
+                            }
+                            Way res = null;
+                            for (Node n : nodes) {
+                                if (changedWay.isFirstLastNode(n)) {
+                                    res = way;
+                                }
+                            }
+                            if (res == null) {
+                                for (Way wayToAdd : newWays) {
+                                    for (Node n : nodes) {
+                                        if (wayToAdd.isFirstLastNode(n)) {
+                                            res = wayToAdd;
+                                        }
+                                    }
+                                }
+                                if (res != null) {
+                                    if (c == null) {
+                                        c = new Relation(r);
+                                    }
+                                    c.addMember(new RelationMember(role, res));
+                                    c.removeMembersFor(way);
+                                    insert = false;
+                                }
+                            } else {
+                                insert = false;
+                            }
+                        } else if (!"via".equals(role)) {
+                            warnme = true;
+                        }
+                    } else if (!("route".equals(type)) && !("multipolygon".equals(type))) {
+                        warnme = true;
+                    }
+                    if (c == null) {
+                        c = new Relation(r);
+                    }
+
+                    if (insert) {
+                        if (rm.hasRole() && !nowarnroles.contains(rm.getRole())) {
+                            warnmerole = true;
+                        }
+
+                        Boolean backwards = null;
+                        int k = 1;
+                        while (ir - k >= 0 || ir + k < relationMembers.size()) {
+                            if ((ir - k >= 0) && relationMembers.get(ir - k).isWay()) {
+                                Way w = relationMembers.get(ir - k).getWay();
+                                if ((w.lastNode() == way.firstNode()) || w.firstNode() == way.firstNode()) {
+                                    backwards = Boolean.FALSE;
+                                } else if ((w.firstNode() == way.lastNode()) || w.lastNode() == way.lastNode()) {
+                                    backwards = Boolean.TRUE;
+                                }
+                                break;
+                            }
+                            if ((ir + k < relationMembers.size()) && relationMembers.get(ir + k).isWay()) {
+                                Way w = relationMembers.get(ir + k).getWay();
+                                if ((w.lastNode() == way.firstNode()) || w.firstNode() == way.firstNode()) {
+                                    backwards = Boolean.TRUE;
+                                } else if ((w.firstNode() == way.lastNode()) || w.lastNode() == way.lastNode()) {
+                                    backwards = Boolean.FALSE;
+                                }
+                                break;
+                            }
+                            k++;
+                        }
+
+                        int j = ic;
+                        final List<Way> waysToAddBefore = newWays.subList(0, indexOfWayToKeep);
+                        for (Way wayToAdd : waysToAddBefore) {
+                            RelationMember em = new RelationMember(rm.getRole(), wayToAdd);
+                            j++;
+                            if (Boolean.TRUE.equals(backwards)) {
+                                c.addMember(ic + 1, em);
+                            } else {
+                                c.addMember(j - 1, em);
+                            }
+                        }
+                        final List<Way> waysToAddAfter = newWays.subList(indexOfWayToKeep, newWays.size());
+                        for (Way wayToAdd : waysToAddAfter) {
+                            RelationMember em = new RelationMember(rm.getRole(), wayToAdd);
+                            j++;
+                            if (Boolean.TRUE.equals(backwards)) {
+                                c.addMember(ic, em);
+                            } else {
+                                c.addMember(j, em);
+                            }
+                        }
+                        ic = j;
+                    }
+                }
+                ic++;
+                ir++;
+            }
+
+            if (c != null) {
+                commandList.add(new ChangeCommand(r.getDataSet(), r, c));
+            }
+        }
+        if (warnmerole) {
+            warningNotifier.accept(
+                    tr("A role based relation membership was copied to all new ways.<br>You should verify this and correct it when necessary."));
+        } else if (warnme) {
+            warningNotifier.accept(
+                    tr("A relation membership was copied to all new ways.<br>You should verify this and correct it when necessary."));
+        }
+
+        return new SplitWayCommand(
+                    /* for correct i18n of plural forms - see #9110 */
+                    trn("Split way {0} into {1} part", "Split way {0} into {1} parts", newWays.size() + 1,
+                            way.getDisplayName(DefaultNameFormatter.getInstance()), newWays.size() + 1),
+                    commandList,
+                    newSelection,
+                    way,
+                    newWays
+            );
+    }
+
+    static OsmPrimitive findVia(Relation r, String type) {
+        for (RelationMember rmv : r.getMembers()) {
+            if (("restriction".equals(type) && "via".equals(rmv.getRole()))
+             || ("destination_sign".equals(type) && rmv.hasRole("sign", "intersection"))) {
+                return rmv.getMember();
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Splits the way {@code way} at the nodes in {@code atNodes} and replies
+     * the result of this process in an instance of {@link SplitWayCommand}.
+     *
+     * Note that changes are not applied to the data yet. You have to
+     * submit the command first, i.e. {@code Main.main.undoredo.add(result)}.
+     *
+     * Replies null if the way couldn't be split at the given nodes.
+     *
+     * @param way the way to split. Must not be null.
+     * @param atNodes the list of nodes where the way is split. Must not be null.
+     * @param selection The list of currently selected primitives
+     * @return the result from the split operation
+     */
+    public static SplitWayCommand split(Way way, List<Node> atNodes, Collection<? extends OsmPrimitive> selection) {
+        List<List<Node>> chunks = buildSplitChunks(way, atNodes);
+        return chunks != null ? splitWay(way, chunks, selection) : null;
+    }
+}
diff --git a/src/org/openstreetmap/josm/command/TransformNodesCommand.java b/src/org/openstreetmap/josm/command/TransformNodesCommand.java
index b27d525..f84ac6d 100644
--- a/src/org/openstreetmap/josm/command/TransformNodesCommand.java
+++ b/src/org/openstreetmap/josm/command/TransformNodesCommand.java
@@ -5,8 +5,8 @@ import static org.openstreetmap.josm.tools.I18n.trn;
 
 import java.util.Collection;
 import java.util.HashMap;
-import java.util.LinkedList;
 import java.util.Map;
+import java.util.NoSuchElementException;
 import java.util.Objects;
 
 import javax.swing.Icon;
@@ -27,12 +27,12 @@ public abstract class TransformNodesCommand extends Command {
     /**
      * The nodes to transform.
      */
-    protected Collection<Node> nodes = new LinkedList<>();
+    protected final Collection<Node> nodes;
 
     /**
      * List of all old states of the nodes.
      */
-    protected Map<Node, OldNodeState> oldStates = new HashMap<>();
+    protected final Map<Node, OldNodeState> oldStates = new HashMap<>();
 
     /**
      * Stores the state of the nodes before the command.
@@ -46,9 +46,12 @@ public abstract class TransformNodesCommand extends Command {
     /**
      * Creates a TransformNodesObject.
      * Find out the impacted nodes and store their initial state.
-     * @param objects objects to fetch nodes from
+     * @param objects objects to fetch nodes from. Must neither be null nor empty. Items must belong to a data set
+     * @throws NullPointerException if objects is null or contain null item
+     * @throws NoSuchElementException if objects is empty
      */
     public TransformNodesCommand(Collection<? extends OsmPrimitive> objects) {
+        super(objects.iterator().next().getDataSet());
         this.nodes = AllNodesVisitor.getAllNodes(objects);
         storeOldState();
     }
diff --git a/src/org/openstreetmap/josm/command/conflict/ConflictAddCommand.java b/src/org/openstreetmap/josm/command/conflict/ConflictAddCommand.java
index 8263b59..884bdfa 100644
--- a/src/org/openstreetmap/josm/command/conflict/ConflictAddCommand.java
+++ b/src/org/openstreetmap/josm/command/conflict/ConflictAddCommand.java
@@ -15,7 +15,6 @@ import org.openstreetmap.josm.data.conflict.Conflict;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.DefaultNameFormatter;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
-import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Logging;
@@ -32,7 +31,9 @@ public class ConflictAddCommand extends Command {
      * Constructs a new {@code ConflictAddCommand}.
      * @param layer the data layer. Must not be null.
      * @param conflict the conflict to add
+     * @deprecated to be removed end of 2017. Use {@link #ConflictAddCommand(DataSet, Conflict)} instead
      */
+    @Deprecated
     public ConflictAddCommand(OsmDataLayer layer, Conflict<? extends OsmPrimitive> conflict) {
         super(layer);
         this.conflict = conflict;
@@ -55,7 +56,7 @@ public class ConflictAddCommand extends Command {
                 tr("<html>Layer ''{0}'' already has a conflict for object<br>"
                         + "''{1}''.<br>"
                         + "This conflict cannot be added.</html>",
-                        Utils.escapeReservedCharactersHTML(getLayer().getName()),
+                        Utils.escapeReservedCharactersHTML(getAffectedDataSet().getName()),
                         Utils.escapeReservedCharactersHTML(conflict.getMy().getDisplayName(DefaultNameFormatter.getInstance()))
                 ),
                 tr("Double conflict"),
@@ -76,14 +77,15 @@ public class ConflictAddCommand extends Command {
 
     @Override
     public void undoCommand() {
-        if (MainApplication.isDisplayingMapView() && !MainApplication.getLayerManager().containsLayer(getLayer())) {
+        DataSet ds = getAffectedDataSet();
+        if (Main.main != null && !Main.main.containsDataSet(ds)) {
             Logging.warn(tr("Layer ''{0}'' does not exist any more. Cannot remove conflict for object ''{1}''.",
-                    getLayer().getName(),
+                    ds.getName(),
                     conflict.getMy().getDisplayName(DefaultNameFormatter.getInstance())
             ));
             return;
         }
-        getAffectedDataSet().getConflicts().remove(conflict);
+        ds.getConflicts().remove(conflict);
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/command/conflict/ConflictResolveCommand.java b/src/org/openstreetmap/josm/command/conflict/ConflictResolveCommand.java
index 3c6c4e0..d63ca12 100644
--- a/src/org/openstreetmap/josm/command/conflict/ConflictResolveCommand.java
+++ b/src/org/openstreetmap/josm/command/conflict/ConflictResolveCommand.java
@@ -5,11 +5,11 @@ import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.util.Objects;
 
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.data.conflict.Conflict;
 import org.openstreetmap.josm.data.conflict.ConflictCollection;
 import org.openstreetmap.josm.data.osm.DataSet;
-import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.tools.Logging;
 
@@ -23,23 +23,33 @@ import org.openstreetmap.josm.tools.Logging;
  */
 public abstract class ConflictResolveCommand extends Command {
     /** the list of resolved conflicts */
-    private final ConflictCollection resolvedConflicts;
+    private final ConflictCollection resolvedConflicts = new ConflictCollection();
 
     /**
      * Constructs a new {@code ConflictResolveCommand} in the context of the current edit layer, if any.
+     * @deprecated to be removed end of 2017. Use {@link #ConflictResolveCommand(DataSet)} instead
      */
+    @Deprecated
     public ConflictResolveCommand() {
-        super();
-        resolvedConflicts = new ConflictCollection();
+        this(Main.main.getEditDataSet());
     }
 
     /**
      * Constructs a new {@code ConflictResolveCommand} in the context of a given data layer.
      * @param layer the data layer. Must not be null.
+     * @deprecated to be removed end of 2017. Use {@link #ConflictResolveCommand(DataSet)} instead
      */
+    @Deprecated
     public ConflictResolveCommand(OsmDataLayer layer) {
         super(layer);
-        resolvedConflicts = new ConflictCollection();
+    }
+
+    /**
+     * Constructs a new {@code ConflictResolveCommand} in the context of a given data set.
+     * @param ds the data set. Must not be null.
+     */
+    public ConflictResolveCommand(DataSet ds) {
+        super(ds);
     }
 
     /**
@@ -55,7 +65,7 @@ public abstract class ConflictResolveCommand extends Command {
 
     /**
      * reconstitutes all remembered conflicts. Add the remembered conflicts to the
-     * set of conflicts of the {@link OsmDataLayer} this command was applied to.
+     * set of conflicts of the {@link DataSet} this command was applied to.
      *
      */
     protected void reconstituteConflicts() {
@@ -71,16 +81,17 @@ public abstract class ConflictResolveCommand extends Command {
     public void undoCommand() {
         super.undoCommand();
 
-        if (MainApplication.isDisplayingMapView()) {
-            if (!MainApplication.getLayerManager().containsLayer(getLayer())) {
+        DataSet ds = getAffectedDataSet();
+        if (Main.main != null) {
+            if (!Main.main.containsDataSet(ds)) {
                 Logging.warn(tr("Cannot undo command ''{0}'' because layer ''{1}'' is not present any more",
                         this.toString(),
-                        getLayer().toString()
+                        ds.getName()
                 ));
                 return;
             }
 
-            MainApplication.getLayerManager().setActiveLayer(getLayer());
+            Main.main.setEditDataSet(ds);
         }
         reconstituteConflicts();
     }
diff --git a/src/org/openstreetmap/josm/command/conflict/CoordinateConflictResolveCommand.java b/src/org/openstreetmap/josm/command/conflict/CoordinateConflictResolveCommand.java
index 2892893..0bfc6ad 100644
--- a/src/org/openstreetmap/josm/command/conflict/CoordinateConflictResolveCommand.java
+++ b/src/org/openstreetmap/josm/command/conflict/CoordinateConflictResolveCommand.java
@@ -33,6 +33,7 @@ public class CoordinateConflictResolveCommand extends ConflictResolveCommand {
      * @param decision the merge decision
      */
     public CoordinateConflictResolveCommand(Conflict<? extends OsmPrimitive> conflict, MergeDecisionType decision) {
+        super(conflict.getMy().getDataSet());
         this.conflict = conflict;
         this.decision = decision;
     }
diff --git a/src/org/openstreetmap/josm/command/conflict/DeletedStateConflictResolveCommand.java b/src/org/openstreetmap/josm/command/conflict/DeletedStateConflictResolveCommand.java
index 44cef38..880cedc 100644
--- a/src/org/openstreetmap/josm/command/conflict/DeletedStateConflictResolveCommand.java
+++ b/src/org/openstreetmap/josm/command/conflict/DeletedStateConflictResolveCommand.java
@@ -33,6 +33,7 @@ public class DeletedStateConflictResolveCommand extends ConflictResolveCommand {
      * @param decision the merge decision
      */
     public DeletedStateConflictResolveCommand(Conflict<? extends OsmPrimitive> conflict, MergeDecisionType decision) {
+        super(conflict.getMy().getDataSet());
         this.conflict = conflict;
         this.decision = decision;
     }
diff --git a/src/org/openstreetmap/josm/command/conflict/ModifiedConflictResolveCommand.java b/src/org/openstreetmap/josm/command/conflict/ModifiedConflictResolveCommand.java
index c127d99..242c1b4 100644
--- a/src/org/openstreetmap/josm/command/conflict/ModifiedConflictResolveCommand.java
+++ b/src/org/openstreetmap/josm/command/conflict/ModifiedConflictResolveCommand.java
@@ -28,6 +28,7 @@ public class ModifiedConflictResolveCommand extends ConflictResolveCommand {
      * @param conflict the conflict data set
      */
     public ModifiedConflictResolveCommand(Conflict<? extends OsmPrimitive> conflict) {
+        super(conflict.getMy().getDataSet());
         this.conflict = conflict;
     }
 
diff --git a/src/org/openstreetmap/josm/command/conflict/RelationMemberConflictResolverCommand.java b/src/org/openstreetmap/josm/command/conflict/RelationMemberConflictResolverCommand.java
index 154db86..29df47c 100644
--- a/src/org/openstreetmap/josm/command/conflict/RelationMemberConflictResolverCommand.java
+++ b/src/org/openstreetmap/josm/command/conflict/RelationMemberConflictResolverCommand.java
@@ -9,13 +9,12 @@ import java.util.Objects;
 
 import javax.swing.Icon;
 
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.conflict.Conflict;
 import org.openstreetmap.josm.data.osm.DataSet;
 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.MainApplication;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Logging;
 
@@ -36,6 +35,7 @@ public class RelationMemberConflictResolverCommand extends ConflictResolveComman
      */
     @SuppressWarnings("unchecked")
     public RelationMemberConflictResolverCommand(Conflict<? extends OsmPrimitive> conflict, List<RelationMember> mergedMembers) {
+        super(conflict.getMy().getDataSet());
         this.conflict = (Conflict<Relation>) conflict;
         this.mergedMembers = mergedMembers;
     }
@@ -71,17 +71,16 @@ public class RelationMemberConflictResolverCommand extends ConflictResolveComman
 
     @Override
     public void undoCommand() {
-        OsmDataLayer layer = getLayer();
-        if (!MainApplication.getLayerManager().containsLayer(layer)) {
+        DataSet editDs = getAffectedDataSet();
+        if (!Main.main.containsDataSet(editDs)) {
             Logging.warn(tr("Cannot undo command ''{0}'' because layer ''{1}'' is not present any more",
                     this.toString(),
-                    layer.toString()
+                    editDs.getName()
             ));
             return;
         }
 
-        MainApplication.getLayerManager().setActiveLayer(layer);
-        DataSet editDs = MainApplication.getLayerManager().getEditDataSet();
+        Main.main.setEditDataSet(editDs);
 
         // restore the former state
         //
diff --git a/src/org/openstreetmap/josm/command/conflict/TagConflictResolveCommand.java b/src/org/openstreetmap/josm/command/conflict/TagConflictResolveCommand.java
index 18996e0..02ebded 100644
--- a/src/org/openstreetmap/josm/command/conflict/TagConflictResolveCommand.java
+++ b/src/org/openstreetmap/josm/command/conflict/TagConflictResolveCommand.java
@@ -49,6 +49,7 @@ public class TagConflictResolveCommand extends ConflictResolveCommand {
      * @param mergeItems the list of merge decisions, represented as {@link TagMergeItem}s
      */
     public TagConflictResolveCommand(Conflict<? extends OsmPrimitive> conflict, List<TagMergeItem> mergeItems) {
+        super(conflict.getMy().getDataSet());
         this.conflict = conflict;
         this.mergeItems = mergeItems;
     }
diff --git a/src/org/openstreetmap/josm/command/conflict/VersionConflictResolveCommand.java b/src/org/openstreetmap/josm/command/conflict/VersionConflictResolveCommand.java
index 01c9150..3f49703 100644
--- a/src/org/openstreetmap/josm/command/conflict/VersionConflictResolveCommand.java
+++ b/src/org/openstreetmap/josm/command/conflict/VersionConflictResolveCommand.java
@@ -28,6 +28,7 @@ public class VersionConflictResolveCommand extends ConflictResolveCommand {
      * @param conflict the conflict data set
      */
     public VersionConflictResolveCommand(Conflict<? extends OsmPrimitive> conflict) {
+        super(conflict.getMy().getDataSet());
         this.conflict = conflict;
     }
 
diff --git a/src/org/openstreetmap/josm/command/conflict/WayNodesConflictResolverCommand.java b/src/org/openstreetmap/josm/command/conflict/WayNodesConflictResolverCommand.java
index 52a630d..ba4f118 100644
--- a/src/org/openstreetmap/josm/command/conflict/WayNodesConflictResolverCommand.java
+++ b/src/org/openstreetmap/josm/command/conflict/WayNodesConflictResolverCommand.java
@@ -35,6 +35,7 @@ public class WayNodesConflictResolverCommand extends ConflictResolveCommand {
      */
     @SuppressWarnings("unchecked")
     public WayNodesConflictResolverCommand(Conflict<? extends OsmPrimitive> conflict, List<Node> mergedNodeList) {
+        super(conflict.getMy().getDataSet());
         this.conflict = (Conflict<Way>) conflict;
         this.mergedNodeList = mergedNodeList;
     }
diff --git a/src/org/openstreetmap/josm/data/APIDataSet.java b/src/org/openstreetmap/josm/data/APIDataSet.java
index 502f677..e360e0d 100644
--- a/src/org/openstreetmap/josm/data/APIDataSet.java
+++ b/src/org/openstreetmap/josm/data/APIDataSet.java
@@ -281,12 +281,7 @@ public class APIDataSet {
         }
 
         public Set<Relation> getChildren(Relation relation) {
-            Set<Relation> p = children.get(relation);
-            if (p == null) {
-                p = new HashSet<>();
-                children.put(relation, p);
-            }
-            return p;
+            return children.computeIfAbsent(relation, k -> new HashSet<>());
         }
 
         public void addDependency(Relation relation, Relation child) {
diff --git a/src/org/openstreetmap/josm/data/Bounds.java b/src/org/openstreetmap/josm/data/Bounds.java
index d17b654..e1f7841 100644
--- a/src/org/openstreetmap/josm/data/Bounds.java
+++ b/src/org/openstreetmap/josm/data/Bounds.java
@@ -569,7 +569,9 @@ public class Bounds {
      * @param projection The projection that should be used to determine how often the edge should be split along a given corner.
      * @param visitor A function to call for the points on the edge.
      * @since 10806
+     * @deprecated use {@link Projection#visitOutline(Bounds, Consumer)}
      */
+    @Deprecated
     public void visitEdge(Projection projection, Consumer<LatLon> visitor) {
         double width = getWidth();
         double height = maxLat - minLat;
diff --git a/src/org/openstreetmap/josm/data/Preferences.java b/src/org/openstreetmap/josm/data/Preferences.java
index 4139f75..743576f 100644
--- a/src/org/openstreetmap/josm/data/Preferences.java
+++ b/src/org/openstreetmap/josm/data/Preferences.java
@@ -11,7 +11,6 @@ import java.io.File;
 import java.io.IOException;
 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;
@@ -24,12 +23,10 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
-import java.util.LinkedHashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
-import java.util.Objects;
 import java.util.Optional;
 import java.util.ResourceBundle;
 import java.util.Set;
@@ -42,15 +39,6 @@ import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-import javax.json.Json;
-import javax.json.JsonArray;
-import javax.json.JsonArrayBuilder;
-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.xml.stream.XMLStreamException;
 
@@ -59,25 +47,26 @@ import org.openstreetmap.josm.data.preferences.BooleanProperty;
 import org.openstreetmap.josm.data.preferences.ColorProperty;
 import org.openstreetmap.josm.data.preferences.DoubleProperty;
 import org.openstreetmap.josm.data.preferences.IntegerProperty;
-import org.openstreetmap.josm.data.preferences.ListListSetting;
-import org.openstreetmap.josm.data.preferences.ListSetting;
+import org.openstreetmap.josm.spi.preferences.ListListSetting;
+import org.openstreetmap.josm.spi.preferences.ListSetting;
 import org.openstreetmap.josm.data.preferences.LongProperty;
-import org.openstreetmap.josm.data.preferences.MapListSetting;
+import org.openstreetmap.josm.spi.preferences.MapListSetting;
 import org.openstreetmap.josm.data.preferences.PreferencesReader;
 import org.openstreetmap.josm.data.preferences.PreferencesWriter;
-import org.openstreetmap.josm.data.preferences.Setting;
-import org.openstreetmap.josm.data.preferences.StringSetting;
+import org.openstreetmap.josm.spi.preferences.Setting;
+import org.openstreetmap.josm.spi.preferences.StringSetting;
 import org.openstreetmap.josm.data.preferences.sources.ExtendedSourceEntry;
 import org.openstreetmap.josm.data.preferences.sources.ValidatorPrefHelper;
 import org.openstreetmap.josm.io.OfflineAccessException;
 import org.openstreetmap.josm.io.OnlineResource;
+import org.openstreetmap.josm.spi.preferences.AbstractPreferences;
+import org.openstreetmap.josm.spi.preferences.IBaseDirectories;
+import org.openstreetmap.josm.spi.preferences.IPreferences;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.ColorHelper;
 import org.openstreetmap.josm.tools.I18n;
-import org.openstreetmap.josm.tools.JosmRuntimeException;
 import org.openstreetmap.josm.tools.ListenerList;
 import org.openstreetmap.josm.tools.Logging;
-import org.openstreetmap.josm.tools.MultiMap;
 import org.openstreetmap.josm.tools.Utils;
 import org.xml.sax.SAXException;
 
@@ -103,7 +92,7 @@ import org.xml.sax.SAXException;
  * @author imi
  * @since 74
  */
-public class Preferences {
+public class Preferences extends AbstractPreferences implements IBaseDirectories {
 
     private static final String COLOR_PREFIX = "color.";
 
@@ -167,7 +156,9 @@ public class Preferences {
 
     /**
      * Event triggered when a preference entry value changes.
+     * @deprecated use {@link org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent}
      */
+    @Deprecated
     public interface PreferenceChangeEvent {
         /**
          * Returns the preference key.
@@ -191,8 +182,10 @@ public class Preferences {
     /**
      * Listener to preference change events.
      * @since 10600 (functional interface)
+     * @deprecated use {@link org.openstreetmap.josm.spi.preferences.PreferenceChangedListener}
      */
     @FunctionalInterface
+    @Deprecated
     public interface PreferenceChangedListener {
         /**
          * Trigerred when a preference entry value changes.
@@ -201,6 +194,10 @@ public class Preferences {
         void preferenceChanged(PreferenceChangeEvent e);
     }
 
+    /**
+     * @deprecated private class is deprecated
+     */
+    @Deprecated
     private static class DefaultPreferenceChangeEvent implements PreferenceChangeEvent {
         private final String key;
         private final Setting<?> oldValue;
@@ -228,9 +225,21 @@ public class Preferences {
         }
     }
 
-    private final ListenerList<PreferenceChangedListener> listeners = ListenerList.create();
+    private final ListenerList<org.openstreetmap.josm.spi.preferences.PreferenceChangedListener> listeners = ListenerList.create();
+
+    private final HashMap<String, ListenerList<org.openstreetmap.josm.spi.preferences.PreferenceChangedListener>> keyListeners = new HashMap<>();
+
+    /**
+     * @deprecated deprecated private field
+     */
+    @Deprecated
+    private final ListenerList<Preferences.PreferenceChangedListener> listenersDeprecated = ListenerList.create();
 
-    private final HashMap<String, ListenerList<PreferenceChangedListener>> keyListeners = new HashMap<>();
+    /**
+     * @deprecated deprecated private field
+     */
+    @Deprecated
+    private final HashMap<String, ListenerList<Preferences.PreferenceChangedListener>> keyListenersDeprecated = new HashMap<>();
 
     /**
      * Constructs a new {@code Preferences}.
@@ -253,69 +262,144 @@ public class Preferences {
     /**
      * Adds a new preferences listener.
      * @param listener The listener to add
+     * @since 12881
      */
-    public void addPreferenceChangeListener(PreferenceChangedListener listener) {
+    @Override
+    public void addPreferenceChangeListener(org.openstreetmap.josm.spi.preferences.PreferenceChangedListener listener) {
         if (listener != null) {
             listeners.addListener(listener);
         }
     }
 
     /**
+     * Adds a new preferences listener.
+     * @param listener The listener to add
+     * @deprecated use {@link #addPreferenceChangeListener(org.openstreetmap.josm.spi.preferences.PreferenceChangedListener)}
+     */
+    @Deprecated
+    public void addPreferenceChangeListener(Preferences.PreferenceChangedListener listener) {
+        if (listener != null) {
+            listenersDeprecated.addListener(listener);
+        }
+    }
+
+    /**
      * Removes a preferences listener.
      * @param listener The listener to remove
+     * @since 12881
      */
-    public void removePreferenceChangeListener(PreferenceChangedListener listener) {
+    @Override
+    public void removePreferenceChangeListener(org.openstreetmap.josm.spi.preferences.PreferenceChangedListener listener) {
         listeners.removeListener(listener);
     }
 
     /**
+     * Removes a preferences listener.
+     * @param listener The listener to remove
+     * @deprecated use {@link #removePreferenceChangeListener(org.openstreetmap.josm.spi.preferences.PreferenceChangedListener)}
+     */
+    @Deprecated
+    public void removePreferenceChangeListener(Preferences.PreferenceChangedListener listener) {
+        listenersDeprecated.removeListener(listener);
+    }
+
+    /**
      * Adds a listener that only listens to changes in one preference
      * @param key The preference key to listen to
      * @param listener The listener to add.
-     * @since 10824
+     * @since 12881
      */
-    public void addKeyPreferenceChangeListener(String key, PreferenceChangedListener listener) {
+    @Override
+    public void addKeyPreferenceChangeListener(String key, org.openstreetmap.josm.spi.preferences.PreferenceChangedListener listener) {
         listenersForKey(key).addListener(listener);
     }
 
     /**
+     * Adds a listener that only listens to changes in one preference
+     * @param key The preference key to listen to
+     * @param listener The listener to add.
+     * @since 10824
+     * @deprecated use
+     * {@link #addKeyPreferenceChangeListener(java.lang.String, org.openstreetmap.josm.spi.preferences.PreferenceChangedListener)}
+     */
+    @Deprecated
+    public void addKeyPreferenceChangeListener(String key, Preferences.PreferenceChangedListener listener) {
+        listenersForKeyDeprecated(key).addListener(listener);
+    }
+
+    /**
      * Adds a weak listener that only listens to changes in one preference
      * @param key The preference key to listen to
      * @param listener The listener to add.
      * @since 10824
      */
-    public void addWeakKeyPreferenceChangeListener(String key, PreferenceChangedListener listener) {
+    public void addWeakKeyPreferenceChangeListener(String key, org.openstreetmap.josm.spi.preferences.PreferenceChangedListener listener) {
         listenersForKey(key).addWeakListener(listener);
     }
 
-    private ListenerList<PreferenceChangedListener> listenersForKey(String key) {
-        ListenerList<PreferenceChangedListener> keyListener = keyListeners.get(key);
-        if (keyListener == null) {
-            keyListener = ListenerList.create();
-            keyListeners.put(key, keyListener);
-        }
-        return keyListener;
+    private ListenerList<org.openstreetmap.josm.spi.preferences.PreferenceChangedListener> listenersForKey(String key) {
+        return keyListeners.computeIfAbsent(key, k -> ListenerList.create());
+    }
+
+    /**
+     * @deprecated deprecated private method
+     */
+    @Deprecated
+    private ListenerList<Preferences.PreferenceChangedListener> listenersForKeyDeprecated(String key) {
+        return keyListenersDeprecated.computeIfAbsent(key, k -> ListenerList.create());
     }
 
     /**
      * Removes a listener that only listens to changes in one preference
      * @param key The preference key to listen to
      * @param listener The listener to add.
+     * @since 12881
      */
-    public void removeKeyPreferenceChangeListener(String key, PreferenceChangedListener listener) {
+    @Override
+    public void removeKeyPreferenceChangeListener(String key, org.openstreetmap.josm.spi.preferences.PreferenceChangedListener listener) {
         Optional.ofNullable(keyListeners.get(key)).orElseThrow(
                 () -> new IllegalArgumentException("There are no listeners registered for " + key))
         .removeListener(listener);
     }
 
+    /**
+     * Removes a listener that only listens to changes in one preference
+     * @param key The preference key to listen to
+     * @param listener The listener to add.
+     * @deprecated use
+     * {@link #removeKeyPreferenceChangeListener(java.lang.String, org.openstreetmap.josm.spi.preferences.PreferenceChangedListener)}
+     */
+    @Deprecated
+    public void removeKeyPreferenceChangeListener(String key, Preferences.PreferenceChangedListener listener) {
+        Optional.ofNullable(keyListenersDeprecated.get(key)).orElseThrow(
+                () -> new IllegalArgumentException("There are no listeners registered for " + key))
+        .removeListener(listener);
+    }
+
     protected void firePreferenceChanged(String key, Setting<?> oldValue, Setting<?> newValue) {
-        final PreferenceChangeEvent evt = new DefaultPreferenceChangeEvent(key, oldValue, newValue);
+        final org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent evt =
+                new org.openstreetmap.josm.spi.preferences.DefaultPreferenceChangeEvent(key, oldValue, newValue);
         listeners.fireEvent(listener -> listener.preferenceChanged(evt));
 
-        ListenerList<PreferenceChangedListener> forKey = keyListeners.get(key);
+        ListenerList<org.openstreetmap.josm.spi.preferences.PreferenceChangedListener> forKey = keyListeners.get(key);
         if (forKey != null) {
             forKey.fireEvent(listener -> listener.preferenceChanged(evt));
         }
+        firePreferenceChangedDeprecated(key, oldValue, newValue);
+    }
+
+    /**
+     * @deprecated deprecated private method
+     */
+    @Deprecated
+    private void firePreferenceChangedDeprecated(String key, Setting<?> oldValue, Setting<?> newValue) {
+        final Preferences.PreferenceChangeEvent evtDeprecated = new Preferences.DefaultPreferenceChangeEvent(key, oldValue, newValue);
+        listenersDeprecated.fireEvent(listener -> listener.preferenceChanged(evtDeprecated));
+
+        ListenerList<Preferences.PreferenceChangedListener> forKeyDeprecated = keyListenersDeprecated.get(key);
+        if (forKeyDeprecated != null) {
+            forKeyDeprecated.fireEvent(listener -> listener.preferenceChanged(evtDeprecated));
+        }
     }
 
     /**
@@ -337,22 +421,38 @@ public class Preferences {
      * Returns the user defined preferences directory, containing the preferences.xml file
      * @return The user defined preferences directory, containing the preferences.xml file
      * @since 7834
+     * @deprecated use {@link #getPreferencesDirectory(boolean)}
      */
+    @Deprecated
     public File getPreferencesDirectory() {
-        if (preferencesDir != null)
-            return preferencesDir;
-        String path;
-        path = System.getProperty("josm.pref");
-        if (path != null) {
-            preferencesDir = new File(path).getAbsoluteFile();
-        } else {
-            path = System.getProperty("josm.home");
+        return getPreferencesDirectory(false);
+    }
+
+    @Override
+    public File getPreferencesDirectory(boolean createIfMissing) {
+        if (preferencesDir == null) {
+            String path;
+            path = System.getProperty("josm.pref");
             if (path != null) {
                 preferencesDir = new File(path).getAbsoluteFile();
             } else {
-                preferencesDir = Main.platform.getDefaultPrefDirectory();
+                path = System.getProperty("josm.home");
+                if (path != null) {
+                    preferencesDir = new File(path).getAbsoluteFile();
+                } else {
+                    preferencesDir = Main.platform.getDefaultPrefDirectory();
+                }
             }
         }
+        if (createIfMissing && !preferencesDir.exists() && !preferencesDir.mkdirs()) {
+            Logging.warn(tr("Failed to create missing preferences directory: {0}", preferencesDir.getAbsoluteFile()));
+            JOptionPane.showMessageDialog(
+                    Main.parent,
+                    tr("<html>Failed to create missing preferences directory: {0}</html>", preferencesDir.getAbsoluteFile()),
+                    tr("Error"),
+                    JOptionPane.ERROR_MESSAGE
+            );
+        }
         return preferencesDir;
     }
 
@@ -361,22 +461,38 @@ public class Preferences {
      * Depending on the OS it may be the same directory as preferences directory.
      * @return The user data directory, containing autosave, plugins, etc.
      * @since 7834
+     * @deprecated use {@link #getUserDataDirectory(boolean)}
      */
+    @Deprecated
     public File getUserDataDirectory() {
-        if (userdataDir != null)
-            return userdataDir;
-        String path;
-        path = System.getProperty("josm.userdata");
-        if (path != null) {
-            userdataDir = new File(path).getAbsoluteFile();
-        } else {
-            path = System.getProperty("josm.home");
+        return getUserDataDirectory(false);
+    }
+
+    @Override
+    public File getUserDataDirectory(boolean createIfMissing) {
+        if (userdataDir == null) {
+            String path;
+            path = System.getProperty("josm.userdata");
             if (path != null) {
                 userdataDir = new File(path).getAbsoluteFile();
             } else {
-                userdataDir = Main.platform.getDefaultUserDataDirectory();
+                path = System.getProperty("josm.home");
+                if (path != null) {
+                    userdataDir = new File(path).getAbsoluteFile();
+                } else {
+                    userdataDir = Main.platform.getDefaultUserDataDirectory();
+                }
             }
         }
+        if (createIfMissing && !userdataDir.exists() && !userdataDir.mkdirs()) {
+            Logging.warn(tr("Failed to create missing user data directory: {0}", userdataDir.getAbsoluteFile()));
+            JOptionPane.showMessageDialog(
+                    Main.parent,
+                    tr("<html>Failed to create missing user data directory: {0}</html>", userdataDir.getAbsoluteFile()),
+                    tr("Error"),
+                    JOptionPane.ERROR_MESSAGE
+            );
+        }
         return userdataDir;
     }
 
@@ -385,7 +501,7 @@ public class Preferences {
      * @return The user preferences file (preferences.xml)
      */
     public File getPreferenceFile() {
-        return new File(getPreferencesDirectory(), "preferences.xml");
+        return new File(getPreferencesDirectory(false), "preferences.xml");
     }
 
     /**
@@ -393,7 +509,7 @@ public class Preferences {
      * @return the cache file for default preferences
      */
     public File getDefaultsCacheFile() {
-        return new File(getCacheDirectory(), "default_preferences.xml");
+        return new File(getCacheDirectory(true), "default_preferences.xml");
     }
 
     /**
@@ -401,7 +517,7 @@ public class Preferences {
      * @return The user plugin directory
      */
     public File getPluginsDirectory() {
-        return new File(getUserDataDirectory(), "plugins");
+        return new File(getUserDataDirectory(false), "plugins");
     }
 
     /**
@@ -410,27 +526,34 @@ public class Preferences {
      * If the directory doesn't exist on the file system, it will be created by this method.
      *
      * @return the cache directory
+     * @deprecated use {@link #getCacheDirectory(boolean)}
      */
+    @Deprecated
     public File getCacheDirectory() {
-        if (cacheDir != null)
-            return cacheDir;
-        String path = System.getProperty("josm.cache");
-        if (path != null) {
-            cacheDir = new File(path).getAbsoluteFile();
-        } else {
-            path = System.getProperty("josm.home");
+        return getCacheDirectory(true);
+    }
+
+    @Override
+    public File getCacheDirectory(boolean createIfMissing) {
+        if (cacheDir == null) {
+            String path = System.getProperty("josm.cache");
             if (path != null) {
-                cacheDir = new File(path, "cache");
+                cacheDir = new File(path).getAbsoluteFile();
             } else {
-                path = get("cache.folder", null);
+                path = System.getProperty("josm.home");
                 if (path != null) {
-                    cacheDir = new File(path).getAbsoluteFile();
+                    cacheDir = new File(path, "cache");
                 } else {
-                    cacheDir = Main.platform.getDefaultCacheDirectory();
+                    path = get("cache.folder", null);
+                    if (path != null) {
+                        cacheDir = new File(path).getAbsoluteFile();
+                    } else {
+                        cacheDir = Main.platform.getDefaultCacheDirectory();
+                    }
                 }
             }
         }
-        if (!cacheDir.exists() && !cacheDir.mkdirs()) {
+        if (createIfMissing && !cacheDir.exists() && !cacheDir.mkdirs()) {
             Logging.warn(tr("Failed to create missing cache directory: {0}", cacheDir.getAbsoluteFile()));
             JOptionPane.showMessageDialog(
                     Main.parent,
@@ -457,8 +580,8 @@ public class Preferences {
      */
     public Collection<String> getAllPossiblePreferenceDirs() {
         Set<String> locations = new HashSet<>();
-        addPossibleResourceDir(locations, getPreferencesDirectory().getPath());
-        addPossibleResourceDir(locations, getUserDataDirectory().getPath());
+        addPossibleResourceDir(locations, getPreferencesDirectory(false).getPath());
+        addPossibleResourceDir(locations, getUserDataDirectory(false).getPath());
         addPossibleResourceDir(locations, System.getenv("JOSM_RESOURCES"));
         addPossibleResourceDir(locations, System.getProperty("josm.resources"));
         if (Main.isPlatformWindows()) {
@@ -479,26 +602,6 @@ public class Preferences {
     }
 
     /**
-     * Get settings value for a certain key.
-     * @param key the identifier for the setting
-     * @return "" if there is nothing set for the preference key, the corresponding value otherwise. The result is not null.
-     */
-    public synchronized String get(final String key) {
-        String value = get(key, null);
-        return value == null ? "" : value;
-    }
-
-    /**
-     * Get settings value for a certain key and provide default a value.
-     * @param key the identifier for the setting
-     * @param def the default value. For each call of get() with a given key, the default value must be the same.
-     * @return the corresponding value if the property has been set before, {@code def} otherwise
-     */
-    public synchronized String get(final String key, final String def) {
-        return getSetting(key, new StringSetting(def), StringSetting.class).getValue();
-    }
-
-    /**
      * Gets all normal (string) settings that have a key starting with the prefix
      * @param prefix The start of the key
      * @return The key names of the settings
@@ -551,34 +654,14 @@ public class Preferences {
     }
 
     /**
-     * Gets a boolean preference
-     * @param key The preference key
-     * @return The boolean or <code>false</code> if it could not be parsed
-     * @see IntegerProperty#get()
-     */
-    public synchronized boolean getBoolean(final String key) {
-        String s = get(key, null);
-        return s != null && Boolean.parseBoolean(s);
-    }
-
-    /**
-     * Gets a boolean preference
-     * @param key The preference key
-     * @param def The default value to use
-     * @return The boolean, <code>false</code> if it could not be parsed, the default value if it is unset
-     * @see IntegerProperty#get()
-     */
-    public synchronized boolean getBoolean(final String key, final boolean def) {
-        return Boolean.parseBoolean(get(key, Boolean.toString(def)));
-    }
-
-    /**
      * Gets an boolean that may be specialized
      * @param key The basic key
      * @param specName The sub-key to append to the key
      * @param def The default value
      * @return The boolean value or the default value if it could not be parsed
+     * @deprecated use {@link PreferencesUtils#getBoolean(IPreferences, String, String, boolean)}
      */
+    @Deprecated
     public synchronized boolean getBoolean(final String key, final String specName, final boolean def) {
         boolean generic = getBoolean(key, def);
         String skey = key+'.'+specName;
@@ -590,22 +673,14 @@ public class Preferences {
     }
 
     /**
-     * Set a value for a certain setting.
-     * @param key the unique identifier for the setting
-     * @param value the value of the setting. Can be null or "" which both removes the key-value entry.
-     * @return {@code true}, if something has changed (i.e. value is different than before)
-     */
-    public boolean put(final String key, String value) {
-        return putSetting(key, value == null || value.isEmpty() ? null : new StringSetting(value));
-    }
-
-    /**
      * Set a boolean value for a certain setting.
      * @param key the unique identifier for the setting
      * @param value The new value
      * @return {@code true}, if something has changed (i.e. value is different than before)
      * @see BooleanProperty
+     * @deprecated use {@link IPreferences#putBoolean(String, boolean)}
      */
+    @Deprecated
     public boolean put(final String key, final boolean value) {
         return put(key, Boolean.toString(value));
     }
@@ -616,7 +691,9 @@ public class Preferences {
      * @param value The new value
      * @return {@code true}, if something has changed (i.e. value is different than before)
      * @see IntegerProperty#put(Integer)
+     * @deprecated use {@link IPreferences#putInt(String, int)}
      */
+    @Deprecated
     public boolean putInteger(final String key, final Integer value) {
         return put(key, Integer.toString(value));
     }
@@ -627,7 +704,9 @@ public class Preferences {
      * @param value The new value
      * @return {@code true}, if something has changed (i.e. value is different than before)
      * @see DoubleProperty#put(Double)
+     * @deprecated use {@link IPreferences#putDouble(java.lang.String, double)}
      */
+    @Deprecated
     public boolean putDouble(final String key, final Double value) {
         return put(key, Double.toString(value));
     }
@@ -638,7 +717,9 @@ public class Preferences {
      * @param value The new value
      * @return {@code true}, if something has changed (i.e. value is different than before)
      * @see LongProperty#put(Long)
+     * @deprecated use {@link IPreferences#putLong(java.lang.String, long)}
      */
+    @Deprecated
     public boolean putLong(final String key, final Long value) {
         return put(key, Long.toString(value));
     }
@@ -662,7 +743,7 @@ public class Preferences {
     protected void save(File prefFile, Stream<Entry<String, Setting<?>>> settings, boolean defaults) throws IOException {
         if (!defaults) {
             /* currently unused, but may help to fix configuration issues in future */
-            putInteger("josm.version", Version.getInstance().getVersion());
+            putInt("josm.version", Version.getInstance().getVersion());
 
             updateSystemProperties();
         }
@@ -765,7 +846,7 @@ public class Preferences {
     public void init(boolean reset) {
         initSuccessful = false;
         // get the preferences.
-        File prefDir = getPreferencesDirectory();
+        File prefDir = getPreferencesDirectory(false);
         if (prefDir.exists()) {
             if (!prefDir.isDirectory()) {
                 Logging.warn(tr("Failed to initialize preferences. Preference directory ''{0}'' is not a directory.",
@@ -973,7 +1054,9 @@ public class Preferences {
      * @param def The default value to use
      * @return The integer
      * @see IntegerProperty#get()
+     * @deprecated use {@link IPreferences#getInt(String, int)}
      */
+    @Deprecated
     public synchronized int getInteger(String key, int def) {
         String v = get(key, Integer.toString(def));
         if (v.isEmpty())
@@ -994,7 +1077,9 @@ public class Preferences {
      * @param specName The sub-key to append to the key
      * @param def The default value
      * @return The integer value or the default value if it could not be parsed
+     * @deprecated use {@link PreferencesUtils#getInteger(IPreferences, String, String, int)}
      */
+    @Deprecated
     public synchronized int getInteger(String key, String specName, int def) {
         String v = get(key+'.'+specName);
         if (v.isEmpty())
@@ -1012,53 +1097,13 @@ public class Preferences {
     }
 
     /**
-     * Gets a long preference
-     * @param key The preference key
-     * @param def The default value to use
-     * @return The long value or the default value if it could not be parsed
-     * @see LongProperty#get()
-     */
-    public synchronized long getLong(String key, long def) {
-        String v = get(key, Long.toString(def));
-        if (null == v)
-            return def;
-
-        try {
-            return Long.parseLong(v);
-        } catch (NumberFormatException e) {
-            // fall out
-            Logging.trace(e);
-        }
-        return def;
-    }
-
-    /**
-     * Gets a double preference
-     * @param key The preference key
-     * @param def The default value to use
-     * @return The double value or the default value if it could not be parsed
-     * @see LongProperty#get()
-     */
-    public synchronized double getDouble(String key, double def) {
-        String v = get(key, Double.toString(def));
-        if (null == v)
-            return def;
-
-        try {
-            return Double.parseDouble(v);
-        } catch (NumberFormatException e) {
-            // fall out
-            Logging.trace(e);
-        }
-        return def;
-    }
-
-    /**
      * Get a list of values for a certain key
      * @param key the identifier for the setting
      * @param def the default value.
      * @return the corresponding value if the property has been set before, {@code def} otherwise
+     * @deprecated use {@link IPreferences#getList(java.lang.String, java.util.List)}
      */
+    @Deprecated
     public Collection<String> getCollection(String key, Collection<String> def) {
         return getSetting(key, ListSetting.create(def), ListSetting.class).getValue();
     }
@@ -1067,9 +1112,11 @@ public class Preferences {
      * Get a list of values for a certain key
      * @param key the identifier for the setting
      * @return the corresponding value if the property has been set before, an empty collection otherwise.
+     * @deprecated use {@link IPreferences#getList(java.lang.String)}
      */
+    @Deprecated
     public Collection<String> getCollection(String key) {
-        Collection<String> val = getCollection(key, null);
+        Collection<String> val = getList(key, null);
         return val == null ? Collections.<String>emptyList() : val;
     }
 
@@ -1077,12 +1124,14 @@ public class Preferences {
      * Removes a value from a given String collection
      * @param key The preference key the collection is stored with
      * @param value The value that should be removed in the collection
-     * @see #getCollection(String)
+     * @see #getList(String)
+     * @deprecated use {@link PreferencesUtils#removeFromList(IPreferences, String, String)}
      */
+    @Deprecated
     public synchronized void removeFromCollection(String key, String value) {
-        List<String> a = new ArrayList<>(getCollection(key, Collections.<String>emptyList()));
+        List<String> a = new ArrayList<>(getList(key, Collections.<String>emptyList()));
         a.remove(value);
-        putCollection(key, a);
+        putList(key, a);
     }
 
     /**
@@ -1092,6 +1141,7 @@ public class Preferences {
      * @param setting the value of the setting. In case it is null, the key-value entry will be removed.
      * @return {@code true}, if something has changed (i.e. value is different than before)
      */
+    @Override
     public boolean putSetting(final String key, Setting<?> setting) {
         CheckParameterUtil.ensureParameterNotNull(key);
         if (setting != null && setting.getValue() == null)
@@ -1145,6 +1195,7 @@ public class Preferences {
      * @return the corresponding value if the property has been set before, {@code def} otherwise
      */
     @SuppressWarnings("unchecked")
+    @Override
     public synchronized <T extends Setting<?>> T getSetting(String key, T def, Class<T> klass) {
         CheckParameterUtil.ensureParameterNotNull(key);
         CheckParameterUtil.ensureParameterNotNull(def);
@@ -1171,7 +1222,9 @@ public class Preferences {
      * @param key key
      * @param value value
      * @return {@code true}, if something has changed (i.e. value is different than before)
+     * @deprecated use {@link IPreferences#putList(java.lang.String, java.util.List)}
      */
+    @Deprecated
     public boolean putCollection(String key, Collection<String> value) {
         return putSetting(key, value == null ? null : ListSetting.create(value));
     }
@@ -1182,16 +1235,18 @@ public class Preferences {
      * @param maxsize max number of items to save
      * @param val value
      * @return {@code true}, if something has changed (i.e. value is different than before)
+     * @deprecated use {@link PreferencesUtils#putListBounded(IPreferences, String, int, List)}
      */
+    @Deprecated
     public boolean putCollectionBounded(String key, int maxsize, Collection<String> val) {
-        Collection<String> newCollection = new ArrayList<>(Math.min(maxsize, val.size()));
+        List<String> newCollection = new ArrayList<>(Math.min(maxsize, val.size()));
         for (String i : val) {
             if (newCollection.size() >= maxsize) {
                 break;
             }
             newCollection.add(i);
         }
-        return putCollection(key, newCollection);
+        return putList(key, newCollection);
     }
 
     /**
@@ -1200,7 +1255,9 @@ public class Preferences {
      * @param key preference key
      * @param def default array value
      * @return array value
+     * @deprecated use {@link #getListOfLists(java.lang.String, java.util.List)}
      */
+    @Deprecated
     @SuppressWarnings({ "unchecked", "rawtypes" })
     public synchronized Collection<Collection<String>> getArray(String key, Collection<Collection<String>> def) {
         ListListSetting val = getSetting(key, ListListSetting.create(def), ListListSetting.class);
@@ -1211,7 +1268,9 @@ public class Preferences {
      * Gets a collection of string collections for the given key
      * @param key The key
      * @return The collection of string collections or an empty collection as default
+     * @deprecated use {@link IPreferences#getListOfLists(java.lang.String)}
      */
+    @Deprecated
     public Collection<Collection<String>> getArray(String key) {
         Collection<Collection<String>> res = getArray(key, null);
         return res == null ? Collections.<Collection<String>>emptyList() : res;
@@ -1222,7 +1281,9 @@ public class Preferences {
      * @param key key
      * @param value value
      * @return {@code true}, if something has changed (i.e. value is different than before)
+     * @deprecated use {@link IPreferences#putListOfLists(java.lang.String, java.util.List)}
      */
+    @Deprecated
     public boolean putArray(String key, Collection<Collection<String>> value) {
         return putSetting(key, value == null ? null : ListListSetting.create(value));
     }
@@ -1232,7 +1293,9 @@ public class Preferences {
      * @param key The key to search at
      * @param def The default value to use
      * @return The stored value or the default one if it could not be parsed
+     * @deprecated use {@link IPreferences#getListOfMaps(java.lang.String, java.util.List)}
      */
+    @Deprecated
     public Collection<Map<String, String>> getListOfStructs(String key, Collection<Map<String, String>> def) {
         return getSetting(key, new MapListSetting(def == null ? null : new ArrayList<>(def)), MapListSetting.class).getValue();
     }
@@ -1242,8 +1305,10 @@ public class Preferences {
      * @param key The key to store the list in
      * @param value A list of key/value maps
      * @return <code>true</code> if the value was changed
-     * @see #getListOfStructs(String, Collection)
+     * @see #getListOfMaps(java.lang.String, java.util.List)
+     * @deprecated use {@link IPreferences#putListOfMaps(java.lang.String, java.util.List)}
      */
+    @Deprecated
     public boolean putListOfStructs(String key, Collection<Map<String, String>> value) {
         return putSetting(key, value == null ? null : new MapListSetting(new ArrayList<>(value)));
     }
@@ -1254,7 +1319,9 @@ public class Preferences {
      *
      * @see #serializeStruct(java.lang.Object, java.lang.Class)
      * @see #deserializeStruct(java.util.Map, java.lang.Class)
+     * @deprecated use {@link StructUtils.StructEntry}
      */
+    @Deprecated
     @Retention(RetentionPolicy.RUNTIME) // keep annotation at runtime
     public @interface pref { }
 
@@ -1263,7 +1330,9 @@ public class Preferences {
      * Indicates that a certain field should be written to the map, even if the value is the same as the default value.
      *
      * @see #serializeStruct(java.lang.Object, java.lang.Class)
+     * @deprecated use {@link StructUtils.WriteExplicitly}
      */
+    @Deprecated
     @Retention(RetentionPolicy.RUNTIME) // keep annotation at runtime
     public @interface writeExplicitly { }
 
@@ -1275,9 +1344,11 @@ public class Preferences {
      * @param key main preference key
      * @param klass The struct class
      * @return a list of objects of type T or an empty list if nothing was found
+     * @deprecated use {@link StructUtils#getListOfStructs(IPreferences, String, Class)}
      */
+    @Deprecated
     public <T> List<T> getListOfStructs(String key, Class<T> klass) {
-        return Optional.ofNullable(getListOfStructs(key, null, klass)).orElseGet(Collections::emptyList);
+        return StructUtils.getListOfStructs(this, key, klass);
     }
 
     /**
@@ -1287,13 +1358,11 @@ public class Preferences {
      * @param def default value
      * @param klass The struct class
      * @return a list of objects of type T or {@code def} if nothing was found
+     * @deprecated use {@link StructUtils#getListOfStructs(IPreferences, String, Collection, Class)}
      */
+    @Deprecated
     public <T> List<T> getListOfStructs(String key, Collection<T> def, Class<T> klass) {
-        Collection<Map<String, String>> prop =
-            getListOfStructs(key, def == null ? null : serializeListOfStructs(def, klass));
-        if (prop == null)
-            return def == null ? null : new ArrayList<>(def);
-        return prop.stream().map(p -> deserializeStruct(p, klass)).collect(Collectors.toList());
+        return StructUtils.getListOfStructs(this, key, def, klass);
     }
 
     /**
@@ -1311,97 +1380,11 @@ public class Preferences {
      * @param val the list that is supposed to be saved
      * @param klass The struct class
      * @return true if something has changed
+     * @deprecated use {@link StructUtils#putListOfStructs(IPreferences, String, Collection, Class)}
      */
+    @Deprecated
     public <T> boolean putListOfStructs(String key, Collection<T> val, Class<T> klass) {
-        return putListOfStructs(key, serializeListOfStructs(val, klass));
-    }
-
-    private static <T> Collection<Map<String, String>> serializeListOfStructs(Collection<T> l, Class<T> klass) {
-        if (l == null)
-            return null;
-        Collection<Map<String, String>> vals = new ArrayList<>();
-        for (T struct : l) {
-            if (struct != null) {
-                vals.add(serializeStruct(struct, klass));
-            }
-        }
-        return vals;
-    }
-
-    @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 evalue = e.getValue();
-                object.add(e.getKey().toString(), evalue.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;
-    }
-
-    @SuppressWarnings("rawtypes")
-    private static String multiMapToJson(MultiMap map) {
-        StringWriter stringWriter = new StringWriter();
-        try (JsonWriter writer = Json.createWriter(stringWriter)) {
-            JsonObjectBuilder object = Json.createObjectBuilder();
-            for (Object o: map.entrySet()) {
-                Entry e = (Entry) o;
-                Set evalue = (Set) e.getValue();
-                JsonArrayBuilder a = Json.createArrayBuilder();
-                for (Object evo: evalue) {
-                    a.add(evo.toString());
-                }
-                object.add(e.getKey().toString(), a.build());
-            }
-            writer.writeObject(object.build());
-        }
-        return stringWriter.toString();
-    }
-
-    @SuppressWarnings({ "rawtypes", "unchecked" })
-    private static MultiMap multiMapFromJson(String s) {
-        MultiMap ret = null;
-        try (JsonReader reader = Json.createReader(new StringReader(s))) {
-            JsonObject object = reader.readObject();
-            ret = new MultiMap(object.size());
-            for (Entry<String, JsonValue> e: object.entrySet()) {
-                JsonValue value = e.getValue();
-                if (value instanceof JsonArray) {
-                    for (JsonString js: ((JsonArray) value).getValuesAs(JsonString.class)) {
-                        ret.put(e.getKey(), js.getString());
-                    }
-                } else 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;
+        return StructUtils.putListOfStructs(this, key, val, klass);
     }
 
     /**
@@ -1419,39 +1402,11 @@ public class Preferences {
      * @param struct the object to be converted
      * @param klass the class T
      * @return the resulting map (same data content as <code>struct</code>)
+     * @deprecated use {@link StructUtils#serializeStruct(java.lang.Object, java.lang.Class)}
      */
+    @Deprecated
     public static <T> Map<String, String> serializeStruct(T struct, Class<T> klass) {
-        T structPrototype;
-        try {
-            structPrototype = klass.getConstructor().newInstance();
-        } catch (ReflectiveOperationException ex) {
-            throw new IllegalArgumentException(ex);
-        }
-
-        Map<String, String> hash = new LinkedHashMap<>();
-        for (Field f : klass.getDeclaredFields()) {
-            if (f.getAnnotation(pref.class) == null) {
-                continue;
-            }
-            Utils.setObjectsAccessible(f);
-            try {
-                Object fieldValue = f.get(struct);
-                Object defaultFieldValue = f.get(structPrototype);
-                if (fieldValue != null && (f.getAnnotation(writeExplicitly.class) != null || !Objects.equals(fieldValue, defaultFieldValue))) {
-                    String key = f.getName().replace('_', '-');
-                    if (fieldValue instanceof Map) {
-                        hash.put(key, mapToJson((Map<?, ?>) fieldValue));
-                    } else if (fieldValue instanceof MultiMap) {
-                        hash.put(key, multiMapToJson((MultiMap<?, ?>) fieldValue));
-                    } else {
-                        hash.put(key, fieldValue.toString());
-                    }
-                }
-            } catch (IllegalAccessException ex) {
-                throw new JosmRuntimeException(ex);
-            }
-        }
-        return hash;
+        return StructUtils.serializeStruct(struct, klass);
     }
 
     /**
@@ -1466,59 +1421,11 @@ public class Preferences {
      * @param hash the string map with initial values
      * @param klass the class T
      * @return an object of class T, initialized as described above
+     * @deprecated use {@link StructUtils#deserializeStruct(java.util.Map, java.lang.Class)}
      */
+    @Deprecated
     public static <T> T deserializeStruct(Map<String, String> hash, Class<T> klass) {
-        T struct = null;
-        try {
-            struct = klass.getConstructor().newInstance();
-        } catch (ReflectiveOperationException ex) {
-            throw new IllegalArgumentException(ex);
-        }
-        for (Entry<String, String> keyValue : hash.entrySet()) {
-            Object value;
-            Field f;
-            try {
-                f = klass.getDeclaredField(keyValue.getKey().replace('-', '_'));
-            } catch (NoSuchFieldException ex) {
-                Logging.trace(ex);
-                continue;
-            }
-            if (f.getAnnotation(pref.class) == null) {
-                continue;
-            }
-            Utils.setObjectsAccessible(f);
-            if (f.getType() == Boolean.class || f.getType() == boolean.class) {
-                value = Boolean.valueOf(keyValue.getValue());
-            } else if (f.getType() == Integer.class || f.getType() == int.class) {
-                try {
-                    value = Integer.valueOf(keyValue.getValue());
-                } catch (NumberFormatException nfe) {
-                    continue;
-                }
-            } else if (f.getType() == Double.class || f.getType() == double.class) {
-                try {
-                    value = Double.valueOf(keyValue.getValue());
-                } catch (NumberFormatException nfe) {
-                    continue;
-                }
-            } else if (f.getType() == String.class) {
-                value = keyValue.getValue();
-            } else if (f.getType().isAssignableFrom(Map.class)) {
-                value = mapFromJson(keyValue.getValue());
-            } else if (f.getType().isAssignableFrom(MultiMap.class)) {
-                value = multiMapFromJson(keyValue.getValue());
-            } else
-                throw new JosmRuntimeException("unsupported preference primitive type");
-
-            try {
-                f.set(struct, value);
-            } catch (IllegalArgumentException ex) {
-                throw new AssertionError(ex);
-            } catch (IllegalAccessException ex) {
-                throw new JosmRuntimeException(ex);
-            }
-        }
-        return struct;
+        return StructUtils.deserializeStruct(hash, klass);
     }
 
     /**
@@ -1574,7 +1481,7 @@ public class Preferences {
      * @see #getOnlinePluginSites
      */
     public Collection<String> getPluginSites() {
-        return getCollection("pluginmanager.sites", Collections.singleton(Main.getJOSMWebsite()+"/pluginicons%<?plugins=>"));
+        return getList("pluginmanager.sites", Collections.singletonList(Main.getJOSMWebsite()+"/pluginicons%<?plugins=>"));
     }
 
     /**
@@ -1601,7 +1508,7 @@ public class Preferences {
      * @param sites the site URLs
      */
     public void setPluginSites(Collection<String> sites) {
-        putCollection("pluginmanager.sites", sites);
+        putList("pluginmanager.sites", new ArrayList<>(sites));
     }
 
     /**
@@ -1701,7 +1608,7 @@ public class Preferences {
                     }
                 }
                 if (modified) {
-                    putListOfStructs(key, l);
+                    putListOfMaps(key, l);
                 }
             }
         }
@@ -1717,7 +1624,7 @@ public class Preferences {
                 if (val.isPresent()) {
                     l.add(helper.serialize(val.get()));
                 }
-                putListOfStructs(key, l);
+                putListOfMaps(key, l);
             }
         }
     }
diff --git a/src/org/openstreetmap/josm/data/PreferencesUtils.java b/src/org/openstreetmap/josm/data/PreferencesUtils.java
index a8e599b..2c269db 100644
--- a/src/org/openstreetmap/josm/data/PreferencesUtils.java
+++ b/src/org/openstreetmap/josm/data/PreferencesUtils.java
@@ -5,6 +5,7 @@ import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -17,12 +18,12 @@ import javax.script.ScriptException;
 import javax.swing.JOptionPane;
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.preferences.ListListSetting;
-import org.openstreetmap.josm.data.preferences.ListSetting;
-import org.openstreetmap.josm.data.preferences.MapListSetting;
-import org.openstreetmap.josm.data.preferences.Setting;
-import org.openstreetmap.josm.data.preferences.StringSetting;
-import org.openstreetmap.josm.gui.io.CustomConfigurator;
+import org.openstreetmap.josm.spi.preferences.IPreferences;
+import org.openstreetmap.josm.spi.preferences.ListListSetting;
+import org.openstreetmap.josm.spi.preferences.ListSetting;
+import org.openstreetmap.josm.spi.preferences.MapListSetting;
+import org.openstreetmap.josm.spi.preferences.Setting;
+import org.openstreetmap.josm.spi.preferences.StringSetting;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -33,10 +34,59 @@ import org.openstreetmap.josm.tools.Utils;
  */
 public final class PreferencesUtils {
 
+    private static volatile StringBuilder summary = new StringBuilder();
+
     private PreferencesUtils() {
         // Hide implicit public constructor for utility class
     }
 
+    /**
+     * Log a formatted message.
+     * @param fmt format
+     * @param vars arguments
+     * @see String#format
+     * @since 12826
+     */
+    public static void log(String fmt, Object... vars) {
+        summary.append(String.format(fmt, vars));
+    }
+
+    /**
+     * Log a message.
+     * @param s message to log
+     * @since 12826
+     */
+    public static void log(String s) {
+        summary.append(s).append('\n');
+    }
+
+    /**
+     * Log an exception.
+     * @param e exception to log
+     * @param s message prefix
+     * @since 12826
+     */
+    public static void log(Exception e, String s) {
+        summary.append(s).append(' ').append(Logging.getErrorMessage(e)).append('\n');
+    }
+
+    /**
+     * Returns the log.
+     * @return the log
+     * @since 12826
+     */
+    public static String getLog() {
+        return summary.toString();
+    }
+
+    /**
+     * Resets the log.
+     * @since 12826
+     */
+    public static void resetLog() {
+        summary = new StringBuilder();
+    }
+
     public static void replacePreferences(Preferences fragment, Preferences mainpref) {
         for (Entry<String, Setting<?>> entry: fragment.settingsMap.entrySet()) {
             mainpref.putSetting(entry.getKey(), entry.getValue());
@@ -50,7 +100,7 @@ public final class PreferencesUtils {
                 mainpref.putSetting(key, entry.getValue());
             } else if (entry.getValue() instanceof ListSetting) {
                 ListSetting lSetting = (ListSetting) entry.getValue();
-                Collection<String> newItems = getCollection(mainpref, key, true);
+                List<String> newItems = getList(mainpref, key, true);
                 if (newItems == null) continue;
                 for (String item : lSetting.getValue()) {
                     // add nonexisting elements to then list
@@ -58,19 +108,19 @@ public final class PreferencesUtils {
                         newItems.add(item);
                     }
                 }
-                mainpref.putCollection(key, newItems);
+                mainpref.putList(key, newItems);
             } else if (entry.getValue() instanceof ListListSetting) {
                 ListListSetting llSetting = (ListListSetting) entry.getValue();
-                Collection<Collection<String>> newLists = getArray(mainpref, key, true);
+                List<List<String>> newLists = getListOfLists(mainpref, key, true);
                 if (newLists == null) continue;
 
-                for (Collection<String> list : llSetting.getValue()) {
+                for (List<String> list : llSetting.getValue()) {
                     // add nonexisting list (equals comparison for lists is used implicitly)
                     if (!newLists.contains(list)) {
                         newLists.add(list);
                     }
                 }
-                mainpref.putArray(key, newLists);
+                mainpref.putListOfLists(key, newLists);
             } else if (entry.getValue() instanceof MapListSetting) {
                 MapListSetting mlSetting = (MapListSetting) entry.getValue();
                 List<Map<String, String>> newMaps = getListOfStructs(mainpref, key, true);
@@ -84,7 +134,7 @@ public final class PreferencesUtils {
                         newMaps.add(map);
                     }
                 }
-                mainpref.putListOfStructs(entry.getKey(), newMaps);
+                mainpref.putListOfMaps(entry.getKey(), newMaps);
             }
         }
     }
@@ -106,34 +156,34 @@ public final class PreferencesUtils {
                 }
             } else if (entry.getValue() instanceof ListSetting) {
                 ListSetting lSetting = (ListSetting) entry.getValue();
-                Collection<String> newItems = getCollection(mainpref, key, true);
+                List<String> newItems = getList(mainpref, key, true);
                 if (newItems == null) continue;
 
                 // remove mentioned items from collection
                 for (String item : lSetting.getValue()) {
-                    CustomConfigurator.log("Deleting preferences: from list %s: %s\n", key, item);
+                    log("Deleting preferences: from list %s: %s\n", key, item);
                     newItems.remove(item);
                 }
-                mainpref.putCollection(entry.getKey(), newItems);
+                mainpref.putList(entry.getKey(), newItems);
             } else if (entry.getValue() instanceof ListListSetting) {
                 ListListSetting llSetting = (ListListSetting) entry.getValue();
-                Collection<Collection<String>> newLists = getArray(mainpref, key, true);
+                List<List<String>> newLists = getListOfLists(mainpref, key, true);
                 if (newLists == null) continue;
 
                 // if items are found in one of lists, remove that list!
-                Iterator<Collection<String>> listIterator = newLists.iterator();
+                Iterator<List<String>> listIterator = newLists.iterator();
                 while (listIterator.hasNext()) {
                     Collection<String> list = listIterator.next();
                     for (Collection<String> removeList : llSetting.getValue()) {
                         if (list.containsAll(removeList)) {
                             // remove current list, because it matches search criteria
-                            CustomConfigurator.log("Deleting preferences: list from lists %s: %s\n", key, list);
+                            log("Deleting preferences: list from lists %s: %s\n", key, list);
                             listIterator.remove();
                         }
                     }
                 }
 
-                mainpref.putArray(key, newLists);
+                mainpref.putListOfLists(key, newLists);
             } else if (entry.getValue() instanceof MapListSetting) {
                 MapListSetting mlSetting = (MapListSetting) entry.getValue();
                 List<Map<String, String>> newMaps = getListOfStructs(mainpref, key, true);
@@ -145,12 +195,12 @@ public final class PreferencesUtils {
                     for (Map<String, String> removeMap : mlSetting.getValue()) {
                         if (map.entrySet().containsAll(removeMap.entrySet())) {
                             // the map contain all mentioned key-value pair, so it should be deleted from "maps"
-                            CustomConfigurator.log("Deleting preferences: deleting map from maps %s: %s\n", key, map);
+                            log("Deleting preferences: deleting map from maps %s: %s\n", key, map);
                             mapIterator.remove();
                         }
                     }
                 }
-                mainpref.putListOfStructs(entry.getKey(), newMaps);
+                mainpref.putListOfMaps(entry.getKey(), newMaps);
             }
         }
     }
@@ -160,7 +210,7 @@ public final class PreferencesUtils {
         for (Entry<String, Setting<?>> entry : allSettings.entrySet()) {
             String key = entry.getKey();
             if (key.matches(pattern)) {
-                CustomConfigurator.log("Deleting preferences: deleting key from preferences: " + key);
+                log("Deleting preferences: deleting key from preferences: " + key);
                 pref.putSetting(key, null);
             }
         }
@@ -169,12 +219,12 @@ public final class PreferencesUtils {
     public static void deletePreferenceKey(String key, Preferences pref) {
         Map<String, Setting<?>> allSettings = pref.getAllSettings();
         if (allSettings.containsKey(key)) {
-            CustomConfigurator.log("Deleting preferences: deleting key from preferences: " + key);
+            log("Deleting preferences: deleting key from preferences: " + key);
             pref.putSetting(key, null);
         }
     }
 
-    private static Collection<String> getCollection(Preferences mainpref, String key, boolean warnUnknownDefault) {
+    private static List<String> getList(Preferences mainpref, String key, boolean warnUnknownDefault) {
         ListSetting existing = Utils.cast(mainpref.settingsMap.get(key), ListSetting.class);
         ListSetting defaults = Utils.cast(mainpref.defaultsMap.get(key), ListSetting.class);
         if (existing == null && defaults == null) {
@@ -187,7 +237,7 @@ public final class PreferencesUtils {
             return defaults.getValue() == null ? null : new ArrayList<>(defaults.getValue());
     }
 
-    private static Collection<Collection<String>> getArray(Preferences mainpref, String key, boolean warnUnknownDefault) {
+    private static List<List<String>> getListOfLists(Preferences mainpref, String key, boolean warnUnknownDefault) {
         ListListSetting existing = Utils.cast(mainpref.settingsMap.get(key), ListListSetting.class);
         ListListSetting defaults = Utils.cast(mainpref.defaultsMap.get(key), ListListSetting.class);
 
@@ -217,7 +267,7 @@ public final class PreferencesUtils {
     }
 
     private static void defaultUnknownWarning(String key) {
-        CustomConfigurator.log("Warning: Unknown default value of %s , skipped\n", key);
+        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/> "+
@@ -284,7 +334,7 @@ public final class PreferencesUtils {
             "    }"+
             "    listmapMap.put(key, l);"+
             "  }  else {" +
-            "   " + CustomConfigurator.class.getName() + ".log('Unknown type:'+val.type+ '- use list, listlist or listmap'); }"+
+            "   " + PreferencesUtils.class.getName() + ".log('Unknown type:'+val.type+ '- use list, listlist or listmap'); }"+
             "  }";
         engine.eval(finish);
 
@@ -427,4 +477,88 @@ public final class PreferencesUtils {
         // Execute conversion script
         engine.eval(init);
     }
+
+    /**
+     * Gets an boolean that may be specialized
+     * @param prefs the preferences
+     * @param key The basic key
+     * @param specName The sub-key to append to the key
+     * @param def The default value
+     * @return The boolean value or the default value if it could not be parsed
+     * @since 12891
+     */
+    public static boolean getBoolean(IPreferences prefs, final String key, final String specName, final boolean def) {
+        synchronized (prefs) {
+            boolean generic = prefs.getBoolean(key, def);
+            String skey = key+'.'+specName;
+            String svalue = prefs.get(skey, null);
+            if (svalue != null)
+                return Boolean.parseBoolean(svalue);
+            else
+                return generic;
+        }
+    }
+
+    /**
+     * Gets an integer that may be specialized
+     * @param prefs the preferences
+     * @param key The basic key
+     * @param specName The sub-key to append to the key
+     * @param def The default value
+     * @return The integer value or the default value if it could not be parsed
+     * @since 12891
+     */
+    public static int getInteger(IPreferences prefs, String key, String specName, int def) {
+        synchronized (prefs) {
+            String v = prefs.get(key+'.'+specName);
+            if (v.isEmpty())
+                v = prefs.get(key, Integer.toString(def));
+            if (v.isEmpty())
+                return def;
+
+            try {
+                return Integer.parseInt(v);
+            } catch (NumberFormatException e) {
+                // fall out
+                Logging.trace(e);
+            }
+            return def;
+        }
+    }
+
+    /**
+     * Removes a value from a given String list
+     * @param prefs the preferences
+     * @param key The preference key the list is stored with
+     * @param value The value that should be removed in the list
+     * @since 12894
+     */
+    public static void removeFromList(IPreferences prefs, String key, String value) {
+        synchronized (prefs) {
+            List<String> a = new ArrayList<>(prefs.getList(key, Collections.<String>emptyList()));
+            a.remove(value);
+            prefs.putList(key, a);
+        }
+    }
+
+    /**
+     * Saves at most {@code maxsize} items of list {@code val}.
+     * @param prefs the preferences
+     * @param key key
+     * @param maxsize max number of items to save
+     * @param val value
+     * @return {@code true}, if something has changed (i.e. value is different than before)
+     * @since 12894
+     */
+    public static boolean putListBounded(IPreferences prefs, String key, int maxsize, List<String> val) {
+        List<String> newCollection = new ArrayList<>(Math.min(maxsize, val.size()));
+        for (String i : val) {
+            if (newCollection.size() >= maxsize) {
+                break;
+            }
+            newCollection.add(i);
+        }
+        return prefs.putList(key, newCollection);
+    }
+
 }
diff --git a/src/org/openstreetmap/josm/data/ProjectionBounds.java b/src/org/openstreetmap/josm/data/ProjectionBounds.java
index 9e3da01..e34a2db 100644
--- a/src/org/openstreetmap/josm/data/ProjectionBounds.java
+++ b/src/org/openstreetmap/josm/data/ProjectionBounds.java
@@ -77,6 +77,23 @@ public class ProjectionBounds {
     }
 
     /**
+     * Construct uninitialized bounds.
+     * <p>
+     * At least one call to {@link #extend(EastNorth)} or {@link #extend(ProjectionBounds)}
+     * is required immediately after construction to initialize the {@code ProjectionBounds}
+     * instance and make it valid.
+     * <p>
+     * Uninitialized {@code ProjectionBounds} must not be passed to other methods
+     * or used in any way other than initializing it.
+     */
+    public ProjectionBounds() {
+        this.minEast = Double.POSITIVE_INFINITY;
+        this.minNorth = Double.POSITIVE_INFINITY;
+        this.maxEast = Double.NEGATIVE_INFINITY;
+        this.maxNorth = Double.NEGATIVE_INFINITY;
+    }
+
+    /**
      * Extends bounds to include point {@code e}.
      * @param e east/north to include
      */
diff --git a/src/org/openstreetmap/josm/data/StructUtils.java b/src/org/openstreetmap/josm/data/StructUtils.java
new file mode 100644
index 0000000..46c7fdf
--- /dev/null
+++ b/src/org/openstreetmap/josm/data/StructUtils.java
@@ -0,0 +1,331 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data;
+
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import javax.json.Json;
+import javax.json.JsonArray;
+import javax.json.JsonArrayBuilder;
+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 org.openstreetmap.josm.spi.preferences.IPreferences;
+import org.openstreetmap.josm.tools.JosmRuntimeException;
+import org.openstreetmap.josm.tools.Logging;
+import org.openstreetmap.josm.tools.MultiMap;
+import org.openstreetmap.josm.tools.Utils;
+
+/**
+ * Utility methods to convert struct-like classes to a string map and back.
+ *
+ * A "struct" is a class that has some fields annotated with {@link StructEntry}.
+ * Those fields will be respected when converting an object to a {@link Map} and
+ * back.
+ * @since 12851
+ */
+public final class StructUtils {
+
+    private StructUtils() {
+        // hide constructor
+    }
+
+    /**
+     * Annotation used for converting objects to String Maps and vice versa.
+     * Indicates that a certain field should be considered in the conversion process. Otherwise it is ignored.
+     *
+     * @see #serializeStruct(java.lang.Object, java.lang.Class)
+     * @see #deserializeStruct(java.util.Map, java.lang.Class)
+     */
+    @Retention(RetentionPolicy.RUNTIME) // keep annotation at runtime
+    public @interface StructEntry { }
+
+    /**
+     * Annotation used for converting objects to String Maps.
+     * Indicates that a certain field should be written to the map, even if the value is the same as the default value.
+     *
+     * @see #serializeStruct(java.lang.Object, java.lang.Class)
+     */
+    @Retention(RetentionPolicy.RUNTIME) // keep annotation at runtime
+    public @interface WriteExplicitly { }
+
+    /**
+     * Get a list of hashes which are represented by a struct-like class.
+     * Possible properties are given by fields of the class klass that have the @pref annotation.
+     * Default constructor is used to initialize the struct objects, properties then override some of these default values.
+     * @param <T> klass type
+     * @param preferences preferences to look up the value
+     * @param key main preference key
+     * @param klass The struct class
+     * @return a list of objects of type T or an empty list if nothing was found
+     */
+    public static <T> List<T> getListOfStructs(IPreferences preferences, String key, Class<T> klass) {
+        return Optional.ofNullable(getListOfStructs(preferences, key, null, klass)).orElseGet(Collections::emptyList);
+    }
+
+    /**
+     * same as above, but returns def if nothing was found
+     * @param <T> klass type
+     * @param preferences preferences to look up the value
+     * @param key main preference key
+     * @param def default value
+     * @param klass The struct class
+     * @return a list of objects of type T or {@code def} if nothing was found
+     */
+    public static <T> List<T> getListOfStructs(IPreferences preferences, String key, Collection<T> def, Class<T> klass) {
+        List<Map<String, String>> prop =
+            preferences.getListOfMaps(key, def == null ? null : serializeListOfStructs(def, klass));
+        if (prop == null)
+            return def == null ? null : new ArrayList<>(def);
+        return prop.stream().map(p -> deserializeStruct(p, klass)).collect(Collectors.toList());
+    }
+
+    /**
+     * Convenience method that saves a MapListSetting which is provided as a collection of objects.
+     *
+     * Each object is converted to a <code>Map<String, String></code> using the fields with {@link StructEntry} annotation.
+     * The field name is the key and the value will be converted to a string.
+     *
+     * Considers only fields that have the {@code @StructEntry} annotation.
+     * In addition it does not write fields with null values. (Thus they are cleared)
+     * Default values are given by the field values after default constructor has been called.
+     * Fields equal to the default value are not written unless the field has the {@link WriteExplicitly} annotation.
+     * @param <T> the class,
+     * @param preferences the preferences to save to
+     * @param key main preference key
+     * @param val the list that is supposed to be saved
+     * @param klass The struct class
+     * @return true if something has changed
+     */
+    public static <T> boolean putListOfStructs(IPreferences preferences, String key, Collection<T> val, Class<T> klass) {
+        return preferences.putListOfMaps(key, serializeListOfStructs(val, klass));
+    }
+
+    private static <T> List<Map<String, String>> serializeListOfStructs(Collection<T> l, Class<T> klass) {
+        if (l == null)
+            return null;
+        List<Map<String, String>> vals = new ArrayList<>();
+        for (T struct : l) {
+            if (struct != null) {
+                vals.add(serializeStruct(struct, klass));
+            }
+        }
+        return vals;
+    }
+
+    /**
+     * Convert an object to a String Map, by using field names and values as map key and value.
+     *
+     * The field value is converted to a String.
+     *
+     * Only fields with annotation {@link StructEntry} are taken into account.
+     *
+     * Fields will not be written to the map if the value is null or unchanged
+     * (compared to an object created with the no-arg-constructor).
+     * The {@link WriteExplicitly} annotation overrides this behavior, i.e. the default value will also be written.
+     *
+     * @param <T> the class of the object <code>struct</code>
+     * @param struct the object to be converted
+     * @param klass the class T
+     * @return the resulting map (same data content as <code>struct</code>)
+     */
+    @SuppressWarnings("deprecation")
+    public static <T> Map<String, String> serializeStruct(T struct, Class<T> klass) {
+        T structPrototype;
+        try {
+            structPrototype = klass.getConstructor().newInstance();
+        } catch (ReflectiveOperationException ex) {
+            throw new IllegalArgumentException(ex);
+        }
+
+        Map<String, String> hash = new LinkedHashMap<>();
+        for (Field f : klass.getDeclaredFields()) {
+            if (f.getAnnotation(Preferences.pref.class) == null && f.getAnnotation(StructEntry.class) == null) {
+                continue;
+            }
+            Utils.setObjectsAccessible(f);
+            try {
+                Object fieldValue = f.get(struct);
+                Object defaultFieldValue = f.get(structPrototype);
+                if (fieldValue != null && (
+                        f.getAnnotation(Preferences.writeExplicitly.class) != null ||
+                        f.getAnnotation(WriteExplicitly.class) != null ||
+                        !Objects.equals(fieldValue, defaultFieldValue))) {
+                    String key = f.getName().replace('_', '-');
+                    if (fieldValue instanceof Map) {
+                        hash.put(key, mapToJson((Map<?, ?>) fieldValue));
+                    } else if (fieldValue instanceof MultiMap) {
+                        hash.put(key, multiMapToJson((MultiMap<?, ?>) fieldValue));
+                    } else {
+                        hash.put(key, fieldValue.toString());
+                    }
+                }
+            } catch (IllegalAccessException ex) {
+                throw new JosmRuntimeException(ex);
+            }
+        }
+        return hash;
+    }
+
+    /**
+     * Converts a String-Map to an object of a certain class, by comparing map keys to field names of the class and assigning
+     * map values to the corresponding fields.
+     *
+     * The map value (a String) is converted to the field type. Supported types are: boolean, Boolean, int, Integer, double,
+     * Double, String, Map<String, String> and Map<String, List<String>>.
+     *
+     * Only fields with annotation {@link StructEntry} are taken into account.
+     * @param <T> the class
+     * @param hash the string map with initial values
+     * @param klass the class T
+     * @return an object of class T, initialized as described above
+     */
+    @SuppressWarnings("deprecation")
+    public static <T> T deserializeStruct(Map<String, String> hash, Class<T> klass) {
+        T struct = null;
+        try {
+            struct = klass.getConstructor().newInstance();
+        } catch (ReflectiveOperationException ex) {
+            throw new IllegalArgumentException(ex);
+        }
+        for (Map.Entry<String, String> keyValue : hash.entrySet()) {
+            Object value;
+            Field f;
+            try {
+                f = klass.getDeclaredField(keyValue.getKey().replace('-', '_'));
+            } catch (NoSuchFieldException ex) {
+                Logging.trace(ex);
+                continue;
+            }
+            if (f.getAnnotation(Preferences.pref.class) == null && f.getAnnotation(StructEntry.class) == null) {
+                continue;
+            }
+            Utils.setObjectsAccessible(f);
+            if (f.getType() == Boolean.class || f.getType() == boolean.class) {
+                value = Boolean.valueOf(keyValue.getValue());
+            } else if (f.getType() == Integer.class || f.getType() == int.class) {
+                try {
+                    value = Integer.valueOf(keyValue.getValue());
+                } catch (NumberFormatException nfe) {
+                    continue;
+                }
+            } else if (f.getType() == Double.class || f.getType() == double.class) {
+                try {
+                    value = Double.valueOf(keyValue.getValue());
+                } catch (NumberFormatException nfe) {
+                    continue;
+                }
+            } else if (f.getType() == String.class) {
+                value = keyValue.getValue();
+            } else if (f.getType().isAssignableFrom(Map.class)) {
+                value = mapFromJson(keyValue.getValue());
+            } else if (f.getType().isAssignableFrom(MultiMap.class)) {
+                value = multiMapFromJson(keyValue.getValue());
+            } else
+                throw new JosmRuntimeException("unsupported preference primitive type");
+
+            try {
+                f.set(struct, value);
+            } catch (IllegalArgumentException ex) {
+                throw new AssertionError(ex);
+            } catch (IllegalAccessException ex) {
+                throw new JosmRuntimeException(ex);
+            }
+        }
+        return struct;
+    }
+
+    @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()) {
+                Map.Entry e = (Map.Entry) o;
+                Object evalue = e.getValue();
+                object.add(e.getKey().toString(), evalue.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 (Map.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;
+    }
+
+    @SuppressWarnings("rawtypes")
+    private static String multiMapToJson(MultiMap map) {
+        StringWriter stringWriter = new StringWriter();
+        try (JsonWriter writer = Json.createWriter(stringWriter)) {
+            JsonObjectBuilder object = Json.createObjectBuilder();
+            for (Object o: map.entrySet()) {
+                Map.Entry e = (Map.Entry) o;
+                Set evalue = (Set) e.getValue();
+                JsonArrayBuilder a = Json.createArrayBuilder();
+                for (Object evo: evalue) {
+                    a.add(evo.toString());
+                }
+                object.add(e.getKey().toString(), a.build());
+            }
+            writer.writeObject(object.build());
+        }
+        return stringWriter.toString();
+    }
+
+    @SuppressWarnings({ "rawtypes", "unchecked" })
+    private static MultiMap multiMapFromJson(String s) {
+        MultiMap ret = null;
+        try (JsonReader reader = Json.createReader(new StringReader(s))) {
+            JsonObject object = reader.readObject();
+            ret = new MultiMap(object.size());
+            for (Map.Entry<String, JsonValue> e: object.entrySet()) {
+                JsonValue value = e.getValue();
+                if (value instanceof JsonArray) {
+                    for (JsonString js: ((JsonArray) value).getValuesAs(JsonString.class)) {
+                        ret.put(e.getKey(), js.getString());
+                    }
+                } else 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;
+    }
+}
diff --git a/src/org/openstreetmap/josm/data/SystemOfMeasurement.java b/src/org/openstreetmap/josm/data/SystemOfMeasurement.java
index 751551c..ca31fcd 100644
--- a/src/org/openstreetmap/josm/data/SystemOfMeasurement.java
+++ b/src/org/openstreetmap/josm/data/SystemOfMeasurement.java
@@ -11,8 +11,8 @@ import java.util.Map;
 import java.util.Optional;
 import java.util.concurrent.CopyOnWriteArrayList;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.preferences.StringProperty;
+import org.openstreetmap.josm.spi.preferences.Config;
 
 /**
  * A system of units used to express length and area measurements.
@@ -229,7 +229,7 @@ public class SystemOfMeasurement {
      */
     public String getDistText(final double dist, final NumberFormat format, final double threshold) {
         double a = dist / aValue;
-        if (a > bValue / aValue && !Main.pref.getBoolean("system_of_measurement.use_only_lower_unit", false))
+        if (a > bValue / aValue && !Config.getPref().getBoolean("system_of_measurement.use_only_lower_unit", false))
             return formatText(dist / bValue, bName, format);
         else if (a < threshold)
             return "< " + formatText(threshold, aName, format);
@@ -257,8 +257,8 @@ public class SystemOfMeasurement {
      */
     public String getAreaText(final double area, final NumberFormat format, final double threshold) {
         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);
+        boolean lowerOnly = Config.getPref().getBoolean("system_of_measurement.use_only_lower_unit", false);
+        boolean customAreaOnly = Config.getPref().getBoolean("system_of_measurement.use_only_custom_area_unit", false);
         if ((!lowerOnly && areaCustomValue > 0 && a > areaCustomValue / (aValue*aValue)
                 && a < (bValue*bValue) / (aValue*aValue)) || customAreaOnly)
             return formatText(area / areaCustomValue, areaCustomName, format);
diff --git a/src/org/openstreetmap/josm/data/UndoRedoHandler.java b/src/org/openstreetmap/josm/data/UndoRedoHandler.java
index 39caaf8..b859062 100644
--- a/src/org/openstreetmap/josm/data/UndoRedoHandler.java
+++ b/src/org/openstreetmap/josm/data/UndoRedoHandler.java
@@ -10,22 +10,15 @@ import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
-import org.openstreetmap.josm.gui.MainApplication;
-import org.openstreetmap.josm.gui.layer.Layer;
-import org.openstreetmap.josm.gui.layer.LayerManager.LayerAddEvent;
-import org.openstreetmap.josm.gui.layer.LayerManager.LayerChangeListener;
-import org.openstreetmap.josm.gui.layer.LayerManager.LayerOrderChangeEvent;
-import org.openstreetmap.josm.gui.layer.LayerManager.LayerRemoveEvent;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer.CommandQueueListener;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 
 /**
- * This is the global undo/redo handler for all {@link OsmDataLayer}s.
+ * This is the global undo/redo handler for all {@link DataSet}s.
  * <p>
- * If you want to change a data layer, you can use {@link #add(Command)} to execute a command on it and make that command undoable.
+ * If you want to change a data set, you can use {@link #add(Command)} to execute a command on it and make that command undoable.
  */
-public class UndoRedoHandler implements LayerChangeListener {
+public class UndoRedoHandler {
 
     /**
      * All commands that were made on the dataset. Don't write from outside!
@@ -44,7 +37,21 @@ public class UndoRedoHandler implements LayerChangeListener {
      * Constructs a new {@code UndoRedoHandler}.
      */
     public UndoRedoHandler() {
-        MainApplication.getLayerManager().addLayerChangeListener(this);
+        // Do nothing
+    }
+
+    /**
+     * A listener that gets notified of command queue (undo/redo) size changes.
+     * @since 12718 (moved from {@code OsmDataLayer}
+     */
+    @FunctionalInterface
+    public interface CommandQueueListener {
+        /**
+         * Notifies the listener about the new queue size
+         * @param queueSize Undo stack size
+         * @param redoSize Redo stack size
+         */
+        void commandChanged(int queueSize, int redoSize);
     }
 
     /**
@@ -67,7 +74,7 @@ public class UndoRedoHandler implements LayerChangeListener {
         // Limit the number of commands in the undo list.
         // Currently you have to undo the commands one by one. If
         // this changes, a higher default value may be reasonable.
-        if (commands.size() > Main.pref.getInteger("undo.max", 1000)) {
+        if (commands.size() > Config.getPref().getInt("undo.max", 1000)) {
             commands.removeFirst();
         }
         redoCommands.clear();
@@ -91,7 +98,6 @@ public class UndoRedoHandler implements LayerChangeListener {
             oldSelection = ds.getSelected();
         }
         addNoRedraw(c);
-        c.invalidateAffectedLayers();
         afterAdd();
 
         // the command may have changed the selection so tell the listeners about the current situation
@@ -124,7 +130,6 @@ public class UndoRedoHandler implements LayerChangeListener {
             for (int i = 1; i <= num; ++i) {
                 final Command c = commands.removeLast();
                 c.undoCommand();
-                c.invalidateAffectedLayers();
                 redoCommands.addFirst(c);
                 if (commands.isEmpty()) {
                     break;
@@ -160,7 +165,6 @@ public class UndoRedoHandler implements LayerChangeListener {
         for (int i = 0; i < num; ++i) {
             final Command c = redoCommands.removeFirst();
             c.executeCommand();
-            c.invalidateAffectedLayers();
             commands.add(c);
             if (redoCommands.isEmpty()) {
                 break;
@@ -196,21 +200,22 @@ public class UndoRedoHandler implements LayerChangeListener {
     }
 
     /**
-     * Resets all commands that affect the given layer.
-     * @param layer The layer that was affected.
+     * Resets all commands that affect the given dataset.
+     * @param dataSet The data set that was affected.
+     * @since 12718
      */
-    public void clean(Layer layer) {
-        if (layer == null)
+    public void clean(DataSet dataSet) {
+        if (dataSet == null)
             return;
         boolean changed = false;
         for (Iterator<Command> it = commands.iterator(); it.hasNext();) {
-            if (it.next().invalidBecauselayerRemoved(layer)) {
+            if (it.next().getAffectedDataSet() == dataSet) {
                 it.remove();
                 changed = true;
             }
         }
         for (Iterator<Command> it = redoCommands.iterator(); it.hasNext();) {
-            if (it.next().invalidBecauselayerRemoved(layer)) {
+            if (it.next().getAffectedDataSet() == dataSet) {
                 it.remove();
                 changed = true;
             }
@@ -220,21 +225,6 @@ public class UndoRedoHandler implements LayerChangeListener {
         }
     }
 
-    @Override
-    public void layerRemoving(LayerRemoveEvent e) {
-        clean(e.getRemovedLayer());
-    }
-
-    @Override
-    public void layerAdded(LayerAddEvent e) {
-        // Do nothing
-    }
-
-    @Override
-    public void layerOrderChanged(LayerOrderChangeEvent e) {
-        // Do nothing
-    }
-
     /**
      * Removes a command queue listener.
      * @param l The command queue listener to remove
diff --git a/src/org/openstreetmap/josm/gui/JosmUserIdentityManager.java b/src/org/openstreetmap/josm/data/UserIdentityManager.java
similarity index 89%
copy from src/org/openstreetmap/josm/gui/JosmUserIdentityManager.java
copy to src/org/openstreetmap/josm/data/UserIdentityManager.java
index 928cddd..92d2839 100644
--- a/src/org/openstreetmap/josm/gui/JosmUserIdentityManager.java
+++ b/src/org/openstreetmap/josm/data/UserIdentityManager.java
@@ -1,29 +1,30 @@
 // License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui;
+package org.openstreetmap.josm.data;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.text.MessageFormat;
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
-import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.data.oauth.OAuthAccessTokenHolder;
 import org.openstreetmap.josm.data.osm.User;
 import org.openstreetmap.josm.data.osm.UserInfo;
-import org.openstreetmap.josm.data.preferences.StringSetting;
+import org.openstreetmap.josm.spi.preferences.StringSetting;
 import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
 import org.openstreetmap.josm.io.OnlineResource;
 import org.openstreetmap.josm.io.OsmApi;
 import org.openstreetmap.josm.io.OsmServerUserInfoReader;
 import org.openstreetmap.josm.io.OsmTransferException;
 import org.openstreetmap.josm.io.auth.CredentialsManager;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.JosmRuntimeException;
 import org.openstreetmap.josm.tools.Logging;
 
 /**
- * JosmUserIdentityManager is a global object which keeps track of what JOSM knows about
+ * UserIdentityManager is a global object which keeps track of what JOSM knows about
  * the identity of the current user.
  *
  * JOSM can be operated anonymously provided the current user never invokes an operation
@@ -39,30 +40,31 @@ import org.openstreetmap.josm.tools.Logging;
  * <tt>GET /api/0.6/user/details</tt> request, submitted with the user name and password
  * of the current user.
  *
- * The global JosmUserIdentityManager listens to {@link PreferenceChangeEvent}s and keeps track
+ * The global UserIdentityManager listens to {@link PreferenceChangeEvent}s and keeps track
  * of what the current JOSM instance knows about the current user. Other subsystems can
- * let the global JosmUserIdentityManager know in case they fully identify the current user, see
+ * let the global UserIdentityManager know in case they fully identify the current user, see
  * {@link #setFullyIdentified}.
  *
- * The information kept by the JosmUserIdentityManager can be used to
+ * The information kept by the UserIdentityManager can be used to
  * <ul>
  *   <li>safely query changesets owned by the current user based on its user id, not on its user name</li>
  *   <li>safely search for objects last touched by the current user based on its user id, not on its user name</li>
  * </ul>
- *
+ * @since 12743 (renamed from {@code org.openstreetmap.josm.gui.JosmUserIdentityManager})
+ * @since 2689 (creation)
  */
-public final class JosmUserIdentityManager implements PreferenceChangedListener {
+public final class UserIdentityManager implements PreferenceChangedListener {
 
-    private static JosmUserIdentityManager instance;
+    private static UserIdentityManager instance;
 
     /**
      * Replies the unique instance of the JOSM user identity manager
      *
      * @return the unique instance of the JOSM user identity manager
      */
-    public static synchronized JosmUserIdentityManager getInstance() {
+    public static synchronized UserIdentityManager getInstance() {
         if (instance == null) {
-            instance = new JosmUserIdentityManager();
+            instance = new UserIdentityManager();
             if (OsmApi.isUsingOAuth() && OAuthAccessTokenHolder.getInstance().containsAccessToken() &&
                     !Main.isOffline(OnlineResource.OSM_API)) {
                 try {
@@ -75,7 +77,7 @@ public final class JosmUserIdentityManager implements PreferenceChangedListener
             } else {
                 instance.initFromPreferences();
             }
-            Main.pref.addPreferenceChangeListener(instance);
+            Config.getPref().addPreferenceChangeListener(instance);
         }
         return instance;
     }
@@ -85,7 +87,7 @@ public final class JosmUserIdentityManager implements PreferenceChangedListener
     private boolean accessTokenKeyChanged;
     private boolean accessTokenSecretChanged;
 
-    private JosmUserIdentityManager() {
+    private UserIdentityManager() {
     }
 
     /**
@@ -164,7 +166,7 @@ public final class JosmUserIdentityManager implements PreferenceChangedListener
     /**
      * Replies the user name of the current JOSM user. null, if {@link #isAnonymous()} is true.
      *
-     * @return  the user name of the current JOSM user
+     * @return the user name of the current JOSM user
      */
     public String getUserName() {
         return userName;
@@ -174,7 +176,7 @@ public final class JosmUserIdentityManager implements PreferenceChangedListener
      * Replies the user id of the current JOSM user. 0, if {@link #isAnonymous()} or
      * {@link #isPartiallyIdentified()} is true.
      *
-     * @return  the user id of the current JOSM user
+     * @return the user id of the current JOSM user
      */
     public int getUserId() {
         if (userInfo == null) return 0;
@@ -247,7 +249,7 @@ public final class JosmUserIdentityManager implements PreferenceChangedListener
 
     /**
      * Replies true if the current user is {@link #isFullyIdentified() fully identified} and the {@link #getUserId() user ids} match,
-     * or if the current user is not {@link #isFullyIdentified() fully identified} and the {@link #userName user names} match.
+     * or if the current user is not {@link #isFullyIdentified() fully identified} and the {@link #getUserName() user names} match.
      *
      * @param user the user to test
      * @return true if given user is the current user
diff --git a/src/org/openstreetmap/josm/data/cache/CacheEntryAttributes.java b/src/org/openstreetmap/josm/data/cache/CacheEntryAttributes.java
index 9df5d12..9b9ec6e 100644
--- a/src/org/openstreetmap/josm/data/cache/CacheEntryAttributes.java
+++ b/src/org/openstreetmap/josm/data/cache/CacheEntryAttributes.java
@@ -88,13 +88,8 @@ public class CacheEntryAttributes extends ElementAttributes {
      * @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(val);
+            return Long.parseLong(attrs.computeIfAbsent(key, k -> "0"));
         } catch (NumberFormatException e) {
             attrs.put(key, "0");
             return 0;
diff --git a/src/org/openstreetmap/josm/data/cache/HostLimitQueue.java b/src/org/openstreetmap/josm/data/cache/HostLimitQueue.java
index 2f86f0d..9f38c1d 100644
--- a/src/org/openstreetmap/josm/data/cache/HostLimitQueue.java
+++ b/src/org/openstreetmap/josm/data/cache/HostLimitQueue.java
@@ -158,11 +158,7 @@ public class HostLimitQueue extends LinkedBlockingDeque<Runnable> {
         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);
-                }
+                limit = hostSemaphores.computeIfAbsent(host, k -> new Semaphore(hostLimit));
             }
         }
         return limit;
diff --git a/src/org/openstreetmap/josm/data/cache/JCSCacheManager.java b/src/org/openstreetmap/josm/data/cache/JCSCacheManager.java
index 2785920..4bcb85d 100644
--- a/src/org/openstreetmap/josm/data/cache/JCSCacheManager.java
+++ b/src/org/openstreetmap/josm/data/cache/JCSCacheManager.java
@@ -26,10 +26,9 @@ import org.apache.commons.jcs.engine.behavior.ICompositeCacheAttributes.DiskUsag
 import org.apache.commons.jcs.engine.control.CompositeCache;
 import org.apache.commons.jcs.engine.control.CompositeCacheManager;
 import org.apache.commons.jcs.utils.serialization.StandardSerializer;
-import org.openstreetmap.gui.jmapviewer.FeatureAdapter;
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.preferences.BooleanProperty;
 import org.openstreetmap.josm.data.preferences.IntegerProperty;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -41,10 +40,8 @@ import org.openstreetmap.josm.tools.Utils;
  * @since 8168
  */
 public final class JCSCacheManager {
-    private static final Logger LOG = FeatureAdapter.getLogger(JCSCacheManager.class.getCanonicalName());
-
     private static volatile CompositeCacheManager cacheManager;
-    private static long maxObjectTTL = -1;
+    private static final long maxObjectTTL = -1;
     private static final String PREFERENCE_PREFIX = "jcs.cache";
     public static final BooleanProperty USE_BLOCK_CACHE = new BooleanProperty(PREFERENCE_PREFIX + ".use_block_cache", true);
 
@@ -57,29 +54,12 @@ public final 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())
-            throw new IOException("Cannot access cache directory");
-
-        File cacheDirLockPath = new File(cacheDir, ".lock");
-        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");
+    private static final Logger jcsLog;
 
+    static {
         // raising logging level gives ~500x performance gain
         // http://westsworld.dk/blog/2008/01/jcs-and-performance/
-        final Logger jcsLog = Logger.getLogger("org.apache.commons.jcs");
+        jcsLog = Logger.getLogger("org.apache.commons.jcs");
         jcsLog.setLevel(Level.INFO);
         jcsLog.setUseParentHandlers(false);
         // we need a separate handler from Main's, as we downgrade LEVEL.INFO to DEBUG level
@@ -112,6 +92,27 @@ public final class JCSCacheManager {
                 // nothing to be done on close
             }
         });
+    }
+
+    private JCSCacheManager() {
+        // Hide implicit public constructor for utility classes
+    }
+
+    @SuppressWarnings("resource")
+    private static void initialize() throws IOException {
+        File cacheDir = new File(Config.getDirs().getCacheDirectory(true), "jcs");
+
+        if (!cacheDir.exists() && !cacheDir.mkdirs())
+            throw new IOException("Cannot access cache directory");
+
+        File cacheDirLockPath = new File(cacheDir, ".lock");
+        if (!cacheDirLockPath.exists() && !cacheDirLockPath.createNewFile()) {
+            Logging.warn("Cannot create cache dir lock file");
+        }
+        cacheDirLock = new FileOutputStream(cacheDirLockPath).getChannel().tryLock();
+
+        if (cacheDirLock == null)
+            Logging.warn("Cannot lock cache directory. Will not use disk cache");
 
         // this could be moved to external file
         Properties props = new Properties();
@@ -229,7 +230,7 @@ public final class JCSCacheManager {
         ret.setDiskLimitType(IDiskCacheAttributes.DiskLimitType.SIZE);
         File path = new File(cachePath);
         if (!path.exists() && !path.mkdirs()) {
-            LOG.log(Level.WARNING, "Failed to create cache path: {0}", cachePath);
+            Logging.warn("Failed to create cache path: {0}", cachePath);
         } else {
             ret.setDiskPath(cachePath);
         }
diff --git a/src/org/openstreetmap/josm/data/cache/JCSCachedTileLoaderJob.java b/src/org/openstreetmap/josm/data/cache/JCSCachedTileLoaderJob.java
index 9023319..db04879 100644
--- a/src/org/openstreetmap/josm/data/cache/JCSCachedTileLoaderJob.java
+++ b/src/org/openstreetmap/josm/data/cache/JCSCachedTileLoaderJob.java
@@ -15,12 +15,9 @@ import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.LinkedBlockingDeque;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
-import java.util.logging.Level;
-import java.util.logging.Logger;
 
 import org.apache.commons.jcs.access.behavior.ICacheAccess;
 import org.apache.commons.jcs.engine.behavior.ICacheElement;
-import org.openstreetmap.gui.jmapviewer.FeatureAdapter;
 import org.openstreetmap.josm.data.cache.ICachedLoaderListener.LoadResult;
 import org.openstreetmap.josm.data.preferences.IntegerProperty;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
@@ -45,7 +42,6 @@ import org.openstreetmap.josm.tools.Utils;
  * @since 8168
  */
 public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements ICachedLoaderJob<K> {
-    private static final Logger LOG = FeatureAdapter.getLogger(JCSCachedTileLoaderJob.class.getCanonicalName());
     protected static final long DEFAULT_EXPIRE_TIME = TimeUnit.DAYS.toMillis(7);
     // Limit for the max-age value send by the server.
     protected static final long EXPIRE_TIME_SERVER_LIMIT = TimeUnit.DAYS.toMillis(28);
@@ -158,7 +154,7 @@ public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements
             deduplicationKey = url.toString();
         }
         if (deduplicationKey == null) {
-            LOG.log(Level.WARNING, "No url returned for: {0}, skipping", getCacheKey());
+            Logging.warn("No url returned for: {0}, skipping", getCacheKey());
             throw new IllegalArgumentException("No url returned");
         }
         synchronized (inProgress) {
@@ -173,7 +169,7 @@ public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements
 
         if (first || force) {
             // submit all jobs to separate thread, so calling thread is not blocked with IO when loading from disk
-            LOG.log(Level.FINE, "JCS - Submitting job for execution for url: {0}", getUrlNoException());
+            Logging.debug("JCS - Submitting job for execution for url: {0}", getUrlNoException());
             downloadJobExecutor.execute(this);
         }
     }
@@ -225,13 +221,13 @@ public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements
         final Thread currentThread = Thread.currentThread();
         final String oldName = currentThread.getName();
         currentThread.setName("JCS Downloading: " + getUrlNoException());
-        LOG.log(Level.FINE, "JCS - starting fetch of url: {0} ", getUrlNoException());
+        Logging.debug("JCS - starting fetch of url: {0} ", 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());
+                Logging.debug("JCS - Returning object from cache: {0}", getCacheKey());
                 finishLoading(LoadResult.SUCCESS);
                 return;
             }
@@ -244,7 +240,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}", getUrlNoException());
+                    Logging.debug("JCS - found stale object in cache: {0}", getUrlNoException());
                 } else {
                     // failed completely
                     finishLoading(LoadResult.FAILURE);
@@ -267,7 +263,7 @@ public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements
             }
         }
         if (listeners == null) {
-            LOG.log(Level.WARNING, "Listener not found for URL: {0}. Listener not notified!", getUrlNoException());
+            Logging.warn("Listener not found for URL: {0}. Listener not notified!", getUrlNoException());
             return;
         }
         for (ICachedLoaderListener l: listeners) {
@@ -284,17 +280,17 @@ 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}",
+                Logging.debug("JCS - Object {0} has expired -> valid to {1}, now is: {2}",
                         new Object[]{getUrlNoException(), Long.toString(expires), Long.toString(now)});
                 return false;
             }
         } else if (attributes.getLastModification() > 0 &&
                 now - attributes.getLastModification() > DEFAULT_EXPIRE_TIME) {
             // check by file modification date
-            LOG.log(Level.FINE, "JCS - Object has expired, maximum file age reached {0}", getUrlNoException());
+            Logging.debug("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());
+            Logging.debug("JCS - Object has expired, maximum time since object creation reached {0}", getUrlNoException());
             return false;
         }
         return true;
@@ -313,11 +309,11 @@ public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements
             if (isObjectLoadable() &&
                     Boolean.TRUE.equals(useHead.get(getServerKey())) &&
                     isCacheValidUsingHead()) {
-                LOG.log(Level.FINE, "JCS - cache entry verified using HEAD request: {0}", getUrl());
+                Logging.debug("JCS - cache entry verified using HEAD request: {0}", getUrl());
                 return true;
             }
 
-            LOG.log(Level.FINE, "JCS - starting HttpClient GET request for URL: {0}", getUrl());
+            Logging.debug("JCS - starting HttpClient GET request for URL: {0}", getUrl());
             final HttpClient request = getRequest("GET", true);
 
             if (isObjectLoadable() &&
@@ -333,7 +329,7 @@ public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements
             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 - If-Modified-Since/ETag test: local version is up to date: {0}", getUrl());
+                Logging.debug("JCS - If-Modified-Since/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 response code
                     && (
@@ -343,7 +339,7 @@ public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements
                 // 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-Modified-Since or If-None-Match headers",
+                Logging.info("JCS - Host: {0} found not to return 304 codes for If-Modified-Since or If-None-Match headers",
                         serverKey);
                 useHead.put(serverKey, Boolean.TRUE);
             }
@@ -369,21 +365,21 @@ public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements
                     // 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}",
+                    Logging.debug("JCS - downloaded key: {0}, length: {1}, url: {2}",
                             new Object[] {getCacheKey(), raw.length, getUrl()});
                     return true;
                 } else if (cacheAsEmpty()) {
                     cacheData = createCacheEntry(new byte[]{});
                     cache.put(getCacheKey(), cacheData, attributes);
-                    LOG.log(Level.FINE, "JCS - Caching empty object {0}", getUrl());
+                    Logging.debug("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");
+                    Logging.debug("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}", getUrlNoException());
+            Logging.debug("JCS - Caching empty object as server returned 404 for: {0}", getUrlNoException());
             attributes.setResponseCode(404);
             attributes.setError(e);
             boolean doCache = isResponseLoadable(null, 404, null) || cacheAsEmpty();
@@ -393,7 +389,7 @@ public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements
             }
             return doCache;
         } catch (IOException e) {
-            LOG.log(Level.FINE, "JCS - IOExecption during communication with server for: {0}", getUrlNoException());
+            Logging.debug("JCS - IOExecption during communication with server for: {0}", getUrlNoException());
             if (isObjectLoadable()) {
                 return true;
             } else {
@@ -404,11 +400,10 @@ public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements
 
         } catch (InterruptedException e) {
             attributes.setError(e);
-            LOG.log(Level.WARNING, "JCS - Exception during download {0}", getUrlNoException());
-            Logging.warn(e);
+            Logging.logWithStackTrace(Logging.LEVEL_WARN, e, "JCS - Exception during download {0}", getUrlNoException());
             Thread.currentThread().interrupt();
         }
-        LOG.log(Level.WARNING, "JCS - Silent failure during download: {0}", getUrlNoException());
+        Logging.warn("JCS - Silent failure during download: {0}", getUrlNoException());
         return false;
     }
 
diff --git a/src/org/openstreetmap/josm/data/coor/Coordinate.java b/src/org/openstreetmap/josm/data/coor/Coordinate.java
index 7c7b8cc..7d61edb 100644
--- a/src/org/openstreetmap/josm/data/coor/Coordinate.java
+++ b/src/org/openstreetmap/josm/data/coor/Coordinate.java
@@ -98,7 +98,9 @@ abstract class Coordinate implements Serializable {
      * @param r size
      * @return BBox around this coordinate
      * @since 6203
+     * @deprecated no longer supported
      */
+    @Deprecated
     public BBox toBBox(final double r) {
         return new BBox(x - r, y - r, x + r, y + r);
     }
diff --git a/src/org/openstreetmap/josm/data/coor/CoordinateFormat.java b/src/org/openstreetmap/josm/data/coor/CoordinateFormat.java
index 3f12879..78c9387 100644
--- a/src/org/openstreetmap/josm/data/coor/CoordinateFormat.java
+++ b/src/org/openstreetmap/josm/data/coor/CoordinateFormat.java
@@ -3,36 +3,47 @@ package org.openstreetmap.josm.data.coor;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
 
+import org.openstreetmap.josm.data.coor.conversion.CoordinateFormatManager;
+import org.openstreetmap.josm.data.coor.conversion.DMSCoordinateFormat;
+import org.openstreetmap.josm.data.coor.conversion.DecimalDegreesCoordinateFormat;
+import org.openstreetmap.josm.data.coor.conversion.ICoordinateFormat;
+import org.openstreetmap.josm.data.coor.conversion.NauticalCoordinateFormat;
+import org.openstreetmap.josm.data.coor.conversion.ProjectedCoordinateFormat;
+
 /**
  * An enumeration  of coordinate formats
  * @since 1990
+ * @deprecated use {@link CoordinateFormatManager}
  */
+ at Deprecated
 public enum CoordinateFormat {
 
     /**
      * the decimal format 999.999
      */
-    DECIMAL_DEGREES(tr("Decimal Degrees")),
+    DECIMAL_DEGREES(tr("Decimal Degrees"), DecimalDegreesCoordinateFormat.INSTANCE),
 
     /**
      * the degrees/minutes/seconds format 9 deg 99 min 99 sec
      */
-    DEGREES_MINUTES_SECONDS(tr("deg\u00B0 min'' sec\"")),
+    DEGREES_MINUTES_SECONDS(tr("deg\u00B0 min'' sec\""), DMSCoordinateFormat.INSTANCE),
 
     /**
      * the nautical format
      */
-    NAUTICAL(tr("deg\u00B0 min'' (Nautical)")),
+    NAUTICAL(tr("deg\u00B0 min'' (Nautical)"), NauticalCoordinateFormat.INSTANCE),
 
     /**
      * coordinates East/North
      */
-    EAST_NORTH(tr("Projected Coordinates"));
+    EAST_NORTH(tr("Projected Coordinates"), ProjectedCoordinateFormat.INSTANCE);
 
     private final String displayName;
+    private final ICoordinateFormat migration;
 
-    CoordinateFormat(String displayName) {
+    CoordinateFormat(String displayName, ICoordinateFormat migration) {
         this.displayName = displayName;
+        this.migration = migration;
     }
 
     /**
@@ -44,6 +55,16 @@ public enum CoordinateFormat {
         return displayName;
     }
 
+    /**
+     * Returns the corresponding {@link ICoordinateFormat} instance for
+     * migration.
+     * @return the corresponding {@link ICoordinateFormat} instance for
+     * migration
+     */
+    public ICoordinateFormat getICoordinateFormat() {
+        return migration;
+    }
+
     @Override
     public String toString() {
         return getDisplayName();
diff --git a/src/org/openstreetmap/josm/data/coor/ILatLon.java b/src/org/openstreetmap/josm/data/coor/ILatLon.java
index 47cdec0..12b8ce8 100644
--- a/src/org/openstreetmap/josm/data/coor/ILatLon.java
+++ b/src/org/openstreetmap/josm/data/coor/ILatLon.java
@@ -40,10 +40,12 @@ public interface ILatLon {
     /**
      * <p>Replies the projected east/north coordinates.</p>
      *
-     * <p>Uses the {@link Main#getProjection() global projection} to project the lan/lon-coordinates.</p>
+     * <p>Uses the {@link Main#getProjection() global projection} to project the lat/lon-coordinates.</p>
      *
      * @return the east north coordinates or {@code null} if #is
+     * @deprecated use {@link #getEastNorth(org.openstreetmap.josm.data.projection.Projecting)}
      */
+    @Deprecated
     default EastNorth getEastNorth() {
         return getEastNorth(Main.getProjection());
     }
diff --git a/src/org/openstreetmap/josm/data/coor/LatLon.java b/src/org/openstreetmap/josm/data/coor/LatLon.java
index d81cfd8..2fff5d3 100644
--- a/src/org/openstreetmap/josm/data/coor/LatLon.java
+++ b/src/org/openstreetmap/josm/data/coor/LatLon.java
@@ -14,16 +14,16 @@ import static org.openstreetmap.josm.tools.Utils.toRadians;
 import java.awt.geom.Area;
 import java.text.DecimalFormat;
 import java.text.NumberFormat;
-import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.List;
 import java.util.Locale;
 import java.util.Objects;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.coor.conversion.DMSCoordinateFormat;
+import org.openstreetmap.josm.data.coor.conversion.DecimalDegreesCoordinateFormat;
+import org.openstreetmap.josm.data.coor.conversion.LatLonParser;
+import org.openstreetmap.josm.data.coor.conversion.NauticalCoordinateFormat;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -68,11 +68,6 @@ public class LatLon extends Coordinate implements ILatLon {
     /** South pole. */
     public static final LatLon SOUTH_POLE = new LatLon(-90, 0);
 
-    private static DecimalFormat cDmsMinuteFormatter = new DecimalFormat("00");
-    private static DecimalFormat cDmsSecondFormatter = new DecimalFormat(
-            Main.pref == null ? "00.0" : Main.pref.get("latlon.dms.decimal-format", "00.0"));
-    private static DecimalFormat cDmMinuteFormatter = new DecimalFormat(
-            Main.pref == null ? "00.000" : Main.pref.get("latlon.dm.decimal-format", "00.000"));
     /**
      * The normal number format for server precision coordinates
      */
@@ -90,43 +85,31 @@ public class LatLon extends Coordinate implements ILatLon {
         cDdHighPecisionFormatter.applyPattern("###0.0##########");
     }
 
-    private static final String cDms60 = cDmsSecondFormatter.format(60.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);
-
-    /** Character denoting South, as string */
+    /**
+     * Character denoting South, as string.
+     * @deprecated use {@link LatLonParser#SOUTH}
+     */
+    @Deprecated
     public static final String SOUTH = trc("compass", "S");
-    /** Character denoting North, as string */
+    /**
+     * Character denoting North, as string.
+     * @deprecated use {@link LatLonParser#NORTH}
+     */
+    @Deprecated
     public static final String NORTH = trc("compass", "N");
-    /** Character denoting West, as string */
+    /**
+     * Character denoting West, as string.
+     * @deprecated use {@link LatLonParser#WEST}
+     */
+    @Deprecated
     public static final String WEST = trc("compass", "W");
-    /** Character denoting East, as string */
+    /**
+     * Character denoting East, as string.
+     * @deprecated use {@link LatLonParser#EAST}
+     */
+    @Deprecated
     public static final String EAST = trc("compass", "E");
 
-    private static final char N_TR = NORTH.charAt(0);
-    private static final char S_TR = SOUTH.charAt(0);
-    private static final char E_TR = EAST.charAt(0);
-    private static final char W_TR = WEST.charAt(0);
-
-    private static final String DEG = "\u00B0";
-    private static final String MIN = "\u2032";
-    private static final String SEC = "\u2033";
-
-    private static final Pattern P = Pattern.compile(
-            "([+|-]?\\d+[.,]\\d+)|"             // (1)
-            + "([+|-]?\\d+)|"                   // (2)
-            + "("+DEG+"|o|deg)|"                // (3)
-            + "('|"+MIN+"|min)|"                // (4)
-            + "(\"|"+SEC+"|sec)|"               // (5)
-            + "(,|;)|"                          // (6)
-            + "([NSEW"+N_TR+S_TR+E_TR+W_TR+"])|"// (7)
-            + "\\s+|"
-            + "(.+)", Pattern.CASE_INSENSITIVE);
-
-    private static final Pattern P_XML = Pattern.compile(
-            "lat=[\"']([+|-]?\\d+[.,]\\d+)[\"']\\s+lon=[\"']([+|-]?\\d+[.,]\\d+)[\"']");
-
     /**
      * Replies true if lat is in the range [-90,90]
      *
@@ -216,29 +199,11 @@ public class LatLon extends Coordinate implements ILatLon {
      * @param pCoordinate The coordinate to convert
      * @return The coordinate in degrees/minutes/seconds format
      * @since 12561
+     * @deprecated use {@link DMSCoordinateFormat#degreesMinutesSeconds(double)}
      */
+    @Deprecated
     public static String degreesMinutesSeconds(double pCoordinate) {
-
-        double tAbsCoord = Math.abs(pCoordinate);
-        int tDegree = (int) tAbsCoord;
-        double tTmpMinutes = (tAbsCoord - tDegree) * 60;
-        int tMinutes = (int) tTmpMinutes;
-        double tSeconds = (tTmpMinutes - tMinutes) * 60;
-
-        String sDegrees = Integer.toString(tDegree);
-        String sMinutes = cDmsMinuteFormatter.format(tMinutes);
-        String sSeconds = cDmsSecondFormatter.format(tSeconds);
-
-        if (cDms60.equals(sSeconds)) {
-            sSeconds = cDms00;
-            sMinutes = cDmsMinuteFormatter.format(tMinutes+1L);
-        }
-        if ("60".equals(sMinutes)) {
-            sMinutes = "00";
-            sDegrees = Integer.toString(tDegree+1);
-        }
-
-        return sDegrees + '\u00B0' + sMinutes + '\'' + sSeconds + '\"';
+        return DMSCoordinateFormat.degreesMinutesSeconds(pCoordinate);
     }
 
     /**
@@ -246,22 +211,11 @@ public class LatLon extends Coordinate implements ILatLon {
      * @param pCoordinate The coordinate to convert
      * @return The coordinate in degrees/minutes format
      * @since 12537
+     * @deprecated use {@link NauticalCoordinateFormat#degreesMinutes(double)}
      */
+    @Deprecated
     public static String degreesMinutes(double pCoordinate) {
-
-        double tAbsCoord = Math.abs(pCoordinate);
-        int tDegree = (int) tAbsCoord;
-        double tMinutes = (tAbsCoord - tDegree) * 60;
-
-        String sDegrees = Integer.toString(tDegree);
-        String sMinutes = cDmMinuteFormatter.format(tMinutes);
-
-        if (sMinutes.equals(cDm60)) {
-            sMinutes = cDm00;
-            sDegrees = Integer.toString(tDegree+1);
-        }
-
-        return sDegrees + '\u00B0' + sMinutes + '\'';
+        return NauticalCoordinateFormat.degreesMinutes(pCoordinate);
     }
 
     /**
@@ -301,15 +255,11 @@ public class LatLon extends Coordinate implements ILatLon {
      * Formats the latitude part according to the given format
      * @param d the coordinate format to use
      * @return the formatted latitude
+     * @deprecated use {@link org.openstreetmap.josm.data.coor.conversion.ICoordinateFormat#latToString(ILatLon)}
      */
+    @Deprecated
     public String latToString(CoordinateFormat d) {
-        switch(d) {
-        case DECIMAL_DEGREES: return cDdFormatter.format(y);
-        case DEGREES_MINUTES_SECONDS: return degreesMinutesSeconds(y) + ((y < 0) ? SOUTH : NORTH);
-        case NAUTICAL: return degreesMinutes(y) + ((y < 0) ? SOUTH : NORTH);
-        case EAST_NORTH: return cDdFormatter.format(this.getEastNorth().north());
-        default: return "ERR";
-        }
+        return d.getICoordinateFormat().latToString(this);
     }
 
     @Override
@@ -321,15 +271,11 @@ public class LatLon extends Coordinate implements ILatLon {
      * Formats the longitude part according to the given format
      * @param d the coordinate format to use
      * @return the formatted longitude
+     * @deprecated use {@link org.openstreetmap.josm.data.coor.conversion.ICoordinateFormat#lonToString(ILatLon)}
      */
+    @Deprecated
     public String lonToString(CoordinateFormat d) {
-        switch(d) {
-        case DECIMAL_DEGREES: return cDdFormatter.format(x);
-        case DEGREES_MINUTES_SECONDS: return degreesMinutesSeconds(x) + ((x < 0) ? WEST : EAST);
-        case NAUTICAL: return degreesMinutes(x) + ((x < 0) ? WEST : EAST);
-        case EAST_NORTH: return cDdFormatter.format(this.getEastNorth().east());
-        default: return "ERR";
-        }
+        return d.getICoordinateFormat().lonToString(this);
     }
 
     /**
@@ -465,11 +411,13 @@ public class LatLon extends Coordinate implements ILatLon {
      * Returns this lat/lon pair in human-readable format separated by {@code separator}.
      * @param separator values separator
      * @return String in the format {@code "1.23456[separator]2.34567"}
+     * @deprecated method removed without replacement
      */
+    @Deprecated
     public String toStringCSV(String separator) {
         return Utils.join(separator, Arrays.asList(
-                latToString(CoordinateFormat.DECIMAL_DEGREES),
-                lonToString(CoordinateFormat.DECIMAL_DEGREES)
+                DecimalDegreesCoordinateFormat.INSTANCE.latToString(this),
+                DecimalDegreesCoordinateFormat.INSTANCE.lonToString(this)
         ));
     }
 
@@ -558,139 +506,15 @@ public class LatLon extends Coordinate implements ILatLon {
                Double.compare(that.y, y) == 0;
     }
 
-    private static class LatLonHolder {
-        private double lat = Double.NaN;
-        private double lon = Double.NaN;
-    }
-
-    private static void setLatLonObj(final LatLonHolder latLon,
-            final Object coord1deg, final Object coord1min, final Object coord1sec, final Object card1,
-            final Object coord2deg, final Object coord2min, final Object coord2sec, final Object card2) {
-
-        setLatLon(latLon,
-                (Double) coord1deg, (Double) coord1min, (Double) coord1sec, (String) card1,
-                (Double) coord2deg, (Double) coord2min, (Double) coord2sec, (String) card2);
-    }
-
-    private static void setLatLon(final LatLonHolder latLon,
-            final double coord1deg, final double coord1min, final double coord1sec, final String card1,
-            final double coord2deg, final double coord2min, final double coord2sec, final String card2) {
-
-        setLatLon(latLon, coord1deg, coord1min, coord1sec, card1);
-        setLatLon(latLon, coord2deg, coord2min, coord2sec, card2);
-        if (Double.isNaN(latLon.lat) || Double.isNaN(latLon.lon)) {
-            throw new IllegalArgumentException("invalid lat/lon parameters");
-        }
-    }
-
-    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");
-        }
-
-        double coord = (coordDeg < 0 ? -1 : 1) * (Math.abs(coordDeg) + coordMin / 60 + coordSec / 3600);
-        coord = "N".equals(card) || "E".equals(card) ? coord : -coord;
-        if ("N".equals(card) || "S".equals(card)) {
-            latLon.lat = coord;
-        } else {
-            latLon.lon = coord;
-        }
-    }
-
     /**
      * Parses the given string as lat/lon.
      * @param coord String to parse
      * @return parsed lat/lon
      * @since 11045
+     * @deprecated use {@link LatLonParser#parse(java.lang.String)}
      */
+    @Deprecated
     public static LatLon parse(String coord) {
-        final LatLonHolder latLon = new LatLonHolder();
-        final Matcher mXml = P_XML.matcher(coord);
-        if (mXml.matches()) {
-            setLatLonObj(latLon,
-                    Double.valueOf(mXml.group(1).replace(',', '.')), 0.0, 0.0, "N",
-                    Double.valueOf(mXml.group(2).replace(',', '.')), 0.0, 0.0, "E");
-        } else {
-            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".equalsIgnoreCase(c) || "S".equalsIgnoreCase(c) || "E".equalsIgnoreCase(c) || "W".equalsIgnoreCase(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], 0.0, 0.0, "N",
-                        params[1], 0.0, 0.0, "E");
-            } else if (pattern.matches("xRo?,?xRo?")) {
-                setLatLonObj(latLon,
-                        params[1], 0.0, 0.0, params[0],
-                        params[3], 0.0, 0.0, params[2]);
-            } else if (pattern.matches("Ro?x,?Ro?x")) {
-                setLatLonObj(latLon,
-                        params[0], 0.0, 0.0, params[1],
-                        params[2], 0.0, 0.0, params[3]);
-            } else if (pattern.matches("Zo[RZ]'?,?Zo[RZ]'?|Z[RZ],?Z[RZ]")) {
-                setLatLonObj(latLon,
-                        params[0], params[1], 0.0, "N",
-                        params[2], params[3], 0.0, "E");
-            } else if (pattern.matches("xZo[RZ]'?,?xZo[RZ]'?|xZo?[RZ],?xZo?[RZ]")) {
-                setLatLonObj(latLon,
-                        params[1], params[2], 0.0, params[0],
-                        params[4], params[5], 0.0, params[3]);
-            } else if (pattern.matches("Zo[RZ]'?x,?Zo[RZ]'?x|Zo?[RZ]x,?Zo?[RZ]x")) {
-                setLatLonObj(latLon,
-                        params[0], params[1], 0.0, params[2],
-                        params[3], params[4], 0.0, 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);
+        return LatLonParser.parse(coord);
     }
 }
diff --git a/src/org/openstreetmap/josm/data/coor/conversion/AbstractCoordinateFormat.java b/src/org/openstreetmap/josm/data/coor/conversion/AbstractCoordinateFormat.java
new file mode 100644
index 0000000..b6e3956
--- /dev/null
+++ b/src/org/openstreetmap/josm/data/coor/conversion/AbstractCoordinateFormat.java
@@ -0,0 +1,58 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.coor.conversion;
+
+import static org.openstreetmap.josm.tools.I18n.trc;
+
+import java.text.DecimalFormat;
+import java.text.NumberFormat;
+import java.util.Locale;
+
+/**
+ * Abstract base class for {@link ICoordinateFormat} implementations.
+ * @since 12735
+ */
+public abstract class AbstractCoordinateFormat implements ICoordinateFormat {
+
+    protected final String id;
+    protected final String displayName;
+
+    /**
+     * The normal number format for server precision coordinates
+     */
+    protected static final DecimalFormat cDdFormatter;
+    static {
+        // Don't use the localized decimal separator. This way we can present
+        // a comma separated list of coordinates.
+        cDdFormatter = (DecimalFormat) NumberFormat.getInstance(Locale.UK);
+        cDdFormatter.applyPattern("###0.0######");
+    }
+
+    /** Character denoting South, as string */
+    protected static final String SOUTH = trc("compass", "S");
+    /** Character denoting North, as string */
+    protected static final String NORTH = trc("compass", "N");
+    /** Character denoting West, as string */
+    protected static final String WEST = trc("compass", "W");
+    /** Character denoting East, as string */
+    protected static final String EAST = trc("compass", "E");
+
+    protected AbstractCoordinateFormat(String id, String displayName) {
+        this.id = id;
+        this.displayName = displayName;
+    }
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public String getDisplayName() {
+        return displayName;
+    }
+
+    @Override
+    public String toString() {
+        return getDisplayName();
+    }
+}
diff --git a/src/org/openstreetmap/josm/data/coor/conversion/CoordinateFormatManager.java b/src/org/openstreetmap/josm/data/coor/conversion/CoordinateFormatManager.java
new file mode 100644
index 0000000..fe76e15
--- /dev/null
+++ b/src/org/openstreetmap/josm/data/coor/conversion/CoordinateFormatManager.java
@@ -0,0 +1,80 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.coor.conversion;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.openstreetmap.josm.tools.CheckParameterUtil;
+
+/**
+ * Class that manages the available coordinate formats.
+ * @since 12735
+ */
+public final class CoordinateFormatManager {
+
+    private static final List<ICoordinateFormat> formats = new ArrayList<>();
+
+    static {
+        registerCoordinateFormat(DecimalDegreesCoordinateFormat.INSTANCE);
+        registerCoordinateFormat(DMSCoordinateFormat.INSTANCE);
+        registerCoordinateFormat(NauticalCoordinateFormat.INSTANCE);
+        registerCoordinateFormat(ProjectedCoordinateFormat.INSTANCE);
+    }
+
+    private CoordinateFormatManager() {
+        // hide constructor
+    }
+
+    /**
+     * Register a coordinate format.
+     * <p>
+     * It will be available as a choice in the preferences.
+     * @param format the coordinate format
+     */
+    public static void registerCoordinateFormat(ICoordinateFormat format) {
+        formats.add(format);
+    }
+
+    /**
+     * Get the list of all registered coordinate formats.
+     * @return the list of all registered coordinate formats
+     */
+    public static List<ICoordinateFormat> getCoordinateFormats() {
+        return Collections.unmodifiableList(formats);
+    }
+
+    private static volatile ICoordinateFormat defaultCoordinateFormat = DecimalDegreesCoordinateFormat.INSTANCE;
+
+    /**
+     * Replies the default coordinate format to be use
+     *
+     * @return the default coordinate format
+     */
+    public static ICoordinateFormat getDefaultFormat() {
+        return defaultCoordinateFormat;
+    }
+
+    /**
+     * Sets the default coordinate format
+     *
+     * @param format the default coordinate format
+     */
+    public static void setCoordinateFormat(ICoordinateFormat format) {
+        if (format != null) {
+            defaultCoordinateFormat = format;
+        }
+    }
+
+    /**
+     * Get registered coordinate format by id
+     *
+     * @param id id of the coordinate format to get
+     * @return the registered {@link ICoordinateFormat} with given id, or <code>null</code>
+     * if no match is found
+     */
+    public static ICoordinateFormat getCoordinateFormat(String id) {
+        CheckParameterUtil.ensureParameterNotNull(id, "id");
+        return formats.stream().filter(format -> id.equals(format.getId())).findFirst().orElse(null);
+    }
+}
diff --git a/src/org/openstreetmap/josm/data/coor/conversion/DMSCoordinateFormat.java b/src/org/openstreetmap/josm/data/coor/conversion/DMSCoordinateFormat.java
new file mode 100644
index 0000000..6a9acf6
--- /dev/null
+++ b/src/org/openstreetmap/josm/data/coor/conversion/DMSCoordinateFormat.java
@@ -0,0 +1,72 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.coor.conversion;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.text.DecimalFormat;
+
+import org.openstreetmap.josm.data.coor.ILatLon;
+import org.openstreetmap.josm.spi.preferences.Config;
+
+/**
+ * Coordinate format that converts a coordinate to degrees, minutes and seconds.
+ * @since 12735
+ */
+public class DMSCoordinateFormat extends AbstractCoordinateFormat {
+
+    private static final DecimalFormat DMS_MINUTE_FORMATTER = new DecimalFormat("00");
+    private static final DecimalFormat DMS_SECOND_FORMATTER = new DecimalFormat(
+            Config.getPref() == null ? "00.0" : Config.getPref().get("latlon.dms.decimal-format", "00.0"));
+    private static final String DMS60 = DMS_SECOND_FORMATTER.format(60.0);
+    private static final String DMS00 = DMS_SECOND_FORMATTER.format(0.0);
+
+    /**
+     * The unique instance.
+     */
+    public static final DMSCoordinateFormat INSTANCE = new DMSCoordinateFormat();
+
+    protected DMSCoordinateFormat() {
+        super("DEGREES_MINUTES_SECONDS", tr("deg\u00B0 min'' sec\""));
+    }
+
+    @Override
+    public String latToString(ILatLon ll) {
+        return degreesMinutesSeconds(ll.lat()) + ((ll.lat() < 0) ? SOUTH : NORTH);
+    }
+
+    @Override
+    public String lonToString(ILatLon ll) {
+       return degreesMinutesSeconds(ll.lon()) + ((ll.lon() < 0) ? WEST : EAST);
+    }
+
+    /**
+     * Replies the coordinate in degrees/minutes/seconds format
+     * @param pCoordinate The coordinate to convert
+     * @return The coordinate in degrees/minutes/seconds format
+     * @since 12561
+     */
+    public static String degreesMinutesSeconds(double pCoordinate) {
+
+        double tAbsCoord = Math.abs(pCoordinate);
+        int tDegree = (int) tAbsCoord;
+        double tTmpMinutes = (tAbsCoord - tDegree) * 60;
+        int tMinutes = (int) tTmpMinutes;
+        double tSeconds = (tTmpMinutes - tMinutes) * 60;
+
+        String sDegrees = Integer.toString(tDegree);
+        String sMinutes = DMS_MINUTE_FORMATTER.format(tMinutes);
+        String sSeconds = DMS_SECOND_FORMATTER.format(tSeconds);
+
+        if (DMS60.equals(sSeconds)) {
+            sSeconds = DMS00;
+            sMinutes = DMS_MINUTE_FORMATTER.format(tMinutes+1L);
+        }
+        if ("60".equals(sMinutes)) {
+            sMinutes = "00";
+            sDegrees = Integer.toString(tDegree+1);
+        }
+
+        return sDegrees + '\u00B0' + sMinutes + '\'' + sSeconds + '\"';
+    }
+
+}
diff --git a/src/org/openstreetmap/josm/data/coor/conversion/DecimalDegreesCoordinateFormat.java b/src/org/openstreetmap/josm/data/coor/conversion/DecimalDegreesCoordinateFormat.java
new file mode 100644
index 0000000..f399d84
--- /dev/null
+++ b/src/org/openstreetmap/josm/data/coor/conversion/DecimalDegreesCoordinateFormat.java
@@ -0,0 +1,32 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.coor.conversion;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import org.openstreetmap.josm.data.coor.ILatLon;
+
+/**
+ * Coordinate format that converts coordinates to simple floating point decimal format.
+ * @since 12735
+ */
+public class DecimalDegreesCoordinateFormat extends AbstractCoordinateFormat {
+
+    /**
+     * The unique instance.
+     */
+    public static final DecimalDegreesCoordinateFormat INSTANCE = new DecimalDegreesCoordinateFormat();
+
+    protected DecimalDegreesCoordinateFormat() {
+        super("DECIMAL_DEGREES", tr("Decimal Degrees"));
+    }
+
+    @Override
+    public String latToString(ILatLon ll) {
+        return cDdFormatter.format(ll.lat());
+    }
+
+    @Override
+    public String lonToString(ILatLon ll) {
+        return cDdFormatter.format(ll.lon());
+    }
+}
diff --git a/src/org/openstreetmap/josm/data/coor/conversion/ICoordinateFormat.java b/src/org/openstreetmap/josm/data/coor/conversion/ICoordinateFormat.java
new file mode 100644
index 0000000..02a67d6
--- /dev/null
+++ b/src/org/openstreetmap/josm/data/coor/conversion/ICoordinateFormat.java
@@ -0,0 +1,37 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.coor.conversion;
+
+import org.openstreetmap.josm.data.coor.ILatLon;
+
+/**
+ * A class that converts lat/lon coordinates to string.
+ *
+ * @since 12735
+ */
+public interface ICoordinateFormat {
+    /**
+     * Get unique id for this coordinate format.
+     * @return unique id
+     */
+    String getId();
+
+    /**
+     * Get display name for this coordinate format
+     * @return display name (localized)
+     */
+    String getDisplayName();
+
+    /**
+     * Convert latitude to string.
+     * @param ll the coordinate
+     * @return formatted latitude
+     */
+    String latToString(ILatLon ll);
+
+    /**
+     * Convert longitude to string.
+     * @param ll the coordinate
+     * @return formatted longitude
+     */
+    String lonToString(ILatLon ll);
+}
diff --git a/src/org/openstreetmap/josm/data/coor/conversion/LatLonParser.java b/src/org/openstreetmap/josm/data/coor/conversion/LatLonParser.java
new file mode 100644
index 0000000..ccba75a
--- /dev/null
+++ b/src/org/openstreetmap/josm/data/coor/conversion/LatLonParser.java
@@ -0,0 +1,235 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.coor.conversion;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+import static org.openstreetmap.josm.tools.I18n.trc;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.openstreetmap.josm.data.coor.LatLon;
+
+/**
+ * Support for parsing a {@link LatLon} object from a string.
+ * @since 12792
+ */
+public final class LatLonParser {
+
+    /** Character denoting South, as string */
+    public static final String SOUTH = trc("compass", "S");
+    /** Character denoting North, as string */
+    public static final String NORTH = trc("compass", "N");
+    /** Character denoting West, as string */
+    public static final String WEST = trc("compass", "W");
+    /** Character denoting East, as string */
+    public static final String EAST = trc("compass", "E");
+
+    private static final char N_TR = NORTH.charAt(0);
+    private static final char S_TR = SOUTH.charAt(0);
+    private static final char E_TR = EAST.charAt(0);
+    private static final char W_TR = WEST.charAt(0);
+
+    private static final String DEG = "\u00B0";
+    private static final String MIN = "\u2032";
+    private static final String SEC = "\u2033";
+
+    private static final Pattern P = Pattern.compile(
+            "([+|-]?\\d+[.,]\\d+)|"             // (1)
+            + "([+|-]?\\d+)|"                   // (2)
+            + "("+DEG+"|o|deg)|"                // (3)
+            + "('|"+MIN+"|min)|"                // (4)
+            + "(\"|"+SEC+"|sec)|"               // (5)
+            + "(,|;)|"                          // (6)
+            + "([NSEW"+N_TR+S_TR+E_TR+W_TR+"])|"// (7)
+            + "\\s+|"
+            + "(.+)", Pattern.CASE_INSENSITIVE);
+
+    private static final Pattern P_XML = Pattern.compile(
+            "lat=[\"']([+|-]?\\d+[.,]\\d+)[\"']\\s+lon=[\"']([+|-]?\\d+[.,]\\d+)[\"']");
+
+    private static class LatLonHolder {
+        private double lat = Double.NaN;
+        private double lon = Double.NaN;
+    }
+
+    private LatLonParser() {
+        // private constructor
+    }
+
+    /**
+     * Parses the given string as lat/lon.
+     * @param coord String to parse
+     * @return parsed lat/lon
+     * @since 12792 (moved from {@link LatLon}, there since 11045)
+     */
+    public static LatLon parse(String coord) {
+        final LatLonHolder latLon = new LatLonHolder();
+        final Matcher mXml = P_XML.matcher(coord);
+        if (mXml.matches()) {
+            setLatLonObj(latLon,
+                    Double.valueOf(mXml.group(1).replace(',', '.')), 0.0, 0.0, "N",
+                    Double.valueOf(mXml.group(2).replace(',', '.')), 0.0, 0.0, "E");
+        } else {
+            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".equalsIgnoreCase(c) || "S".equalsIgnoreCase(c) || "E".equalsIgnoreCase(c) || "W".equalsIgnoreCase(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], 0.0, 0.0, "N",
+                        params[1], 0.0, 0.0, "E");
+            } else if (pattern.matches("xRo?,?xRo?")) {
+                setLatLonObj(latLon,
+                        params[1], 0.0, 0.0, params[0],
+                        params[3], 0.0, 0.0, params[2]);
+            } else if (pattern.matches("Ro?x,?Ro?x")) {
+                setLatLonObj(latLon,
+                        params[0], 0.0, 0.0, params[1],
+                        params[2], 0.0, 0.0, params[3]);
+            } else if (pattern.matches("Zo[RZ]'?,?Zo[RZ]'?|Z[RZ],?Z[RZ]")) {
+                setLatLonObj(latLon,
+                        params[0], params[1], 0.0, "N",
+                        params[2], params[3], 0.0, "E");
+            } else if (pattern.matches("xZo[RZ]'?,?xZo[RZ]'?|xZo?[RZ],?xZo?[RZ]")) {
+                setLatLonObj(latLon,
+                        params[1], params[2], 0.0, params[0],
+                        params[4], params[5], 0.0, params[3]);
+            } else if (pattern.matches("Zo[RZ]'?x,?Zo[RZ]'?x|Zo?[RZ]x,?Zo?[RZ]x")) {
+                setLatLonObj(latLon,
+                        params[0], params[1], 0.0, params[2],
+                        params[3], params[4], 0.0, 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);
+    }
+
+    private static void setLatLonObj(final LatLonHolder latLon,
+            final Object coord1deg, final Object coord1min, final Object coord1sec, final Object card1,
+            final Object coord2deg, final Object coord2min, final Object coord2sec, final Object card2) {
+
+        setLatLon(latLon,
+                (Double) coord1deg, (Double) coord1min, (Double) coord1sec, (String) card1,
+                (Double) coord2deg, (Double) coord2min, (Double) coord2sec, (String) card2);
+    }
+
+    private static void setLatLon(final LatLonHolder latLon,
+            final double coord1deg, final double coord1min, final double coord1sec, final String card1,
+            final double coord2deg, final double coord2min, final double coord2sec, final String card2) {
+
+        setLatLon(latLon, coord1deg, coord1min, coord1sec, card1);
+        setLatLon(latLon, coord2deg, coord2min, coord2sec, card2);
+        if (Double.isNaN(latLon.lat) || Double.isNaN(latLon.lon)) {
+            throw new IllegalArgumentException("invalid lat/lon parameters");
+        }
+    }
+
+    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");
+        }
+
+        double coord = (coordDeg < 0 ? -1 : 1) * (Math.abs(coordDeg) + coordMin / 60 + coordSec / 3600);
+        coord = "N".equals(card) || "E".equals(card) ? coord : -coord;
+        if ("N".equals(card) || "S".equals(card)) {
+            latLon.lat = coord;
+        } else {
+            latLon.lon = coord;
+        }
+    }
+
+    /**
+     * Parse string coordinate from floating point or DMS format.
+     * @param angleStr the string to parse as coordinate e.g. -1.1 or 50d10'3"W
+     * @return the value, in degrees
+     * @throws IllegalArgumentException in case parsing fails
+     * @since 12792
+     */
+    public static double parseCoordinate(String angleStr) {
+        final String floatPattern = "(\\d+(\\.\\d*)?)";
+        // pattern does all error handling.
+        Matcher in = Pattern.compile("^(?<neg1>-)?"
+                + "(?=\\d)(?:(?<single>" + floatPattern + ")|"
+                + "((?<degree>" + floatPattern + ")d)?"
+                + "((?<minutes>" + floatPattern + ")\')?"
+                + "((?<seconds>" + floatPattern + ")\")?)"
+                + "(?:[NE]|(?<neg2>[SW]))?$").matcher(angleStr);
+
+        if (!in.find()) {
+            throw new IllegalArgumentException(
+                    tr("Unable to parse as coordinate value: ''{0}''", angleStr));
+        }
+
+        double value = 0;
+        if (in.group("single") != null) {
+            value += Double.parseDouble(in.group("single"));
+        }
+        if (in.group("degree") != null) {
+            value += Double.parseDouble(in.group("degree"));
+        }
+        if (in.group("minutes") != null) {
+            value += Double.parseDouble(in.group("minutes")) / 60;
+        }
+        if (in.group("seconds") != null) {
+            value += Double.parseDouble(in.group("seconds")) / 3600;
+        }
+
+        if (in.group("neg1") != null ^ in.group("neg2") != null) {
+            value = -value;
+        }
+        return value;
+    }
+
+}
diff --git a/src/org/openstreetmap/josm/data/coor/conversion/NauticalCoordinateFormat.java b/src/org/openstreetmap/josm/data/coor/conversion/NauticalCoordinateFormat.java
new file mode 100644
index 0000000..3bd6959
--- /dev/null
+++ b/src/org/openstreetmap/josm/data/coor/conversion/NauticalCoordinateFormat.java
@@ -0,0 +1,62 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.coor.conversion;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.text.DecimalFormat;
+
+import org.openstreetmap.josm.data.coor.ILatLon;
+import org.openstreetmap.josm.spi.preferences.Config;
+
+/**
+ * Coordinate format that converts a coordinate to degrees and minutes (nautical format).
+ * @since 12735
+ */
+public class NauticalCoordinateFormat extends AbstractCoordinateFormat {
+    private static final DecimalFormat DM_MINUTE_FORMATTER = new DecimalFormat(
+            Config.getPref() == null ? "00.000" : Config.getPref().get("latlon.dm.decimal-format", "00.000"));
+    private static final String DM60 = DM_MINUTE_FORMATTER.format(60.0);
+    private static final String DM00 = DM_MINUTE_FORMATTER.format(0.0);
+
+    /**
+     * The unique instance.
+     */
+    public static final NauticalCoordinateFormat INSTANCE = new NauticalCoordinateFormat();
+
+    protected NauticalCoordinateFormat() {
+        super("NAUTICAL", tr("deg\u00B0 min'' (Nautical)"));
+    }
+
+    @Override
+    public String latToString(ILatLon ll) {
+        return degreesMinutes(ll.lat()) + ((ll.lat() < 0) ? SOUTH : NORTH);
+    }
+
+    @Override
+    public String lonToString(ILatLon ll) {
+        return degreesMinutes(ll.lon()) + ((ll.lon() < 0) ? WEST : EAST);
+    }
+
+    /**
+     * Replies the coordinate in degrees/minutes format
+     * @param pCoordinate The coordinate to convert
+     * @return The coordinate in degrees/minutes format
+     * @since 12537
+     */
+    public static String degreesMinutes(double pCoordinate) {
+
+        double tAbsCoord = Math.abs(pCoordinate);
+        int tDegree = (int) tAbsCoord;
+        double tMinutes = (tAbsCoord - tDegree) * 60;
+
+        String sDegrees = Integer.toString(tDegree);
+        String sMinutes = DM_MINUTE_FORMATTER.format(tMinutes);
+
+        if (sMinutes.equals(DM60)) {
+            sMinutes = DM00;
+            sDegrees = Integer.toString(tDegree+1);
+        }
+
+        return sDegrees + '\u00B0' + sMinutes + '\'';
+    }
+}
diff --git a/src/org/openstreetmap/josm/data/coor/conversion/ProjectedCoordinateFormat.java b/src/org/openstreetmap/josm/data/coor/conversion/ProjectedCoordinateFormat.java
new file mode 100644
index 0000000..bf2eb4d
--- /dev/null
+++ b/src/org/openstreetmap/josm/data/coor/conversion/ProjectedCoordinateFormat.java
@@ -0,0 +1,34 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.coor.conversion;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.coor.ILatLon;
+
+/**
+ * Coordinate format that projects a coordinate and returns northing and easting in
+ * decimal format.
+ * @since 12735
+ */
+public class ProjectedCoordinateFormat extends AbstractCoordinateFormat {
+
+    /**
+     * The unique instance.
+     */
+    public static final ProjectedCoordinateFormat INSTANCE = new ProjectedCoordinateFormat();
+
+    protected ProjectedCoordinateFormat() {
+        super("EAST_NORTH", tr("Projected Coordinates"));
+    }
+
+    @Override
+    public String latToString(ILatLon ll) {
+        return cDdFormatter.format(ll.getEastNorth(Main.getProjection()).north());
+    }
+
+    @Override
+    public String lonToString(ILatLon ll) {
+        return cDdFormatter.format(ll.getEastNorth(Main.getProjection()).east());
+    }
+}
diff --git a/src/org/openstreetmap/josm/data/gpx/GpxData.java b/src/org/openstreetmap/josm/data/gpx/GpxData.java
index 6620424..7ba62f7 100644
--- a/src/org/openstreetmap/josm/data/gpx/GpxData.java
+++ b/src/org/openstreetmap/josm/data/gpx/GpxData.java
@@ -416,10 +416,10 @@ public class GpxData extends WithAttributes implements Data {
         for (GpxTrack track : getTracks()) {
             for (GpxTrackSegment seg : track.getSegments()) {
                 WayPoint r = null;
-                for (WayPoint S : seg.getWayPoints()) {
-                    EastNorth en = S.getEastNorth();
+                for (WayPoint wpSeg : seg.getWayPoints()) {
+                    EastNorth en = wpSeg.getEastNorth(Main.getProjection());
                     if (r == null) {
-                        r = S;
+                        r = wpSeg;
                         rx = en.east();
                         ry = en.north();
                         x = px - rx;
@@ -454,17 +454,17 @@ public class GpxData extends WithAttributes implements Data {
                                 double nx = rx - rnoverRS * b;
                                 double ny = ry + rnoverRS * a;
                                 bestEN = new EastNorth(nx, ny);
-                                bestTime = r.time + rnoverRS * (S.time - r.time);
+                                bestTime = r.time + rnoverRS * (wpSeg.time - r.time);
                                 pnminsq = pnsq;
                             }
                         }
-                        r = S;
+                        r = wpSeg;
                         rx = sx;
                         ry = sy;
                     }
                 }
                 if (r != null) {
-                    EastNorth c = r.getEastNorth();
+                    EastNorth c = r.getEastNorth(Main.getProjection());
                     /* if there is only one point in the seg, it will do this twice, but no matter */
                     rx = c.east();
                     ry = c.north();
diff --git a/src/org/openstreetmap/josm/data/imagery/CachedTileLoaderFactory.java b/src/org/openstreetmap/josm/data/imagery/CachedTileLoaderFactory.java
index 96bc632..d028225 100644
--- a/src/org/openstreetmap/josm/data/imagery/CachedTileLoaderFactory.java
+++ b/src/org/openstreetmap/josm/data/imagery/CachedTileLoaderFactory.java
@@ -10,10 +10,10 @@ import java.util.concurrent.TimeUnit;
 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;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.Logging;
 
@@ -55,7 +55,7 @@ public class CachedTileLoaderFactory implements TileLoaderFactory {
     private static StringProperty getTileCacheDir() {
         String defPath = null;
         try {
-            defPath = new File(Main.pref.getCacheDirectory(), "tiles").getAbsolutePath();
+            defPath = new File(Config.getDirs().getCacheDirectory(true), "tiles").getAbsolutePath();
         } catch (SecurityException e) {
             Logging.warn(e);
         }
@@ -71,8 +71,8 @@ public class CachedTileLoaderFactory implements TileLoaderFactory {
             headers.putAll(inputHeaders);
 
         return getLoader(listener, cache,
-                (int) TimeUnit.SECONDS.toMillis(Main.pref.getInteger("socket.timeout.connect", 15)),
-                (int) TimeUnit.SECONDS.toMillis(Main.pref.getInteger("socket.timeout.read", 30)),
+                (int) TimeUnit.SECONDS.toMillis(Config.getPref().getInt("socket.timeout.connect", 15)),
+                (int) TimeUnit.SECONDS.toMillis(Config.getPref().getInt("socket.timeout.read", 30)),
                 headers);
     }
 
diff --git a/src/org/openstreetmap/josm/data/imagery/ImageryInfo.java b/src/org/openstreetmap/josm/data/imagery/ImageryInfo.java
index 6cc6ea3..f75a209 100644
--- a/src/org/openstreetmap/josm/data/imagery/ImageryInfo.java
+++ b/src/org/openstreetmap/josm/data/imagery/ImageryInfo.java
@@ -25,11 +25,11 @@ 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;
+import org.openstreetmap.josm.data.StructUtils.StructEntry;
 import org.openstreetmap.josm.io.Capabilities;
 import org.openstreetmap.josm.io.OsmApi;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.LanguageInfo;
@@ -213,38 +213,38 @@ public class ImageryInfo extends TileSourceInfo implements Comparable<ImageryInf
      * Auxiliary class to save an {@link ImageryInfo} object in the preferences.
      */
     public static class ImageryPreferenceEntry {
-        @pref String name;
-        @pref String d;
-        @pref String id;
-        @pref String type;
-        @pref String url;
-        @pref double pixel_per_eastnorth;
-        @pref String eula;
-        @pref String attribution_text;
-        @pref String attribution_url;
-        @pref String permission_reference_url;
-        @pref String logo_image;
-        @pref String logo_url;
-        @pref String terms_of_use_text;
-        @pref String terms_of_use_url;
-        @pref String country_code = "";
-        @pref String date;
-        @pref int max_zoom;
-        @pref int min_zoom;
-        @pref String cookies;
-        @pref String bounds;
-        @pref String shapes;
-        @pref String projections;
-        @pref String icon;
-        @pref String description;
-        @pref MultiMap<String, String> noTileHeaders;
-        @pref MultiMap<String, String> noTileChecksums;
-        @pref int tileSize = -1;
-        @pref Map<String, String> metadataHeaders;
-        @pref boolean valid_georeference;
-        @pref boolean bestMarked;
+        @StructEntry String name;
+        @StructEntry String d;
+        @StructEntry String id;
+        @StructEntry String type;
+        @StructEntry String url;
+        @StructEntry double pixel_per_eastnorth;
+        @StructEntry String eula;
+        @StructEntry String attribution_text;
+        @StructEntry String attribution_url;
+        @StructEntry String permission_reference_url;
+        @StructEntry String logo_image;
+        @StructEntry String logo_url;
+        @StructEntry String terms_of_use_text;
+        @StructEntry String terms_of_use_url;
+        @StructEntry String country_code = "";
+        @StructEntry String date;
+        @StructEntry int max_zoom;
+        @StructEntry int min_zoom;
+        @StructEntry String cookies;
+        @StructEntry String bounds;
+        @StructEntry String shapes;
+        @StructEntry String projections;
+        @StructEntry String icon;
+        @StructEntry String description;
+        @StructEntry MultiMap<String, String> noTileHeaders;
+        @StructEntry MultiMap<String, String> noTileChecksums;
+        @StructEntry int tileSize = -1;
+        @StructEntry Map<String, String> metadataHeaders;
+        @StructEntry boolean valid_georeference;
+        @StructEntry boolean bestMarked;
         // TODO: disabled until change of layers is implemented
-        // @pref String default_layers;
+        // @StructEntry String default_layers;
 
         /**
          * Constructs a new empty WMS {@code ImageryPreferenceEntry}.
@@ -816,9 +816,9 @@ public class ImageryInfo extends TileSourceInfo implements Comparable<ImageryInf
      */
     public void clearId() {
         if (this.id != null) {
-            Collection<String> newAddedIds = new TreeSet<>(Main.pref.getCollection("imagery.layers.addedIds"));
+            Collection<String> newAddedIds = new TreeSet<>(Config.getPref().getList("imagery.layers.addedIds"));
             newAddedIds.add(this.id);
-            Main.pref.putCollection("imagery.layers.addedIds", newAddedIds);
+            Config.getPref().putList("imagery.layers.addedIds", new ArrayList<>(newAddedIds));
         }
         setId(null);
     }
diff --git a/src/org/openstreetmap/josm/data/imagery/ImageryLayerInfo.java b/src/org/openstreetmap/josm/data/imagery/ImageryLayerInfo.java
index 3f89f3b..28c66e5 100644
--- a/src/org/openstreetmap/josm/data/imagery/ImageryLayerInfo.java
+++ b/src/org/openstreetmap/josm/data/imagery/ImageryLayerInfo.java
@@ -18,12 +18,14 @@ import java.util.TreeSet;
 import java.util.concurrent.ExecutorService;
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.StructUtils;
 import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryPreferenceEntry;
 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
 import org.openstreetmap.josm.io.CachedFile;
 import org.openstreetmap.josm.io.OfflineAccessException;
 import org.openstreetmap.josm.io.OnlineResource;
 import org.openstreetmap.josm.io.imagery.ImageryReader;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
 import org.xml.sax.SAXException;
@@ -56,7 +58,7 @@ public class ImageryLayerInfo {
      * @since 7434
      */
     public static Collection<String> getImageryLayersSites() {
-        return Main.pref.getCollection("imagery.layers.sites", Arrays.asList(DEFAULT_LAYER_SITES));
+        return Config.getPref().getList("imagery.layers.sites", Arrays.asList(DEFAULT_LAYER_SITES));
     }
 
     private ImageryLayerInfo() {
@@ -84,7 +86,8 @@ public class ImageryLayerInfo {
      */
     public void load(boolean fastFail) {
         clear();
-        List<ImageryPreferenceEntry> entries = Main.pref.getListOfStructs("imagery.entries", null, ImageryPreferenceEntry.class);
+        List<ImageryPreferenceEntry> entries = StructUtils.getListOfStructs(
+                Config.getPref(), "imagery.entries", null, ImageryPreferenceEntry.class);
         if (entries != null) {
             for (ImageryPreferenceEntry prefEntry : entries) {
                 try {
@@ -235,7 +238,7 @@ public class ImageryLayerInfo {
     public void updateEntriesFromDefaults(boolean dropold) {
         // add new default entries to the user selection
         boolean changed = false;
-        Collection<String> knownDefaults = new TreeSet<>(Main.pref.getCollection("imagery.layers.default"));
+        Collection<String> knownDefaults = new TreeSet<>(Config.getPref().getList("imagery.layers.default"));
         Collection<String> newKnownDefaults = new TreeSet<>();
         for (ImageryInfo def : defaultLayers) {
             if (def.isDefaultEntry()) {
@@ -278,7 +281,7 @@ public class ImageryLayerInfo {
         if (!dropold && !knownDefaults.isEmpty()) {
             newKnownDefaults.addAll(knownDefaults);
         }
-        Main.pref.putCollection("imagery.layers.default", newKnownDefaults);
+        Config.getPref().putList("imagery.layers.default", new ArrayList<>(newKnownDefaults));
 
         // automatically update user entries with same id as a default entry
         for (int i = 0; i < layers.size(); i++) {
@@ -360,7 +363,7 @@ public class ImageryLayerInfo {
         for (ImageryInfo info : layers) {
             entries.add(new ImageryPreferenceEntry(info));
         }
-        Main.pref.putListOfStructs("imagery.entries", entries, ImageryPreferenceEntry.class);
+        StructUtils.putListOfStructs(Config.getPref(), "imagery.entries", entries, ImageryPreferenceEntry.class);
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/data/imagery/OffsetBookmark.java b/src/org/openstreetmap/josm/data/imagery/OffsetBookmark.java
index aa81a0e..96ac5a4 100644
--- a/src/org/openstreetmap/josm/data/imagery/OffsetBookmark.java
+++ b/src/org/openstreetmap/josm/data/imagery/OffsetBookmark.java
@@ -11,9 +11,9 @@ import java.util.ListIterator;
 import java.util.Map;
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.Preferences;
-import org.openstreetmap.josm.data.Preferences.pref;
-import org.openstreetmap.josm.data.Preferences.writeExplicitly;
+import org.openstreetmap.josm.data.StructUtils;
+import org.openstreetmap.josm.data.StructUtils.StructEntry;
+import org.openstreetmap.josm.data.StructUtils.WriteExplicitly;
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.projection.Projection;
@@ -21,6 +21,7 @@ import org.openstreetmap.josm.data.projection.Projections;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.layer.AbstractTileSourceLayer;
 import org.openstreetmap.josm.gui.layer.ImageryLayer;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 
 /**
@@ -32,11 +33,11 @@ import org.openstreetmap.josm.tools.Logging;
 public class OffsetBookmark {
     private static final List<OffsetBookmark> allBookmarks = new ArrayList<>();
 
-    @pref private String projection_code;
-    @pref private String imagery_name;
-    @pref private String name;
-    @pref @writeExplicitly private double dx, dy;
-    @pref private double center_lon, center_lat;
+    @StructEntry private String projection_code;
+    @StructEntry private String imagery_name;
+    @StructEntry private String name;
+    @StructEntry @WriteExplicitly private double dx, dy;
+    @StructEntry private double center_lon, center_lat;
 
     public boolean isUsable(ImageryLayer layer) {
         if (projection_code == null) return false;
@@ -165,7 +166,8 @@ public class OffsetBookmark {
     }
 
     public static void loadBookmarks() {
-        List<OffsetBookmark> bookmarks = Main.pref.getListOfStructs("imagery.offsetbookmarks", null, OffsetBookmark.class);
+        List<OffsetBookmark> bookmarks = StructUtils.getListOfStructs(
+                Config.getPref(), "imagery.offsetbookmarks", null, OffsetBookmark.class);
         if (bookmarks == null) {
             loadBookmarksOld();
             saveBookmarks();
@@ -176,14 +178,13 @@ public class OffsetBookmark {
 
     // migration code - remove Nov. 2017
     private static void loadBookmarksOld() {
-        for (Collection<String> c : Main.pref.getArray("imagery.offsets",
-                Collections.<Collection<String>>emptySet())) {
+        for (Collection<String> c : Config.getPref().getListOfLists("imagery.offsets")) {
             allBookmarks.add(new OffsetBookmark(c));
         }
     }
 
     public static void saveBookmarks() {
-        Main.pref.putListOfStructs("imagery.offsetbookmarks", allBookmarks, OffsetBookmark.class);
+        StructUtils.putListOfStructs(Config.getPref(), "imagery.offsetbookmarks", allBookmarks, OffsetBookmark.class);
     }
 
     /**
@@ -275,7 +276,7 @@ public class OffsetBookmark {
      * @since 12134
      */
     public Map<String, String> toPropertiesMap() {
-        return Preferences.serializeStruct(this, OffsetBookmark.class);
+        return StructUtils.serializeStruct(this, OffsetBookmark.class);
     }
 
     /**
@@ -286,6 +287,6 @@ public class OffsetBookmark {
      * @since 12134
      */
     public static OffsetBookmark fromPropertiesMap(Map<String, String> properties) {
-        return Preferences.deserializeStruct(properties, OffsetBookmark.class);
+        return StructUtils.deserializeStruct(properties, OffsetBookmark.class);
     }
 }
diff --git a/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoaderJob.java b/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoaderJob.java
index e07ba56..f92066d 100644
--- a/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoaderJob.java
+++ b/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoaderJob.java
@@ -16,11 +16,8 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
-import java.util.logging.Level;
-import java.util.logging.Logger;
 
 import org.apache.commons.jcs.access.behavior.ICacheAccess;
-import org.openstreetmap.gui.jmapviewer.FeatureAdapter;
 import org.openstreetmap.gui.jmapviewer.Tile;
 import org.openstreetmap.gui.jmapviewer.interfaces.TileJob;
 import org.openstreetmap.gui.jmapviewer.interfaces.TileLoaderListener;
@@ -42,7 +39,6 @@ import org.openstreetmap.josm.tools.Logging;
  * @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 LongProperty MAXIMUM_EXPIRES = new LongProperty("imagery.generic.maximum_expires", TimeUnit.DAYS.toMillis(30));
     private static final LongProperty MINIMUM_EXPIRES = new LongProperty("imagery.generic.minimum_expires", TimeUnit.HOURS.toMillis(1));
     protected final Tile tile;
@@ -71,12 +67,7 @@ public class TMSCachedTileLoaderJob extends JCSCachedTileLoaderJob<String, Buffe
         if (listener != null) {
             String deduplicationKey = getCacheKey();
             synchronized (inProgress) {
-                Set<TileLoaderListener> newListeners = inProgress.get(deduplicationKey);
-                if (newListeners == null) {
-                    newListeners = new HashSet<>();
-                    inProgress.put(deduplicationKey, newListeners);
-                }
-                newListeners.add(listener);
+                inProgress.computeIfAbsent(deduplicationKey, k -> new HashSet<>()).add(listener);
             }
         }
     }
@@ -122,8 +113,9 @@ public class TMSCachedTileLoaderJob extends JCSCachedTileLoaderJob<String, Buffe
             try {
                 return content.length > 0 || 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()});
-                Logging.warn(e);
+                Logging.logWithStackTrace(Logging.LEVEL_WARN, e, "JCS TMS - error loading from cache for tile {0}: {1}",
+                        new Object[] {tile.getKey(), e.getMessage()}
+                        );
             }
         }
         return false;
@@ -207,7 +199,7 @@ public class TMSCachedTileLoaderJob extends JCSCachedTileLoaderJob<String, Buffe
                 }
             }
         } catch (IOException e) {
-            LOG.log(Level.WARNING, "JCS TMS - error loading object for tile {0}: {1}", new Object[] {tile.getKey(), e.getMessage()});
+            Logging.warn("JCS TMS - error loading object for tile {0}: {1}", new Object[] {tile.getKey(), e.getMessage()});
             tile.setError(e);
             tile.setLoaded(false);
             if (listeners != null) { // listeners might be null, if some other thread notified already about success
@@ -258,7 +250,7 @@ public class TMSCachedTileLoaderJob extends JCSCachedTileLoaderJob<String, Buffe
 
     private boolean handleNoTileAtZoom() {
         if (isNoTileAtZoom()) {
-            LOG.log(Level.FINE, "JCS TMS - Tile valid, but no file, as no tiles at this level {0}", tile);
+            Logging.debug("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;
@@ -268,7 +260,7 @@ public class TMSCachedTileLoaderJob extends JCSCachedTileLoaderJob<String, Buffe
 
     private boolean isNoTileAtZoom() {
         if (attributes == null) {
-            LOG.warning("Cache attributes are null");
+            Logging.warn("Cache attributes are null");
         }
         return attributes != null && attributes.isNoTileAtZoom();
     }
diff --git a/src/org/openstreetmap/josm/data/oauth/OAuthAccessTokenHolder.java b/src/org/openstreetmap/josm/data/oauth/OAuthAccessTokenHolder.java
index 7cf7a99..8eef479 100644
--- a/src/org/openstreetmap/josm/data/oauth/OAuthAccessTokenHolder.java
+++ b/src/org/openstreetmap/josm/data/oauth/OAuthAccessTokenHolder.java
@@ -176,7 +176,7 @@ public class OAuthAccessTokenHolder {
     public void save(Preferences preferences, CredentialsAgent cm) {
         CheckParameterUtil.ensureParameterNotNull(preferences, "preferences");
         CheckParameterUtil.ensureParameterNotNull(cm, "cm");
-        preferences.put("oauth.access-token.save-to-preferences", saveToPreferences);
+        preferences.putBoolean("oauth.access-token.save-to-preferences", saveToPreferences);
         try {
             if (!saveToPreferences) {
                 cm.storeOAuthAccessToken(null);
diff --git a/src/org/openstreetmap/josm/data/osm/Changeset.java b/src/org/openstreetmap/josm/data/osm/Changeset.java
index 8f16ebf..0e83118 100644
--- a/src/org/openstreetmap/josm/data/osm/Changeset.java
+++ b/src/org/openstreetmap/josm/data/osm/Changeset.java
@@ -13,7 +13,6 @@ import java.util.Optional;
 
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.coor.LatLon;
-import org.openstreetmap.josm.data.osm.visitor.Visitor;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.date.DateUtils;
 
@@ -107,8 +106,10 @@ public final class Changeset implements Tagged, Comparable<Changeset> {
     /**
      * Visitor pattern.
      * @param v visitor
+     * @deprecated no longer supported
      */
-    public void visit(Visitor v) {
+    @Deprecated
+    public void visit(org.openstreetmap.josm.data.osm.visitor.Visitor v) {
         v.visit(this);
     }
 
diff --git a/src/org/openstreetmap/josm/data/osm/ChangesetCache.java b/src/org/openstreetmap/josm/data/osm/ChangesetCache.java
index f08bb7b..db823a8 100644
--- a/src/org/openstreetmap/josm/data/osm/ChangesetCache.java
+++ b/src/org/openstreetmap/josm/data/osm/ChangesetCache.java
@@ -11,11 +11,10 @@ import java.util.Set;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.stream.Collectors;
 
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
-import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
-import org.openstreetmap.josm.gui.JosmUserIdentityManager;
-import org.openstreetmap.josm.gui.util.GuiHelper;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
+import org.openstreetmap.josm.data.UserIdentityManager;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.SubclassFilteredCollection;
 
 /**
@@ -31,8 +30,6 @@ import org.openstreetmap.josm.tools.SubclassFilteredCollection;
  * The cache itself listens to {@link java.util.prefs.PreferenceChangeEvent}s. It
  * clears itself if the OSM API URL is changed in the preferences.
  *
- * {@link ChangesetCacheEvent}s are delivered on the EDT.
- *
  */
 public final class ChangesetCache implements PreferenceChangedListener {
     /** the unique instance */
@@ -41,13 +38,13 @@ public final class ChangesetCache implements PreferenceChangedListener {
     /** the cached changesets */
     private final Map<Integer, Changeset> cache = new HashMap<>();
 
-    private final CopyOnWriteArrayList<ChangesetCacheListener> listeners = new CopyOnWriteArrayList<>();
+    final CopyOnWriteArrayList<ChangesetCacheListener> listeners = new CopyOnWriteArrayList<>();
 
     /**
      * Constructs a new {@code ChangesetCache}.
      */
     private ChangesetCache() {
-        Main.pref.addPreferenceChangeListener(this);
+        Config.getPref().addPreferenceChangeListener(this);
     }
 
     /**
@@ -79,11 +76,9 @@ public final class ChangesetCache implements PreferenceChangedListener {
     }
 
     private void fireChangesetCacheEvent(final ChangesetCacheEvent e) {
-        GuiHelper.runInEDT(() -> {
-            for (ChangesetCacheListener l: listeners) {
-                l.changesetCacheUpdated(e);
-            }
-        });
+        for (ChangesetCacheListener l: listeners) {
+            l.changesetCacheUpdated(e);
+        }
     }
 
     private void update(Changeset cs, DefaultChangesetCacheEvent e) {
@@ -243,18 +238,18 @@ public final class ChangesetCache implements PreferenceChangedListener {
     }
 
     /**
-     * If the current user {@link JosmUserIdentityManager#isAnonymous() is known}, the {@link #getOpenChangesets() open changesets}
-     * for the {@link JosmUserIdentityManager#isCurrentUser(User) current user} are returned. Otherwise,
+     * If the current user {@link UserIdentityManager#isAnonymous() is known}, the {@link #getOpenChangesets() open changesets}
+     * for the {@link UserIdentityManager#isCurrentUser(User) current user} are returned. Otherwise,
      * the unfiltered {@link #getOpenChangesets() open changesets} are returned.
      *
      * @return a list of changesets
      */
     public List<Changeset> getOpenChangesetsForCurrentUser() {
-        if (JosmUserIdentityManager.getInstance().isAnonymous()) {
+        if (UserIdentityManager.getInstance().isAnonymous()) {
             return getOpenChangesets();
         } else {
             return new ArrayList<>(SubclassFilteredCollection.filter(getOpenChangesets(),
-                    object -> JosmUserIdentityManager.getInstance().isCurrentUser(object.getUser())));
+                    object -> UserIdentityManager.getInstance().isCurrentUser(object.getUser())));
         }
     }
 
diff --git a/src/org/openstreetmap/josm/data/osm/DataSet.java b/src/org/openstreetmap/josm/data/osm/DataSet.java
index 247e973..0a172ee 100644
--- a/src/org/openstreetmap/josm/data/osm/DataSet.java
+++ b/src/org/openstreetmap/josm/data/osm/DataSet.java
@@ -168,6 +168,7 @@ public final class DataSet extends QuadBucketPrimitiveStore implements Data, Pro
     // Events that occurred while dataset was locked but should be fired after write lock is released
     private final List<AbstractDatasetChangedEvent> cachedEvents = new ArrayList<>();
 
+    private String name;
     private UploadPolicy uploadPolicy;
 
     private final ReadWriteLock lock = new ReentrantReadWriteLock();
@@ -261,6 +262,23 @@ public final class DataSet extends QuadBucketPrimitiveStore implements Data, Pro
     }
 
     /**
+     * Constructs a new {@code DataSet} initially filled with the given primitives.
+     * @param osmPrimitives primitives to add to this data set
+     * @since 12726
+     */
+    public DataSet(OsmPrimitive... osmPrimitives) {
+        this();
+        beginUpdate();
+        try {
+            for (OsmPrimitive o : osmPrimitives) {
+                addPrimitive(o);
+            }
+        } finally {
+            endUpdate();
+        }
+    }
+
+    /**
      * Adds a new data source.
      * @param source data source to add
      * @return {@code true} if the collection changed as a result of the call
@@ -315,20 +333,13 @@ public final class DataSet extends QuadBucketPrimitiveStore implements Data, Pro
     }
 
     /**
-     * Maintains a list of used tags for autocompletion.
-     */
-    private AutoCompletionManager autocomplete;
-
-    /**
      * Returns the autocompletion manager, which maintains a list of used tags for autocompletion.
      * @return the autocompletion manager
+     * @deprecated to be removed end of 2017. Use {@link AutoCompletionManager#of(DataSet)} instead.
      */
+    @Deprecated
     public AutoCompletionManager getAutoCompletionManager() {
-        if (autocomplete == null) {
-            autocomplete = new AutoCompletionManager(this);
-            addDataSetListener(autocomplete);
-        }
-        return autocomplete;
+        return AutoCompletionManager.of(this);
     }
 
     /**
@@ -822,7 +833,7 @@ public final class DataSet extends QuadBucketPrimitiveStore implements Data, Pro
      *
      * @param selection the selection
      * @param fireSelectionChangeEvent true, if the selection change listeners are to be notified; false, otherwise
-     * @deprecated Use {@link #setSelected(Collection)} instead. To bee removed end of 2017. Does not seem to be used by plugins.
+     * @deprecated Use {@link #setSelected(Collection)} instead. To be removed end of 2017. Does not seem to be used by plugins.
      */
     @Deprecated
     public void setSelected(Collection<? extends PrimitiveId> selection, boolean fireSelectionChangeEvent) {
@@ -1359,6 +1370,24 @@ public final class DataSet extends QuadBucketPrimitiveStore implements Data, Pro
         return conflicts;
     }
 
+    /**
+     * Returns the name of this data set (optional).
+     * @return the name of this data set. Can be {@code null}
+     * @since 12718
+     */
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * Sets the name of this data set.
+     * @param name the new name of this data set. Can be {@code null} to reset it
+     * @since 12718
+     */
+    public void setName(String name) {
+        this.name = name;
+    }
+
     /* --------------------------------------------------------------------------------- */
     /* interface ProjectionChangeListner                                                 */
     /* --------------------------------------------------------------------------------- */
diff --git a/src/org/openstreetmap/josm/data/osm/DefaultNameFormatter.java b/src/org/openstreetmap/josm/data/osm/DefaultNameFormatter.java
index 6ee4bd3..3f4247f 100644
--- a/src/org/openstreetmap/josm/data/osm/DefaultNameFormatter.java
+++ b/src/org/openstreetmap/josm/data/osm/DefaultNameFormatter.java
@@ -20,9 +20,8 @@ import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
 
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.coor.CoordinateFormat;
 import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.coor.conversion.CoordinateFormatManager;
 import org.openstreetmap.josm.data.osm.history.HistoryNameFormatter;
 import org.openstreetmap.josm.data.osm.history.HistoryNode;
 import org.openstreetmap.josm.data.osm.history.HistoryOsmPrimitive;
@@ -30,6 +29,7 @@ import org.openstreetmap.josm.data.osm.history.HistoryRelation;
 import org.openstreetmap.josm.data.osm.history.HistoryWay;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetNameTemplateList;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.AlphanumComparator;
 import org.openstreetmap.josm.tools.I18n;
 import org.openstreetmap.josm.tools.Utils;
@@ -104,7 +104,7 @@ public class DefaultNameFormatter implements NameFormatter, HistoryNameFormatter
     public static synchronized List<String> getNamingtagsForRelations() {
         if (namingTagsForRelations == null) {
             namingTagsForRelations = new ArrayList<>(
-                    Main.pref.getCollection("relation.nameOrder", Arrays.asList(DEFAULT_NAMING_TAGS_FOR_RELATIONS))
+                    Config.getPref().getList("relation.nameOrder", Arrays.asList(DEFAULT_NAMING_TAGS_FOR_RELATIONS))
                     );
         }
         return namingTagsForRelations;
@@ -118,8 +118,8 @@ public class DefaultNameFormatter implements NameFormatter, HistoryNameFormatter
      * @param primitive the primitive
      */
     protected void decorateNameWithId(StringBuilder name, IPrimitive primitive) {
-        if (Main.pref.getBoolean("osm-primitives.showid")) {
-            if (Main.pref.getBoolean("osm-primitives.showid.new-primitives")) {
+        if (Config.getPref().getBoolean("osm-primitives.showid")) {
+            if (Config.getPref().getBoolean("osm-primitives.showid.new-primitives")) {
                 name.append(tr(" [id: {0}]", primitive.getUniqueId()));
             } else {
                 name.append(tr(" [id: {0}]", primitive.getId()));
@@ -154,7 +154,7 @@ public class DefaultNameFormatter implements NameFormatter, HistoryNameFormatter
             TaggingPreset preset = TaggingPresetNameTemplateList.getInstance().findPresetTemplate(node);
             if (preset == null) {
                 String n;
-                if (Main.pref.getBoolean("osm-primitives.localize-name", true)) {
+                if (Config.getPref().getBoolean("osm-primitives.localize-name", true)) {
                     n = node.getLocalName();
                 } else {
                     n = node.getName();
@@ -186,8 +186,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(CoordinateFormatManager.getDefaultFormat().latToString(node)).append(", ")
+                    .append(CoordinateFormatManager.getDefaultFormat().lonToString(node)).append(')');
             }
         }
         decorateNameWithId(name, node);
@@ -232,7 +232,7 @@ public class DefaultNameFormatter implements NameFormatter, HistoryNameFormatter
             TaggingPreset preset = TaggingPresetNameTemplateList.getInstance().findPresetTemplate(way);
             if (preset == null) {
                 String n;
-                if (Main.pref.getBoolean("osm-primitives.localize-name", true)) {
+                if (Config.getPref().getBoolean("osm-primitives.localize-name", true)) {
                     n = way.getLocalName();
                 } else {
                     n = way.getName();
@@ -432,7 +432,7 @@ public class DefaultNameFormatter implements NameFormatter, HistoryNameFormatter
 
     private static String getNameTagValue(IRelation relation, String nameTag) {
         if ("name".equals(nameTag)) {
-            if (Main.pref.getBoolean("osm-primitives.localize-name", true))
+            if (Config.getPref().getBoolean("osm-primitives.localize-name", true))
                 return relation.getLocalName();
             else
                 return relation.getName();
@@ -518,7 +518,7 @@ public class DefaultNameFormatter implements NameFormatter, HistoryNameFormatter
      * @param primitive the primitive
      */
     protected void decorateNameWithId(StringBuilder name, HistoryOsmPrimitive primitive) {
-        if (Main.pref.getBoolean("osm-primitives.showid")) {
+        if (Config.getPref().getBoolean("osm-primitives.showid")) {
             name.append(tr(" [id: {0}]", primitive.getId()));
         }
     }
@@ -527,7 +527,7 @@ public class DefaultNameFormatter implements NameFormatter, HistoryNameFormatter
     public String format(HistoryNode node) {
         StringBuilder sb = new StringBuilder();
         String name;
-        if (Main.pref.getBoolean("osm-primitives.localize-name", true)) {
+        if (Config.getPref().getBoolean("osm-primitives.localize-name", true)) {
             name = node.getLocalName();
         } else {
             name = node.getName();
@@ -540,9 +540,9 @@ public class DefaultNameFormatter implements NameFormatter, HistoryNameFormatter
         LatLon coord = node.getCoords();
         if (coord != null) {
             sb.append(" (")
-            .append(coord.latToString(CoordinateFormat.getDefaultFormat()))
+            .append(CoordinateFormatManager.getDefaultFormat().latToString(coord))
             .append(", ")
-            .append(coord.lonToString(CoordinateFormat.getDefaultFormat()))
+            .append(CoordinateFormatManager.getDefaultFormat().lonToString(coord))
             .append(')');
         }
         decorateNameWithId(sb, node);
@@ -553,7 +553,7 @@ public class DefaultNameFormatter implements NameFormatter, HistoryNameFormatter
     public String format(HistoryWay way) {
         StringBuilder sb = new StringBuilder();
         String name;
-        if (Main.pref.getBoolean("osm-primitives.localize-name", true)) {
+        if (Config.getPref().getBoolean("osm-primitives.localize-name", true)) {
             name = way.getLocalName();
         } else {
             name = way.getName();
@@ -600,7 +600,7 @@ public class DefaultNameFormatter implements NameFormatter, HistoryNameFormatter
         for (String n : relation.getTags().keySet()) {
             // #3328: "note " and " note" are name tags too
             if (namingTags.contains(n.trim())) {
-                if (Main.pref.getBoolean("osm-primitives.localize-name", true)) {
+                if (Config.getPref().getBoolean("osm-primitives.localize-name", true)) {
                     nameTag = relation.getLocalName();
                 } else {
                     nameTag = relation.getName();
diff --git a/src/org/openstreetmap/josm/data/osm/Filter.java b/src/org/openstreetmap/josm/data/osm/Filter.java
index 4479f83..c67c6d3 100644
--- a/src/org/openstreetmap/josm/data/osm/Filter.java
+++ b/src/org/openstreetmap/josm/data/osm/Filter.java
@@ -3,8 +3,8 @@ package org.openstreetmap.josm.data.osm;
 
 import java.util.Objects;
 
-import org.openstreetmap.josm.data.Preferences.pref;
-import org.openstreetmap.josm.data.Preferences.writeExplicitly;
+import org.openstreetmap.josm.data.StructUtils.StructEntry;
+import org.openstreetmap.josm.data.StructUtils.WriteExplicitly;
 import org.openstreetmap.josm.data.osm.search.SearchMode;
 import org.openstreetmap.josm.data.osm.search.SearchSetting;
 
@@ -70,10 +70,10 @@ public class Filter extends SearchSetting {
     }
 
     public static class FilterPreferenceEntry {
-        @writeExplicitly
-        @pref public String version = "1";
+        @WriteExplicitly
+        @StructEntry public String version = "1";
 
-        @pref public String text;
+        @StructEntry public String text;
 
         /**
          * Mode selector which defines how a filter is combined with the previous one:<ul>
@@ -84,37 +84,37 @@ public class Filter extends SearchSetting {
          * </ul>
          * @see SearchMode
          */
-        @writeExplicitly
-        @pref public String mode = "add";
+        @WriteExplicitly
+        @StructEntry public String mode = "add";
 
-        @pref public boolean case_sensitive;
+        @StructEntry public boolean case_sensitive;
 
-        @pref public boolean regex_search;
+        @StructEntry public boolean regex_search;
 
-        @pref public boolean mapCSS_search;
+        @StructEntry public boolean mapCSS_search;
 
         /**
          * Enabled status.
          * @see Filter#enable
          */
-        @writeExplicitly
-        @pref public boolean enable = true;
+        @WriteExplicitly
+        @StructEntry public boolean enable = true;
 
         /**
          * If this option is activated, the chosen objects are completely hidden.
          * Otherwise they are disabled and shown in a shade of gray.
          * @see Filter#hiding
          */
-        @writeExplicitly
-        @pref public boolean hiding;
+        @WriteExplicitly
+        @StructEntry public boolean hiding;
 
         /**
          * Normally, the specified objects are hidden and the rest is shown.
          * If this option is activated, only the specified objects are shown and the rest is hidden.
          * @see Filter#inverted
          */
-        @writeExplicitly
-        @pref public boolean inverted;
+        @WriteExplicitly
+        @StructEntry public boolean inverted;
 
         @Override
         public int hashCode() {
diff --git a/src/org/openstreetmap/josm/data/osm/FilterMatcher.java b/src/org/openstreetmap/josm/data/osm/FilterMatcher.java
index 2d0c31d..7111e16 100644
--- a/src/org/openstreetmap/josm/data/osm/FilterMatcher.java
+++ b/src/org/openstreetmap/josm/data/osm/FilterMatcher.java
@@ -5,11 +5,11 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
-import org.openstreetmap.josm.data.osm.search.SearchParseError;
 import org.openstreetmap.josm.data.osm.search.SearchCompiler;
-import org.openstreetmap.josm.data.osm.search.SearchMode;
 import org.openstreetmap.josm.data.osm.search.SearchCompiler.Match;
 import org.openstreetmap.josm.data.osm.search.SearchCompiler.Not;
+import org.openstreetmap.josm.data.osm.search.SearchMode;
+import org.openstreetmap.josm.data.osm.search.SearchParseError;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.MapFrame;
 import org.openstreetmap.josm.tools.SubclassFilteredCollection;
diff --git a/src/org/openstreetmap/josm/data/osm/FilterModel.java b/src/org/openstreetmap/josm/data/osm/FilterModel.java
index 52e0dd1..694ef5e 100644
--- a/src/org/openstreetmap/josm/data/osm/FilterModel.java
+++ b/src/org/openstreetmap/josm/data/osm/FilterModel.java
@@ -16,11 +16,13 @@ import java.util.Stack;
 import javax.swing.JOptionPane;
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.StructUtils;
 import org.openstreetmap.josm.data.osm.Filter.FilterPreferenceEntry;
 import org.openstreetmap.josm.data.osm.search.SearchParseError;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.widgets.OSDLabel;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -70,7 +72,8 @@ public class FilterModel {
      * @param prefEntry preference key
      */
     public void loadPrefs(String prefEntry) {
-        List<FilterPreferenceEntry> entries = Main.pref.getListOfStructs(prefEntry, null, FilterPreferenceEntry.class);
+        List<FilterPreferenceEntry> entries = StructUtils.getListOfStructs(
+                Config.getPref(), prefEntry, null, FilterPreferenceEntry.class);
         if (entries != null) {
             for (FilterPreferenceEntry e : entries) {
                 filters.add(new Filter(e));
@@ -88,7 +91,7 @@ public class FilterModel {
         for (Filter flt : filters) {
             entries.add(flt.getPreferenceEntry());
         }
-        Main.pref.putListOfStructs(prefEntry, entries, FilterPreferenceEntry.class);
+        StructUtils.putListOfStructs(Config.getPref(), prefEntry, entries, FilterPreferenceEntry.class);
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/data/osm/Node.java b/src/org/openstreetmap/josm/data/osm/Node.java
index 151f63b..bde0341 100644
--- a/src/org/openstreetmap/josm/data/osm/Node.java
+++ b/src/org/openstreetmap/josm/data/osm/Node.java
@@ -12,10 +12,9 @@ import java.util.function.Predicate;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.osm.visitor.OsmPrimitiveVisitor;
 import org.openstreetmap.josm.data.osm.visitor.PrimitiveVisitor;
-import org.openstreetmap.josm.data.osm.visitor.Visitor;
 import org.openstreetmap.josm.data.projection.Projecting;
-import org.openstreetmap.josm.data.projection.Projections;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -99,6 +98,22 @@ public final class Node extends OsmPrimitive implements INode {
         return lon;
     }
 
+    /**
+     * Replies the projected east/north coordinates.
+     * <p>
+     * Uses the {@link Main#getProjection() global projection} to project the lat/lon-coordinates.
+     * <p>
+     * Method {@link org.openstreetmap.josm.data.coor.ILatLon#getEastNorth()} of
+     * implemented interface <code>ILatLon</code> is deprecated, but this method is not.
+     * @return the east north coordinates or {@code null} if {@link #isLatLonKnown()}
+     * is false.
+     */
+    @SuppressWarnings("deprecation")
+    @Override
+    public EastNorth getEastNorth() {
+        return getEastNorth(Main.getProjection());
+    }
+
     @Override
     public EastNorth getEastNorth(Projecting projection) {
         if (!isLatLonKnown()) return null;
@@ -125,7 +140,7 @@ public final class Node extends OsmPrimitive implements INode {
             this.lon = coor.lon();
             invalidateEastNorthCache();
         } else if (eastNorth != null) {
-            LatLon ll = Projections.inverseProject(eastNorth);
+            LatLon ll = Main.getProjection().eastNorth2latlon(eastNorth);
             this.lat = ll.lat();
             this.lon = ll.lon();
             this.east = eastNorth.east();
@@ -218,8 +233,17 @@ public final class Node extends OsmPrimitive implements INode {
             throw new DataIntegrityProblemException("Complete node with null coordinates: " + toString());
     }
 
+    /**
+     * @deprecated no longer supported
+     */
+    @Override
+    @Deprecated
+    public void accept(org.openstreetmap.josm.data.osm.visitor.Visitor visitor) {
+        visitor.visit(this);
+    }
+
     @Override
-    public void accept(Visitor visitor) {
+    public void accept(OsmPrimitiveVisitor visitor) {
         visitor.visit(this);
     }
 
@@ -387,7 +411,7 @@ public final class Node extends OsmPrimitive implements INode {
         CheckParameterUtil.ensureThat(hops >= 0, "hops must be non-negative!");
         return hops == 0
                 ? isConnectedTo(otherNodes, hops, predicate, null)
-                : isConnectedTo(otherNodes, hops, predicate, new TreeSet<Node>());
+                : isConnectedTo(otherNodes, hops, predicate, new TreeSet<>());
     }
 
     private boolean isConnectedTo(final Collection<Node> otherNodes, final int hops, Predicate<Node> predicate, Set<Node> visited) {
diff --git a/src/org/openstreetmap/josm/data/osm/NodeData.java b/src/org/openstreetmap/josm/data/osm/NodeData.java
index ddc3e63..9c27c00 100644
--- a/src/org/openstreetmap/josm/data/osm/NodeData.java
+++ b/src/org/openstreetmap/josm/data/osm/NodeData.java
@@ -1,10 +1,10 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.osm;
 
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.visitor.PrimitiveVisitor;
-import org.openstreetmap.josm.data.projection.Projections;
 
 /**
  * The data on a single node (tags and position) that is stored in the database
@@ -74,16 +74,20 @@ public class NodeData extends PrimitiveData implements INode {
         }
     }
 
+    /**
+     * @deprecated use {@link #getEastNorth(org.openstreetmap.josm.data.projection.Projecting)}
+     */
     @Override
+    @Deprecated
     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.
-        return Projections.project(getCoor());
+        return Main.getProjection().latlon2eastNorth(getCoor());
     }
 
     @Override
     public void setEastNorth(EastNorth eastNorth) {
-        setCoor(Projections.inverseProject(eastNorth));
+        setCoor(Main.getProjection().eastNorth2latlon(eastNorth));
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/data/osm/NoteData.java b/src/org/openstreetmap/josm/data/osm/NoteData.java
index 34ae8ef..934e6e1 100644
--- a/src/org/openstreetmap/josm/data/osm/NoteData.java
+++ b/src/org/openstreetmap/josm/data/osm/NoteData.java
@@ -9,13 +9,11 @@ import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
+import org.openstreetmap.josm.data.UserIdentityManager;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.notes.Note;
 import org.openstreetmap.josm.data.notes.Note.State;
 import org.openstreetmap.josm.data.notes.NoteComment;
-import org.openstreetmap.josm.gui.JosmUserIdentityManager;
-import org.openstreetmap.josm.gui.MainApplication;
-import org.openstreetmap.josm.gui.MapFrame;
 import org.openstreetmap.josm.tools.ListenerList;
 import org.openstreetmap.josm.tools.Logging;
 
@@ -100,10 +98,6 @@ public class NoteData {
      */
     public void setSelectedNote(Note note) {
         selectedNote = note;
-        MapFrame map = MainApplication.getMap();
-        if (map != null) {
-            map.noteDialog.selectionChanged();
-        }
         listeners.fireEvent(l -> l.selectedNoteChanged(this));
     }
 
@@ -235,14 +229,11 @@ public class NoteData {
     }
 
     private void dataUpdated() {
-        if (MainApplication.isDisplayingMapView()) {
-            MainApplication.getMap().noteDialog.setNotes(getSortedNotes());
-        }
         listeners.fireEvent(l -> l.noteDataUpdated(this));
     }
 
     private static User getCurrentUser() {
-        JosmUserIdentityManager userMgr = JosmUserIdentityManager.getInstance();
+        UserIdentityManager userMgr = UserIdentityManager.getInstance();
         return User.createOsmUser(userMgr.getUserId(), userMgr.getUserName());
     }
 
diff --git a/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java b/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
index 22235a8..0ea5094 100644
--- a/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
+++ b/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
@@ -19,12 +19,12 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
 
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.osm.search.SearchParseError;
 import org.openstreetmap.josm.data.osm.search.SearchCompiler;
 import org.openstreetmap.josm.data.osm.search.SearchCompiler.Match;
-import org.openstreetmap.josm.data.osm.visitor.Visitor;
+import org.openstreetmap.josm.data.osm.search.SearchParseError;
+import org.openstreetmap.josm.data.osm.visitor.OsmPrimitiveVisitor;
 import org.openstreetmap.josm.gui.mappaint.StyleCache;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
@@ -649,7 +649,7 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
                 "watch", "watch:", "description", "attribution"));
             l.addAll(getDiscardableKeys());
             l.addAll(getWorkInProgressKeys());
-            uninteresting = new HashSet<>(Main.pref.getCollection("tags.uninteresting", l));
+            uninteresting = new HashSet<>(Config.getPref().getList("tags.uninteresting", l));
         }
         return uninteresting;
     }
@@ -661,7 +661,7 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
      */
     public static Collection<String> getDiscardableKeys() {
         if (discardable == null) {
-            discardable = new HashSet<>(Main.pref.getCollection("tags.discardable",
+            discardable = new HashSet<>(Config.getPref().getList("tags.discardable",
                     Arrays.asList(
                             "created_by",
                             "converted_by",
@@ -719,7 +719,7 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
      */
     public static Collection<String> getWorkInProgressKeys() {
         if (workinprogress == null) {
-            workinprogress = new HashSet<>(Main.pref.getCollection("tags.workinprogress",
+            workinprogress = new HashSet<>(Config.getPref().getList("tags.workinprogress",
                     Arrays.asList("note", "fixme", "FIXME")));
         }
         return workinprogress;
@@ -759,7 +759,7 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
 
     private static Match compileDirectionKeys(String prefName, String defaultValue) throws AssertionError {
         try {
-            return SearchCompiler.compile(Main.pref.get(prefName, defaultValue));
+            return SearchCompiler.compile(Config.getPref().get(prefName, defaultValue));
         } catch (SearchParseError e) {
             Logging.log(Logging.LEVEL_ERROR, "Unable to compile pattern for " + prefName + ", trying default pattern:", e);
         }
@@ -1023,11 +1023,23 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
     }
 
     /**
+     * <p>Visits {@code org.openstreetmap.josm.data.osm.visitor.Visitor} for all referrers.</p>
+     *
+     * @param visitor the visitor. Ignored, if null.
+     * @deprecated use {@link #visitReferrers(OsmPrimitiveVisitor)}
+     */
+    @Deprecated
+    public void visitReferrers(org.openstreetmap.josm.data.osm.visitor.Visitor visitor) {
+        visitReferrers((OsmPrimitiveVisitor) visitor);
+    }
+
+    /**
      * <p>Visits {@code visitor} for all referrers.</p>
      *
      * @param visitor the visitor. Ignored, if null.
+     * @since 12809
      */
-    public void visitReferrers(Visitor visitor) {
+    public void visitReferrers(OsmPrimitiveVisitor visitor) {
         if (visitor == null) return;
         if (this.referrers == null)
             return;
@@ -1077,8 +1089,18 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
      * Implementation of the visitor scheme. Subclasses have to call the correct
      * visitor function.
      * @param visitor The visitor from which the visit() function must be called.
+     * @deprecated will be removed along with {@link org.openstreetmap.josm.data.osm.visitor.Visitor}
+     */
+    @Deprecated
+    public abstract void accept(org.openstreetmap.josm.data.osm.visitor.Visitor visitor);
+
+    /**
+     * Implementation of the visitor scheme. Subclasses have to call the correct
+     * visitor function.
+     * @param visitor The visitor from which the visit() function must be called.
+     * @since 12809
      */
-    public abstract void accept(Visitor visitor);
+    public abstract void accept(OsmPrimitiveVisitor visitor);
 
     /**
      * Get and write all attributes from the parameter. Does not fire any listener, so
diff --git a/src/org/openstreetmap/josm/data/osm/Relation.java b/src/org/openstreetmap/josm/data/osm/Relation.java
index 2baa390..5bf7297 100644
--- a/src/org/openstreetmap/josm/data/osm/Relation.java
+++ b/src/org/openstreetmap/josm/data/osm/Relation.java
@@ -12,9 +12,9 @@ import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Collectors;
 
-import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.osm.visitor.OsmPrimitiveVisitor;
 import org.openstreetmap.josm.data.osm.visitor.PrimitiveVisitor;
-import org.openstreetmap.josm.data.osm.visitor.Visitor;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.CopyList;
 import org.openstreetmap.josm.tools.SubclassFilteredCollection;
 import org.openstreetmap.josm.tools.Utils;
@@ -175,8 +175,17 @@ public final class Relation extends OsmPrimitive implements IRelation {
         return members[idx].getType();
     }
 
+    /**
+     * @deprecated no longer supported
+     */
+    @Override
+    @Deprecated
+    public void accept(org.openstreetmap.josm.data.osm.visitor.Visitor visitor) {
+        visitor.visit(this);
+    }
+
     @Override
-    public void accept(Visitor visitor) {
+    public void accept(OsmPrimitiveVisitor visitor) {
         visitor.visit(this);
     }
 
@@ -497,7 +506,7 @@ public final class Relation extends OsmPrimitive implements IRelation {
                             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)) {
+            if (Config.getPref().getBoolean("debug.checkDeleteReferenced", true)) {
                 for (RelationMember rm: members) {
                     if (rm.getMember().isDeleted())
                         throw new DataIntegrityProblemException("Deleted member referenced: " + toString());
diff --git a/src/org/openstreetmap/josm/data/osm/RelationMemberData.java b/src/org/openstreetmap/josm/data/osm/RelationMemberData.java
index 435ffb8..f18aa58 100644
--- a/src/org/openstreetmap/josm/data/osm/RelationMemberData.java
+++ b/src/org/openstreetmap/josm/data/osm/RelationMemberData.java
@@ -82,7 +82,7 @@ public class RelationMemberData implements PrimitiveId, Serializable {
      */
     @Override
     public OsmPrimitiveType getType() {
-        return memberType;
+        return getMemberType();
     }
 
     /**
@@ -90,7 +90,7 @@ public class RelationMemberData implements PrimitiveId, Serializable {
      */
     @Override
     public long getUniqueId() {
-        return memberId;
+        return getMemberId();
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/data/osm/User.java b/src/org/openstreetmap/josm/data/osm/User.java
index 260d5bb..3c23f97 100644
--- a/src/org/openstreetmap/josm/data/osm/User.java
+++ b/src/org/openstreetmap/josm/data/osm/User.java
@@ -73,12 +73,7 @@ public final class User {
             return lastUser;
         }
 
-        Long ouid = uid;
-        User user = userMap.get(ouid);
-        if (user == null) {
-            user = new User(uid, name);
-            userMap.put(ouid, user);
-        }
+        User user = userMap.computeIfAbsent(uid, k -> new User(uid, name));
         if (name != null) user.addName(name);
 
         lastUser = user;
diff --git a/src/org/openstreetmap/josm/data/osm/Way.java b/src/org/openstreetmap/josm/data/osm/Way.java
index 80760dc..01c11fd 100644
--- a/src/org/openstreetmap/josm/data/osm/Way.java
+++ b/src/org/openstreetmap/josm/data/osm/Way.java
@@ -10,10 +10,10 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.osm.visitor.OsmPrimitiveVisitor;
 import org.openstreetmap.josm.data.osm.visitor.PrimitiveVisitor;
-import org.openstreetmap.josm.data.osm.visitor.Visitor;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.CopyList;
 import org.openstreetmap.josm.tools.Pair;
 import org.openstreetmap.josm.tools.Utils;
@@ -206,7 +206,15 @@ public final class Way extends OsmPrimitive implements IWay {
         return chunkSet;
     }
 
-    @Override public void accept(Visitor visitor) {
+    /**
+     * @deprecated no longer supported
+     */
+    @Deprecated
+    @Override public void accept(org.openstreetmap.josm.data.osm.visitor.Visitor visitor) {
+        visitor.visit(this);
+    }
+
+    @Override public void accept(OsmPrimitiveVisitor visitor) {
         visitor.visit(this);
     }
 
@@ -600,7 +608,7 @@ public final class Way extends OsmPrimitive implements IWay {
                             "<html>" + tr("Deleted node referenced by {0}",
                                     DefaultNameFormatter.getInstance().formatAsHtmlUnorderedList(this)) + "</html>");
             }
-            if (Main.pref.getBoolean("debug.checkNullCoor", true)) {
+            if (Config.getPref().getBoolean("debug.checkNullCoor", true)) {
                 for (Node n: nodes) {
                     if (n.isVisible() && !n.isIncomplete() && !n.isLatLonKnown())
                         throw new DataIntegrityProblemException("Complete visible node with null coordinates: " + toString(),
@@ -658,6 +666,20 @@ public final class Way extends OsmPrimitive implements IWay {
         }
         return false;
     }
+    
+    /**
+     * Replies true if all nodes of the way are drawable, false otherwise.
+     * @return true if all nodes of the way are drawable, false otherwise.
+     * @since 12876
+     */
+    public boolean hasOnlyDrawableNodes() {
+        Node[] nodes = this.nodes;
+        for (Node node : nodes) {
+            if (!node.isDrawable())
+                return false;
+        }
+        return true;
+    }
 
     @Override
     public boolean isUsable() {
@@ -666,7 +688,7 @@ public final class Way extends OsmPrimitive implements IWay {
 
     @Override
     public boolean isDrawable() {
-        return super.isDrawable() && !hasIncompleteNodes();
+        return super.isDrawable() && hasOnlyDrawableNodes();
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/data/osm/history/HistoryDataSet.java b/src/org/openstreetmap/josm/data/osm/history/HistoryDataSet.java
index 8de0f4c..59147f1 100644
--- a/src/org/openstreetmap/josm/data/osm/history/HistoryDataSet.java
+++ b/src/org/openstreetmap/josm/data/osm/history/HistoryDataSet.java
@@ -124,10 +124,7 @@ public class HistoryDataSet implements LayerChangeListener {
      */
     public void put(HistoryOsmPrimitive primitive) {
         PrimitiveId id = new SimplePrimitiveId(primitive.getId(), primitive.getType());
-        if (data.get(id) == null) {
-            data.put(id, new ArrayList<HistoryOsmPrimitive>());
-        }
-        data.get(id).add(primitive);
+        data.computeIfAbsent(id, k-> new ArrayList<>()).add(primitive);
         fireHistoryUpdated(id);
     }
 
diff --git a/src/org/openstreetmap/josm/data/osm/visitor/AbstractVisitor.java b/src/org/openstreetmap/josm/data/osm/visitor/AbstractVisitor.java
index c6fbc2e..c2347c5 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/AbstractVisitor.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/AbstractVisitor.java
@@ -9,7 +9,9 @@ import org.openstreetmap.josm.data.osm.Changeset;
  * the visitors which are not interested.
  *
  * @author fred
+ * @deprecated use {@link OsmPrimitiveVisitor}
  */
+ at Deprecated
 public abstract class AbstractVisitor implements Visitor {
 
     @Override
diff --git a/src/org/openstreetmap/josm/data/osm/visitor/AllNodesVisitor.java b/src/org/openstreetmap/josm/data/osm/visitor/AllNodesVisitor.java
index 5ab1c70..08134e0 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/AllNodesVisitor.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/AllNodesVisitor.java
@@ -15,7 +15,7 @@ import org.openstreetmap.josm.data.osm.Way;
  *
  * @author imi
  */
-public class AllNodesVisitor extends AbstractVisitor {
+public class AllNodesVisitor implements OsmPrimitiveVisitor {
 
     /**
      * The resulting nodes collected so far.
diff --git a/src/org/openstreetmap/josm/data/osm/visitor/BoundingXYVisitor.java b/src/org/openstreetmap/josm/data/osm/visitor/BoundingXYVisitor.java
index 6e3c02e..aa025e2 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/BoundingXYVisitor.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/BoundingXYVisitor.java
@@ -16,13 +16,14 @@ import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.MapFrame;
+import org.openstreetmap.josm.spi.preferences.Config;
 
 /**
  * Calculates the total bounding rectangle of a series of {@link OsmPrimitive} objects, using the
  * EastNorth values as reference.
  * @author imi
  */
-public class BoundingXYVisitor extends AbstractVisitor {
+public class BoundingXYVisitor implements OsmPrimitiveVisitor {
 
     private ProjectionBounds bounds;
 
@@ -55,7 +56,7 @@ public class BoundingXYVisitor extends AbstractVisitor {
      */
     public void visit(Bounds b) {
         if (b != null) {
-            b.visitEdge(Main.getProjection(), this::visit);
+            Main.getProjection().visitOutline(b, this::visit);
         }
     }
 
@@ -73,15 +74,20 @@ public class BoundingXYVisitor extends AbstractVisitor {
     /**
      * Visiting call for lat/lon.
      * @param latlon lat/lon
+     * @since 12725 (public for ILatLon parameter)
      */
-    public void visit(LatLon latlon) {
+    public void visit(ILatLon latlon) {
         if (latlon != null) {
-            visit((ILatLon) latlon);
+            visit(latlon.getEastNorth(Main.getProjection()));
         }
     }
 
-    private void visit(ILatLon latlon) {
-        visit(latlon.getEastNorth());
+    /**
+     * Visiting call for lat/lon.
+     * @param latlon lat/lon
+     */
+    public void visit(LatLon latlon) {
+        visit((ILatLon) latlon);
     }
 
     /**
@@ -120,7 +126,7 @@ public class BoundingXYVisitor extends AbstractVisitor {
      * equal <code>null</code>) this method does not do anything.
      */
     public void enlargeBoundingBox() {
-        enlargeBoundingBox(Main.pref.getDouble("edit.zoom-enlarge-bbox", 0.002));
+        enlargeBoundingBox(Config.getPref().getDouble("edit.zoom-enlarge-bbox", 0.002));
     }
 
     /**
@@ -137,10 +143,10 @@ public class BoundingXYVisitor extends AbstractVisitor {
         LatLon maxLatlon = Main.getProjection().eastNorth2latlon(bounds.getMax());
         bounds = new ProjectionBounds(new LatLon(
                         Math.max(-90, minLatlon.lat() - enlargeDegree),
-                        Math.max(-180, minLatlon.lon() - enlargeDegree)).getEastNorth(),
+                        Math.max(-180, minLatlon.lon() - enlargeDegree)).getEastNorth(Main.getProjection()),
                 new LatLon(
                         Math.min(90, maxLatlon.lat() + enlargeDegree),
-                        Math.min(180, maxLatlon.lon() + enlargeDegree)).getEastNorth());
+                        Math.min(180, maxLatlon.lon() + enlargeDegree)).getEastNorth(Main.getProjection()));
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitor.java b/src/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitor.java
index 1754d0c..7067dd7 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitor.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitor.java
@@ -29,7 +29,7 @@ import org.openstreetmap.josm.tools.CheckParameterUtil;
  * incomplete {@link OsmPrimitive}s in the "hull", if they are not themselves present in the original collection.
  * @since 1891
  */
-public class MergeSourceBuildingVisitor extends AbstractVisitor {
+public class MergeSourceBuildingVisitor implements OsmPrimitiveVisitor {
     private final DataSet selectionBase;
     private final DataSet hull;
     private final Map<OsmPrimitive, PrimitiveData> mappedPrimitives;
diff --git a/src/org/openstreetmap/josm/data/osm/visitor/Visitor.java b/src/org/openstreetmap/josm/data/osm/visitor/OsmPrimitiveVisitor.java
similarity index 62%
copy from src/org/openstreetmap/josm/data/osm/visitor/Visitor.java
copy to src/org/openstreetmap/josm/data/osm/visitor/OsmPrimitiveVisitor.java
index 3ac427a..d323245 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/Visitor.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/OsmPrimitiveVisitor.java
@@ -1,17 +1,16 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.osm.visitor;
 
-import org.openstreetmap.josm.data.osm.Changeset;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.Way;
 
 /**
- * Implementation of the visitor scheme. Every @{link org.openstreetmap.josm.data.OsmPrimitive}
- * can be visited by several different visitors.
- * @since 8
+ * Implementation of the visitor pattern for the 3 {@link org.openstreetmap.josm.data.osm.OsmPrimitive}
+ * types {@link Node}, {@link Way} and {@link Relation}.
+ * @since 12810
  */
-public interface Visitor {
+public interface OsmPrimitiveVisitor {
     /**
      * Visiting call for points.
      * @param n The node to inspect.
@@ -32,10 +31,4 @@ public interface Visitor {
      */
     void visit(Relation r);
 
-    /**
-     * Visiting call for changesets.
-     * @param cs The changeset to inspect.
-     * @since 1523
-     */
-    void visit(Changeset cs);
 }
diff --git a/src/org/openstreetmap/josm/data/osm/visitor/Visitor.java b/src/org/openstreetmap/josm/data/osm/visitor/Visitor.java
index 3ac427a..3928339 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/Visitor.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/Visitor.java
@@ -2,36 +2,15 @@
 package org.openstreetmap.josm.data.osm.visitor;
 
 import org.openstreetmap.josm.data.osm.Changeset;
-import org.openstreetmap.josm.data.osm.Node;
-import org.openstreetmap.josm.data.osm.Relation;
-import org.openstreetmap.josm.data.osm.Way;
 
 /**
  * Implementation of the visitor scheme. Every @{link org.openstreetmap.josm.data.OsmPrimitive}
  * can be visited by several different visitors.
  * @since 8
+ * @deprecated class will be removed (use {@link OsmPrimitiveVisitor} if suitable)
  */
-public interface Visitor {
-    /**
-     * Visiting call for points.
-     * @param n The node to inspect.
-     */
-    void visit(Node n);
-
-    /**
-     * Visiting call for lines.
-     * @param w The way to inspect.
-     * @since 64
-     */
-    void visit(Way w);
-
-    /**
-     * Visiting call for relations.
-     * @param r The relation to inspect.
-     * @since 343
-     */
-    void visit(Relation r);
-
+ at Deprecated
+public interface Visitor extends OsmPrimitiveVisitor {
     /**
      * Visiting call for changesets.
      * @param cs The changeset to inspect.
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 737899e..ddb2648 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/paint/AbstractMapRenderer.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/paint/AbstractMapRenderer.java
@@ -8,7 +8,6 @@ import java.awt.geom.Path2D;
 import java.awt.geom.Rectangle2D;
 import java.util.Iterator;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.BBox;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
@@ -18,6 +17,7 @@ import org.openstreetmap.josm.gui.MapViewState;
 import org.openstreetmap.josm.gui.MapViewState.MapViewPoint;
 import org.openstreetmap.josm.gui.MapViewState.MapViewRectangle;
 import org.openstreetmap.josm.gui.NavigatableComponent;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.Logging;
 
@@ -181,9 +181,9 @@ public abstract class AbstractMapRenderer implements Rendering {
      * @param virtual <code>true</code> if virtual nodes are used
      */
     protected void getSettings(boolean virtual) {
-        this.virtualNodeSize = virtual ? Main.pref.getInteger("mappaint.node.virtual-size", 8) / 2 : 0;
-        this.virtualNodeSpace = Main.pref.getInteger("mappaint.node.virtual-space", 70);
-        this.segmentNumberSpace = Main.pref.getInteger("mappaint.segmentnumber.space", 40);
+        this.virtualNodeSize = virtual ? Config.getPref().getInt("mappaint.node.virtual-size", 8) / 2 : 0;
+        this.virtualNodeSpace = Config.getPref().getInt("mappaint.node.virtual-space", 70);
+        this.segmentNumberSpace = Config.getPref().getInt("mappaint.segmentnumber.space", 40);
         getColors();
     }
 
diff --git a/src/org/openstreetmap/josm/data/osm/visitor/paint/ComputeStyleListWorker.java b/src/org/openstreetmap/josm/data/osm/visitor/paint/ComputeStyleListWorker.java
index 0a415e4..e9cefe8 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/paint/ComputeStyleListWorker.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/paint/ComputeStyleListWorker.java
@@ -7,13 +7,11 @@ import java.util.List;
 import java.util.concurrent.ForkJoinTask;
 import java.util.concurrent.RecursiveTask;
 
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.osm.Changeset;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.Way;
-import org.openstreetmap.josm.data.osm.visitor.Visitor;
+import org.openstreetmap.josm.data.osm.visitor.OsmPrimitiveVisitor;
 import org.openstreetmap.josm.data.osm.visitor.paint.StyledMapRenderer.StyleRecord;
 import org.openstreetmap.josm.gui.NavigatableComponent;
 import org.openstreetmap.josm.gui.mappaint.ElemStyles;
@@ -25,6 +23,7 @@ import org.openstreetmap.josm.gui.mappaint.styleelement.AreaIconElement;
 import org.openstreetmap.josm.gui.mappaint.styleelement.NodeElement;
 import org.openstreetmap.josm.gui.mappaint.styleelement.StyleElement;
 import org.openstreetmap.josm.gui.mappaint.styleelement.TextElement;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.JosmRuntimeException;
 import org.openstreetmap.josm.tools.bugreport.BugReport;
 
@@ -32,7 +31,7 @@ import org.openstreetmap.josm.tools.bugreport.BugReport;
  * Helper to compute style list.
  * @since 11914 (extracted from StyledMapRenderer)
  */
-public class ComputeStyleListWorker extends RecursiveTask<List<StyleRecord>> implements Visitor {
+public class ComputeStyleListWorker extends RecursiveTask<List<StyleRecord>> implements OsmPrimitiveVisitor {
     private final transient List<? extends OsmPrimitive> input;
     private final transient List<StyleRecord> output;
 
@@ -60,9 +59,9 @@ public class ComputeStyleListWorker extends RecursiveTask<List<StyleRecord>> imp
         this.input = input;
         this.output = output;
         this.directExecutionTaskSize = directExecutionTaskSize;
-        this.drawArea = circum <= Main.pref.getInteger("mappaint.fillareas", 10_000_000);
-        this.drawMultipolygon = drawArea && Main.pref.getBoolean("mappaint.multipolygon", true);
-        this.drawRestriction = Main.pref.getBoolean("mappaint.restriction", true);
+        this.drawArea = circum <= Config.getPref().getInt("mappaint.fillareas", 10_000_000);
+        this.drawMultipolygon = drawArea && Config.getPref().getBoolean("mappaint.multipolygon", true);
+        this.drawRestriction = Config.getPref().getBoolean("mappaint.restriction", true);
         this.styles.setDrawMultipolygon(drawMultipolygon);
     }
 
@@ -127,11 +126,6 @@ public class ComputeStyleListWorker extends RecursiveTask<List<StyleRecord>> imp
         add(r, StyledMapRenderer.computeFlags(r, true));
     }
 
-    @Override
-    public void visit(Changeset cs) {
-        throw new UnsupportedOperationException();
-    }
-
     /**
      * Add new style records for the given node.
      * @param osm node
diff --git a/src/org/openstreetmap/josm/data/osm/visitor/paint/MapPaintSettings.java b/src/org/openstreetmap/josm/data/osm/visitor/paint/MapPaintSettings.java
index 110e4df..9641ded 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/paint/MapPaintSettings.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/paint/MapPaintSettings.java
@@ -3,9 +3,9 @@ package org.openstreetmap.josm.data.osm.visitor.paint;
 
 import java.awt.Color;
 
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
-import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
+import org.openstreetmap.josm.spi.preferences.Config;
 
 /**
  * Global mappaint settings.
@@ -68,14 +68,14 @@ public final class MapPaintSettings implements PreferenceChangedListener {
 
     private MapPaintSettings() {
         load();
-        Main.pref.addPreferenceChangeListener(this);
+        Config.getPref().addPreferenceChangeListener(this);
     }
 
     private void load() {
-        showDirectionArrow = Main.pref.getBoolean("draw.segment.direction", false);
-        showOnewayArrow = Main.pref.getBoolean("draw.oneway", true);
-        useRealWidth = Main.pref.getBoolean("mappaint.useRealWidth", false);
-        defaultSegmentWidth = Main.pref.getInteger("mappaint.segment.default-width", 2);
+        showDirectionArrow = Config.getPref().getBoolean("draw.segment.direction", false);
+        showOnewayArrow = Config.getPref().getBoolean("draw.oneway", true);
+        useRealWidth = Config.getPref().getBoolean("mappaint.useRealWidth", false);
+        defaultSegmentWidth = Config.getPref().getInt("mappaint.segment.default-width", 2);
 
         selectedColor = PaintColors.SELECTED.get();
         relationSelectedColor = PaintColors.RELATIONSELECTED.get();
@@ -90,24 +90,24 @@ public final class MapPaintSettings implements PreferenceChangedListener {
             taggedConnectionColor = connectionColor;
         }
 
-        showOrderNumber = Main.pref.getBoolean("draw.segment.order_number", false);
-        showOrderNumberOnSelectedWay = Main.pref.getBoolean("draw.segment.order_number.on_selected", false);
-        showHeadArrowOnly = Main.pref.getBoolean("draw.segment.head_only", false);
+        showOrderNumber = Config.getPref().getBoolean("draw.segment.order_number", false);
+        showOrderNumberOnSelectedWay = Config.getPref().getBoolean("draw.segment.order_number.on_selected", false);
+        showHeadArrowOnly = Config.getPref().getBoolean("draw.segment.head_only", false);
 
-        showNamesDistance = Main.pref.getInteger("mappaint.shownames", 10_000_000);
-        useStrokesDistance = Main.pref.getInteger("mappaint.strokes", 10_000_000);
-        showIconsDistance = Main.pref.getInteger("mappaint.showicons", 10_000_000);
+        showNamesDistance = Config.getPref().getInt("mappaint.shownames", 10_000_000);
+        useStrokesDistance = Config.getPref().getInt("mappaint.strokes", 10_000_000);
+        showIconsDistance = Config.getPref().getInt("mappaint.showicons", 10_000_000);
 
-        selectedNodeSize = Main.pref.getInteger("mappaint.node.selected-size", 5);
-        unselectedNodeSize = Main.pref.getInteger("mappaint.node.unselected-size", 3);
-        connectionNodeSize = Main.pref.getInteger("mappaint.node.connection-size", 5);
-        taggedNodeSize = Main.pref.getInteger("mappaint.node.tagged-size", 3);
-        fillSelectedNode = Main.pref.getBoolean("mappaint.node.fill-selected", true);
-        fillUnselectedNode = Main.pref.getBoolean("mappaint.node.fill-unselected", false);
-        fillTaggedNode = Main.pref.getBoolean("mappaint.node.fill-tagged", true);
-        fillConnectionNode = Main.pref.getBoolean("mappaint.node.fill-connection", false);
+        selectedNodeSize = Config.getPref().getInt("mappaint.node.selected-size", 5);
+        unselectedNodeSize = Config.getPref().getInt("mappaint.node.unselected-size", 3);
+        connectionNodeSize = Config.getPref().getInt("mappaint.node.connection-size", 5);
+        taggedNodeSize = Config.getPref().getInt("mappaint.node.tagged-size", 3);
+        fillSelectedNode = Config.getPref().getBoolean("mappaint.node.fill-selected", true);
+        fillUnselectedNode = Config.getPref().getBoolean("mappaint.node.fill-unselected", false);
+        fillTaggedNode = Config.getPref().getBoolean("mappaint.node.fill-tagged", true);
+        fillConnectionNode = Config.getPref().getBoolean("mappaint.node.fill-connection", false);
 
-        outlineOnly = Main.pref.getBoolean("draw.data.area_outline_only", false);
+        outlineOnly = Config.getPref().getBoolean("draw.data.area_outline_only", false);
     }
 
     @Override
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 661e730..c882f3e 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/paint/MapRendererFactory.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/paint/MapRendererFactory.java
@@ -12,9 +12,9 @@ import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.NavigatableComponent;
 import org.openstreetmap.josm.plugins.PluginHandler;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.Logging;
 
@@ -150,7 +150,7 @@ public final class MapRendererFactory {
 
     private MapRendererFactory() {
         registerDefaultRenderers();
-        String rendererClassName = Main.pref.get(PREF_KEY_RENDERER_CLASS_NAME, null);
+        String rendererClassName = Config.getPref().get(PREF_KEY_RENDERER_CLASS_NAME, null);
         if (rendererClassName != null) {
             activateMapRenderer(rendererClassName);
         } else {
@@ -273,7 +273,7 @@ public final class MapRendererFactory {
                     MessageFormat.format("Class ''{0}'' not registered as renderer. Can''t activate it.", renderer.getName())
             );
         this.activeRenderer = renderer;
-        Main.pref.put(PREF_KEY_RENDERER_CLASS_NAME, activeRenderer.getName());
+        Config.getPref().put(PREF_KEY_RENDERER_CLASS_NAME, activeRenderer.getName());
 
     }
 
diff --git a/src/org/openstreetmap/josm/data/osm/visitor/paint/RenderBenchmarkCollector.java b/src/org/openstreetmap/josm/data/osm/visitor/paint/RenderBenchmarkCollector.java
index d5fe1fd..79002ea 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/paint/RenderBenchmarkCollector.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/paint/RenderBenchmarkCollector.java
@@ -5,9 +5,9 @@ import java.io.PrintStream;
 import java.util.List;
 import java.util.function.Supplier;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.visitor.paint.StyledMapRenderer.StyleRecord;
 import org.openstreetmap.josm.gui.mappaint.mapcss.Selector;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -147,7 +147,7 @@ public class RenderBenchmarkCollector {
      * @return A supplier that returns a nop or a logging benchmark.
      */
     public static Supplier<RenderBenchmarkCollector> defaultBenchmarkSupplier() {
-        return () -> Logging.isTraceEnabled() || Main.pref.getBoolean("mappaint.render.benchmark", false)
+        return () -> Logging.isTraceEnabled() || Config.getPref().getBoolean("mappaint.render.benchmark", false)
                 ? new LoggingBenchmark() : new RenderBenchmarkCollector();
     }
 }
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 b487c6f..98a6d53 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java
@@ -42,7 +42,6 @@ import java.util.function.Supplier;
 import javax.swing.AbstractButton;
 import javax.swing.FocusManager;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.osm.BBox;
@@ -75,9 +74,11 @@ import org.openstreetmap.josm.gui.mappaint.styleelement.StyleElement;
 import org.openstreetmap.josm.gui.mappaint.styleelement.Symbol;
 import org.openstreetmap.josm.gui.mappaint.styleelement.TextLabel;
 import org.openstreetmap.josm.gui.mappaint.styleelement.placement.PositionForAreaStrategy;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.CompositeList;
 import org.openstreetmap.josm.tools.Geometry;
 import org.openstreetmap.josm.tools.Geometry.AreaAndPerimeter;
+import org.openstreetmap.josm.tools.HiDPISupport;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.JosmRuntimeException;
 import org.openstreetmap.josm.tools.Logging;
@@ -234,7 +235,7 @@ public class StyledMapRenderer extends AbstractMapRenderer {
         Boolean cached = IS_GLYPH_VECTOR_DOUBLE_TRANSLATION_BUG.get(font);
         if (cached != null)
             return cached;
-        String overridePref = Main.pref.get("glyph-bug", "auto");
+        String overridePref = Config.getPref().get("glyph-bug", "auto");
         if ("auto".equals(overridePref)) {
             FontRenderContext frc = new FontRenderContext(null, false, false);
             GlyphVector gv = font.createGlyphVector(frc, "x");
@@ -416,7 +417,11 @@ public class StyledMapRenderer extends AbstractMapRenderer {
                     g.setClip(oldClip);
                 }
             } else {
-                TexturePaint texture = new TexturePaint(fillImage.getImage(disabled),
+                Image img = fillImage.getImage(disabled);
+                // TexturePaint requires BufferedImage -> get base image from
+                // possible multi-resolution image
+                img = HiDPISupport.getBaseImage(img);
+                TexturePaint texture = new TexturePaint((BufferedImage) img,
                         new Rectangle(0, 0, fillImage.getWidth(), fillImage.getHeight()));
                 g.setPaint(texture);
                 Float alpha = fillImage.getAlphaFloat();
@@ -656,7 +661,7 @@ public class StyledMapRenderer extends AbstractMapRenderer {
 
         double startOffset = computeStartOffset(phase, repeat);
 
-        BufferedImage image = pattern.getImage(disabled);
+        Image image = pattern.getImage(disabled);
 
         path.visitClippedLine(repeat, (inLineOffset, start, end, startIsOldEnd) -> {
             final double segmentLength = start.distanceToInView(end);
@@ -1149,7 +1154,7 @@ public class StyledMapRenderer extends AbstractMapRenderer {
         }
         displayText(() -> {
             AffineTransform defaultTransform = g.getTransform();
-            g.setTransform(at);
+            g.transform(at);
             g.setFont(text.font);
             g.drawString(name, 0, 0);
             g.setTransform(defaultTransform);
@@ -1656,7 +1661,7 @@ public class StyledMapRenderer extends AbstractMapRenderer {
     private void paintRecord(StyleRecord record) {
         try {
             record.paintPrimitive(paintSettings, this);
-        } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException e) {
+        } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException | NullPointerException e) {
             throw BugReport.intercept(e).put("record", record);
         }
     }
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 88d0e16..d15463c 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/paint/WireframeMapRenderer.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/paint/WireframeMapRenderer.java
@@ -15,10 +15,8 @@ import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.osm.BBox;
-import org.openstreetmap.josm.data.osm.Changeset;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -26,11 +24,12 @@ import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.osm.WaySegment;
-import org.openstreetmap.josm.data.osm.visitor.Visitor;
+import org.openstreetmap.josm.data.osm.visitor.OsmPrimitiveVisitor;
 import org.openstreetmap.josm.gui.MapViewState.MapViewPoint;
 import org.openstreetmap.josm.gui.MapViewState.MapViewRectangle;
 import org.openstreetmap.josm.gui.NavigatableComponent;
 import org.openstreetmap.josm.gui.draw.MapPath2D;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -38,7 +37,7 @@ import org.openstreetmap.josm.tools.Utils;
  * previous set graphic environment.
  * @since 23
  */
-public class WireframeMapRenderer extends AbstractMapRenderer implements Visitor {
+public class WireframeMapRenderer extends AbstractMapRenderer implements OsmPrimitiveVisitor {
 
     /** Color Preference for ways not matching any other group */
     protected Color dfltWayColor;
@@ -147,7 +146,7 @@ public class WireframeMapRenderer extends AbstractMapRenderer implements Visitor
         fillTaggedNode = settings.isFillTaggedNode();
 
         g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
-                Main.pref.getBoolean("mappaint.wireframe.use-antialiasing", false) ?
+                Config.getPref().getBoolean("mappaint.wireframe.use-antialiasing", false) ?
                         RenderingHints.VALUE_ANTIALIAS_ON : RenderingHints.VALUE_ANTIALIAS_OFF);
     }
 
@@ -387,13 +386,6 @@ public class WireframeMapRenderer extends AbstractMapRenderer implements Visitor
         }
     }
 
-    /**
-     * Visitor for changesets not used in this class
-     * @param cs The changeset for inspection.
-     */
-    @Override
-    public void visit(Changeset cs) {/* ignore */}
-
     @Override
     public void drawNode(Node n, Color color, int size, boolean fill) {
         if (size > 1) {
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 ad5fe6c..70d5771 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
@@ -14,8 +14,8 @@ import java.util.Optional;
 import java.util.Set;
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
-import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
@@ -27,6 +27,7 @@ import org.openstreetmap.josm.data.osm.event.NodeMovedEvent;
 import org.openstreetmap.josm.data.osm.event.WayNodesChangedEvent;
 import org.openstreetmap.josm.data.osm.visitor.paint.relations.Multipolygon.PolyData.Intersection;
 import org.openstreetmap.josm.data.projection.Projection;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Geometry;
 import org.openstreetmap.josm.tools.Geometry.AreaAndPerimeter;
 import org.openstreetmap.josm.tools.Logging;
@@ -95,21 +96,21 @@ public class Multipolygon {
 
         private void initFromPreferences() {
             initDefaults();
-            if (Main.pref == null) return;
+            if (Config.getPref() == null) return;
             Collection<String> literals;
-            literals = Main.pref.getCollection(PREF_KEY_OUTER_ROLES);
+            literals = Config.getPref().getList(PREF_KEY_OUTER_ROLES);
             if (literals != null && !literals.isEmpty()) {
                 setNormalized(literals, outerExactRoles);
             }
-            literals = Main.pref.getCollection(PREF_KEY_OUTER_ROLE_PREFIXES);
+            literals = Config.getPref().getList(PREF_KEY_OUTER_ROLE_PREFIXES);
             if (literals != null && !literals.isEmpty()) {
                 setNormalized(literals, outerRolePrefixes);
             }
-            literals = Main.pref.getCollection(PREF_KEY_INNER_ROLES);
+            literals = Config.getPref().getList(PREF_KEY_INNER_ROLES);
             if (literals != null && !literals.isEmpty()) {
                 setNormalized(literals, innerExactRoles);
             }
-            literals = Main.pref.getCollection(PREF_KEY_INNER_ROLE_PREFIXES);
+            literals = Config.getPref().getList(PREF_KEY_INNER_ROLE_PREFIXES);
             if (literals != null && !literals.isEmpty()) {
                 setNormalized(literals, innerRolePrefixes);
             }
@@ -156,9 +157,9 @@ public class Multipolygon {
     private static synchronized MultipolygonRoleMatcher getMultipolygonRoleMatcher() {
         if (roleMatcher == null) {
             roleMatcher = new MultipolygonRoleMatcher();
-            if (Main.pref != null) {
+            if (Config.getPref() != null) {
                 roleMatcher.initFromPreferences();
-                Main.pref.addPreferenceChangeListener(roleMatcher);
+                Config.getPref().addPreferenceChangeListener(roleMatcher);
             }
         }
         return roleMatcher;
diff --git a/src/org/openstreetmap/josm/data/preferences/AbstractProperty.java b/src/org/openstreetmap/josm/data/preferences/AbstractProperty.java
index 740429a..1ecf57d 100644
--- a/src/org/openstreetmap/josm/data/preferences/AbstractProperty.java
+++ b/src/org/openstreetmap/josm/data/preferences/AbstractProperty.java
@@ -3,8 +3,8 @@ package org.openstreetmap.josm.data.preferences;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Preferences;
-import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
-import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.tools.ListenableWeakReference;
 import org.openstreetmap.josm.tools.bugreport.BugReport;
 
diff --git a/src/org/openstreetmap/josm/data/preferences/AbstractToStringProperty.java b/src/org/openstreetmap/josm/data/preferences/AbstractToStringProperty.java
index 1be8798..55185d9 100644
--- a/src/org/openstreetmap/josm/data/preferences/AbstractToStringProperty.java
+++ b/src/org/openstreetmap/josm/data/preferences/AbstractToStringProperty.java
@@ -1,7 +1,7 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.preferences;
 
-import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.bugreport.BugReport;
diff --git a/src/org/openstreetmap/josm/data/preferences/CachedProperty.java b/src/org/openstreetmap/josm/data/preferences/CachedProperty.java
index 6036a95..3ed1899 100644
--- a/src/org/openstreetmap/josm/data/preferences/CachedProperty.java
+++ b/src/org/openstreetmap/josm/data/preferences/CachedProperty.java
@@ -1,9 +1,9 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.preferences;
 
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
-import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
+import org.openstreetmap.josm.spi.preferences.Config;
 
 /**
  * This is an old-style cached preference value.
@@ -20,14 +20,14 @@ public abstract class CachedProperty<T> extends AbstractProperty<T> implements P
 
     protected CachedProperty(String key, String defaultValueAsString) {
         super(key, null);
-        Main.pref.addKeyPreferenceChangeListener(key, this);
+        Config.getPref().addKeyPreferenceChangeListener(key, this);
         this.defaultValueAsString = defaultValueAsString;
         updateValue();
     }
 
     protected final void updateValue() {
-        if (!Main.pref.get(key).isEmpty()) {
-            this.value = fromString(Main.pref.get(key));
+        if (!Config.getPref().get(key).isEmpty()) {
+            this.value = fromString(Config.getPref().get(key));
         } else {
             this.value = getDefaultValue();
         }
@@ -42,7 +42,7 @@ public abstract class CachedProperty<T> extends AbstractProperty<T> implements P
     }
 
     public void put(String value) {
-        Main.pref.put(key, value);
+        Config.getPref().put(key, value);
         this.value = fromString(value);
         updateCount++;
     }
@@ -50,7 +50,7 @@ public abstract class CachedProperty<T> extends AbstractProperty<T> implements P
     @Override
     public final boolean put(T value) {
         // Not used
-        throw new IllegalAccessError("You cannot use put(T). Use put(String) instead.");
+        throw new UnsupportedOperationException("You cannot use put(T). Use put(String) instead.");
     }
 
     public int getUpdateCount() {
diff --git a/src/org/openstreetmap/josm/data/preferences/CollectionProperty.java b/src/org/openstreetmap/josm/data/preferences/CollectionProperty.java
index 44f6864..27351b0 100644
--- a/src/org/openstreetmap/josm/data/preferences/CollectionProperty.java
+++ b/src/org/openstreetmap/josm/data/preferences/CollectionProperty.java
@@ -7,7 +7,9 @@ import org.openstreetmap.josm.Main;
 
 /**
  * A property containing a {@code Collection} of {@code String} as value.
+ * @deprecated use {@link ListProperty}
  */
+ at Deprecated
 public class CollectionProperty extends AbstractProperty<Collection<String>> {
 
     /**
diff --git a/src/org/openstreetmap/josm/data/preferences/ListProperty.java b/src/org/openstreetmap/josm/data/preferences/ListProperty.java
new file mode 100644
index 0000000..c04e1bb
--- /dev/null
+++ b/src/org/openstreetmap/josm/data/preferences/ListProperty.java
@@ -0,0 +1,34 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.preferences;
+
+import java.util.List;
+
+import org.openstreetmap.josm.Main;
+
+/**
+ * A property containing a {@code List} of {@code String} as value.
+ */
+public class ListProperty extends AbstractProperty<List<String>> {
+
+    /**
+     * Constructs a new {@code CollectionProperty}.
+     * @param key The property key
+     * @param defaultValue The default value
+     */
+    public ListProperty(String key, List<String> defaultValue) {
+        super(key, defaultValue);
+        if (Main.pref != null) {
+            get();
+        }
+    }
+
+    @Override
+    public List<String> get() {
+        return getPreferences().getList(getKey(), getDefaultValue());
+    }
+
+    @Override
+    public boolean put(List<String> value) {
+        return getPreferences().putList(getKey(), value);
+    }
+}
diff --git a/src/org/openstreetmap/josm/data/preferences/ParametrizedEnumProperty.java b/src/org/openstreetmap/josm/data/preferences/ParametrizedEnumProperty.java
index 0400779..98c1dd5 100644
--- a/src/org/openstreetmap/josm/data/preferences/ParametrizedEnumProperty.java
+++ b/src/org/openstreetmap/josm/data/preferences/ParametrizedEnumProperty.java
@@ -1,7 +1,7 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.preferences;
 
-import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 
 /**
@@ -22,11 +22,11 @@ public abstract class ParametrizedEnumProperty<T extends Enum<T>> {
     protected abstract String getKey(String... params);
 
     public T get(String... params) {
-        return parse(Main.pref.get(getKey(params), defaultValue.name()));
+        return parse(Config.getPref().get(getKey(params), defaultValue.name()));
     }
 
     public boolean put(T value, String... params) {
-        return Main.pref.put(getKey(params), value.name());
+        return Config.getPref().put(getKey(params), value.name());
     }
 
     protected T parse(String s) {
diff --git a/src/org/openstreetmap/josm/data/preferences/PreferencesReader.java b/src/org/openstreetmap/josm/data/preferences/PreferencesReader.java
index 5a1f51a..8bbf83a 100644
--- a/src/org/openstreetmap/josm/data/preferences/PreferencesReader.java
+++ b/src/org/openstreetmap/josm/data/preferences/PreferencesReader.java
@@ -31,6 +31,11 @@ import javax.xml.validation.Validator;
 
 import org.openstreetmap.josm.io.CachedFile;
 import org.openstreetmap.josm.io.XmlStreamParsingException;
+import org.openstreetmap.josm.spi.preferences.Setting;
+import org.openstreetmap.josm.spi.preferences.ListListSetting;
+import org.openstreetmap.josm.spi.preferences.ListSetting;
+import org.openstreetmap.josm.spi.preferences.MapListSetting;
+import org.openstreetmap.josm.spi.preferences.StringSetting;
 import org.openstreetmap.josm.tools.Logging;
 import org.xml.sax.SAXException;
 
diff --git a/src/org/openstreetmap/josm/data/preferences/PreferencesWriter.java b/src/org/openstreetmap/josm/data/preferences/PreferencesWriter.java
index cdfd5a9..397b6e9 100644
--- a/src/org/openstreetmap/josm/data/preferences/PreferencesWriter.java
+++ b/src/org/openstreetmap/josm/data/preferences/PreferencesWriter.java
@@ -11,6 +11,12 @@ import java.util.stream.Stream;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Version;
 import org.openstreetmap.josm.io.XmlWriter;
+import org.openstreetmap.josm.spi.preferences.Setting;
+import org.openstreetmap.josm.spi.preferences.ListListSetting;
+import org.openstreetmap.josm.spi.preferences.SettingVisitor;
+import org.openstreetmap.josm.spi.preferences.ListSetting;
+import org.openstreetmap.josm.spi.preferences.MapListSetting;
+import org.openstreetmap.josm.spi.preferences.StringSetting;
 
 /**
  * Write preferences to XML.
diff --git a/src/org/openstreetmap/josm/data/preferences/sources/ExtendedSourceEntry.java b/src/org/openstreetmap/josm/data/preferences/sources/ExtendedSourceEntry.java
index 393eebe..e708fc8 100644
--- a/src/org/openstreetmap/josm/data/preferences/sources/ExtendedSourceEntry.java
+++ b/src/org/openstreetmap/josm/data/preferences/sources/ExtendedSourceEntry.java
@@ -27,11 +27,13 @@ public class ExtendedSourceEntry extends SourceEntry implements Comparable<Exten
 
     /**
      * Constructs a new {@code ExtendedSourceEntry}.
+     * @param type type of source entry
      * @param simpleFileName file name used for display
      * @param url URL that {@link org.openstreetmap.josm.io.CachedFile} understands
+     * @since 12825
      */
-    public ExtendedSourceEntry(String simpleFileName, String url) {
-        super(url, null, null, true);
+    public ExtendedSourceEntry(SourceType type, String simpleFileName, String url) {
+        super(type, url, null, null, true);
         this.simpleFileName = simpleFileName;
     }
 
diff --git a/src/org/openstreetmap/josm/data/preferences/sources/MapPaintPrefHelper.java b/src/org/openstreetmap/josm/data/preferences/sources/MapPaintPrefHelper.java
index eea7f12..233fafd 100644
--- a/src/org/openstreetmap/josm/data/preferences/sources/MapPaintPrefHelper.java
+++ b/src/org/openstreetmap/josm/data/preferences/sources/MapPaintPrefHelper.java
@@ -3,6 +3,7 @@ package org.openstreetmap.josm.data.preferences.sources;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
@@ -11,7 +12,7 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.TreeSet;
 
-import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -29,7 +30,7 @@ public class MapPaintPrefHelper extends SourcePrefHelper {
      * Constructs a new {@code MapPaintPrefHelper}.
      */
     public MapPaintPrefHelper() {
-        super("mappaint.style.entries");
+        super("mappaint.style.entries", SourceType.MAP_PAINT_STYLE);
     }
 
     @Override
@@ -51,7 +52,7 @@ public class MapPaintPrefHelper extends SourcePrefHelper {
     private boolean insertNewDefaults(List<SourceEntry> list) {
         boolean changed = false;
 
-        Collection<String> knownDefaults = new TreeSet<>(Main.pref.getCollection("mappaint.style.known-defaults"));
+        Collection<String> knownDefaults = new TreeSet<>(Config.getPref().getList("mappaint.style.known-defaults"));
 
         Collection<ExtendedSourceEntry> defaults = getDefault();
         int insertionIdx = 0;
@@ -69,7 +70,7 @@ public class MapPaintPrefHelper extends SourcePrefHelper {
             }
             knownDefaults.add(def.url);
         }
-        Main.pref.putCollection("mappaint.style.known-defaults", knownDefaults);
+        Config.getPref().putList("mappaint.style.known-defaults", new ArrayList<>(knownDefaults));
 
         // XML style is not bundled anymore
         list.remove(Utils.find(list, se -> "resource://styles/standard/elemstyles.xml".equals(se.url)));
@@ -79,12 +80,12 @@ public class MapPaintPrefHelper extends SourcePrefHelper {
 
     @Override
     public Collection<ExtendedSourceEntry> getDefault() {
-        ExtendedSourceEntry defJosmMapcss = new ExtendedSourceEntry("elemstyles.mapcss", "resource://styles/standard/elemstyles.mapcss");
+        ExtendedSourceEntry defJosmMapcss = new ExtendedSourceEntry(type, "elemstyles.mapcss", "resource://styles/standard/elemstyles.mapcss");
         defJosmMapcss.active = true;
         defJosmMapcss.name = "standard";
         defJosmMapcss.title = tr("JOSM default (MapCSS)");
         defJosmMapcss.description = tr("Internal style to be used as base for runtime switchable overlay styles");
-        ExtendedSourceEntry defPL2 = new ExtendedSourceEntry("potlatch2.mapcss", "resource://styles/standard/potlatch2.mapcss");
+        ExtendedSourceEntry defPL2 = new ExtendedSourceEntry(type, "potlatch2.mapcss", "resource://styles/standard/potlatch2.mapcss");
         defPL2.active = false;
         defPL2.name = "standard";
         defPL2.title = tr("Potlatch 2");
@@ -107,6 +108,6 @@ public class MapPaintPrefHelper extends SourcePrefHelper {
 
     @Override
     public SourceEntry deserialize(Map<String, String> s) {
-        return new SourceEntry(s.get("url"), s.get("ptoken"), s.get("title"), Boolean.parseBoolean(s.get("active")));
+        return new SourceEntry(type, s.get("url"), s.get("ptoken"), s.get("title"), Boolean.parseBoolean(s.get("active")));
     }
 }
diff --git a/src/org/openstreetmap/josm/data/preferences/sources/PresetPrefHelper.java b/src/org/openstreetmap/josm/data/preferences/sources/PresetPrefHelper.java
index 836151e..b41f993 100644
--- a/src/org/openstreetmap/josm/data/preferences/sources/PresetPrefHelper.java
+++ b/src/org/openstreetmap/josm/data/preferences/sources/PresetPrefHelper.java
@@ -23,12 +23,12 @@ public class PresetPrefHelper extends SourcePrefHelper {
      * Constructs a new {@code PresetPrefHelper}.
      */
     public PresetPrefHelper() {
-        super("taggingpreset.entries");
+        super("taggingpreset.entries", SourceType.TAGGING_PRESET);
     }
 
     @Override
     public Collection<ExtendedSourceEntry> getDefault() {
-        ExtendedSourceEntry i = new ExtendedSourceEntry("defaultpresets.xml", "resource://data/defaultpresets.xml");
+        ExtendedSourceEntry i = new ExtendedSourceEntry(type, "defaultpresets.xml", "resource://data/defaultpresets.xml");
         i.title = tr("Internal Preset");
         i.description = tr("The default preset for JOSM");
         return Collections.singletonList(i);
@@ -44,6 +44,6 @@ public class PresetPrefHelper extends SourcePrefHelper {
 
     @Override
     public SourceEntry deserialize(Map<String, String> s) {
-        return new SourceEntry(s.get("url"), null, s.get("title"), true);
+        return new SourceEntry(type, s.get("url"), null, s.get("title"), true);
     }
 }
diff --git a/src/org/openstreetmap/josm/data/preferences/sources/SourceEntry.java b/src/org/openstreetmap/josm/data/preferences/sources/SourceEntry.java
index 8dc2011..1d0592a 100644
--- a/src/org/openstreetmap/josm/data/preferences/sources/SourceEntry.java
+++ b/src/org/openstreetmap/josm/data/preferences/sources/SourceEntry.java
@@ -18,6 +18,12 @@ import org.openstreetmap.josm.tools.Utils;
 public class SourceEntry {
 
     /**
+     * The type of source entry.
+     * @since 12825
+     **/
+    public final SourceType type;
+
+    /**
      *  A URL can be anything that CachedFile understands, i.e.
      *  a local file, http://, or a file from the current jar
      */
@@ -57,6 +63,7 @@ public class SourceEntry {
 
     /**
      * Constructs a new {@code SourceEntry}.
+     * @param type type of source entry
      * @param url URL that {@link org.openstreetmap.josm.io.CachedFile} understands
      * @param isZip if url is a zip file and the resource is inside the zip file
      * @param zipEntryPath If {@code isZip} is {@code true}, denotes the path inside the zip file
@@ -69,8 +76,10 @@ public class SourceEntry {
      * @see #name
      * @see #title
      * @see #active
+     * @since 12825
      */
-    public SourceEntry(String url, boolean isZip, String zipEntryPath, String name, String title, boolean active) {
+    public SourceEntry(SourceType type, String url, boolean isZip, String zipEntryPath, String name, String title, boolean active) {
+        this.type = type;
         this.url = url;
         this.isZip = isZip;
         this.zipEntryPath = "".equals(zipEntryPath) ? null : zipEntryPath;
@@ -81,6 +90,7 @@ public class SourceEntry {
 
     /**
      * Constructs a new {@code SourceEntry}.
+     * @param type type of source entry
      * @param url URL that {@link org.openstreetmap.josm.io.CachedFile} understands
      * @param name Source name
      * @param title title that can be used as menu entry
@@ -89,9 +99,10 @@ public class SourceEntry {
      * @see #name
      * @see #title
      * @see #active
+     * @since 12825
      */
-    public SourceEntry(String url, String name, String title, boolean active) {
-        this(url, false, null, name, title, active);
+    public SourceEntry(SourceType type, String url, String name, String title, boolean active) {
+        this(type, url, false, null, name, title, active);
     }
 
     /**
@@ -99,6 +110,7 @@ public class SourceEntry {
      * @param e existing source entry to copy
      */
     public SourceEntry(SourceEntry e) {
+        this.type = e.type;
         this.url = e.url;
         this.isZip = e.isZip;
         this.zipEntryPath = e.zipEntryPath;
diff --git a/src/org/openstreetmap/josm/data/preferences/sources/SourcePrefHelper.java b/src/org/openstreetmap/josm/data/preferences/sources/SourcePrefHelper.java
index a3a2062..5ff53ac 100644
--- a/src/org/openstreetmap/josm/data/preferences/sources/SourcePrefHelper.java
+++ b/src/org/openstreetmap/josm/data/preferences/sources/SourcePrefHelper.java
@@ -9,7 +9,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.spi.preferences.Config;
 
 /**
  * Helper class for specialized extensions preferences.
@@ -18,13 +18,17 @@ import org.openstreetmap.josm.Main;
 public abstract class SourcePrefHelper {
 
     private final String pref;
+    protected final SourceType type;
 
     /**
      * Constructs a new {@code SourcePrefHelper} for the given preference key.
      * @param pref The preference key
+     * @param type The source type
+     * @since 12825
      */
-    public SourcePrefHelper(String pref) {
+    public SourcePrefHelper(String pref, SourceType type) {
         this.pref = pref;
+        this.type = type;
     }
 
     /**
@@ -53,7 +57,7 @@ public abstract class SourcePrefHelper {
      */
     public List<SourceEntry> get() {
 
-        Collection<Map<String, String>> src = Main.pref.getListOfStructs(pref, (Collection<Map<String, String>>) null);
+        List<Map<String, String>> src = Config.getPref().getListOfMaps(pref, null);
         if (src == null)
             return new ArrayList<>(getDefault());
 
@@ -73,18 +77,18 @@ public abstract class SourcePrefHelper {
      * @return {@code true}, if something has changed (i.e. value is different than before)
      */
     public boolean put(Collection<? extends SourceEntry> entries) {
-        Collection<Map<String, String>> setting = serializeList(entries);
-        boolean unset = Main.pref.getListOfStructs(pref, (Collection<Map<String, String>>) null) == null;
+        List<Map<String, String>> setting = serializeList(entries);
+        boolean unset = Config.getPref().getListOfMaps(pref, null) == null;
         if (unset) {
             Collection<Map<String, String>> def = serializeList(getDefault());
             if (setting.equals(def))
                 return false;
         }
-        return Main.pref.putListOfStructs(pref, setting);
+        return Config.getPref().putListOfMaps(pref, setting);
     }
 
-    private Collection<Map<String, String>> serializeList(Collection<? extends SourceEntry> entries) {
-        Collection<Map<String, String>> setting = new ArrayList<>(entries.size());
+    private List<Map<String, String>> serializeList(Collection<? extends SourceEntry> entries) {
+        List<Map<String, String>> setting = new ArrayList<>(entries.size());
         for (SourceEntry e : entries) {
             setting.add(serialize(e));
         }
diff --git a/src/org/openstreetmap/josm/data/preferences/sources/ValidatorPrefHelper.java b/src/org/openstreetmap/josm/data/preferences/sources/ValidatorPrefHelper.java
index 82ac87c..f224b70 100644
--- a/src/org/openstreetmap/josm/data/preferences/sources/ValidatorPrefHelper.java
+++ b/src/org/openstreetmap/josm/data/preferences/sources/ValidatorPrefHelper.java
@@ -54,7 +54,7 @@ public class ValidatorPrefHelper extends SourcePrefHelper {
      * Constructs a new {@code PresetPrefHelper}.
      */
     public ValidatorPrefHelper() {
-        super(MapCSSTagChecker.ENTRIES_PREF_KEY);
+        super(MapCSSTagChecker.ENTRIES_PREF_KEY, SourceType.TAGCHECKER_RULE);
     }
 
     @Override
@@ -79,8 +79,8 @@ public class ValidatorPrefHelper extends SourcePrefHelper {
         return def;
     }
 
-    private static void addDefault(List<ExtendedSourceEntry> defaults, String filename, String title, String description) {
-        ExtendedSourceEntry i = new ExtendedSourceEntry(filename+".mapcss", "resource://data/validator/"+filename+".mapcss");
+    private void addDefault(List<ExtendedSourceEntry> defaults, String filename, String title, String description) {
+        ExtendedSourceEntry i = new ExtendedSourceEntry(type, filename+".mapcss", "resource://data/validator/"+filename+".mapcss");
         i.title = title;
         i.description = description;
         defaults.add(i);
@@ -97,6 +97,6 @@ public class ValidatorPrefHelper extends SourcePrefHelper {
 
     @Override
     public SourceEntry deserialize(Map<String, String> s) {
-        return new SourceEntry(s.get("url"), null, s.get("title"), Boolean.parseBoolean(s.get("active")));
+        return new SourceEntry(type, s.get("url"), null, s.get("title"), Boolean.parseBoolean(s.get("active")));
     }
 }
diff --git a/src/org/openstreetmap/josm/data/projection/AbstractProjection.java b/src/org/openstreetmap/josm/data/projection/AbstractProjection.java
index 33df77c..3df6f16 100644
--- a/src/org/openstreetmap/josm/data/projection/AbstractProjection.java
+++ b/src/org/openstreetmap/josm/data/projection/AbstractProjection.java
@@ -4,6 +4,7 @@ package org.openstreetmap.josm.data.projection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.function.Consumer;
 import java.util.function.DoubleUnaryOperator;
 
 import org.openstreetmap.josm.data.Bounds;
@@ -146,7 +147,7 @@ public abstract class AbstractProjection implements Projection {
     public Map<ProjectionBounds, Projecting> getProjectingsForArea(ProjectionBounds area) {
         if (proj.lonIsLinearToEast()) {
             //FIXME: Respect datum?
-            // wrap the wrold around
+            // wrap the world around
             Bounds bounds = getWorldBoundsLatLon();
             double minEast = latlon2eastNorth(bounds.getMin()).east();
             double maxEast = latlon2eastNorth(bounds.getMax()).east();
@@ -203,24 +204,9 @@ public abstract class AbstractProjection implements Projection {
             synchronized (this) {
                 result = projectionBoundsBox;
                 if (result == null) {
-                    Bounds b = getWorldBoundsLatLon();
-                    // add 4 corners
-                    result = new ProjectionBounds(latlon2eastNorth(b.getMin()));
-                    result.extend(latlon2eastNorth(b.getMax()));
-                    result.extend(latlon2eastNorth(new LatLon(b.getMinLat(), b.getMaxLon())));
-                    result.extend(latlon2eastNorth(new LatLon(b.getMaxLat(), b.getMinLon())));
-                    // and trace along the outline
-                    double dLon = (b.getMaxLon() - b.getMinLon()) / 1000;
-                    double dLat = (b.getMaxLat() - b.getMinLat()) / 1000;
-                    for (double lon = b.getMinLon(); lon < b.getMaxLon(); lon += dLon) {
-                        result.extend(latlon2eastNorth(new LatLon(b.getMinLat(), lon)));
-                        result.extend(latlon2eastNorth(new LatLon(b.getMaxLat(), lon)));
-                    }
-                    for (double lat = b.getMinLat(); lat < b.getMaxLat(); lat += dLat) {
-                        result.extend(latlon2eastNorth(new LatLon(lat, b.getMinLon())));
-                        result.extend(latlon2eastNorth(new LatLon(lat, b.getMaxLon())));
-                    }
-                    projectionBoundsBox = result;
+                    ProjectionBounds bds = new ProjectionBounds();
+                    visitOutline(getWorldBoundsLatLon(), 1000, bds::extend);
+                    projectionBoundsBox = bds;
                 }
             }
         }
@@ -231,4 +217,36 @@ public abstract class AbstractProjection implements Projection {
     public Projection getBaseProjection() {
         return this;
     }
+
+    @Override
+    public void visitOutline(Bounds b, Consumer<EastNorth> visitor) {
+        visitOutline(b, 100, visitor);
+    }
+
+    private void visitOutline(Bounds b, int nPoints, Consumer<EastNorth> visitor) {
+        double maxlon = b.getMaxLon();
+        if (b.crosses180thMeridian()) {
+            maxlon += 360.0;
+        }
+        double spanLon = maxlon - b.getMinLon();
+        double spanLat = b.getMaxLat() - b.getMinLat();
+
+        //TODO: Use projection to see if there is any need for doing this along each axis.
+        for (int step = 0; step < nPoints; step++) {
+            visitor.accept(latlon2eastNorth(
+                    new LatLon(b.getMinLat(), b.getMinLon() + spanLon * step / nPoints)));
+        }
+        for (int step = 0; step < nPoints; step++) {
+            visitor.accept(latlon2eastNorth(
+                    new LatLon(b.getMinLat() + spanLat * step / nPoints, maxlon)));
+        }
+        for (int step = 0; step < nPoints; step++) {
+            visitor.accept(latlon2eastNorth(
+                    new LatLon(b.getMaxLat(), maxlon - spanLon * step / nPoints)));
+        }
+        for (int step = 0; step < nPoints; step++) {
+            visitor.accept(latlon2eastNorth(
+                    new LatLon(b.getMaxLat() - spanLat * step / nPoints, b.getMinLon())));
+        }
+    }
 }
diff --git a/src/org/openstreetmap/josm/data/projection/CustomProjection.java b/src/org/openstreetmap/josm/data/projection/CustomProjection.java
index cef2901..91b865d 100644
--- a/src/org/openstreetmap/josm/data/projection/CustomProjection.java
+++ b/src/org/openstreetmap/josm/data/projection/CustomProjection.java
@@ -18,6 +18,7 @@ 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.data.coor.conversion.LatLonParser;
 import org.openstreetmap.josm.data.projection.datum.CentricDatum;
 import org.openstreetmap.josm.data.projection.datum.Datum;
 import org.openstreetmap.josm.data.projection.datum.NTV2Datum;
@@ -654,44 +655,18 @@ public class CustomProjection extends AbstractProjection {
 
     /**
      * Convert an angle string to a double value
-     * @param angleStr The string. e.g. -1.1 or 50d 10' 3"
+     * @param angleStr The string. e.g. -1.1 or 50d10'3"
      * @param parameterName Only for error message.
      * @return The angle value, in degrees.
      * @throws ProjectionConfigurationException in case of invalid parameter
      */
     public static double parseAngle(String angleStr, String parameterName) throws ProjectionConfigurationException {
-        final String floatPattern = "(\\d+(\\.\\d*)?)";
-        // pattern does all error handling.
-        Matcher in = Pattern.compile("^(?<neg1>-)?"
-                + "(?=\\d)(?:(?<single>" + floatPattern + ")|"
-                + "((?<degree>" + floatPattern + ")d)?"
-                + "((?<minutes>" + floatPattern + ")\')?"
-                + "((?<seconds>" + floatPattern + ")\")?)"
-                + "(?:[NE]|(?<neg2>[SW]))?$").matcher(angleStr);
-
-        if (!in.find()) {
+        try {
+            return LatLonParser.parseCoordinate(angleStr);
+        } catch (IllegalArgumentException e) {
             throw new ProjectionConfigurationException(
-                    tr("Unable to parse value ''{1}'' of parameter ''{0}'' as coordinate value.", parameterName, angleStr));
-        }
-
-        double value = 0;
-        if (in.group("single") != null) {
-            value += Double.parseDouble(in.group("single"));
-        }
-        if (in.group("degree") != null) {
-            value += Double.parseDouble(in.group("degree"));
-        }
-        if (in.group("minutes") != null) {
-            value += Double.parseDouble(in.group("minutes")) / 60;
-        }
-        if (in.group("seconds") != null) {
-            value += Double.parseDouble(in.group("seconds")) / 3600;
-        }
-
-        if (in.group("neg1") != null ^ in.group("neg2") != null) {
-            value = -value;
+                    tr("Unable to parse value ''{1}'' of parameter ''{0}'' as coordinate value.", parameterName, angleStr), e);
         }
-        return value;
     }
 
     @Override
@@ -914,4 +889,17 @@ public class CustomProjection extends AbstractProjection {
         }
         return result;
     }
+
+    /**
+     * Return true, if a geographic coordinate reference system is represented.
+     *
+     * I.e. if it returns latitude/longitude values rather than Cartesian
+     * east/north coordinates on a flat surface.
+     * @return true, if it is geographic
+     * @since 12792
+     */
+    public boolean isGeographic() {
+        return proj.isGeographic();
+    }
+
 }
diff --git a/src/org/openstreetmap/josm/data/projection/Projection.java b/src/org/openstreetmap/josm/data/projection/Projection.java
index 8f597f9..9c2e952 100644
--- a/src/org/openstreetmap/josm/data/projection/Projection.java
+++ b/src/org/openstreetmap/josm/data/projection/Projection.java
@@ -1,6 +1,8 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.projection;
 
+import java.util.function.Consumer;
+
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.ProjectionBounds;
 import org.openstreetmap.josm.data.coor.EastNorth;
@@ -120,4 +122,15 @@ public interface Projection extends Projecting {
      * @return true if natural order of coordinates is North East, false if East North
      */
     boolean switchXY();
+
+    /**
+     * Visit points along the edge of this bounds instance.
+     * <p>
+     * Depending on the shape in east/north space, it may simply visit the 4 corners
+     * or (more generally) several points along the curved edges.
+     * @param bounds the lat/lon rectangle to trace
+     * @param visitor a function to call for the points on the edge.
+     * @since 12818
+     */
+    void visitOutline(Bounds bounds, Consumer<EastNorth> visitor);
 }
diff --git a/src/org/openstreetmap/josm/data/projection/ProjectionCLI.java b/src/org/openstreetmap/josm/data/projection/ProjectionCLI.java
new file mode 100644
index 0000000..4d476ed
--- /dev/null
+++ b/src/org/openstreetmap/josm/data/projection/ProjectionCLI.java
@@ -0,0 +1,209 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.projection;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.Function;
+
+import org.openstreetmap.josm.CLIModule;
+import org.openstreetmap.josm.data.coor.EastNorth;
+import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.coor.conversion.LatLonParser;
+import org.openstreetmap.josm.tools.I18n;
+import org.openstreetmap.josm.tools.Utils;
+
+import gnu.getopt.Getopt;
+import gnu.getopt.LongOpt;
+
+/**
+ * Command line interface for projecting coordinates.
+ * @since 12792
+ */
+public class ProjectionCLI implements CLIModule {
+
+    public static final ProjectionCLI INSTANCE = new ProjectionCLI();
+
+    private boolean argInverse = false;         // NOPMD
+    private boolean argSwitchInput = false;     // NOPMD
+    private boolean argSwitchOutput = false;    // NOPMD
+
+    @Override
+    public String getActionKeyword() {
+        return "project";
+    }
+
+    @Override
+    public void processArguments(String[] argArray) {
+        Getopt.setI18nHandler(I18n::tr);
+        Getopt getopt = new Getopt("JOSM projection", argArray, "Irh", new LongOpt[] {
+                new LongOpt("help", LongOpt.NO_ARGUMENT, null, 'h')});
+
+        int c;
+        while ((c = getopt.getopt()) != -1) {
+            switch (c) {
+            case 'h':
+                showHelp();
+                System.exit(0);
+            case 'I':
+                argInverse = true;
+                break;
+            case 'r':
+                argSwitchInput = true;
+                break;
+            case 's':
+                argSwitchOutput = true;
+                break;
+            default:
+                // ignore
+            }
+        }
+
+        List<String> projParamFrom = new ArrayList<>();
+        List<String> projParamTo = new ArrayList<>();
+        List<String> otherPositional = new ArrayList<>();
+        boolean toTokenSeen = false;
+        // positional arguments:
+        for (int i = getopt.getOptind(); i < argArray.length; ++i) {
+            String arg = argArray[i];
+            if (arg.isEmpty()) throw new IllegalArgumentException("non-empty argument expected");
+            if (arg.startsWith("+")) {
+                if (arg.equals("+to")) {
+                    toTokenSeen = true;
+                } else {
+                    (toTokenSeen ? projParamTo : projParamFrom).add(arg);
+                }
+            } else {
+                otherPositional.add(arg);
+            }
+        }
+        String fromStr = Utils.join(" ", projParamFrom);
+        String toStr = Utils.join(" ", projParamTo);
+        try {
+            run(fromStr, toStr, otherPositional);
+        } catch (ProjectionConfigurationException | IllegalArgumentException | IOException ex) {
+            System.err.println(tr("Error: {0}", ex.getMessage()));
+            System.exit(1);
+        }
+        System.exit(0);
+    }
+
+    /**
+     * Displays help on the console
+     */
+    public static void showHelp() {
+        System.out.println(getHelp());
+    }
+
+    private static String getHelp() {
+        return tr("JOSM projection command line interface")+"\n\n"+
+                tr("Usage")+":\n"+
+                "\tjava -jar josm.jar project <options> <crs> +to <crs> [file]\n\n"+
+                tr("Description")+":\n"+
+                tr("Converts coordinates from one coordinate reference system to another.")+"\n\n"+
+                tr("Options")+":\n"+
+                "\t--help|-h         "+tr("Show this help")+"\n"+
+                "\t-I                "+tr("Switch input and output crs")+"\n"+
+                "\t-r                "+tr("Switch order of input coordinates (east/north, lon/lat)")+"\n"+
+                "\t-s                "+tr("Switch order of output coordinates (east/north, lon/lat)")+"\n\n"+
+                tr("<crs>")+":\n"+
+                tr("The format for input and output coordinate reference system"
+                        + " is similar to that of the PROJ.4 software.")+"\n\n"+
+                tr("[file]")+":\n"+
+                tr("Reads input data from one or more files listed as positional arguments. "
+                + "When no files are given, or the filename is \"-\", data is read from "
+                + "standard input.")+"\n\n"+
+                tr("Examples")+":\n"+
+                "    java -jar josm.jar project +init=epsg:4326 +to +init=epsg:3857 <<<\"11.232274 50.5685716\"\n"+
+                "       => 1250371.1334500168 6545331.055189664\n\n"+
+                "    java -jar josm.jar project +proj=lonlat +datum=WGS84 +to +proj=merc +a=6378137 +b=6378137 +nadgrids=@null <<EOF\n" +
+                "    11d13'56.19\"E 50d34'6.86\"N\n" +
+                "    118d39'30.42\"W 37d20'18.76\"N\n"+
+                "    EOF\n"+
+                "       => 1250371.1334500168 6545331.055189664\n" +
+                "          -1.3208998232319113E7 4486401.160664663\n";
+    }
+
+    private void run(String fromStr, String toStr, List<String> files) throws ProjectionConfigurationException, IOException {
+        CustomProjection fromProj = createProjection(fromStr);
+        CustomProjection toProj = createProjection(toStr);
+        if (this.argInverse) {
+            CustomProjection tmp = fromProj;
+            fromProj = toProj;
+            toProj = tmp;
+        }
+
+        if (files.isEmpty() || files.get(0).equals("-")) {
+            processInput(fromProj, toProj, new BufferedReader(new InputStreamReader(System.in, Charset.defaultCharset())));
+        } else {
+            for (String file : files) {
+                try (BufferedReader br = Files.newBufferedReader(Paths.get(file), StandardCharsets.UTF_8)) {
+                    processInput(fromProj, toProj, br);
+                }
+            }
+        }
+    }
+
+    private void processInput(CustomProjection fromProj, CustomProjection toProj, BufferedReader reader) throws IOException {
+        String line;
+        while ((line = reader.readLine()) != null) {
+            line = line.trim();
+            if (line.isEmpty() || line.startsWith("#"))
+                continue;
+            EastNorth enIn;
+            if (fromProj.isGeographic()) {
+                enIn = parseEastNorth(line, LatLonParser::parseCoordinate);
+            } else {
+                enIn = parseEastNorth(line, ProjectionCLI::parseDouble);
+            }
+            LatLon ll = fromProj.eastNorth2latlon(enIn);
+            EastNorth enOut = toProj.latlon2eastNorth(ll);
+            double cOut1 = argSwitchOutput ? enOut.north() : enOut.east();
+            double cOut2 = argSwitchOutput ? enOut.east() : enOut.north();
+            System.out.println(Double.toString(cOut1) + " " + Double.toString(cOut2));
+            System.out.flush();
+        }
+    }
+
+    private CustomProjection createProjection(String params) throws ProjectionConfigurationException {
+        CustomProjection proj = new CustomProjection();
+        proj.update(params);
+        return proj;
+    }
+
+    private EastNorth parseEastNorth(String s, Function<String, Double> parser) {
+        String[] en = s.split("[;, ]+");
+        if (en.length != 2)
+            throw new IllegalArgumentException(tr("Expected two coordinates, separated by white space, found {0} in ''{1}''", en.length, s));
+        double east = parser.apply(en[0]);
+        double north = parser.apply(en[1]);
+        if (this.argSwitchInput)
+            return new EastNorth(north, east);
+        else
+            return new EastNorth(east, north);
+    }
+
+    private static double parseDouble(String s) {
+        try {
+            return Double.parseDouble(s);
+        } catch (NumberFormatException nfe) {
+            throw new IllegalArgumentException(tr("Unable to parse number ''{0}''", s));
+        }
+    }
+
+    /**
+     * Main class to run just the projection CLI.
+     * @param args command line arguments
+     */
+    public static void main(String[] args) {
+        ProjectionCLI.INSTANCE.processArguments(args);
+    }
+}
diff --git a/src/org/openstreetmap/josm/data/projection/Projections.java b/src/org/openstreetmap/josm/data/projection/Projections.java
index 5b5b94b..0852974 100644
--- a/src/org/openstreetmap/josm/data/projection/Projections.java
+++ b/src/org/openstreetmap/josm/data/projection/Projections.java
@@ -13,11 +13,13 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
+import java.util.function.Supplier;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.coor.EastNorth;
+import org.openstreetmap.josm.data.coor.ILatLon;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.projection.datum.Datum;
 import org.openstreetmap.josm.data.projection.datum.GRS80Datum;
@@ -40,8 +42,6 @@ import org.openstreetmap.josm.data.projection.proj.ProjFactory;
 import org.openstreetmap.josm.data.projection.proj.Sinusoidal;
 import org.openstreetmap.josm.data.projection.proj.SwissObliqueMercator;
 import org.openstreetmap.josm.data.projection.proj.TransverseMercator;
-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.JosmRuntimeException;
 import org.openstreetmap.josm.tools.Logging;
@@ -76,7 +76,7 @@ public final class Projections {
     }
 
     private static final Set<String> allCodes = new HashSet<>();
-    private static final Map<String, ProjectionChoice> allProjectionChoicesByCode = new HashMap<>();
+    private static final Map<String, Supplier<Projection>> projectionSuppliersByCode = new HashMap<>();
     private static final Map<String, Projection> projectionsByCode_cache = new HashMap<>();
 
     /*********************************
@@ -155,14 +155,7 @@ public final class Projections {
         } catch (IOException ex) {
             throw new JosmRuntimeException(ex);
         }
-
-        for (ProjectionChoice pc : ProjectionPreference.getProjectionChoices()) {
-            for (String code : pc.allCodes()) {
-                allProjectionChoicesByCode.put(code, pc);
-            }
-        }
         allCodes.addAll(inits.keySet());
-        allCodes.addAll(allProjectionChoicesByCode.keySet());
     }
 
     private Projections() {
@@ -191,18 +184,35 @@ public final class Projections {
      *
      * @param ll the geographical point to convert (in WGS84 lat/lon)
      * @return the corresponding east/north coordinates
+     * @since 12725
+     * @deprecated use <code>Main.getProjection().latlon2eastNorth(ll)</code>
      */
-    public static EastNorth project(LatLon ll) {
+    @Deprecated
+    public static EastNorth project(ILatLon ll) {
         if (ll == null) return null;
         return Main.getProjection().latlon2eastNorth(ll);
     }
 
     /**
+     * Convert from lat/lon to easting/northing using the current projection.
+     *
+     * @param ll the geographical point to convert (in WGS84 lat/lon)
+     * @return the corresponding east/north coordinates
+     * @deprecated use <code>Main.getProjection().latlon2eastNorth(ll)</code>
+     */
+    @Deprecated
+    public static EastNorth project(LatLon ll) {
+        return project((ILatLon) ll);
+    }
+
+    /**
      * Convert from easting/norting to lat/lon using the current projection.
      *
      * @param en the geographical point to convert (in projected coordinates)
      * @return the corresponding lat/lon (WGS84)
+     * @deprecated use <code>Main.getProjection().eastNorth2latlon(en)</code>
      */
+    @Deprecated
     public static LatLon inverseProject(EastNorth en) {
         if (en == null) return null;
         return Main.getProjection().eastNorth2latlon(en);
@@ -226,6 +236,17 @@ public final class Projections {
     }
 
     /**
+     * Register a projection supplier, that is, a factory class for projections.
+     * @param code the code of the projection that will be returned
+     * @param supplier a supplier to return a projection with given code
+     * @since 12786
+     */
+    public static void registerProjectionSupplier(String code, Supplier<Projection> supplier) {
+        projectionSuppliersByCode.put(code, supplier);
+        allCodes.add(code);
+    }
+
+    /**
      * Get a base projection by id.
      *
      * @param id the id, for example "lonlat" or "tmerc"
@@ -332,22 +353,20 @@ public final class Projections {
     public static Projection getProjectionByCode(String code) {
         Projection proj = projectionsByCode_cache.get(code);
         if (proj != null) return proj;
-        ProjectionChoice pc = allProjectionChoicesByCode.get(code);
-        if (pc != null) {
-            Collection<String> pref = pc.getPreferencesFromCode(code);
-            pc.setPreferences(pref);
-            try {
-                proj = pc.getProjection();
-            } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException e) {
-                Logging.log(Logging.LEVEL_WARN, "Unable to get projection "+code+" with "+pc+':', e);
-            }
+
+        ProjectionDefinition pd = inits.get(code);
+        if (pd != null) {
+            proj = new CustomProjection(pd.name, code, pd.definition);
         }
         if (proj == null) {
-            ProjectionDefinition pd = inits.get(code);
-            if (pd == null) return null;
-            proj = new CustomProjection(pd.name, code, pd.definition);
+            Supplier<Projection> ps = projectionSuppliersByCode.get(code);
+            if (ps != null) {
+                proj = ps.get();
+            }
+        }
+        if (proj != null) {
+            projectionsByCode_cache.put(code, proj);
         }
-        projectionsByCode_cache.put(code, proj);
         return proj;
     }
 
diff --git a/src/org/openstreetmap/josm/data/projection/datum/NTV2GridShiftFileSource.java b/src/org/openstreetmap/josm/data/projection/datum/NTV2GridShiftFileSource.java
new file mode 100644
index 0000000..fc17676
--- /dev/null
+++ b/src/org/openstreetmap/josm/data/projection/datum/NTV2GridShiftFileSource.java
@@ -0,0 +1,19 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.projection.datum;
+
+import java.io.InputStream;
+
+/**
+ * Source of NTV2 grid shift files (local directory, download, etc.).
+ * @since 12777
+ */
+public interface NTV2GridShiftFileSource {
+
+    /**
+     * Locate grid file with given name.
+     * @param gridFileName the name of the grid file
+     * @return an input stream for the file data
+     */
+    InputStream getNTV2GridShiftFile(String gridFileName);
+
+}
diff --git a/src/org/openstreetmap/josm/data/projection/datum/NTV2GridShiftFileWrapper.java b/src/org/openstreetmap/josm/data/projection/datum/NTV2GridShiftFileWrapper.java
index e526c50..093e9f0 100644
--- a/src/org/openstreetmap/josm/data/projection/datum/NTV2GridShiftFileWrapper.java
+++ b/src/org/openstreetmap/josm/data/projection/datum/NTV2GridShiftFileWrapper.java
@@ -1,12 +1,11 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.projection.datum;
 
-import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
-
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.io.CachedFile;
+import java.util.Collections;
+import java.util.Map;
+import java.util.TreeMap;
 
 /**
  * Wrapper for {@link NTV2GridShiftFile}.
@@ -19,6 +18,23 @@ public class NTV2GridShiftFileWrapper {
     private NTV2GridShiftFile instance;
     private final String gridFileName;
 
+    public static final float NTV2_SOURCE_PRIORITY_LOCAL = 10f;
+    public static final float NTV2_SOURCE_PRIORITY_DOWNLOAD = 5f;
+
+    private static Map<Float, NTV2GridShiftFileSource> sources = new TreeMap<>(Collections.reverseOrder());
+
+    /**
+     * Register a source for NTV2 grid files.
+     * @param priority the priority, sources with higher priority are checked first;
+     * use {@link #NTV2_SOURCE_PRIORITY_LOCAL} for local files and
+     * {@link #NTV2_SOURCE_PRIORITY_DOWNLOAD} for remote downloads
+     * @param source the NTV2 grid file source
+     * @since 12777
+     */
+    public static void registerNTV2GridShiftFileSource(float priority, NTV2GridShiftFileSource source) {
+        sources.put(priority, source);
+    }
+
     /**
      * Constructs a new {@code NTV2GridShiftFileWrapper}.
      * @param filename Path to the grid file (GSB format)
@@ -35,36 +51,17 @@ public class NTV2GridShiftFileWrapper {
      */
     public synchronized NTV2GridShiftFile getShiftFile() throws IOException {
         if (instance == null) {
-            File grid = null;
-            // Check is the grid is installed in default PROJ.4 directories
-            for (File dir : Main.platform.getDefaultProj4NadshiftDirectories()) {
-                File file = new File(dir, gridFileName);
-                if (file.exists() && file.isFile()) {
-                    grid = file;
-                    break;
-                }
-            }
-            // If not, search into PROJ_LIB directory
-            if (grid == null) {
-                String projLib = System.getProperty("PROJ_LIB");
-                if (projLib != null && !projLib.isEmpty()) {
-                    File dir = new File(projLib);
-                    if (dir.exists() && dir.isDirectory()) {
-                        File file = new File(dir, gridFileName);
-                        if (file.exists() && file.isFile()) {
-                            grid = file;
-                        }
+            for (Map.Entry<Float, NTV2GridShiftFileSource> entry : sources.entrySet()) {
+                NTV2GridShiftFileSource source = entry.getValue();
+                try (InputStream is = source.getNTV2GridShiftFile(gridFileName)) {
+                    if (is != null) {
+                        NTV2GridShiftFile ntv2 = new NTV2GridShiftFile();
+                        ntv2.loadGridShiftFile(is, false);
+                        instance = ntv2;
+                        break;
                     }
                 }
             }
-            // If not, retrieve it from JOSM website
-            String location = grid != null ? grid.getAbsolutePath() : (Main.getJOSMWebsite() + "/proj/" + gridFileName);
-            // Try to load grid file
-            try (CachedFile cf = new CachedFile(location); InputStream is = cf.getInputStream()) {
-                NTV2GridShiftFile ntv2 = new NTV2GridShiftFile();
-                ntv2.loadGridShiftFile(is, false);
-                instance = ntv2;
-            }
         }
         return instance;
     }
diff --git a/src/org/openstreetmap/josm/data/projection/datum/NTV2Proj4DirGridShiftFileSource.java b/src/org/openstreetmap/josm/data/projection/datum/NTV2Proj4DirGridShiftFileSource.java
new file mode 100644
index 0000000..2fd3899
--- /dev/null
+++ b/src/org/openstreetmap/josm/data/projection/datum/NTV2Proj4DirGridShiftFileSource.java
@@ -0,0 +1,88 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.projection.datum;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.openstreetmap.josm.tools.Logging;
+import org.openstreetmap.josm.tools.Platform;
+import org.openstreetmap.josm.tools.PlatformVisitor;
+
+/**
+ * Shift file source that scans the common data directories of the proj4 library.
+ * @since 12777
+ */
+public final class NTV2Proj4DirGridShiftFileSource implements NTV2GridShiftFileSource, PlatformVisitor<List<File>> {
+
+    private NTV2Proj4DirGridShiftFileSource() {
+        // hide constructor
+    }
+
+    // lazy initialization
+    private static class InstanceHolder {
+        static final NTV2Proj4DirGridShiftFileSource INSTANCE = new NTV2Proj4DirGridShiftFileSource();
+    }
+
+    /**
+     * Get the singleton instance of this class.
+     * @return the singleton instance of this class
+     */
+    public static NTV2Proj4DirGridShiftFileSource getInstance() {
+        return InstanceHolder.INSTANCE;
+    }
+
+    @Override
+    public InputStream getNTV2GridShiftFile(String gridFileName) {
+        File grid = null;
+        // Check is the grid is installed in default PROJ.4 directories
+        for (File dir : Platform.determinePlatform().accept(this)) {
+            File file = new File(dir, gridFileName);
+            if (file.exists() && file.isFile()) {
+                grid = file;
+                break;
+            }
+        }
+        // If not, search into PROJ_LIB directory
+        if (grid == null) {
+            String projLib = System.getProperty("PROJ_LIB");
+            if (projLib != null && !projLib.isEmpty()) {
+                File dir = new File(projLib);
+                if (dir.exists() && dir.isDirectory()) {
+                    File file = new File(dir, gridFileName);
+                    if (file.exists() && file.isFile()) {
+                        grid = file;
+                    }
+                }
+            }
+        }
+        if (grid != null) {
+            try {
+                return new FileInputStream(grid.getAbsoluteFile());
+            } catch (FileNotFoundException ex) {
+                Logging.warn("NTV2 grid shift file not found: " + grid);
+                Logging.trace(ex);
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public List<File> visitUnixoid() {
+        return Arrays.asList(new File("/usr/local/share/proj"), new File("/usr/share/proj"));
+    }
+
+    @Override
+    public List<File> visitWindows() {
+        return Arrays.asList(new File("C:\\PROJ\\NAD"));
+    }
+
+    @Override
+    public List<File> visitOsx() {
+        return Collections.emptyList();
+    }
+}
diff --git a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionListItem.java b/src/org/openstreetmap/josm/data/tagging/ac/AutoCompletionItem.java
similarity index 69%
copy from src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionListItem.java
copy to src/org/openstreetmap/josm/data/tagging/ac/AutoCompletionItem.java
index 0a83cb0..b2f2f30 100644
--- a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionListItem.java
+++ b/src/org/openstreetmap/josm/data/tagging/ac/AutoCompletionItem.java
@@ -1,60 +1,60 @@
 // License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui.tagging.ac;
+package org.openstreetmap.josm.data.tagging.ac;
 
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 
 /**
- * Represents an entry in the list of auto completion values.
+ * Represents an entry in the set of auto completion values.
  *
- *  An AutoCompletionListItem has a <em>priority</em> and a <em>value</em>.
+ *  An AutoCompletionItem has a <em>priority</em> and a <em>value</em>.
  *
  *  The priority helps to sort the auto completion items according to their importance. For instance,
- *  in an auto completion list for tag names, standard tag names would be assigned a higher
+ *  in an auto completion set for tag names, standard tag names would be assigned a higher
  *  priority than arbitrary tag names present in the current data set. There are three priority levels,
- *  {@link AutoCompletionItemPriority}.
+ *  {@link AutoCompletionPriority}.
  *
  * The value is a string which will be displayed in the auto completion list.
- *
+ * @since 12859 (copied from {@code gui.tagging.ac.AutoCompletionListItem})
  */
-public class AutoCompletionListItem implements Comparable<AutoCompletionListItem> {
+public class AutoCompletionItem implements Comparable<AutoCompletionItem> {
 
-    /** the pritority of this item */
-    private AutoCompletionItemPriority priority;
+    /** the priority of this item */
+    private AutoCompletionPriority priority;
     /** the value of this item */
     private String value;
 
     /**
-     * Constructs a new {@code AutoCompletionListItem} with the given value and priority.
+     * Constructs a new {@code AutoCompletionItem} with the given value and priority.
      * @param value The value
      * @param priority The priority
      */
-    public AutoCompletionListItem(String value, AutoCompletionItemPriority priority) {
+    public AutoCompletionItem(String value, AutoCompletionPriority priority) {
         this.value = value;
         this.priority = priority;
     }
 
     /**
-     * Constructs a new {@code AutoCompletionListItem} with the given value and unknown priority.
+     * Constructs a new {@code AutoCompletionItem} with the given value and unknown priority.
      * @param value The value
      */
-    public AutoCompletionListItem(String value) {
+    public AutoCompletionItem(String value) {
         this.value = value;
-        priority = AutoCompletionItemPriority.UNKNOWN;
+        priority = AutoCompletionPriority.UNKNOWN;
     }
 
     /**
-     * Constructs a new {@code AutoCompletionListItem}.
+     * Constructs a new {@code AutoCompletionItem}.
      */
-    public AutoCompletionListItem() {
+    public AutoCompletionItem() {
         value = "";
-        priority = AutoCompletionItemPriority.UNKNOWN;
+        priority = AutoCompletionPriority.UNKNOWN;
     }
 
     /**
      * Returns the priority.
      * @return the priority
      */
-    public AutoCompletionItemPriority getPriority() {
+    public AutoCompletionPriority getPriority() {
         return priority;
     }
 
@@ -62,7 +62,7 @@ public class AutoCompletionListItem implements Comparable<AutoCompletionListItem
      * Sets the priority.
      * @param priority  the priority
      */
-    public void setPriority(AutoCompletionItemPriority priority) {
+    public void setPriority(AutoCompletionPriority priority) {
         this.priority = priority;
     }
 
@@ -115,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 AutoCompletionItem other = (AutoCompletionItem) obj;
         if (priority == null) {
             if (other.priority != null)
                 return false;
@@ -130,7 +130,7 @@ public class AutoCompletionListItem implements Comparable<AutoCompletionListItem
     }
 
     @Override
-    public int compareTo(AutoCompletionListItem other) {
+    public int compareTo(AutoCompletionItem other) {
         int ret = other.priority.compareTo(priority); // higher priority items come first in the list
         if (ret != 0)
             return ret;
diff --git a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionItemPriority.java b/src/org/openstreetmap/josm/data/tagging/ac/AutoCompletionPriority.java
similarity index 71%
copy from src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionItemPriority.java
copy to src/org/openstreetmap/josm/data/tagging/ac/AutoCompletionPriority.java
index 8575a76..7b93296 100644
--- a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionItemPriority.java
+++ b/src/org/openstreetmap/josm/data/tagging/ac/AutoCompletionPriority.java
@@ -1,41 +1,43 @@
 // License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui.tagging.ac;
+package org.openstreetmap.josm.data.tagging.ac;
+
+import java.util.Objects;
 
 /**
- * Describes the priority of an item in an autocompletion list.
+ * Describes the priority of an item in an autocompletion set.
  * The selected flag is currently only used in plugins.
  *
  * Instances of this class are not modifiable.
- * @since 1762
+ * @since 12859 (copied from {@code gui.tagging.ac.AutoCompletionItemPriority})
  */
-public class AutoCompletionItemPriority implements Comparable<AutoCompletionItemPriority> {
+public class AutoCompletionPriority implements Comparable<AutoCompletionPriority> {
 
     /**
      * Indicates, that the value is standard and it is found in the data.
      * This has higher priority than some arbitrary standard value that is
      * usually not used by the user.
      */
-    public static final AutoCompletionItemPriority IS_IN_STANDARD_AND_IN_DATASET = new AutoCompletionItemPriority(true, true, false);
+    public static final AutoCompletionPriority IS_IN_STANDARD_AND_IN_DATASET = new AutoCompletionPriority(true, true, false);
 
     /**
      * Indicates that this is an arbitrary value from the data set, i.e.
      * the value of a tag name=*.
      */
-    public static final AutoCompletionItemPriority IS_IN_DATASET = new AutoCompletionItemPriority(true, false, false);
+    public static final AutoCompletionPriority IS_IN_DATASET = new AutoCompletionPriority(true, false, false);
 
     /**
      * Indicates that this is a standard value, i.e. a standard tag name
      * or a standard value for a given tag name (from the presets).
      */
-    public static final AutoCompletionItemPriority IS_IN_STANDARD = new AutoCompletionItemPriority(false, true, false);
+    public static final AutoCompletionPriority IS_IN_STANDARD = new AutoCompletionPriority(false, true, false);
 
     /**
      * Indicates that this is a value from a selected object.
      */
-    public static final AutoCompletionItemPriority IS_IN_SELECTION = new AutoCompletionItemPriority(false, false, true);
+    public static final AutoCompletionPriority IS_IN_SELECTION = new AutoCompletionPriority(false, false, true);
 
     /** Unknown priority. This is the lowest priority. */
-    public static final AutoCompletionItemPriority UNKNOWN = new AutoCompletionItemPriority(false, false, false);
+    public static final AutoCompletionPriority UNKNOWN = new AutoCompletionPriority(false, false, false);
 
     private static final int NO_USER_INPUT = Integer.MAX_VALUE;
 
@@ -54,7 +56,7 @@ public class AutoCompletionItemPriority implements Comparable<AutoCompletionItem
      * the tag key / value has been entered by the user before. A lower number means
      * this happened more recently and beats a higher number in priority.
      */
-    public AutoCompletionItemPriority(boolean inDataSet, boolean inStandard, boolean selected, Integer userInput) {
+    public AutoCompletionPriority(boolean inDataSet, boolean inStandard, boolean selected, Integer userInput) {
         this.inDataSet = inDataSet;
         this.inStandard = inStandard;
         this.selected = selected;
@@ -68,7 +70,7 @@ public class AutoCompletionItemPriority implements Comparable<AutoCompletionItem
      * @param inStandard true, if the item is a standard tag, e.g. from the presets
      * @param selected true, if it is found on an object that is currently selected
      */
-    public AutoCompletionItemPriority(boolean inDataSet, boolean inStandard, boolean selected) {
+    public AutoCompletionPriority(boolean inDataSet, boolean inStandard, boolean selected) {
         this(inDataSet, inStandard, selected, NO_USER_INPUT);
     }
 
@@ -111,7 +113,7 @@ public class AutoCompletionItemPriority implements Comparable<AutoCompletionItem
      * Currently, being in the current DataSet is worth more than being in the Presets.
      */
     @Override
-    public int compareTo(AutoCompletionItemPriority other) {
+    public int compareTo(AutoCompletionPriority other) {
         int ui = Integer.compare(other.userInput, userInput);
         if (ui != 0)
             return ui;
@@ -137,8 +139,8 @@ public class AutoCompletionItemPriority implements Comparable<AutoCompletionItem
      * @param other other priority
      * @return the merged priority
      */
-    public AutoCompletionItemPriority mergeWith(AutoCompletionItemPriority other) {
-        return new AutoCompletionItemPriority(
+    public AutoCompletionPriority mergeWith(AutoCompletionPriority other) {
+        return new AutoCompletionPriority(
                 inDataSet || other.inDataSet,
                 inStandard || other.inStandard,
                 selected || other.selected,
@@ -146,6 +148,24 @@ public class AutoCompletionItemPriority implements Comparable<AutoCompletionItem
     }
 
     @Override
+    public int hashCode() {
+        return Objects.hash(inDataSet, inStandard, selected, userInput);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null || getClass() != obj.getClass())
+            return false;
+        AutoCompletionPriority other = (AutoCompletionPriority) obj;
+        return inDataSet == other.inDataSet &&
+               inStandard == other.inStandard &&
+               selected == other.selected &&
+               userInput == other.userInput;
+    }
+
+    @Override
     public String toString() {
         return String.format("<Priority; userInput: %s, inDataSet: %b, inStandard: %b, selected: %b>",
                 userInput == NO_USER_INPUT ? "no" : Integer.toString(userInput), inDataSet, inStandard, selected);
diff --git a/src/org/openstreetmap/josm/data/tagging/ac/AutoCompletionSet.java b/src/org/openstreetmap/josm/data/tagging/ac/AutoCompletionSet.java
new file mode 100644
index 0000000..a29da97
--- /dev/null
+++ b/src/org/openstreetmap/josm/data/tagging/ac/AutoCompletionSet.java
@@ -0,0 +1,87 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.tagging.ac;
+
+import java.util.Collection;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.TreeSet;
+import java.util.stream.Collectors;
+
+/**
+ * A sorted set of {@link AutoCompletionItem}s.
+ *
+ * Items are sorted with higher priority first, then according to lexicographic order
+ * on the value of the {@code AutoCompletionListItem}.
+ *
+ * @since 12859 (extracted from {@code gui.tagging.ac.AutoCompletionList})
+ */
+public class AutoCompletionSet extends TreeSet<AutoCompletionItem> {
+
+    @Override
+    public boolean add(AutoCompletionItem e) {
+        // Is there already an item for the value?
+        Optional<AutoCompletionItem> result = stream().filter(i -> i.getValue().equals(e.getValue())).findFirst();
+        if (result.isPresent()) {
+            AutoCompletionItem item = result.get();
+            // yes: merge priorities
+            AutoCompletionPriority newPriority = item.getPriority().mergeWith(e.getPriority());
+            // if needed, remove/re-add the updated item to maintain set ordering
+            if (!item.getPriority().equals(newPriority)) {
+                remove(item);
+                item.setPriority(newPriority);
+                return add(item);
+            } else {
+                return false;
+            }
+        } else {
+            return super.add(e);
+        }
+    }
+
+    /**
+     * Adds a list of strings to this list. Only strings which
+     * are not null and which do not exist yet in the list are added.
+     *
+     * @param values a list of strings to add
+     * @param priority the priority to use
+     * @return {@code true} if this set changed as a result of the call
+     */
+    public boolean addAll(Collection<String> values, AutoCompletionPriority priority) {
+        return addAll(values.stream().filter(Objects::nonNull).map(v -> new AutoCompletionItem(v, priority)).collect(Collectors.toList()));
+    }
+
+    /**
+     * Adds values that have been entered by the user.
+     * @param values values that have been entered by the user
+     * @return {@code true} if this set changed as a result of the call
+     */
+    public boolean addUserInput(Collection<String> values) {
+        int i = 0;
+        boolean modified = false;
+        for (String value : values) {
+            if (value != null && add(new AutoCompletionItem(value, new AutoCompletionPriority(false, false, false, i++)))) {
+                modified = true;
+            }
+        }
+        return modified;
+    }
+
+    /**
+     * Checks whether an item with the given value is already in the list. Ignores priority of the items.
+     *
+     * @param value the value of an auto completion item
+     * @return true, if value is in the list; false, otherwise
+     */
+    public boolean contains(String value) {
+        return stream().anyMatch(i -> i.getValue().equals(value));
+    }
+
+    /**
+     * Removes the auto completion item with key <code>key</code>
+     * @param key the key
+     * @return {@code true} if an element was removed
+     */
+    public boolean remove(String key) {
+        return removeIf(i -> i.getValue().equals(key));
+    }
+}
diff --git a/src/org/openstreetmap/josm/gui/tagging/ac/package-info.java b/src/org/openstreetmap/josm/data/tagging/ac/package-info.java
similarity index 70%
copy from src/org/openstreetmap/josm/gui/tagging/ac/package-info.java
copy to src/org/openstreetmap/josm/data/tagging/ac/package-info.java
index 610e44e..889547b 100644
--- a/src/org/openstreetmap/josm/gui/tagging/ac/package-info.java
+++ b/src/org/openstreetmap/josm/data/tagging/ac/package-info.java
@@ -3,4 +3,4 @@
 /**
  * Provides classes for handling autocompletion of tags.
  */
-package org.openstreetmap.josm.gui.tagging.ac;
+package org.openstreetmap.josm.data.tagging.ac;
diff --git a/src/org/openstreetmap/josm/data/validation/OsmValidator.java b/src/org/openstreetmap/josm/data/validation/OsmValidator.java
index 602f8d7..30a2661 100644
--- a/src/org/openstreetmap/josm/data/validation/OsmValidator.java
+++ b/src/org/openstreetmap/josm/data/validation/OsmValidator.java
@@ -65,6 +65,7 @@ import org.openstreetmap.josm.data.validation.tests.WronglyOrderedWays;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.layer.ValidatorLayer;
 import org.openstreetmap.josm.gui.preferences.projection.ProjectionPreference;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.AlphanumComparator;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
@@ -174,7 +175,7 @@ public final class OsmValidator {
      * @return The validator directory
      */
     public static String getValidatorDir() {
-        return new File(Main.pref.getUserDataDirectory(), "validator").getAbsolutePath();
+        return new File(Config.getDirs().getUserDataDirectory(true), "validator").getAbsolutePath();
     }
 
     /**
@@ -281,7 +282,7 @@ public final class OsmValidator {
     }
 
     private static void applyPrefs(Map<String, Test> tests, boolean beforeUpload) {
-        for (String testName : Main.pref.getCollection(beforeUpload
+        for (String testName : Config.getPref().getList(beforeUpload
         ? ValidatorPrefHelper.PREF_SKIP_TESTS_BEFORE_UPLOAD : ValidatorPrefHelper.PREF_SKIP_TESTS)) {
             Test test = tests.get(testName);
             if (test != null) {
diff --git a/src/org/openstreetmap/josm/data/validation/Test.java b/src/org/openstreetmap/josm/data/validation/Test.java
index e4ccf18..8aaf545 100644
--- a/src/org/openstreetmap/josm/data/validation/Test.java
+++ b/src/org/openstreetmap/josm/data/validation/Test.java
@@ -20,9 +20,9 @@ import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.data.osm.search.SearchCompiler.InDataSourceArea;
 import org.openstreetmap.josm.data.osm.search.SearchCompiler.NotOutsideDataSourceArea;
-import org.openstreetmap.josm.data.osm.visitor.AbstractVisitor;
-import org.openstreetmap.josm.gui.MainApplication;
+import org.openstreetmap.josm.data.osm.visitor.OsmPrimitiveVisitor;
 import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.tools.GBC;
@@ -38,9 +38,10 @@ import org.openstreetmap.josm.tools.Utils;
  *
  * @author frsantos
  */
-public class Test extends AbstractVisitor implements Comparable<Test> {
+public class Test implements OsmPrimitiveVisitor, Comparable<Test> {
 
     protected static final Predicate<OsmPrimitive> IN_DOWNLOADED_AREA = new NotOutsideDataSourceArea();
+    protected static final Predicate<OsmPrimitive> IN_DOWNLOADED_AREA_STRICT = new InDataSourceArea(true);
 
     /** Name of the test */
     protected final String name;
@@ -330,7 +331,7 @@ public class Test extends AbstractVisitor implements Comparable<Test> {
             }
         }
         if (!primitivesToDelete.isEmpty()) {
-            return DeleteCommand.delete(MainApplication.getLayerManager().getEditLayer(), primitivesToDelete);
+            return DeleteCommand.delete(primitivesToDelete);
         } else {
             return null;
         }
diff --git a/src/org/openstreetmap/josm/data/validation/routines/DomainValidator.java b/src/org/openstreetmap/josm/data/validation/routines/DomainValidator.java
index 8be29d4..d06452a 100644
--- a/src/org/openstreetmap/josm/data/validation/routines/DomainValidator.java
+++ b/src/org/openstreetmap/josm/data/validation/routines/DomainValidator.java
@@ -1060,7 +1060,6 @@ public final class DomainValidator extends AbstractValidator {
         "ott", // ott Dish DBS Corporation
         "ovh", // ovh OVH SAS
         "page", // page Charleston Road Registry Inc.
-        "pamperedchef", // pamperedchef The Pampered Chef, Ltd.
         "panasonic", // panasonic Panasonic Corporation
         "panerai", // panerai Richemont DNS Inc.
         "paris", // paris City of Paris
diff --git a/src/org/openstreetmap/josm/data/validation/tests/Addresses.java b/src/org/openstreetmap/josm/data/validation/tests/Addresses.java
index e7a6743..62bb6c8 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/Addresses.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/Addresses.java
@@ -14,7 +14,6 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -24,6 +23,7 @@ import org.openstreetmap.josm.data.osm.Way;
 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.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Geometry;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Pair;
@@ -204,7 +204,7 @@ public class Addresses extends Test {
             return; // TODO handle multipolygon houses ?
         }
         if (centroid == null) return; // fix #8305
-        double maxDistance = Main.pref.getDouble("validator.addresses.max_street_distance", 200.0);
+        double maxDistance = Config.getPref().getDouble("validator.addresses.max_street_distance", 200.0);
         boolean hasIncompleteWays = false;
         for (Way streetPart : street) {
             for (Pair<Node, Node> chunk : streetPart.getNodePairs(false)) {
diff --git a/src/org/openstreetmap/josm/data/validation/tests/CrossingWays.java b/src/org/openstreetmap/josm/data/validation/tests/CrossingWays.java
index 98a6eef..e8c3a3c 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/CrossingWays.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/CrossingWays.java
@@ -314,15 +314,9 @@ public abstract class CrossingWays extends Test {
      * @return A list with all the cells the segment crosses
      */
     public static List<List<WaySegment>> getSegments(Map<Point2D, List<WaySegment>> cellSegments, EastNorth n1, EastNorth n2) {
-
         List<List<WaySegment>> cells = new ArrayList<>();
         for (Point2D cell : ValUtil.getSegmentCells(n1, n2, OsmValidator.getGridDetail())) {
-            List<WaySegment> segments = cellSegments.get(cell);
-            if (segments == null) {
-                segments = new ArrayList<>();
-                cellSegments.put(cell, segments);
-            }
-            cells.add(segments);
+            cells.add(cellSegments.computeIfAbsent(cell, k -> new ArrayList<>()));
         }
         return cells;
     }
diff --git a/src/org/openstreetmap/josm/data/validation/tests/DuplicateNode.java b/src/org/openstreetmap/josm/data/validation/tests/DuplicateNode.java
index 08aa9b6..208cab8 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/DuplicateNode.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/DuplicateNode.java
@@ -19,7 +19,6 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.MergeNodesAction;
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.data.coor.LatLon;
@@ -34,6 +33,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.gui.progress.ProgressMonitor;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.MultiMap;
 
 /**
@@ -45,7 +45,7 @@ public class DuplicateNode extends Test {
 
     private static class NodeHash implements Hash<Object, Object> {
 
-        private final double precision = Main.pref.getDouble("validator.duplicatenodes.precision", 0.);
+        private final double precision = Config.getPref().getDouble("validator.duplicatenodes.precision", 0.);
 
         private LatLon roundCoord(LatLon coor) {
             return new LatLon(
diff --git a/src/org/openstreetmap/josm/data/validation/tests/Highways.java b/src/org/openstreetmap/josm/data/validation/tests/Highways.java
index d758543..3f8000e 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/Highways.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/Highways.java
@@ -94,7 +94,8 @@ public class Highways extends Test {
     @Override
     public void visit(Way w) {
         if (w.isUsable()) {
-            if (w.isClosed() && w.hasTag(HIGHWAY, CLASSIFIED_HIGHWAYS) && w.hasTag("junction", "roundabout")) {
+            if (w.isClosed() && w.hasTag(HIGHWAY, CLASSIFIED_HIGHWAYS) && w.hasTag("junction", "roundabout")
+                    && IN_DOWNLOADED_AREA_STRICT.test(w)) {
                 // TODO: find out how to handle splitted roundabouts (see #12841)
                 testWrongRoundabout(w);
             }
diff --git a/src/org/openstreetmap/josm/data/validation/tests/LongSegment.java b/src/org/openstreetmap/josm/data/validation/tests/LongSegment.java
index 58806a5..9a17a00 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/LongSegment.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/LongSegment.java
@@ -8,7 +8,6 @@ import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -18,6 +17,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.gui.progress.ProgressMonitor;
+import org.openstreetmap.josm.spi.preferences.Config;
 
 /**
  * Checks for very long segments.
@@ -111,7 +111,7 @@ public class LongSegment extends Test {
     @Override
     public void startTest(ProgressMonitor monitor) {
         super.startTest(monitor);
-        maxlength = Main.pref.getInteger("validator.maximum.segment.length", 15_000);
+        maxlength = Config.getPref().getInt("validator.maximum.segment.length", 15_000);
         reported = new HashSet<>();
         visitedWays = new HashSet<>();
     }
diff --git a/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java b/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java
index dfd586a..3a523b0 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java
@@ -41,6 +41,7 @@ import org.openstreetmap.josm.data.osm.OsmUtils;
 import org.openstreetmap.josm.data.osm.Tag;
 import org.openstreetmap.josm.data.preferences.sources.SourceEntry;
 import org.openstreetmap.josm.data.preferences.sources.ValidatorPrefHelper;
+import org.openstreetmap.josm.data.validation.OsmValidator;
 import org.openstreetmap.josm.data.validation.Severity;
 import org.openstreetmap.josm.data.validation.Test;
 import org.openstreetmap.josm.data.validation.TestError;
@@ -62,6 +63,7 @@ import org.openstreetmap.josm.gui.mappaint.mapcss.parsergen.ParseException;
 import org.openstreetmap.josm.io.CachedFile;
 import org.openstreetmap.josm.io.IllegalDataException;
 import org.openstreetmap.josm.io.UTFInputStreamReader;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.MultiMap;
@@ -147,7 +149,7 @@ public class MapCSSTagChecker extends Test.TagTest {
          */
         static void checkObject(final Object obj) {
             CheckParameterUtil.ensureThat(obj instanceof Expression || obj instanceof String,
-                    "instance of Exception or String expected, but got " + obj);
+                    () -> "instance of Exception or String expected, but got " + obj);
         }
 
         /**
@@ -326,7 +328,7 @@ public class MapCSSTagChecker extends Test.TagTest {
                             check.fixCommands.add(FixCommand.fixAdd(ai.val));
                         } else if ("fixRemove".equals(ai.key)) {
                             CheckParameterUtil.ensureThat(!(ai.val instanceof String) || !(val != null && val.contains("=")),
-                                    "Unexpected '='. Please only specify the key to remove!");
+                                    "Unexpected '='. Please only specify the key to remove in: " + ai);
                             check.fixCommands.add(FixCommand.fixRemove(ai.val));
                         } else if (val != null && "fixChangeKey".equals(ai.key)) {
                             CheckParameterUtil.ensureThat(val.contains("=>"), "Separate old from new key by '=>'!");
@@ -734,7 +736,7 @@ public class MapCSSTagChecker extends Test.TagTest {
             checks.remove(url);
             checks.putAll(url, result.parseChecks);
             // Check assertions, useful for development of local files
-            if (Main.pref.getBoolean("validator.check_assert_local_rules", false) && Utils.isLocalUrl(url)) {
+            if (Config.getPref().getBoolean("validator.check_assert_local_rules", false) && Utils.isLocalUrl(url)) {
                 for (String msg : checkAsserts(result.parseChecks)) {
                     Logging.warn(msg);
                 }
@@ -758,8 +760,8 @@ public class MapCSSTagChecker extends Test.TagTest {
                     Logging.debug(tr("Adding {0} to tag checker", i));
                 }
                 addMapCSS(i);
-                if (Main.pref.getBoolean("validator.auto_reload_local_rules", true) && source.isLocal()) {
-                    Main.fileWatcher.registerValidatorRule(source);
+                if (Config.getPref().getBoolean("validator.auto_reload_local_rules", true) && source.isLocal()) {
+                    Main.fileWatcher.registerSource(source);
                 }
             } catch (IOException | IllegalStateException | IllegalArgumentException ex) {
                 Logging.warn(tr("Failed to add {0} to tag checker", i));
@@ -822,4 +824,20 @@ public class MapCSSTagChecker extends Test.TagTest {
         MapCSSTagChecker that = (MapCSSTagChecker) obj;
         return Objects.equals(checks, that.checks);
     }
+
+    /**
+     * Reload tagchecker rule.
+     * @param rule tagchecker rule to reload
+     * @since 12825
+     */
+    public static void reloadRule(SourceEntry rule) {
+        MapCSSTagChecker tagChecker = OsmValidator.getTest(MapCSSTagChecker.class);
+        if (tagChecker != null) {
+            try {
+                tagChecker.addMapCSS(rule.url);
+            } catch (IOException | ParseException e) {
+                Logging.warn(e);
+            }
+        }
+    }
 }
diff --git a/src/org/openstreetmap/josm/data/validation/tests/MultipolygonTest.java b/src/org/openstreetmap/josm/data/validation/tests/MultipolygonTest.java
index f4d3f5b..008b20b 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/MultipolygonTest.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/MultipolygonTest.java
@@ -223,7 +223,7 @@ public class MultipolygonTest extends Test {
                                     .highlight(wOuter)
                                     .build());
                         } else if (areaStyle) { /* style on outer way of multipolygon, but equal to polygon */
-                            errors.add(TestError.builder(this, Severity.ERROR, OUTER_STYLE)
+                            errors.add(TestError.builder(this, Severity.WARNING, OUTER_STYLE)
                                     .message(tr("Area style on outer way"))
                                     .primitives(Arrays.asList(r, wOuter))
                                     .highlight(wOuter)
diff --git a/src/org/openstreetmap/josm/data/validation/tests/OverlappingWays.java b/src/org/openstreetmap/josm/data/validation/tests/OverlappingWays.java
index ffc87f6..e115cd8 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/OverlappingWays.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/OverlappingWays.java
@@ -22,7 +22,7 @@ import org.openstreetmap.josm.data.osm.OsmUtils;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.osm.WaySegment;
-import org.openstreetmap.josm.data.preferences.CollectionProperty;
+import org.openstreetmap.josm.data.preferences.ListProperty;
 import org.openstreetmap.josm.data.validation.Severity;
 import org.openstreetmap.josm.data.validation.Test;
 import org.openstreetmap.josm.data.validation.TestError;
@@ -49,7 +49,7 @@ public class OverlappingWays extends Test {
     protected static final int OVERLAPPING_AREA = 120;
     protected static final int DUPLICATE_WAY_SEGMENT = 121;
 
-    protected static final CollectionProperty IGNORED_KEYS = new CollectionProperty(
+    protected static final ListProperty IGNORED_KEYS = new ListProperty(
             "overlapping-ways.ignored-keys", Arrays.asList("barrier", "building", "historic:building", "man_made"));
 
     /** Constructor */
diff --git a/src/org/openstreetmap/josm/data/validation/tests/RelationChecker.java b/src/org/openstreetmap/josm/data/validation/tests/RelationChecker.java
index 50b9bfc..e5ec8aa 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/RelationChecker.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/RelationChecker.java
@@ -128,13 +128,7 @@ public class RelationChecker extends Test {
     private static Map<String, RoleInfo> buildRoleInfoMap(Relation n) {
         Map<String, RoleInfo> map = new HashMap<>();
         for (RelationMember m : n.getMembers()) {
-            String role = m.getRole();
-            RoleInfo ri = map.get(role);
-            if (ri == null) {
-                ri = new RoleInfo();
-                map.put(role, ri);
-            }
-            ri.total++;
+            map.computeIfAbsent(m.getRole(), k -> new RoleInfo()).total++;
         }
         return map;
     }
diff --git a/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java b/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java
index a2e421c..c64599c 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java
@@ -12,7 +12,6 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
@@ -26,7 +25,6 @@ import javax.swing.JCheckBox;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.command.ChangePropertyCommand;
 import org.openstreetmap.josm.command.ChangePropertyKeyCommand;
 import org.openstreetmap.josm.command.Command;
@@ -49,6 +47,7 @@ import org.openstreetmap.josm.gui.tagging.presets.items.CheckGroup;
 import org.openstreetmap.josm.gui.tagging.presets.items.KeyedItem;
 import org.openstreetmap.josm.gui.widgets.EditableList;
 import org.openstreetmap.josm.io.CachedFile;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.MultiMap;
@@ -158,7 +157,7 @@ public class TagChecker extends TagTest {
 
     protected EditableList sourcesList;
 
-    private static final Set<String> DEFAULT_SOURCES = new HashSet<>(Arrays.asList(/*DATA_FILE, */IGNORE_FILE, SPELL_FILE));
+    private static final List<String> DEFAULT_SOURCES = Arrays.asList(/*DATA_FILE, */IGNORE_FILE, SPELL_FILE);
 
     /**
      * Constructor
@@ -190,7 +189,7 @@ public class TagChecker extends TagTest {
         harmonizedKeys.clear();
 
         StringBuilder errorSources = new StringBuilder();
-        for (String source : Main.pref.getCollection(PREF_SOURCES, DEFAULT_SOURCES)) {
+        for (String source : Config.getPref().getList(PREF_SOURCES, DEFAULT_SOURCES)) {
             try (
                 CachedFile cf = new CachedFile(source);
                 BufferedReader reader = cf.getContentReader()
@@ -282,7 +281,7 @@ public class TagChecker extends TagTest {
      */
     public static void initializePresets() {
 
-        if (!Main.pref.getBoolean(PREF_CHECK_VALUES, true))
+        if (!Config.getPref().getBoolean(PREF_CHECK_VALUES, true))
             return;
 
         Collection<TaggingPreset> presets = TaggingPresets.getTaggingPresets();
@@ -292,7 +291,7 @@ public class TagChecker extends TagTest {
                 additionalPresetsValueData.putVoid(a);
             }
             // TODO directionKeys are no longer in OsmPrimitive (search pattern is used instead)
-            for (String a : Main.pref.getCollection(ValidatorPrefHelper.PREFIX + ".knownkeys",
+            for (String a : Config.getPref().getList(ValidatorPrefHelper.PREFIX + ".knownkeys",
                     Arrays.asList("is_in", "int_ref", "fixme", "population"))) {
                 additionalPresetsValueData.putVoid(a);
             }
@@ -584,24 +583,24 @@ public class TagChecker extends TagTest {
     @Override
     public void startTest(ProgressMonitor monitor) {
         super.startTest(monitor);
-        checkKeys = Main.pref.getBoolean(PREF_CHECK_KEYS, true);
+        checkKeys = Config.getPref().getBoolean(PREF_CHECK_KEYS, true);
         if (isBeforeUpload) {
-            checkKeys = checkKeys && Main.pref.getBoolean(PREF_CHECK_KEYS_BEFORE_UPLOAD, true);
+            checkKeys = checkKeys && Config.getPref().getBoolean(PREF_CHECK_KEYS_BEFORE_UPLOAD, true);
         }
 
-        checkValues = Main.pref.getBoolean(PREF_CHECK_VALUES, true);
+        checkValues = Config.getPref().getBoolean(PREF_CHECK_VALUES, true);
         if (isBeforeUpload) {
-            checkValues = checkValues && Main.pref.getBoolean(PREF_CHECK_VALUES_BEFORE_UPLOAD, true);
+            checkValues = checkValues && Config.getPref().getBoolean(PREF_CHECK_VALUES_BEFORE_UPLOAD, true);
         }
 
-        checkComplex = Main.pref.getBoolean(PREF_CHECK_COMPLEX, true);
+        checkComplex = Config.getPref().getBoolean(PREF_CHECK_COMPLEX, true);
         if (isBeforeUpload) {
-            checkComplex = checkComplex && Main.pref.getBoolean(PREF_CHECK_COMPLEX_BEFORE_UPLOAD, true);
+            checkComplex = checkComplex && Config.getPref().getBoolean(PREF_CHECK_COMPLEX_BEFORE_UPLOAD, true);
         }
 
-        checkFixmes = Main.pref.getBoolean(PREF_CHECK_FIXMES, true);
+        checkFixmes = Config.getPref().getBoolean(PREF_CHECK_FIXMES, true);
         if (isBeforeUpload) {
-            checkFixmes = checkFixmes && Main.pref.getBoolean(PREF_CHECK_FIXMES_BEFORE_UPLOAD, true);
+            checkFixmes = checkFixmes && Config.getPref().getBoolean(PREF_CHECK_FIXMES_BEFORE_UPLOAD, true);
         }
     }
 
@@ -619,23 +618,23 @@ public class TagChecker extends TagTest {
 
         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 = new JCheckBox(tr("Check property keys."), Config.getPref().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));
 
         prefCheckKeysBeforeUpload = new JCheckBox();
-        prefCheckKeysBeforeUpload.setSelected(Main.pref.getBoolean(PREF_CHECK_KEYS_BEFORE_UPLOAD, true));
+        prefCheckKeysBeforeUpload.setSelected(Config.getPref().getBoolean(PREF_CHECK_KEYS_BEFORE_UPLOAD, true));
         testPanel.add(prefCheckKeysBeforeUpload, a);
 
-        prefCheckComplex = new JCheckBox(tr("Use complex property checker."), Main.pref.getBoolean(PREF_CHECK_COMPLEX, true));
+        prefCheckComplex = new JCheckBox(tr("Use complex property checker."), Config.getPref().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));
 
         prefCheckComplexBeforeUpload = new JCheckBox();
-        prefCheckComplexBeforeUpload.setSelected(Main.pref.getBoolean(PREF_CHECK_COMPLEX_BEFORE_UPLOAD, true));
+        prefCheckComplexBeforeUpload.setSelected(Config.getPref().getBoolean(PREF_CHECK_COMPLEX_BEFORE_UPLOAD, true));
         testPanel.add(prefCheckComplexBeforeUpload, a);
 
-        final Collection<String> sources = Main.pref.getCollection(PREF_SOURCES, DEFAULT_SOURCES);
+        final Collection<String> sources = Config.getPref().getList(PREF_SOURCES, DEFAULT_SOURCES);
         sourcesList = new EditableList(tr("TagChecker source"));
         sourcesList.setItems(sources);
         testPanel.add(new JLabel(tr("Data sources ({0})", "*.cfg")), GBC.eol().insets(23, 0, 0, 0));
@@ -649,20 +648,20 @@ public class TagChecker extends TagTest {
 
         handlePrefEnable();
 
-        prefCheckValues = new JCheckBox(tr("Check property values."), Main.pref.getBoolean(PREF_CHECK_VALUES, true));
+        prefCheckValues = new JCheckBox(tr("Check property values."), Config.getPref().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));
 
         prefCheckValuesBeforeUpload = new JCheckBox();
-        prefCheckValuesBeforeUpload.setSelected(Main.pref.getBoolean(PREF_CHECK_VALUES_BEFORE_UPLOAD, true));
+        prefCheckValuesBeforeUpload.setSelected(Config.getPref().getBoolean(PREF_CHECK_VALUES_BEFORE_UPLOAD, true));
         testPanel.add(prefCheckValuesBeforeUpload, a);
 
-        prefCheckFixmes = new JCheckBox(tr("Check for FIXMES."), Main.pref.getBoolean(PREF_CHECK_FIXMES, true));
+        prefCheckFixmes = new JCheckBox(tr("Check for FIXMES."), Config.getPref().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));
 
         prefCheckFixmesBeforeUpload = new JCheckBox();
-        prefCheckFixmesBeforeUpload.setSelected(Main.pref.getBoolean(PREF_CHECK_FIXMES_BEFORE_UPLOAD, true));
+        prefCheckFixmesBeforeUpload.setSelected(Config.getPref().getBoolean(PREF_CHECK_FIXMES_BEFORE_UPLOAD, true));
         testPanel.add(prefCheckFixmesBeforeUpload, a);
     }
 
@@ -681,15 +680,15 @@ public class TagChecker extends TagTest {
         testBeforeUpload = prefCheckKeysBeforeUpload.isSelected() || prefCheckValuesBeforeUpload.isSelected()
                 || prefCheckFixmesBeforeUpload.isSelected() || prefCheckComplexBeforeUpload.isSelected();
 
-        Main.pref.put(PREF_CHECK_VALUES, prefCheckValues.isSelected());
-        Main.pref.put(PREF_CHECK_COMPLEX, prefCheckComplex.isSelected());
-        Main.pref.put(PREF_CHECK_KEYS, prefCheckKeys.isSelected());
-        Main.pref.put(PREF_CHECK_FIXMES, prefCheckFixmes.isSelected());
-        Main.pref.put(PREF_CHECK_VALUES_BEFORE_UPLOAD, prefCheckValuesBeforeUpload.isSelected());
-        Main.pref.put(PREF_CHECK_COMPLEX_BEFORE_UPLOAD, prefCheckComplexBeforeUpload.isSelected());
-        Main.pref.put(PREF_CHECK_KEYS_BEFORE_UPLOAD, prefCheckKeysBeforeUpload.isSelected());
-        Main.pref.put(PREF_CHECK_FIXMES_BEFORE_UPLOAD, prefCheckFixmesBeforeUpload.isSelected());
-        return Main.pref.putCollection(PREF_SOURCES, sourcesList.getItems());
+        Config.getPref().putBoolean(PREF_CHECK_VALUES, prefCheckValues.isSelected());
+        Config.getPref().putBoolean(PREF_CHECK_COMPLEX, prefCheckComplex.isSelected());
+        Config.getPref().putBoolean(PREF_CHECK_KEYS, prefCheckKeys.isSelected());
+        Config.getPref().putBoolean(PREF_CHECK_FIXMES, prefCheckFixmes.isSelected());
+        Config.getPref().putBoolean(PREF_CHECK_VALUES_BEFORE_UPLOAD, prefCheckValuesBeforeUpload.isSelected());
+        Config.getPref().putBoolean(PREF_CHECK_COMPLEX_BEFORE_UPLOAD, prefCheckComplexBeforeUpload.isSelected());
+        Config.getPref().putBoolean(PREF_CHECK_KEYS_BEFORE_UPLOAD, prefCheckKeysBeforeUpload.isSelected());
+        Config.getPref().putBoolean(PREF_CHECK_FIXMES_BEFORE_UPLOAD, prefCheckFixmesBeforeUpload.isSelected());
+        return Config.getPref().putList(PREF_SOURCES, sourcesList.getItems());
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/data/validation/tests/UnconnectedWays.java b/src/org/openstreetmap/josm/data/validation/tests/UnconnectedWays.java
index 41ede4d..c7f96c1 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/UnconnectedWays.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/UnconnectedWays.java
@@ -32,6 +32,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.gui.progress.ProgressMonitor;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 
 /**
@@ -165,9 +166,9 @@ public abstract class UnconnectedWays extends Test {
         endnodesHighway = new QuadBuckets<>();
         middlenodes = new QuadBuckets<>();
         othernodes = new HashSet<>();
-        mindist = Main.pref.getDouble(PREFIX + ".node_way_distance", 10.0);
-        minmiddledist = Main.pref.getDouble(PREFIX + ".way_way_distance", 0.0);
-        DataSet dataSet = Main.main.getEditDataSet();
+        mindist = Config.getPref().getDouble(PREFIX + ".node_way_distance", 10.0);
+        minmiddledist = Config.getPref().getDouble(PREFIX + ".way_way_distance", 0.0);
+        DataSet dataSet = Main.main != null ? Main.main.getEditDataSet() : null;
         dsArea = dataSet == null ? null : dataSet.getDataSourceArea();
     }
 
diff --git a/src/org/openstreetmap/josm/data/validation/util/AggregatePrimitivesVisitor.java b/src/org/openstreetmap/josm/data/validation/util/AggregatePrimitivesVisitor.java
index 1779b97..34a3594 100644
--- a/src/org/openstreetmap/josm/data/validation/util/AggregatePrimitivesVisitor.java
+++ b/src/org/openstreetmap/josm/data/validation/util/AggregatePrimitivesVisitor.java
@@ -9,7 +9,7 @@ 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.data.osm.Way;
-import org.openstreetmap.josm.data.osm.visitor.AbstractVisitor;
+import org.openstreetmap.josm.data.osm.visitor.OsmPrimitiveVisitor;
 
 /**
  * A visitor that aggregates all primitives it visits.
@@ -18,7 +18,7 @@ import org.openstreetmap.josm.data.osm.visitor.AbstractVisitor;
  *
  * @author frsantos
  */
-public class AggregatePrimitivesVisitor extends AbstractVisitor {
+public class AggregatePrimitivesVisitor implements OsmPrimitiveVisitor {
     /** Aggregated data */
     private final Collection<OsmPrimitive> aggregatedData = new HashSet<>();
 
diff --git a/src/org/openstreetmap/josm/data/validation/util/NameVisitor.java b/src/org/openstreetmap/josm/data/validation/util/NameVisitor.java
index 7eab4d0..9550101 100644
--- a/src/org/openstreetmap/josm/data/validation/util/NameVisitor.java
+++ b/src/org/openstreetmap/josm/data/validation/util/NameVisitor.java
@@ -10,7 +10,7 @@ import org.openstreetmap.josm.data.osm.DefaultNameFormatter;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.Way;
-import org.openstreetmap.josm.data.osm.visitor.AbstractVisitor;
+import org.openstreetmap.josm.data.osm.visitor.OsmPrimitiveVisitor;
 import org.openstreetmap.josm.tools.ImageProvider;
 
 /**
@@ -18,7 +18,7 @@ import org.openstreetmap.josm.tools.ImageProvider;
  *
  * @author imi
  */
-public class NameVisitor extends AbstractVisitor {
+public class NameVisitor implements OsmPrimitiveVisitor {
 
     /**
      * The name of the item class
diff --git a/src/org/openstreetmap/josm/data/validation/util/ValUtil.java b/src/org/openstreetmap/josm/data/validation/util/ValUtil.java
index a7c4544..4bf5ab3 100644
--- a/src/org/openstreetmap/josm/data/validation/util/ValUtil.java
+++ b/src/org/openstreetmap/josm/data/validation/util/ValUtil.java
@@ -55,23 +55,13 @@ public final class ValUtil {
         // Start of the way
         cell = new Point2D.Double(x0, y0);
         cellNodes.add(cell);
-        List<Way> ways = cellWays.get(cell);
-        if (ways == null) {
-            ways = new ArrayList<>();
-            cellWays.put(cell, ways);
-        }
-        cells.add(ways);
+        cells.add(cellWays.computeIfAbsent(cell, k -> new ArrayList<>()));
 
         // End of the way
         cell = new Point2D.Double(x1, y1);
         if (!cellNodes.contains(cell)) {
             cellNodes.add(cell);
-            ways = cellWays.get(cell);
-            if (ways == null) {
-                ways = new ArrayList<>();
-                cellWays.put(cell, ways);
-            }
-            cells.add(ways);
+            cells.add(cellWays.computeIfAbsent(cell, k -> new ArrayList<>()));
         }
 
         // Then floor coordinates, in case the way is in the border of the cell.
@@ -86,24 +76,14 @@ public final class ValUtil {
         cell = new Point2D.Double(x0, y0);
         if (!cellNodes.contains(cell)) {
             cellNodes.add(cell);
-            ways = cellWays.get(cell);
-            if (ways == null) {
-                ways = new ArrayList<>();
-                cellWays.put(cell, ways);
-            }
-            cells.add(ways);
+            cells.add(cellWays.computeIfAbsent(cell, k -> new ArrayList<>()));
         }
 
         // End of the way
         cell = new Point2D.Double(x1, y1);
         if (!cellNodes.contains(cell)) {
             cellNodes.add(cell);
-            ways = cellWays.get(cell);
-            if (ways == null) {
-                ways = new ArrayList<>();
-                cellWays.put(cell, ways);
-            }
-            cells.add(ways);
+            cells.add(cellWays.computeIfAbsent(cell, k -> new ArrayList<>()));
         }
         return cells;
     }
diff --git a/src/org/openstreetmap/josm/gui/ConditionalOptionPaneUtil.java b/src/org/openstreetmap/josm/gui/ConditionalOptionPaneUtil.java
index 9756c88..0d4b25e 100644
--- a/src/org/openstreetmap/josm/gui/ConditionalOptionPaneUtil.java
+++ b/src/org/openstreetmap/josm/gui/ConditionalOptionPaneUtil.java
@@ -16,8 +16,8 @@ import javax.swing.JOptionPane;
 import javax.swing.JPanel;
 import javax.swing.JRadioButton;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -56,10 +56,9 @@ public final class ConditionalOptionPaneUtil {
      * @return the preference value for the preference key "message." + <code>prefKey</code> + ".value"
      */
     public static int getDialogReturnValue(String prefKey) {
-        return Utils.firstNonNull(
-                immediateChoices.get(prefKey),
+        return Utils.firstNonNull(immediateChoices.get(prefKey),
                 sessionChoices.get(prefKey),
-                !Main.pref.getBoolean("message." + prefKey, true) ? Main.pref.getInteger("message." + prefKey + ".value", -1) : -1
+                !Config.getPref().getBoolean("message." + prefKey, true) ? Config.getPref().getInt("message." + prefKey + ".value", -1) : -1
         );
     }
 
@@ -238,8 +237,8 @@ public final class ConditionalOptionPaneUtil {
                     sessionChoices.put(prefKey, value);
                     break;
                 case PERMANENT:
-                    Main.pref.put("message." + prefKey, false);
-                    Main.pref.putInteger("message." + prefKey + ".value", value);
+                    Config.getPref().putBoolean("message." + prefKey, false);
+                    Config.getPref().putInt("message." + prefKey + ".value", value);
                     break;
             }
         }
diff --git a/src/org/openstreetmap/josm/gui/GettingStarted.java b/src/org/openstreetmap/josm/gui/GettingStarted.java
index d9fd43e..f605ca7 100644
--- a/src/org/openstreetmap/josm/gui/GettingStarted.java
+++ b/src/org/openstreetmap/josm/gui/GettingStarted.java
@@ -28,6 +28,7 @@ import org.openstreetmap.josm.gui.preferences.server.ProxyPreferenceListener;
 import org.openstreetmap.josm.gui.widgets.JosmEditorPane;
 import org.openstreetmap.josm.io.CacheCustomContent;
 import org.openstreetmap.josm.io.OnlineResource;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.LanguageInfo;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.OpenBrowser;
@@ -94,9 +95,9 @@ public final class GettingStarted extends JPanel implements ProxyPreferenceListe
         protected byte[] updateData() throws IOException {
             String motd = new WikiReader().readLang("StartupPage");
             // Save this to prefs in case JOSM is updated so MOTD can be refreshed
-            Main.pref.putInteger("cache.motd.html.version", myVersion);
-            Main.pref.put("cache.motd.html.java", myJava);
-            Main.pref.put("cache.motd.html.lang", myLang);
+            Config.getPref().putInt("cache.motd.html.version", myVersion);
+            Config.getPref().put("cache.motd.html.java", myJava);
+            Config.getPref().put("cache.motd.html.lang", myLang);
             return motd.getBytes(StandardCharsets.UTF_8);
         }
 
@@ -114,9 +115,9 @@ public final class GettingStarted extends JPanel implements ProxyPreferenceListe
             // 1. Not yet written - but so isn't the interval variable, so it gets updated anyway
             // 2. Cannot be written (e.g. while developing). Obviously we don't want to update
             // everytime because of something we can't read.
-            return (Main.pref.getInteger("cache.motd.html.version", -999) == myVersion)
-            && Main.pref.get("cache.motd.html.java").equals(myJava)
-            && Main.pref.get("cache.motd.html.lang").equals(myLang);
+            return (Config.getPref().getInt("cache.motd.html.version", -999) == myVersion)
+            && Config.getPref().get("cache.motd.html.java").equals(myJava)
+            && Config.getPref().get("cache.motd.html.lang").equals(myLang);
         }
     }
 
@@ -145,7 +146,7 @@ public final class GettingStarted extends JPanel implements ProxyPreferenceListe
     private void getMOTD() {
         // Asynchronously get MOTD to speed-up JOSM startup
         Thread t = new Thread((Runnable) () -> {
-            if (!contentInitialized && Main.pref.getBoolean("help.displaymotd", true)) {
+            if (!contentInitialized && Config.getPref().getBoolean("help.displaymotd", true)) {
                 try {
                     content = new MotdContent().updateIfRequiredString();
                     contentInitialized = true;
diff --git a/src/org/openstreetmap/josm/gui/IconToggleButton.java b/src/org/openstreetmap/josm/gui/IconToggleButton.java
index 364c459..25b0833 100644
--- a/src/org/openstreetmap/josm/gui/IconToggleButton.java
+++ b/src/org/openstreetmap/josm/gui/IconToggleButton.java
@@ -9,9 +9,9 @@ import javax.swing.Action;
 import javax.swing.Icon;
 import javax.swing.JToggleButton;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.ExpertToggleAction;
 import org.openstreetmap.josm.actions.ExpertToggleAction.ExpertModeChangeListener;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.Destroyable;
 
@@ -92,12 +92,12 @@ public class IconToggleButton extends JToggleButton implements HideableButton, P
 
     @Override
     public void applyButtonHiddenPreferences() {
-        boolean alwaysHideDisabled = Main.pref.getBoolean("sidetoolbar.hideDisabledButtons", false);
+        boolean alwaysHideDisabled = Config.getPref().getBoolean("sidetoolbar.hideDisabledButtons", false);
         if (!isEnabled() && (hideIfDisabled || alwaysHideDisabled)) {
             setVisible(false);  // hide because of disabled button
         } else {
             boolean hiddenFlag = false;
-            String hiddenFlagStr = Main.pref.get(getPreferenceKey(), null);
+            String hiddenFlagStr = Config.getPref().get(getPreferenceKey(), null);
             if (hiddenFlagStr == null) {
                 if (isExpert && !ExpertToggleAction.isExpert()) {
                     hiddenFlag = true;
@@ -117,9 +117,9 @@ public class IconToggleButton extends JToggleButton implements HideableButton, P
         }
         if ((b && isExpert && !ExpertToggleAction.isExpert()) ||
             (!b && isExpert && ExpertToggleAction.isExpert())) {
-            Main.pref.put(getPreferenceKey(), null);
+            Config.getPref().put(getPreferenceKey(), null);
         } else {
-            Main.pref.put(getPreferenceKey(), b);
+            Config.getPref().putBoolean(getPreferenceKey(), b);
         }
     }
 
diff --git a/src/org/openstreetmap/josm/gui/JosmUserIdentityManager.java b/src/org/openstreetmap/josm/gui/JosmUserIdentityManager.java
index 928cddd..ad03dbb 100644
--- a/src/org/openstreetmap/josm/gui/JosmUserIdentityManager.java
+++ b/src/org/openstreetmap/josm/gui/JosmUserIdentityManager.java
@@ -1,26 +1,10 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui;
 
-import static org.openstreetmap.josm.tools.I18n.tr;
-
-import java.text.MessageFormat;
-
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
-import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
-import org.openstreetmap.josm.data.oauth.OAuthAccessTokenHolder;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
+import org.openstreetmap.josm.data.UserIdentityManager;
 import org.openstreetmap.josm.data.osm.User;
 import org.openstreetmap.josm.data.osm.UserInfo;
-import org.openstreetmap.josm.data.preferences.StringSetting;
-import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
-import org.openstreetmap.josm.io.OnlineResource;
-import org.openstreetmap.josm.io.OsmApi;
-import org.openstreetmap.josm.io.OsmServerUserInfoReader;
-import org.openstreetmap.josm.io.OsmTransferException;
-import org.openstreetmap.josm.io.auth.CredentialsManager;
-import org.openstreetmap.josm.tools.CheckParameterUtil;
-import org.openstreetmap.josm.tools.JosmRuntimeException;
-import org.openstreetmap.josm.tools.Logging;
 
 /**
  * JosmUserIdentityManager is a global object which keeps track of what JOSM knows about
@@ -49,9 +33,11 @@ import org.openstreetmap.josm.tools.Logging;
  *   <li>safely query changesets owned by the current user based on its user id, not on its user name</li>
  *   <li>safely search for objects last touched by the current user based on its user id, not on its user name</li>
  * </ul>
- *
+ * @since 2689 (creation)
+ * @deprecated to be removed end of 2017. Use {@link UserIdentityManager} instead
  */
-public final class JosmUserIdentityManager implements PreferenceChangedListener {
+ at Deprecated
+public final class JosmUserIdentityManager {
 
     private static JosmUserIdentityManager instance;
 
@@ -63,28 +49,11 @@ public final class JosmUserIdentityManager implements PreferenceChangedListener
     public static synchronized JosmUserIdentityManager getInstance() {
         if (instance == null) {
             instance = new JosmUserIdentityManager();
-            if (OsmApi.isUsingOAuth() && OAuthAccessTokenHolder.getInstance().containsAccessToken() &&
-                    !Main.isOffline(OnlineResource.OSM_API)) {
-                try {
-                    instance.initFromOAuth();
-                } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException e) {
-                    Logging.error(e);
-                    // Fall back to preferences if OAuth identification fails for any reason
-                    instance.initFromPreferences();
-                }
-            } else {
-                instance.initFromPreferences();
-            }
-            Main.pref.addPreferenceChangeListener(instance);
+            UserIdentityManager.getInstance();
         }
         return instance;
     }
 
-    private String userName;
-    private UserInfo userInfo;
-    private boolean accessTokenKeyChanged;
-    private boolean accessTokenSecretChanged;
-
     private JosmUserIdentityManager() {
     }
 
@@ -92,8 +61,7 @@ public final class JosmUserIdentityManager implements PreferenceChangedListener
      * Remembers the fact that the current JOSM user is anonymous.
      */
     public void setAnonymous() {
-        userName = null;
-        userInfo = null;
+        UserIdentityManager.getInstance().setAnonymous();
     }
 
     /**
@@ -105,13 +73,7 @@ public final class JosmUserIdentityManager implements PreferenceChangedListener
      * @throws IllegalArgumentException if userName is empty
      */
     public void setPartiallyIdentified(String userName) {
-        CheckParameterUtil.ensureParameterNotNull(userName, "userName");
-        String trimmedUserName = userName.trim();
-        if (trimmedUserName.isEmpty())
-            throw new IllegalArgumentException(
-                    MessageFormat.format("Expected non-empty value for parameter ''{0}'', got ''{1}''", "userName", userName));
-        this.userName = trimmedUserName;
-        userInfo = null;
+        UserIdentityManager.getInstance().setPartiallyIdentified(userName);
     }
 
     /**
@@ -125,13 +87,7 @@ public final class JosmUserIdentityManager implements PreferenceChangedListener
      * @throws IllegalArgumentException if userInfo is null
      */
     public void setFullyIdentified(String userName, UserInfo userInfo) {
-        CheckParameterUtil.ensureParameterNotNull(userName, "userName");
-        String trimmedUserName = userName.trim();
-        if (trimmedUserName.isEmpty())
-            throw new IllegalArgumentException(tr("Expected non-empty value for parameter ''{0}'', got ''{1}''", "userName", userName));
-        CheckParameterUtil.ensureParameterNotNull(userInfo, "userInfo");
-        this.userName = trimmedUserName;
-        this.userInfo = userInfo;
+        UserIdentityManager.getInstance().setFullyIdentified(userName, userInfo);
     }
 
     /**
@@ -140,7 +96,7 @@ public final class JosmUserIdentityManager implements PreferenceChangedListener
      * @return {@code true} if the current user is anonymous.
      */
     public boolean isAnonymous() {
-        return userName == null && userInfo == null;
+        return UserIdentityManager.getInstance().isAnonymous();
     }
 
     /**
@@ -149,7 +105,7 @@ public final class JosmUserIdentityManager implements PreferenceChangedListener
      * @return true if the current JOSM user is partially identified.
      */
     public boolean isPartiallyIdentified() {
-        return userName != null && userInfo == null;
+        return UserIdentityManager.getInstance().isPartiallyIdentified();
     }
 
     /**
@@ -158,7 +114,7 @@ public final class JosmUserIdentityManager implements PreferenceChangedListener
      * @return true if the current JOSM user is fully identified.
      */
     public boolean isFullyIdentified() {
-        return userName != null && userInfo != null;
+        return UserIdentityManager.getInstance().isFullyIdentified();
     }
 
     /**
@@ -167,7 +123,7 @@ public final class JosmUserIdentityManager implements PreferenceChangedListener
      * @return  the user name of the current JOSM user
      */
     public String getUserName() {
-        return userName;
+        return UserIdentityManager.getInstance().getUserName();
     }
 
     /**
@@ -177,8 +133,7 @@ public final class JosmUserIdentityManager implements PreferenceChangedListener
      * @return  the user id of the current JOSM user
      */
     public int getUserId() {
-        if (userInfo == null) return 0;
-        return userInfo.getId();
+        return UserIdentityManager.getInstance().getUserId();
     }
 
     /**
@@ -188,7 +143,7 @@ public final class JosmUserIdentityManager implements PreferenceChangedListener
      * @return verified additional information about the current user
      */
     public UserInfo getUserInfo() {
-        return userInfo;
+        return UserIdentityManager.getInstance().getUserInfo();
     }
 
     /**
@@ -197,7 +152,7 @@ public final class JosmUserIdentityManager implements PreferenceChangedListener
      * @return the identity as user, or {@link User#getAnonymous()} if {@link #isAnonymous()}
      */
     public User asUser() {
-        return isAnonymous() ? User.getAnonymous() : User.createOsmUser(userInfo != null ? userInfo.getId() : 0, userName);
+        return UserIdentityManager.getInstance().asUser();
     }
 
     /**
@@ -206,18 +161,7 @@ public final class JosmUserIdentityManager implements PreferenceChangedListener
      * @see #initFromOAuth
      */
     public void initFromPreferences() {
-        String userName = CredentialsManager.getInstance().getUsername();
-        if (isAnonymous()) {
-            if (userName != null && !userName.trim().isEmpty()) {
-                setPartiallyIdentified(userName);
-            }
-        } 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
-        }
+        UserIdentityManager.getInstance().initFromPreferences();
     }
 
     /**
@@ -227,12 +171,7 @@ public final class JosmUserIdentityManager implements PreferenceChangedListener
      * @since 5434
      */
     public void initFromOAuth() {
-        try {
-            UserInfo info = new OsmServerUserInfoReader().fetchUserInfo(NullProgressMonitor.INSTANCE);
-            setFullyIdentified(info.getDisplayName(), info);
-        } catch (IllegalArgumentException | OsmTransferException e) {
-            Logging.error(e);
-        }
+        UserIdentityManager.getInstance().initFromOAuth();
     }
 
     /**
@@ -242,71 +181,17 @@ public final class JosmUserIdentityManager implements PreferenceChangedListener
      * @return true if the user with name <code>username</code> is the current user
      */
     public boolean isCurrentUser(String username) {
-        return this.userName != null && this.userName.equals(username);
+        return UserIdentityManager.getInstance().isCurrentUser(username);
     }
 
     /**
      * Replies true if the current user is {@link #isFullyIdentified() fully identified} and the {@link #getUserId() user ids} match,
-     * or if the current user is not {@link #isFullyIdentified() fully identified} and the {@link #userName user names} match.
+     * or if the current user is not {@link #isFullyIdentified() fully identified} and the {@link #getUserName() user names} match.
      *
      * @param user the user to test
      * @return true if given user is the current user
      */
     public boolean isCurrentUser(User user) {
-        if (user == null) {
-            return false;
-        } else if (isFullyIdentified()) {
-            return getUserId() == user.getId();
-        } else {
-            return isCurrentUser(user.getName());
-        }
-    }
-
-    /* ------------------------------------------------------------------- */
-    /* interface PreferenceChangeListener                                  */
-    /* ------------------------------------------------------------------- */
-    @Override
-    public void preferenceChanged(PreferenceChangeEvent evt) {
-        switch (evt.getKey()) {
-        case "osm-server.username":
-            String newUserName = null;
-            if (evt.getNewValue() instanceof StringSetting) {
-                newUserName = ((StringSetting) evt.getNewValue()).getValue();
-            }
-            if (newUserName == null || newUserName.trim().isEmpty()) {
-                setAnonymous();
-            } else {
-                if (!newUserName.equals(userName)) {
-                    setPartiallyIdentified(newUserName);
-                }
-            }
-            return;
-        case "osm-server.url":
-            String newUrl = null;
-            if (evt.getNewValue() instanceof StringSetting) {
-                newUrl = ((StringSetting) evt.getNewValue()).getValue();
-            }
-            if (newUrl == null || newUrl.trim().isEmpty()) {
-                setAnonymous();
-            } else if (isFullyIdentified()) {
-                setPartiallyIdentified(getUserName());
-            }
-            break;
-        case "oauth.access-token.key":
-            accessTokenKeyChanged = true;
-            break;
-        case "oauth.access-token.secret":
-            accessTokenSecretChanged = true;
-            break;
-        default: // Do nothing
-        }
-
-        if (accessTokenKeyChanged && accessTokenSecretChanged) {
-            accessTokenKeyChanged = false;
-            accessTokenSecretChanged = false;
-            if (OsmApi.isUsingOAuth()) {
-                getInstance().initFromOAuth();
-            }
-        }
+        return UserIdentityManager.getInstance().isCurrentUser(user);
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/MainApplication.java b/src/org/openstreetmap/josm/gui/MainApplication.java
index 6cc0c4d..8d4912a 100644
--- a/src/org/openstreetmap/josm/gui/MainApplication.java
+++ b/src/org/openstreetmap/josm/gui/MainApplication.java
@@ -5,8 +5,10 @@ import static org.openstreetmap.josm.tools.I18n.tr;
 import static org.openstreetmap.josm.tools.I18n.trn;
 
 import java.awt.BorderLayout;
+import java.awt.Container;
 import java.awt.Dimension;
 import java.awt.GraphicsEnvironment;
+import java.awt.GridBagLayout;
 import java.awt.event.KeyEvent;
 import java.io.File;
 import java.io.IOException;
@@ -32,6 +34,7 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.Set;
 import java.util.TreeSet;
@@ -47,7 +50,9 @@ import javax.net.ssl.SSLSocketFactory;
 import javax.swing.Action;
 import javax.swing.InputMap;
 import javax.swing.JComponent;
+import javax.swing.JLabel;
 import javax.swing.JOptionPane;
+import javax.swing.JPanel;
 import javax.swing.KeyStroke;
 import javax.swing.LookAndFeel;
 import javax.swing.RepaintManager;
@@ -57,7 +62,9 @@ import javax.swing.UnsupportedLookAndFeelException;
 
 import org.jdesktop.swinghelper.debug.CheckThreadViolationRepaintManager;
 import org.openstreetmap.gui.jmapviewer.FeatureAdapter;
+import org.openstreetmap.josm.CLIModule;
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.actions.DeleteAction;
 import org.openstreetmap.josm.actions.JosmAction;
 import org.openstreetmap.josm.actions.OpenFileAction;
 import org.openstreetmap.josm.actions.OpenFileAction.OpenFileTask;
@@ -69,23 +76,45 @@ import org.openstreetmap.josm.actions.downloadtasks.DownloadTask;
 import org.openstreetmap.josm.actions.downloadtasks.PostDownloadHandler;
 import org.openstreetmap.josm.actions.mapmode.DrawAction;
 import org.openstreetmap.josm.actions.search.SearchAction;
+import org.openstreetmap.josm.command.DeleteCommand;
+import org.openstreetmap.josm.command.SplitWayCommand;
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.UndoRedoHandler;
+import org.openstreetmap.josm.data.UndoRedoHandler.CommandQueueListener;
 import org.openstreetmap.josm.data.Version;
+import org.openstreetmap.josm.data.cache.JCSCacheManager;
 import org.openstreetmap.josm.data.oauth.OAuthAccessTokenHolder;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.UserInfo;
 import org.openstreetmap.josm.data.osm.search.SearchMode;
+import org.openstreetmap.josm.data.preferences.sources.SourceType;
+import org.openstreetmap.josm.data.projection.ProjectionCLI;
+import org.openstreetmap.josm.data.projection.datum.NTV2GridShiftFileSource;
+import org.openstreetmap.josm.data.projection.datum.NTV2GridShiftFileWrapper;
+import org.openstreetmap.josm.data.projection.datum.NTV2Proj4DirGridShiftFileSource;
 import org.openstreetmap.josm.data.validation.OsmValidator;
+import org.openstreetmap.josm.data.validation.tests.MapCSSTagChecker;
 import org.openstreetmap.josm.gui.ProgramArguments.Option;
 import org.openstreetmap.josm.gui.SplashScreen.SplashProgressMonitor;
+import org.openstreetmap.josm.gui.bugreport.BugReportDialog;
 import org.openstreetmap.josm.gui.download.DownloadDialog;
+import org.openstreetmap.josm.gui.io.CredentialDialog;
 import org.openstreetmap.josm.gui.io.CustomConfigurator.XMLCommandProcessor;
 import org.openstreetmap.josm.gui.io.SaveLayersDialog;
 import org.openstreetmap.josm.gui.layer.AutosaveTask;
+import org.openstreetmap.josm.gui.layer.ImageryLayer;
+import org.openstreetmap.josm.gui.layer.Layer;
+import org.openstreetmap.josm.gui.layer.LayerManager.LayerAddEvent;
+import org.openstreetmap.josm.gui.layer.LayerManager.LayerChangeListener;
+import org.openstreetmap.josm.gui.layer.LayerManager.LayerOrderChangeEvent;
+import org.openstreetmap.josm.gui.layer.LayerManager.LayerRemoveEvent;
 import org.openstreetmap.josm.gui.layer.MainLayerManager;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer.CommandQueueListener;
+import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.layer.TMSLayer;
+import org.openstreetmap.josm.gui.mappaint.RenderingCLI;
+import org.openstreetmap.josm.gui.mappaint.loader.MapPaintStyleLoader;
+import org.openstreetmap.josm.gui.oauth.OAuthAuthorizationWizard;
 import org.openstreetmap.josm.gui.preferences.ToolbarPreferences;
 import org.openstreetmap.josm.gui.preferences.display.LafPreference;
 import org.openstreetmap.josm.gui.preferences.imagery.ImageryPreference;
@@ -97,24 +126,32 @@ import org.openstreetmap.josm.gui.tagging.presets.TaggingPresets;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.util.RedirectInputMap;
 import org.openstreetmap.josm.gui.util.WindowGeometry;
+import org.openstreetmap.josm.gui.widgets.UrlLabel;
+import org.openstreetmap.josm.io.CachedFile;
 import org.openstreetmap.josm.io.CertificateAmendment;
 import org.openstreetmap.josm.io.DefaultProxySelector;
+import org.openstreetmap.josm.io.FileWatcher;
 import org.openstreetmap.josm.io.MessageNotifier;
 import org.openstreetmap.josm.io.OnlineResource;
 import org.openstreetmap.josm.io.OsmApi;
 import org.openstreetmap.josm.io.OsmApiInitializationException;
+import org.openstreetmap.josm.io.OsmConnection;
 import org.openstreetmap.josm.io.OsmTransferCanceledException;
 import org.openstreetmap.josm.io.OsmTransferException;
+import org.openstreetmap.josm.io.auth.AbstractCredentialsAgent;
 import org.openstreetmap.josm.io.auth.CredentialsManager;
 import org.openstreetmap.josm.io.auth.DefaultAuthenticator;
 import org.openstreetmap.josm.io.protocols.data.Handler;
 import org.openstreetmap.josm.io.remotecontrol.RemoteControl;
 import org.openstreetmap.josm.plugins.PluginHandler;
 import org.openstreetmap.josm.plugins.PluginInformation;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.FontsManager;
+import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.HttpClient;
 import org.openstreetmap.josm.tools.I18n;
 import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.JosmRuntimeException;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.OpenBrowser;
 import org.openstreetmap.josm.tools.OsmUrlToBounds;
@@ -127,6 +164,8 @@ import org.openstreetmap.josm.tools.Territories;
 import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.bugreport.BugReport;
 import org.openstreetmap.josm.tools.bugreport.BugReportExceptionHandler;
+import org.openstreetmap.josm.tools.bugreport.BugReportQueue;
+import org.openstreetmap.josm.tools.bugreport.BugReportSender;
 import org.xml.sax.SAXException;
 
 /**
@@ -140,7 +179,7 @@ public class MainApplication extends Main {
     /**
      * Command-line arguments used to run the application.
      */
-    private static final List<String> COMMAND_LINE_ARGS = new ArrayList<>();
+    private static volatile List<String> commandLineArgs;
 
     /**
      * The main menu bar at top of screen.
@@ -186,9 +225,57 @@ public class MainApplication extends Main {
 
     /**
      * The commands undo/redo handler.
-     * @since 12641 (as a replacement to {@code Main.main.undoRedo})
+     * @since 12641
      */
-    public static final UndoRedoHandler undoRedo = new UndoRedoHandler(); // Must be declared after layerManager
+    public static volatile UndoRedoHandler undoRedo;
+
+    private static final LayerChangeListener undoRedoCleaner = new LayerChangeListener() {
+        @Override
+        public void layerRemoving(LayerRemoveEvent e) {
+            Layer layer = e.getRemovedLayer();
+            if (layer instanceof OsmDataLayer) {
+                undoRedo.clean(((OsmDataLayer) layer).data);
+            }
+        }
+
+        @Override
+        public void layerOrderChanged(LayerOrderChangeEvent e) {
+            // Do nothing
+        }
+
+        @Override
+        public void layerAdded(LayerAddEvent e) {
+            // Do nothing
+        }
+    };
+
+    private static final List<CLIModule> cliModules = new ArrayList<>();
+
+    /**
+     * Default JOSM command line interface.
+     * <p>
+     * Runs JOSM and performs some action, depending on the options and positional
+     * arguments.
+     */
+    public static final CLIModule JOSM_CLI_MODULE = new CLIModule() {
+        @Override
+        public String getActionKeyword() {
+            return "runjosm";
+        }
+
+        @Override
+        public void processArguments(String[] argArray) {
+            ProgramArguments args = null;
+            // construct argument table
+            try {
+                args = new ProgramArguments(argArray);
+            } catch (IllegalArgumentException e) {
+                System.err.println(e.getMessage());
+                System.exit(1);
+            }
+            mainJOSM(args);
+        }
+    };
 
     /**
      * Listener that sets the enabled state of undo/redo menu entries.
@@ -199,6 +286,37 @@ public class MainApplication extends Main {
         };
 
     /**
+     * Source of NTV2 shift files: Download from JOSM website.
+     * @since 12777
+     */
+    public static final NTV2GridShiftFileSource JOSM_WEBSITE_NTV2_SOURCE = gridFileName -> {
+        String location = Main.getJOSMWebsite() + "/proj/" + gridFileName;
+        // Try to load grid file
+        CachedFile cf = new CachedFile(location);
+        try {
+            return cf.getInputStream();
+        } catch (IOException ex) {
+            Logging.warn(ex);
+            return null;
+        }
+    };
+
+    static {
+        registerCLIModule(JOSM_CLI_MODULE);
+        registerCLIModule(ProjectionCLI.INSTANCE);
+        registerCLIModule(RenderingCLI.INSTANCE);
+    }
+
+    /**
+     * Register a command line interface module.
+     * @param module the module
+     * @since 12886
+     */
+    public static void registerCLIModule(CLIModule module) {
+        cliModules.add(module);
+    }
+
+    /**
      * Constructs a new {@code MainApplication} without a window.
      */
     public MainApplication() {
@@ -212,6 +330,8 @@ public class MainApplication extends Main {
      */
     public MainApplication(MainFrame mainFrame) {
         this.mainFrame = mainFrame;
+        undoRedo = super.undoRedo;
+        getLayerManager().addLayerChangeListener(undoRedoCleaner);
     }
 
     /**
@@ -279,6 +399,19 @@ public class MainApplication extends Main {
     protected Collection<InitializationTask> parallelInitializationTasks() {
         return Arrays.asList(
             new InitializationTask(tr("Initializing OSM API"), () -> {
+                    OsmApi.addOsmApiInitializationListener(api -> {
+                        // This checks if there are any layers currently displayed that are now on the blacklist, and removes them.
+                        // This is a rare situation - probably only occurs if the user changes the API URL in the preferences menu.
+                        // Otherwise they would not have been able to load the layers in the first place because they would have been disabled
+                        if (isDisplayingMapView()) {
+                            for (Layer l : getLayerManager().getLayersOfType(ImageryLayer.class)) {
+                                if (((ImageryLayer) l).getInfo().isBlacklisted()) {
+                                    Logging.info(tr("Removed layer {0} because it is not allowed by the configured API.", l.getName()));
+                                    getLayerManager().removeLayer(l);
+                                }
+                            }
+                        }
+                    });
                     // 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.
@@ -354,6 +487,7 @@ public class MainApplication extends Main {
     protected void shutdown() {
         if (!GraphicsEnvironment.isHeadless()) {
             worker.shutdown();
+            JCSCacheManager.shutdown();
         }
         if (mainFrame != null) {
             mainFrame.storeState();
@@ -406,13 +540,27 @@ public class MainApplication extends Main {
         return getLayerManager().getEditDataSet();
     }
 
+    @Override
+    public void setEditDataSet(DataSet ds) {
+        Optional<OsmDataLayer> layer = getLayerManager().getLayersOfType(OsmDataLayer.class).stream()
+                .filter(l -> l.data.equals(ds)).findFirst();
+        if (layer.isPresent()) {
+            getLayerManager().setActiveLayer(layer.get());
+        }
+    }
+
+    @Override
+    public boolean containsDataSet(DataSet ds) {
+        return getLayerManager().getLayersOfType(OsmDataLayer.class).stream().anyMatch(l -> l.data.equals(ds));
+    }
+
     /**
      * Returns the command-line arguments used to run the application.
      * @return the command-line arguments used to run the application
      * @since 11650
      */
     public static List<String> getCommandLineArgs() {
-        return Collections.unmodifiableList(COMMAND_LINE_ARGS);
+        return Collections.unmodifiableList(commandLineArgs);
     }
 
     /**
@@ -633,7 +781,13 @@ public class MainApplication extends Main {
         return tr("Java OpenStreetMap Editor")+" ["
                 +Version.getInstance().getAgentString()+"]\n\n"+
                 tr("usage")+":\n"+
-                "\tjava -jar josm.jar <options>...\n\n"+
+                "\tjava -jar josm.jar [<command>] <options>...\n\n"+
+                tr("commands")+":\n"+
+                "\trunjosm     "+tr("launch JOSM (default, performed when no command is specified)")+'\n'+
+                "\trender      "+tr("render data and save the result to an image file")+'\n'+
+                "\tproject     "+tr("convert coordinates from one coordinate reference system to another")+"\n\n"+
+                tr("For details on the {0} and {1} commands, run them with the {2} option.", "render", "project", "--help")+'\n'+
+                tr("The remainder of this help page documents the {0} command.", "runjosm")+"\n\n"+
                 tr("options")+":\n"+
                 "\t--help|-h                                 "+tr("Show this help")+'\n'+
                 "\t--geometry=widthxheight(+|-)x(+|-)y       "+tr("Standard unix geometry argument")+'\n'+
@@ -690,15 +844,31 @@ public class MainApplication extends Main {
     @SuppressWarnings("deprecation")
     public static void main(final String[] argArray) {
         I18n.init();
+        commandLineArgs = Arrays.asList(Arrays.copyOf(argArray, argArray.length));
+
+        if (argArray.length > 0) {
+            String moduleStr = argArray[0];
+            for (CLIModule module : cliModules) {
+                if (Objects.equals(moduleStr, module.getActionKeyword())) {
+                   String[] argArrayCdr = Arrays.copyOfRange(argArray, 1, argArray.length);
+                   module.processArguments(argArrayCdr);
+                   return;
+                }
+            }
+        }
+        // no module specified, use default (josm)
+        JOSM_CLI_MODULE.processArguments(argArray);
+    }
 
-        ProgramArguments args = null;
-        // construct argument table
-        try {
-            args = new ProgramArguments(argArray);
-        } catch (IllegalArgumentException e) {
-            System.err.println(e.getMessage());
-            System.exit(1);
-            return;
+    /**
+     * Main method to run the JOSM GUI.
+     * @param args program arguments
+     */
+    public static void mainJOSM(ProgramArguments args) {
+
+        if (!GraphicsEnvironment.isHeadless()) {
+            BugReportQueue.getInstance().setBugReportHandler(BugReportDialog::showFor);
+            BugReportSender.setBugReportSendingHandler(BugReportDialog.bugReportSendingHandler);
         }
 
         Level logLevel = args.getLogLevel();
@@ -741,8 +911,6 @@ public class MainApplication extends Main {
             return;
         }
 
-        COMMAND_LINE_ARGS.addAll(Arrays.asList(argArray));
-
         boolean skipLoadingPlugins = args.hasOption(Option.SKIP_PLUGINS);
         if (skipLoadingPlugins) {
             Logging.info(tr("Plugin loading skipped"));
@@ -755,11 +923,13 @@ public class MainApplication extends Main {
         }
 
         Main.pref.init(args.hasOption(Option.RESET_PREFERENCES));
+        Config.setPreferencesInstance(Main.pref);
+        Config.setBaseDirectoriesProvider(Main.pref);
 
         args.getPreferencesToSet().forEach(Main.pref::put);
 
         if (!language.isPresent()) {
-            I18n.set(Main.pref.get("language", null));
+            I18n.set(Config.getPref().get("language", null));
         }
         Main.pref.updateSystemProperties();
 
@@ -769,6 +939,8 @@ public class MainApplication extends Main {
 
         Main.platform.afterPrefStartupHook();
 
+        applyWorkarounds();
+
         FontsManager.initialize();
 
         GuiHelper.setupLanguageFonts();
@@ -777,10 +949,11 @@ public class MainApplication extends Main {
 
         WindowGeometry geometry = WindowGeometry.mainWindow("gui.geometry",
                 args.getSingle(Option.GEOMETRY).orElse(null),
-                !args.hasOption(Option.NO_MAXIMIZE) && Main.pref.getBoolean("gui.maximized", false));
+                !args.hasOption(Option.NO_MAXIMIZE) && Config.getPref().getBoolean("gui.maximized", false));
         final MainFrame mainFrame = new MainFrame(geometry);
-        if (mainFrame.getContentPane() instanceof JComponent) {
-            contentPanePrivate = (JComponent) mainFrame.getContentPane();
+        final Container contentPane = mainFrame.getContentPane();
+        if (contentPane instanceof JComponent) {
+            contentPanePrivate = (JComponent) contentPane;
         }
         mainPanel = mainFrame.getPanel();
         Main.parent = mainFrame;
@@ -808,10 +981,12 @@ public class MainApplication extends Main {
         ProxySelector.setDefault(proxySelector);
         OAuthAccessTokenHolder.getInstance().init(Main.pref, CredentialsManager.getInstance());
 
+        setupCallbacks();
+
         final SplashScreen splash = GuiHelper.runInEDTAndWaitAndReturn(SplashScreen::new);
         final SplashScreen.SplashProgressMonitor monitor = splash.getProgressMonitor();
         monitor.beginTask(tr("Initializing"));
-        GuiHelper.runInEDT(() -> splash.setVisible(Main.pref.getBoolean("draw.splashscreen", true)));
+        GuiHelper.runInEDT(() -> splash.setVisible(Config.getPref().getBoolean("draw.splashscreen", true)));
         Main.setInitStatusListener(new InitStatusListener() {
 
             @Override
@@ -839,6 +1014,7 @@ public class MainApplication extends Main {
         toolbar = new ToolbarPreferences();
         Main.toolbar = toolbar;
         ProjectionPreference.setProjection();
+        setupNadGridSources();
         GuiHelper.translateJavaInternalMessages();
         preConstructorInit();
 
@@ -857,7 +1033,7 @@ public class MainApplication extends Main {
             mainFrame.setVisible(true);
         });
 
-        boolean maximized = Main.pref.getBoolean("gui.maximized", false);
+        boolean maximized = Config.getPref().getBoolean("gui.maximized", false);
         if ((!args.hasOption(Option.NO_MAXIMIZE) && maximized) || args.hasOption(Option.MAXIMIZE)) {
             mainFrame.setMaximized(true);
         }
@@ -886,7 +1062,7 @@ public class MainApplication extends Main {
             MessageNotifier.start();
         }
 
-        if (Main.pref.getBoolean("debug.edt-checker.enable", Version.getInstance().isLocalBuild())) {
+        if (Config.getPref().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
             Logging.info("Enabled EDT checker, wrongful access to gui from non EDT thread will be printed to console");
@@ -894,6 +1070,59 @@ public class MainApplication extends Main {
         }
     }
 
+    /**
+     * Setup the sources for NTV2 grid shift files for projection support.
+     * @since 12795
+     */
+    public static void setupNadGridSources() {
+        NTV2GridShiftFileWrapper.registerNTV2GridShiftFileSource(
+                NTV2GridShiftFileWrapper.NTV2_SOURCE_PRIORITY_LOCAL,
+                NTV2Proj4DirGridShiftFileSource.getInstance());
+        NTV2GridShiftFileWrapper.registerNTV2GridShiftFileSource(
+                NTV2GridShiftFileWrapper.NTV2_SOURCE_PRIORITY_DOWNLOAD,
+                JOSM_WEBSITE_NTV2_SOURCE);
+    }
+
+    static void applyWorkarounds() {
+        // Workaround for JDK-8180379: crash on Windows 10 1703 with Windows L&F and java < 8u141 / 9+172
+        // To remove during Java 9 migration
+        if (System.getProperty("os.name").toLowerCase(Locale.ENGLISH).contains("windows 10") &&
+                platform.getDefaultStyle().equals(LafPreference.LAF.get())) {
+            try {
+                final int currentBuild = Integer.parseInt(PlatformHookWindows.getCurrentBuild());
+                final int javaVersion = Utils.getJavaVersion();
+                final int javaUpdate = Utils.getJavaUpdate();
+                final int javaBuild = Utils.getJavaBuild();
+                // See https://technet.microsoft.com/en-us/windows/release-info.aspx
+                if (currentBuild >= 15_063 && ((javaVersion == 8 && javaUpdate < 141)
+                        || (javaVersion == 9 && javaUpdate == 0 && javaBuild < 173))) {
+                    // Workaround from https://bugs.openjdk.java.net/browse/JDK-8179014
+                    UIManager.put("FileChooser.useSystemExtensionHiding", Boolean.FALSE);
+                }
+            } catch (NumberFormatException | ReflectiveOperationException | JosmRuntimeException e) {
+                Logging.error(e);
+            }
+        }
+    }
+
+    static void setupCallbacks() {
+        OsmConnection.setOAuthAccessTokenFetcher(OAuthAuthorizationWizard::obtainAccessToken);
+        AbstractCredentialsAgent.setCredentialsProvider(CredentialDialog::promptCredentials);
+        MessageNotifier.setNotifierCallback(MainApplication::notifyNewMessages);
+        DeleteCommand.setDeletionCallback(DeleteAction.defaultDeletionCallback);
+        SplitWayCommand.setWarningNotifier(msg -> new Notification(msg).setIcon(JOptionPane.WARNING_MESSAGE).show());
+        FileWatcher.registerLoader(SourceType.MAP_PAINT_STYLE, MapPaintStyleLoader::reloadStyle);
+        FileWatcher.registerLoader(SourceType.TAGCHECKER_RULE, MapCSSTagChecker::reloadRule);
+        OsmUrlToBounds.setMapSizeSupplier(() -> {
+            if (isDisplayingMapView()) {
+                MapView mapView = getMap().mapView;
+                return new Dimension(mapView.getWidth(), mapView.getHeight());
+            } else {
+                return GuiHelper.getScreenSize();
+            }
+        });
+    }
+
     static void setupUIManager() {
         String defaultlaf = platform.getDefaultStyle();
         String laf = LafPreference.LAF.get();
@@ -1002,10 +1231,10 @@ 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(Config.getPref().get("prefer.ipv6", "auto"))) {
             new Thread((Runnable) () -> { /* this may take some time (DNS, Connect) */
                 boolean hasv6 = false;
-                boolean wasv6 = Main.pref.getBoolean("validated.ipv6", false);
+                boolean wasv6 = Config.getPref().getBoolean("validated.ipv6", false);
                 try {
                     /* Use the check result from last run of the software, as after the test, value
                        changes have no effect anymore */
@@ -1034,14 +1263,14 @@ public class MainApplication extends Main {
                 }
                 if (wasv6 && !hasv6) {
                     Logging.info(tr("Detected no useable IPv6 network, prefering IPv4 over IPv6 after next restart."));
-                    Main.pref.put("validated.ipv6", hasv6); // be sure it is stored before the restart!
+                    Config.getPref().putBoolean("validated.ipv6", hasv6); // be sure it is stored before the restart!
                     try {
                         RestartAction.restartJOSM();
                     } catch (IOException e) {
                         Logging.error(e);
                     }
                 }
-                Main.pref.put("validated.ipv6", hasv6);
+                Config.getPref().putBoolean("validated.ipv6", hasv6);
             }, "IPv6-checker").start();
         }
     }
@@ -1230,4 +1459,20 @@ public class MainApplication extends Main {
             MainApplication.getMenu().preferences.actionPerformed(null);
         }
     }
+
+    static void notifyNewMessages(UserInfo userInfo) {
+        GuiHelper.runInEDT(() -> {
+            JPanel panel = new JPanel(new GridBagLayout());
+            panel.add(new JLabel(trn("You have {0} unread message.", "You have {0} unread messages.",
+                    userInfo.getUnreadMessages(), userInfo.getUnreadMessages())),
+                    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)
+                .setDuration(Notification.TIME_LONG)
+                .show();
+        });
+    }
 }
diff --git a/src/org/openstreetmap/josm/gui/MainFrame.java b/src/org/openstreetmap/josm/gui/MainFrame.java
index 0a3b70b..ca086ee 100644
--- a/src/org/openstreetmap/josm/gui/MainFrame.java
+++ b/src/org/openstreetmap/josm/gui/MainFrame.java
@@ -19,7 +19,6 @@ import java.util.List;
 import javax.swing.JFrame;
 import javax.swing.JPanel;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.layer.LayerManager.LayerAddEvent;
 import org.openstreetmap.josm.gui.layer.LayerManager.LayerChangeListener;
 import org.openstreetmap.josm.gui.layer.LayerManager.LayerOrderChangeEvent;
@@ -27,6 +26,7 @@ import org.openstreetmap.josm.gui.layer.LayerManager.LayerRemoveEvent;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer.LayerStateChangeListener;
 import org.openstreetmap.josm.gui.util.WindowGeometry;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Logging;
 
@@ -109,7 +109,7 @@ public class MainFrame extends JFrame {
         if (geometry != null) {
             geometry.remember("gui.geometry");
         }
-        Main.pref.put("gui.maximized", (windowState & JFrame.MAXIMIZED_BOTH) != 0);
+        Config.getPref().putBoolean("gui.maximized", (windowState & JFrame.MAXIMIZED_BOTH) != 0);
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/gui/MainMenu.java b/src/org/openstreetmap/josm/gui/MainMenu.java
index 9a39c65..e746a27 100644
--- a/src/org/openstreetmap/josm/gui/MainMenu.java
+++ b/src/org/openstreetmap/josm/gui/MainMenu.java
@@ -91,6 +91,7 @@ import org.openstreetmap.josm.actions.SessionSaveAsAction;
 import org.openstreetmap.josm.actions.ShowStatusReportAction;
 import org.openstreetmap.josm.actions.SimplifyWayAction;
 import org.openstreetmap.josm.actions.SplitWayAction;
+import org.openstreetmap.josm.actions.TaggingPresetSearchAction;
 import org.openstreetmap.josm.actions.UnGlueAction;
 import org.openstreetmap.josm.actions.UnJoinNodeWayAction;
 import org.openstreetmap.josm.actions.UndoAction;
@@ -119,8 +120,8 @@ import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeListen
 import org.openstreetmap.josm.gui.mappaint.MapPaintMenu;
 import org.openstreetmap.josm.gui.preferences.imagery.ImageryPreference;
 import org.openstreetmap.josm.gui.preferences.map.TaggingPresetPreference;
-import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetSearchAction;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetSearchPrimitiveDialog;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Shortcut;
 
 /**
@@ -798,11 +799,11 @@ public class MainMenu extends JMenuBar {
                 MainMenu.WINDOW_MENU_GROUP.ALWAYS);
         changesetManager.addButtonModel(mi.getModel());
 
-        if (!Main.pref.getBoolean("audio.menuinvisible", false)) {
+        if (!Config.getPref().getBoolean("audio.menuinvisible", false)) {
             showAudioMenu(true);
         }
 
-        Main.pref.addPreferenceChangeListener(e -> {
+        Config.getPref().addPreferenceChangeListener(e -> {
             if ("audio.menuinvisible".equals(e.getKey())) {
                 showAudioMenu(!Boolean.parseBoolean(e.getNewValue().toString()));
             }
diff --git a/src/org/openstreetmap/josm/gui/MapFrame.java b/src/org/openstreetmap/josm/gui/MapFrame.java
index a4e02f1..3d646a6 100644
--- a/src/org/openstreetmap/josm/gui/MapFrame.java
+++ b/src/org/openstreetmap/josm/gui/MapFrame.java
@@ -41,7 +41,6 @@ import javax.swing.event.PopupMenuListener;
 import javax.swing.plaf.basic.BasicSplitPaneDivider;
 import javax.swing.plaf.basic.BasicSplitPaneUI;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.LassoModeAction;
 import org.openstreetmap.josm.actions.mapmode.DeleteAction;
 import org.openstreetmap.josm.actions.mapmode.DrawAction;
@@ -51,7 +50,7 @@ import org.openstreetmap.josm.actions.mapmode.MapMode;
 import org.openstreetmap.josm.actions.mapmode.ParallelWayAction;
 import org.openstreetmap.josm.actions.mapmode.SelectAction;
 import org.openstreetmap.josm.actions.mapmode.ZoomAction;
-import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.data.ViewportData;
 import org.openstreetmap.josm.data.preferences.BooleanProperty;
 import org.openstreetmap.josm.data.preferences.IntegerProperty;
@@ -79,6 +78,7 @@ import org.openstreetmap.josm.gui.layer.LayerManager.LayerRemoveEvent;
 import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeEvent;
 import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeListener;
 import org.openstreetmap.josm.gui.util.AdvancedKeyPressDetector;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Destroyable;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
@@ -294,7 +294,7 @@ public class MapFrame extends JPanel implements Destroyable, ActiveLayerChangeLi
             }
         }
 
-        if (Main.pref.getBoolean("debug.advanced-keypress-detector.enable", true)) {
+        if (Config.getPref().getBoolean("debug.advanced-keypress-detector.enable", true)) {
             keyDetector.register();
         }
     }
@@ -344,7 +344,7 @@ public class MapFrame extends JPanel implements Destroyable, ActiveLayerChangeLi
         MainApplication.getLayerManager().removeLayerChangeListener(this);
         MainApplication.getLayerManager().removeActiveLayerChangeListener(this);
         dialogsPanel.destroy();
-        Main.pref.removePreferenceChangeListener(sidetoolbarPreferencesChangedListener);
+        Config.getPref().removePreferenceChangeListener(sidetoolbarPreferencesChangedListener);
         for (int i = 0; i < toolBarActions.getComponentCount(); ++i) {
             if (toolBarActions.getComponent(i) instanceof Destroyable) {
                 ((Destroyable) toolBarActions.getComponent(i)).destroy();
@@ -495,7 +495,7 @@ public class MapFrame extends JPanel implements Destroyable, ActiveLayerChangeLi
         /**
          * sideToolBar: add map modes icons
          */
-        if (Main.pref.getBoolean("sidetoolbar.mapmodes.visible", true)) {
+        if (Config.getPref().getBoolean("sidetoolbar.mapmodes.visible", true)) {
             toolBarActions.setAlignmentX(0.5f);
             toolBarActions.setBorder(null);
             toolBarActions.setInheritsPopupMenu(true);
@@ -510,7 +510,7 @@ public class MapFrame extends JPanel implements Destroyable, ActiveLayerChangeLi
         /**
          * sideToolBar: add toggle dialogs icons
          */
-        if (Main.pref.getBoolean("sidetoolbar.toggledialogs.visible", true)) {
+        if (Config.getPref().getBoolean("sidetoolbar.toggledialogs.visible", true)) {
             ((JToolBar) sideToolBar).addSeparator(new Dimension(0, 18));
             toolBarToggle.setAlignmentX(0.5f);
             toolBarToggle.setBorder(null);
@@ -533,17 +533,17 @@ public class MapFrame extends JPanel implements Destroyable, ActiveLayerChangeLi
         /**
          * sideToolBar: decide scroll- and visibility
          */
-        if (Main.pref.getBoolean("sidetoolbar.scrollable", true)) {
+        if (Config.getPref().getBoolean("sidetoolbar.scrollable", true)) {
             final ScrollViewport svp = new ScrollViewport(sideToolBar, ScrollViewport.VERTICAL_DIRECTION);
             sideToolBar = svp;
         }
-        sideToolBar.setVisible(Main.pref.getBoolean("sidetoolbar.visible", true));
+        sideToolBar.setVisible(Config.getPref().getBoolean("sidetoolbar.visible", true));
         sidetoolbarPreferencesChangedListener = e -> {
             if ("sidetoolbar.visible".equals(e.getKey())) {
-                sideToolBar.setVisible(Main.pref.getBoolean("sidetoolbar.visible"));
+                sideToolBar.setVisible(Config.getPref().getBoolean("sidetoolbar.visible"));
             }
         };
-        Main.pref.addPreferenceChangeListener(sidetoolbarPreferencesChangedListener);
+        Config.getPref().addPreferenceChangeListener(sidetoolbarPreferencesChangedListener);
 
         /**
          * sideToolBar: add it to the panel
@@ -553,7 +553,7 @@ public class MapFrame extends JPanel implements Destroyable, ActiveLayerChangeLi
         /**
          * statusLine: add to panel
          */
-        if (statusLine != null && Main.pref.getBoolean("statusline.visible", true)) {
+        if (statusLine != null && Config.getPref().getBoolean("statusline.visible", true)) {
             panel.add(statusLine, BorderLayout.SOUTH);
         }
     }
@@ -582,7 +582,7 @@ public class MapFrame extends JPanel implements Destroyable, ActiveLayerChangeLi
             @Override
             public void actionPerformed(ActionEvent e) {
                 boolean sel = ((JCheckBoxMenuItem) e.getSource()).getState();
-                Main.pref.put("sidetoolbar.always-visible", sel);
+                Config.getPref().putBoolean("sidetoolbar.always-visible", sel);
             }
         });
         {
@@ -605,7 +605,7 @@ public class MapFrame extends JPanel implements Destroyable, ActiveLayerChangeLi
                             }
                         }, 0);
                     }
-                    doNotHide.setSelected(Main.pref.getBoolean("sidetoolbar.always-visible", true));
+                    doNotHide.setSelected(Config.getPref().getBoolean("sidetoolbar.always-visible", true));
                 }
 
                 @Override
@@ -624,7 +624,7 @@ public class MapFrame extends JPanel implements Destroyable, ActiveLayerChangeLi
             add(new AbstractAction(tr("Hide edit toolbar")) {
                 @Override
                 public void actionPerformed(ActionEvent e) {
-                    Main.pref.put("sidetoolbar.visible", false);
+                    Config.getPref().putBoolean("sidetoolbar.visible", false);
                 }
             });
             add(doNotHide);
diff --git a/src/org/openstreetmap/josm/gui/MapMover.java b/src/org/openstreetmap/josm/gui/MapMover.java
index a63bfbf..288d5cc 100644
--- a/src/org/openstreetmap/josm/gui/MapMover.java
+++ b/src/org/openstreetmap/josm/gui/MapMover.java
@@ -18,11 +18,12 @@ import javax.swing.AbstractAction;
 import org.openstreetmap.gui.jmapviewer.JMapViewer;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.mapmode.SelectAction;
-import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
-import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.preferences.BooleanProperty;
 import org.openstreetmap.josm.gui.MapViewState.MapViewPoint;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Destroyable;
 import org.openstreetmap.josm.tools.Pair;
 import org.openstreetmap.josm.tools.Shortcut;
@@ -47,7 +48,7 @@ public class MapMover extends MouseAdapter implements Destroyable {
     private static class JMapViewerUpdater implements PreferenceChangedListener {
 
         JMapViewerUpdater() {
-            Main.pref.addPreferenceChangeListener(this);
+            Config.getPref().addPreferenceChangeListener(this);
             updateJMapViewer();
         }
 
diff --git a/src/org/openstreetmap/josm/gui/MapStatus.java b/src/org/openstreetmap/josm/gui/MapStatus.java
index 4e1ebca..7006344 100644
--- a/src/org/openstreetmap/josm/gui/MapStatus.java
+++ b/src/org/openstreetmap/josm/gui/MapStatus.java
@@ -55,12 +55,15 @@ import javax.swing.event.PopupMenuEvent;
 import javax.swing.event.PopupMenuListener;
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
-import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
+import org.openstreetmap.josm.spi.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.coor.conversion.CoordinateFormatManager;
+import org.openstreetmap.josm.data.coor.conversion.DMSCoordinateFormat;
+import org.openstreetmap.josm.data.coor.conversion.ICoordinateFormat;
+import org.openstreetmap.josm.data.coor.conversion.ProjectedCoordinateFormat;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.DefaultNameFormatter;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -75,6 +78,7 @@ import org.openstreetmap.josm.gui.progress.swing.PleaseWaitProgressMonitor.Progr
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.widgets.ImageLabel;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Destroyable;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
@@ -96,7 +100,7 @@ import org.openstreetmap.josm.tools.Utils;
  */
 public final class MapStatus extends JPanel implements Helpful, Destroyable, PreferenceChangedListener, SoMChangeListener {
 
-    private final DecimalFormat DECIMAL_FORMAT = new DecimalFormat(Main.pref.get("statusbar.decimal-format", "0.0"));
+    private final DecimalFormat DECIMAL_FORMAT = new DecimalFormat(Config.getPref().get("statusbar.decimal-format", "0.0"));
     private static final AbstractProperty<Double> DISTANCE_THRESHOLD = new DoubleProperty("statusbar.distance-threshold", 0.01).cached();
 
     private static final AbstractProperty<Boolean> SHOW_ID = new BooleanProperty("osm-primitives.showid", false);
@@ -209,12 +213,12 @@ public final class MapStatus extends JPanel implements Helpful, Destroyable, Pre
 
     }
 
-    /** The {@link CoordinateFormat} set in the previous update */
-    private transient CoordinateFormat previousCoordinateFormat;
+    /** The {@link ICoordinateFormat} set in the previous update */
+    private transient ICoordinateFormat previousCoordinateFormat;
     private final ImageLabel latText = new ImageLabel("lat",
-            null, LatLon.SOUTH_POLE.latToString(CoordinateFormat.DEGREES_MINUTES_SECONDS).length(), PROP_BACKGROUND_COLOR.get());
+            null, DMSCoordinateFormat.INSTANCE.latToString(LatLon.SOUTH_POLE).length(), PROP_BACKGROUND_COLOR.get());
     private final ImageLabel lonText = new ImageLabel("lon",
-            null, new LatLon(0, 180).lonToString(CoordinateFormat.DEGREES_MINUTES_SECONDS).length(), PROP_BACKGROUND_COLOR.get());
+            null, DMSCoordinateFormat.INSTANCE.lonToString(new LatLon(0, 180)).length(), PROP_BACKGROUND_COLOR.get());
     private final ImageLabel headingText = new ImageLabel("heading",
             tr("The (compass) heading of the line segment being drawn."),
             DECIMAL_FORMAT.format(360).length() + 1, PROP_BACKGROUND_COLOR.get());
@@ -666,8 +670,7 @@ public final class MapStatus extends JPanel implements Helpful, Destroyable, Pre
 
                  @Override
                  public void mouseDragged(MouseEvent e) {
-                    l.setBackground(SystemColor.info);
-                    l.setForeground(SystemColor.infoText);
+                     mouseMoved(e);
                  }
             });
             return l;
@@ -762,7 +765,7 @@ public final class MapStatus extends JPanel implements Helpful, Destroyable, Pre
 
         /** Icons for selecting {@link SystemOfMeasurement} */
         private final Collection<JCheckBoxMenuItem> somItems = new ArrayList<>();
-        /** Icons for selecting {@link CoordinateFormat}  */
+        /** Icons for selecting {@link ICoordinateFormat}  */
         private final Collection<JCheckBoxMenuItem> coordinateFormatItems = new ArrayList<>();
 
         private final JSeparator separator = new JSeparator();
@@ -771,7 +774,7 @@ public final class MapStatus extends JPanel implements Helpful, Destroyable, Pre
             @Override
             public void actionPerformed(ActionEvent e) {
                 boolean sel = ((JCheckBoxMenuItem) e.getSource()).getState();
-                Main.pref.put("statusbar.always-visible", sel);
+                Config.getPref().putBoolean("statusbar.always-visible", sel);
             }
         });
 
@@ -786,11 +789,11 @@ public final class MapStatus extends JPanel implements Helpful, Destroyable, Pre
                 somItems.add(item);
                 add(item);
             }
-            for (final CoordinateFormat format : CoordinateFormat.values()) {
+            for (final ICoordinateFormat format : CoordinateFormatManager.getCoordinateFormats()) {
                 JCheckBoxMenuItem item = new JCheckBoxMenuItem(new AbstractAction(format.getDisplayName()) {
                     @Override
                     public void actionPerformed(ActionEvent e) {
-                        CoordinateFormat.setCoordinateFormat(format);
+                        CoordinateFormatManager.setCoordinateFormat(format);
                     }
                 });
                 coordinateFormatItems.add(item);
@@ -810,13 +813,13 @@ public final class MapStatus extends JPanel implements Helpful, Destroyable, Pre
                         item.setSelected(item.getText().equals(currentSOM));
                         item.setVisible(distText.equals(invoker));
                     }
-                    final String currentCorrdinateFormat = CoordinateFormat.getDefaultFormat().getDisplayName();
+                    final String currentCorrdinateFormat = CoordinateFormatManager.getDefaultFormat().getDisplayName();
                     for (JMenuItem item : coordinateFormatItems) {
                         item.setSelected(currentCorrdinateFormat.equals(item.getText()));
                         item.setVisible(latText.equals(invoker) || lonText.equals(invoker));
                     }
                     separator.setVisible(distText.equals(invoker) || latText.equals(invoker) || lonText.equals(invoker));
-                    doNotHide.setSelected(Main.pref.getBoolean("statusbar.always-visible", true));
+                    doNotHide.setSelected(Config.getPref().getBoolean("statusbar.always-visible", true));
                 }
 
                 @Override
@@ -872,13 +875,13 @@ public final class MapStatus extends JPanel implements Helpful, Destroyable, Pre
                     return;
                 // Do not update the view if ctrl is pressed.
                 if ((e.getModifiersEx() & MouseEvent.CTRL_DOWN_MASK) == 0) {
-                    CoordinateFormat mCord = CoordinateFormat.getDefaultFormat();
+                    ICoordinateFormat mCord = CoordinateFormatManager.getDefaultFormat();
                     LatLon p = mv.getLatLon(e.getX(), e.getY());
-                    latText.setText(p.latToString(mCord));
-                    lonText.setText(p.lonToString(mCord));
+                    latText.setText(mCord.latToString(p));
+                    lonText.setText(mCord.lonToString(p));
                     if (Objects.equals(previousCoordinateFormat, mCord)) {
                         // do nothing
-                    } else if (CoordinateFormat.EAST_NORTH.equals(mCord)) {
+                    } else if (ProjectedCoordinateFormat.INSTANCE.equals(mCord)) {
                         latText.setIcon("northing");
                         lonText.setIcon("easting");
                         latText.setToolTipText(tr("The northing at the mouse pointer."));
@@ -910,7 +913,7 @@ public final class MapStatus extends JPanel implements Helpful, Destroyable, Pre
         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)) {
+        if (Config.getPref().getBoolean("statusbar.change-system-of-measurement-on-click", true)) {
             distText.addMouseListener(new MouseAdapter() {
                 private final List<String> soms = new ArrayList<>(new TreeSet<>(SystemOfMeasurement.ALL_SYSTEMS.keySet()));
 
@@ -941,7 +944,7 @@ public final class MapStatus extends JPanel implements Helpful, Destroyable, Pre
         add(progressBar, gbc);
         progressBar.addMouseListener(new ShowMonitorDialogMouseAdapter());
 
-        Main.pref.addPreferenceChangeListener(this);
+        Config.getPref().addPreferenceChangeListener(this);
 
         mvComponentAdapter = new ComponentAdapter() {
             @Override
@@ -970,7 +973,7 @@ public final class MapStatus extends JPanel implements Helpful, Destroyable, Pre
      */
     public void updateSystemOfMeasurement(String newsom) {
         SystemOfMeasurement.setSystemOfMeasurement(newsom);
-        if (Main.pref.getBoolean("statusbar.notify.change-system-of-measurement", true)) {
+        if (Config.getPref().getBoolean("statusbar.notify.change-system-of-measurement", true)) {
             new Notification(tr("System of measurement changed to {0}", newsom))
                 .setDuration(Notification.TIME_SHORT)
                 .show();
@@ -1009,7 +1012,7 @@ public final class MapStatus extends JPanel implements Helpful, Destroyable, Pre
      * @param id The object that caused the status update (or a id object it selects). May be <code>null</code>
      * @param text The text
      */
-    public void setHelpText(Object id, final String text) {
+    public synchronized void setHelpText(Object id, final String text) {
         StatusTextHistory entry = new StatusTextHistory(id, text);
 
         statusText.remove(entry);
@@ -1025,7 +1028,7 @@ public final class MapStatus extends JPanel implements Helpful, Destroyable, Pre
      * Removes a help text and restores the previous one
      * @param id The id passed to {@link #setHelpText(Object, String)}
      */
-    public void resetHelpText(Object id) {
+    public synchronized void resetHelpText(Object id) {
         if (statusText.isEmpty())
             return;
 
@@ -1075,7 +1078,7 @@ public final class MapStatus extends JPanel implements Helpful, Destroyable, Pre
         double dist = -1;
         // Compute total length of selected way(s) until an arbitrary limit set to 250 ways
         // in order to prevent performance issue if a large number of ways are selected (old behaviour kept in that case, see #8403)
-        int maxWays = Math.max(1, Main.pref.getInteger("selection.max-ways-for-statusline", 250));
+        int maxWays = Math.max(1, Config.getPref().getInt("selection.max-ways-for-statusline", 250));
         if (!ways.isEmpty() && ways.size() <= maxWays) {
             dist = 0.0;
             for (Way w : ways) {
@@ -1102,7 +1105,7 @@ public final class MapStatus extends JPanel implements Helpful, Destroyable, Pre
     @Override
     public void destroy() {
         SystemOfMeasurement.removeSoMChangeListener(this);
-        Main.pref.removePreferenceChangeListener(this);
+        Config.getPref().removePreferenceChangeListener(this);
         mv.removeComponentListener(mvComponentAdapter);
 
         // 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 5a5aa14..3d8e9b3 100644
--- a/src/org/openstreetmap/josm/gui/MapView.java
+++ b/src/org/openstreetmap/josm/gui/MapView.java
@@ -8,12 +8,14 @@ import java.awt.Graphics;
 import java.awt.Graphics2D;
 import java.awt.Point;
 import java.awt.Rectangle;
+import java.awt.Shape;
 import java.awt.event.ComponentAdapter;
 import java.awt.event.ComponentEvent;
 import java.awt.event.KeyEvent;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseMotionListener;
+import java.awt.geom.AffineTransform;
 import java.awt.geom.Area;
 import java.awt.image.BufferedImage;
 import java.beans.PropertyChangeEvent;
@@ -38,8 +40,8 @@ import javax.swing.SwingUtilities;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.mapmode.MapMode;
 import org.openstreetmap.josm.data.Bounds;
-import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
-import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.data.ProjectionBounds;
 import org.openstreetmap.josm.data.ViewportData;
 import org.openstreetmap.josm.data.coor.EastNorth;
@@ -73,6 +75,7 @@ import org.openstreetmap.josm.gui.layer.markerlayer.PlayHeadMarker;
 import org.openstreetmap.josm.gui.mappaint.MapPaintStyles;
 import org.openstreetmap.josm.gui.mappaint.MapPaintStyles.MapPaintSylesUpdateListener;
 import org.openstreetmap.josm.io.audio.AudioPlayer;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.JosmRuntimeException;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Shortcut;
@@ -274,7 +277,7 @@ LayerManager.LayerChangeListener, MainLayerManager.ActiveLayerChangeListener {
         initialViewport = viewportData;
         layerManager.addAndFireLayerChangeListener(this);
         layerManager.addActiveLayerChangeListener(this);
-        Main.pref.addPreferenceChangeListener(this);
+        Config.getPref().addPreferenceChangeListener(this);
 
         addComponentListener(new ComponentAdapter() {
             @Override
@@ -510,6 +513,31 @@ LayerManager.LayerChangeListener, MainLayerManager.ActiveLayerChangeListener {
     }
 
     private void drawMapContent(Graphics g) {
+        // In HiDPI-mode, the Graphics g will have a transform that scales
+        // everything by a factor of 2.0 or so. At the same time, the value returned
+        // by getWidth()/getHeight will be reduced by that factor.
+        //
+        // This would work as intended, if we were to draw directly on g. But
+        // with a temporary buffer image, we need to move the scale transform to
+        // the Graphics of the buffer image and (in the end) transfer the content
+        // of the temporary buffer pixel by pixel onto g, without scaling.
+        // (Otherwise, we would upscale a small buffer image and the result would be
+        // blurry, with 2x2 pixel blocks.)
+        Graphics2D gg = (Graphics2D) g;
+        AffineTransform trOrig = gg.getTransform();
+        double uiScaleX = gg.getTransform().getScaleX();
+        double uiScaleY = gg.getTransform().getScaleY();
+        // width/height in full-resolution screen pixels
+        int width = (int) Math.round(getWidth() * uiScaleX);
+        int height = (int) Math.round(getHeight() * uiScaleY);
+        // This transformation corresponds to the original transformation of g,
+        // except for the translation part. It will be applied to the temporary
+        // buffer images.
+        AffineTransform trDef = AffineTransform.getScaleInstance(uiScaleX, uiScaleY);
+        // The goal is to create the temporary image at full pixel resolution,
+        // so scale up the clip shape
+        Shape scaledClip = trDef.createTransformedShape(g.getClip());
+
         List<Layer> visibleLayers = layerManager.getVisibleLayersInZOrder();
 
         int nonChangedLayersCount = 0;
@@ -528,22 +556,20 @@ LayerManager.LayerChangeListener, MainLayerManager.ActiveLayerChangeListener {
                 && lastClipBounds.contains(g.getClipBounds())
                 && nonChangedLayers.equals(visibleLayers.subList(0, nonChangedLayers.size()));
 
-        if (null == offscreenBuffer || offscreenBuffer.getWidth() != getWidth() || offscreenBuffer.getHeight() != getHeight()) {
-            offscreenBuffer = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_3BYTE_BGR);
+        if (null == offscreenBuffer || offscreenBuffer.getWidth() != width || offscreenBuffer.getHeight() != height) {
+            offscreenBuffer = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
         }
 
-        Graphics2D tempG = offscreenBuffer.createGraphics();
-        tempG.setClip(g.getClip());
-
         if (!canUseBuffer || nonChangedLayersBuffer == null) {
             if (null == nonChangedLayersBuffer
-                    || nonChangedLayersBuffer.getWidth() != getWidth() || nonChangedLayersBuffer.getHeight() != getHeight()) {
-                nonChangedLayersBuffer = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_3BYTE_BGR);
+                    || nonChangedLayersBuffer.getWidth() != width || nonChangedLayersBuffer.getHeight() != height) {
+                nonChangedLayersBuffer = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
             }
             Graphics2D g2 = nonChangedLayersBuffer.createGraphics();
-            g2.setClip(g.getClip());
+            g2.setClip(scaledClip);
+            g2.setTransform(trDef);
             g2.setColor(PaintColors.getBackgroundColor());
-            g2.fillRect(0, 0, getWidth(), getHeight());
+            g2.fillRect(0, 0, width, height);
 
             for (int i = 0; i < nonChangedLayersCount; i++) {
                 paintLayer(visibleLayers.get(i), g2);
@@ -552,7 +578,8 @@ LayerManager.LayerChangeListener, MainLayerManager.ActiveLayerChangeListener {
             // 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());
+                g2.setClip(scaledClip);
+                g2.setTransform(trDef);
                 for (int i = nonChangedLayers.size(); i < nonChangedLayersCount; i++) {
                     paintLayer(visibleLayers.get(i), g2);
                 }
@@ -564,14 +591,20 @@ LayerManager.LayerChangeListener, MainLayerManager.ActiveLayerChangeListener {
         lastViewID = getViewID();
         lastClipBounds = g.getClipBounds();
 
+        Graphics2D tempG = offscreenBuffer.createGraphics();
+        tempG.setClip(scaledClip);
+        tempG.setTransform(new AffineTransform());
         tempG.drawImage(nonChangedLayersBuffer, 0, 0, null);
+        tempG.setTransform(trDef);
 
         for (int i = nonChangedLayersCount; i < visibleLayers.size(); i++) {
             paintLayer(visibleLayers.get(i), tempG);
         }
 
         try {
-            drawTemporaryLayers(tempG, getLatLonBounds(g.getClipBounds()));
+            drawTemporaryLayers(tempG, getLatLonBounds(new Rectangle(
+                    (int) Math.round(g.getClipBounds().x * uiScaleX),
+                    (int) Math.round(g.getClipBounds().y * uiScaleY))));
         } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException e) {
             BugReport.intercept(e).put("temporaryLayers", temporaryLayers).warn();
         }
@@ -596,7 +629,8 @@ LayerManager.LayerChangeListener, MainLayerManager.ActiveLayerChangeListener {
         }
 
         try {
-            g.drawImage(offscreenBuffer, 0, 0, null);
+            gg.setTransform(new AffineTransform(1, 0, 0, 1, trOrig.getTranslateX(), trOrig.getTranslateY()));
+            gg.drawImage(offscreenBuffer, 0, 0, null);
         } catch (ClassCastException e) {
             // See #11002 and duplicate tickets. On Linux with Java >= 8 Many users face this error here:
             //
@@ -622,6 +656,8 @@ LayerManager.LayerChangeListener, MainLayerManager.ActiveLayerChangeListener {
             //
             // But the application seems to work fine after, so let's just log the error
             Logging.error(e);
+        } finally {
+            gg.setTransform(trOrig);
         }
     }
 
@@ -777,7 +813,7 @@ LayerManager.LayerChangeListener, MainLayerManager.ActiveLayerChangeListener {
     public void destroy() {
         layerManager.removeAndFireLayerChangeListener(this);
         layerManager.removeActiveLayerChangeListener(this);
-        Main.pref.removePreferenceChangeListener(this);
+        Config.getPref().removePreferenceChangeListener(this);
         SelectionEventManager.getInstance().removeSelectionListener(repaintSelectionChangedListener);
         MultipolygonCache.getInstance().clear();
         if (mapMover != null) {
diff --git a/src/org/openstreetmap/josm/gui/MapViewState.java b/src/org/openstreetmap/josm/gui/MapViewState.java
index 8d40c7a..6fbe14d 100644
--- a/src/org/openstreetmap/josm/gui/MapViewState.java
+++ b/src/org/openstreetmap/josm/gui/MapViewState.java
@@ -301,8 +301,8 @@ public final class MapViewState implements Serializable {
      */
     public Area getArea(Bounds bounds) {
         Path2D area = new Path2D.Double();
-        bounds.visitEdge(getProjection(), latlon -> {
-            MapViewPoint point = getPointFor(latlon);
+        getProjection().visitOutline(bounds, en -> {
+            MapViewPoint point = getPointFor(en);
             if (area.getCurrentPoint() == null) {
                 area.moveTo(point.getInViewX(), point.getInViewY());
             } else {
@@ -394,7 +394,7 @@ public final class MapViewState implements Serializable {
     private static EastNorth calculateDefaultCenter() {
         Bounds b = Optional.ofNullable(DownloadDialog.getSavedDownloadBounds()).orElseGet(
                 () -> Main.getProjection().getWorldBoundsLatLon());
-        return b.getCenter().getEastNorth();
+        return b.getCenter().getEastNorth(Main.getProjection());
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/gui/NavigatableComponent.java b/src/org/openstreetmap/josm/gui/NavigatableComponent.java
index 586ae94..e8da39e 100644
--- a/src/org/openstreetmap/josm/gui/NavigatableComponent.java
+++ b/src/org/openstreetmap/josm/gui/NavigatableComponent.java
@@ -52,7 +52,6 @@ import org.openstreetmap.josm.data.preferences.DoubleProperty;
 import org.openstreetmap.josm.data.preferences.IntegerProperty;
 import org.openstreetmap.josm.data.projection.Projection;
 import org.openstreetmap.josm.data.projection.ProjectionChangeListener;
-import org.openstreetmap.josm.data.projection.Projections;
 import org.openstreetmap.josm.gui.help.Helpful;
 import org.openstreetmap.josm.gui.layer.NativeScaleLayer;
 import org.openstreetmap.josm.gui.layer.NativeScaleLayer.Scale;
@@ -60,6 +59,7 @@ import org.openstreetmap.josm.gui.layer.NativeScaleLayer.ScaleList;
 import org.openstreetmap.josm.gui.mappaint.MapPaintStyles;
 import org.openstreetmap.josm.gui.mappaint.mapcss.MapCSSStyleSource;
 import org.openstreetmap.josm.gui.util.CursorManager;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -515,15 +515,26 @@ public class NavigatableComponent extends JComponent implements Helpful {
      * @param latlon The point, where this geopoint would be drawn.
      * @return The point on screen where "point" would be drawn, relative to the own top/left.
      */
-    public Point2D getPoint2D(LatLon latlon) {
+    public Point2D getPoint2D(ILatLon latlon) {
         if (latlon == null) {
             return new Point();
         } else {
-            return getPoint2D(latlon.getEastNorth());
+            return getPoint2D(latlon.getEastNorth(Main.getProjection()));
         }
     }
 
     /**
+     * Return the point on the screen where this Coordinate would be.
+     *
+     * Alternative: {@link #getState()}, then {@link MapViewState#getPointFor(ILatLon)}
+     * @param latlon The point, where this geopoint would be drawn.
+     * @return The point on screen where "point" would be drawn, relative to the own top/left.
+     */
+    public Point2D getPoint2D(LatLon latlon) {
+        return getPoint2D((ILatLon) latlon);
+    }
+
+    /**
      * Return the point on the screen where this Node would be.
      *
      * Alternative: {@link #getState()}, then {@link MapViewState#getPointFor(ILatLon)}
@@ -550,14 +561,25 @@ public class NavigatableComponent extends JComponent implements Helpful {
      * @param latlon lat/lon
      * @return point
      * @see #getPoint2D(LatLon)
+     * @since 12725
      */
-    public Point getPoint(LatLon latlon) {
+    public Point getPoint(ILatLon latlon) {
         Point2D d = getPoint2D(latlon);
         return new Point((int) d.getX(), (int) d.getY());
     }
 
     /**
      * looses precision, may overflow (depends on p and current scale)
+     * @param latlon lat/lon
+     * @return point
+     * @see #getPoint2D(LatLon)
+     */
+    public Point getPoint(LatLon latlon) {
+        return getPoint((ILatLon) latlon);
+    }
+
+    /**
+     * looses precision, may overflow (depends on p and current scale)
      * @param n node
      * @return point
      * @see #getPoint2D(Node)
@@ -689,9 +711,18 @@ public class NavigatableComponent extends JComponent implements Helpful {
     /**
      * Zoom to given lat/lon.
      * @param newCenter new center coordinates
+     * @since 12725
+     */
+    public void zoomTo(ILatLon newCenter) {
+        zoomTo(getProjection().latlon2eastNorth(newCenter));
+    }
+
+    /**
+     * Zoom to given lat/lon.
+     * @param newCenter new center coordinates
      */
     public void zoomTo(LatLon newCenter) {
-        zoomTo(Projections.project(newCenter));
+        zoomTo((ILatLon) newCenter);
     }
 
     /**
@@ -838,9 +869,9 @@ public class NavigatableComponent extends JComponent implements Helpful {
 
     private void pushZoomUndo(EastNorth center, double scale) {
         Date now = new Date();
-        if ((now.getTime() - zoomTimestamp.getTime()) > (Main.pref.getDouble("zoom.undo.delay", 1.0) * 1000)) {
+        if ((now.getTime() - zoomTimestamp.getTime()) > (Config.getPref().getDouble("zoom.undo.delay", 1.0) * 1000)) {
             zoomUndoBuffer.push(new ZoomData(center, scale));
-            if (zoomUndoBuffer.size() > Main.pref.getInteger("zoom.undo.max", 50)) {
+            if (zoomUndoBuffer.size() > Config.getPref().getInt("zoom.undo.max", 50)) {
                 zoomUndoBuffer.remove(0);
             }
             zoomRedoBuffer.clear();
@@ -1113,10 +1144,10 @@ public class NavigatableComponent extends JComponent implements Helpful {
         DataSet ds = MainApplication.getLayerManager().getEditDataSet();
 
         if (ds != null) {
-            double snapDistanceSq = Main.pref.getInteger("mappaint.segment.snap-distance", 10);
+            double snapDistanceSq = Config.getPref().getInt("mappaint.segment.snap-distance", 10);
             snapDistanceSq *= snapDistanceSq;
 
-            for (Way w : ds.searchWays(getBBox(p, Main.pref.getInteger("mappaint.segment.snap-distance", 10)))) {
+            for (Way w : ds.searchWays(getBBox(p, Config.getPref().getInt("mappaint.segment.snap-distance", 10)))) {
                 if (!predicate.test(w)) {
                     continue;
                 }
diff --git a/src/org/openstreetmap/josm/gui/Notification.java b/src/org/openstreetmap/josm/gui/Notification.java
index b10cc0e..45db64e 100644
--- a/src/org/openstreetmap/josm/gui/Notification.java
+++ b/src/org/openstreetmap/josm/gui/Notification.java
@@ -9,8 +9,8 @@ import javax.swing.JEditorPane;
 import javax.swing.JOptionPane;
 import javax.swing.UIManager;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
+import org.openstreetmap.josm.spi.preferences.Config;
 
 /**
  * A Notification Message similar to a popup window, but without disrupting the
@@ -42,23 +42,23 @@ public class Notification {
      * Very short and very easy to grasp message (3 s).
      * E.g. "Please select at least one node".
      */
-    public static final int TIME_SHORT = Main.pref.getInteger("notification-time-short-ms", 3000);
+    public static final int TIME_SHORT = Config.getPref().getInt("notification-time-short-ms", 3000);
 
     /**
      * Short message of one or two lines (5 s).
      */
-    public static final int TIME_DEFAULT = Main.pref.getInteger("notification-time-default-ms", 5000);
+    public static final int TIME_DEFAULT = Config.getPref().getInt("notification-time-default-ms", 5000);
 
     /**
      * Somewhat longer message (10 s).
      */
-    public static final int TIME_LONG = Main.pref.getInteger("notification-time-long-ms", 10_000);
+    public static final int TIME_LONG = Config.getPref().getInt("notification-time-long-ms", 10_000);
 
     /**
      * Long text.
      * (Make sure is still sensible to show as a notification)
      */
-    public static final int TIME_VERY_LONG = Main.pref.getInteger("notification-time-very_long-ms", 20_000);
+    public static final int TIME_VERY_LONG = Config.getPref().getInt("notification-time-very_long-ms", 20_000);
 
     private Component content;
     private int duration = Notification.TIME_DEFAULT;
diff --git a/src/org/openstreetmap/josm/gui/PleaseWaitDialog.java b/src/org/openstreetmap/josm/gui/PleaseWaitDialog.java
index 1f7d3a3..1011a4e 100644
--- a/src/org/openstreetmap/josm/gui/PleaseWaitDialog.java
+++ b/src/org/openstreetmap/josm/gui/PleaseWaitDialog.java
@@ -19,10 +19,10 @@ import javax.swing.JProgressBar;
 import javax.swing.JScrollPane;
 import javax.swing.UIManager;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.progress.swing.PleaseWaitProgressMonitor.ProgressMonitorDialog;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.widgets.JosmTextArea;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
 
@@ -81,7 +81,7 @@ public class PleaseWaitDialog extends JDialog implements ProgressMonitorDialog {
             public void componentResized(ComponentEvent ev) {
                 int w = getWidth();
                 if (w > 200) {
-                    Main.pref.putInteger("progressdialog.size", w);
+                    Config.getPref().putInt("progressdialog.size", w);
                 }
             }
         });
@@ -97,7 +97,7 @@ public class PleaseWaitDialog extends JDialog implements ProgressMonitorDialog {
         invalidate();
         setDropTarget(null); // Workaround to JDK bug 7027598/7100524/7169912 (#8613)
         pack();
-        setSize(Main.pref.getInteger("progressdialog.size", 600), getSize().height);
+        setSize(Config.getPref().getInt("progressdialog.size", 600), getSize().height);
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/gui/PleaseWaitRunnable.java b/src/org/openstreetmap/josm/gui/PleaseWaitRunnable.java
index ccbb932..c437b0f 100644
--- a/src/org/openstreetmap/josm/gui/PleaseWaitRunnable.java
+++ b/src/org/openstreetmap/josm/gui/PleaseWaitRunnable.java
@@ -10,8 +10,8 @@ import javax.swing.SwingUtilities;
 
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor.CancelListener;
-import org.openstreetmap.josm.gui.progress.swing.PleaseWaitProgressMonitor;
 import org.openstreetmap.josm.gui.progress.ProgressTaskId;
+import org.openstreetmap.josm.gui.progress.swing.PleaseWaitProgressMonitor;
 import org.openstreetmap.josm.io.OsmTransferException;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.JosmRuntimeException;
diff --git a/src/org/openstreetmap/josm/gui/ProgramArguments.java b/src/org/openstreetmap/josm/gui/ProgramArguments.java
index 3691f72..3de0f6d 100644
--- a/src/org/openstreetmap/josm/gui/ProgramArguments.java
+++ b/src/org/openstreetmap/josm/gui/ProgramArguments.java
@@ -13,6 +13,7 @@ import java.util.Optional;
 import java.util.logging.Level;
 import java.util.stream.Stream;
 
+import org.openstreetmap.josm.tools.I18n;
 import org.openstreetmap.josm.tools.Logging;
 
 import gnu.getopt.Getopt;
@@ -112,8 +113,8 @@ public class ProgramArguments {
      * @param args command-line arguments array
      */
     private void buildCommandLineArgumentMap(String... args) {
-        LongOpt[] los = Stream.of(Option.values()).map(Option::toLongOpt).toArray(i -> new LongOpt[i]);
-
+        Getopt.setI18nHandler(I18n::tr);
+        LongOpt[] los = Stream.of(Option.values()).map(Option::toLongOpt).toArray(LongOpt[]::new);
         Getopt g = new Getopt("JOSM", args, "hv", los);
 
         int c;
diff --git a/src/org/openstreetmap/josm/gui/ScrollViewport.java b/src/org/openstreetmap/josm/gui/ScrollViewport.java
index b9e8981..c8b4ecf 100644
--- a/src/org/openstreetmap/josm/gui/ScrollViewport.java
+++ b/src/org/openstreetmap/josm/gui/ScrollViewport.java
@@ -69,23 +69,22 @@ public class ScrollViewport extends JPanel {
         }
 
         @Override
-        public void mouseExited(MouseEvent arg0) {
-            ScrollViewport.this.scrollDirection = NO_SCROLL;
-            timer.stop();
+        public void mouseExited(MouseEvent e) {
+            mouseReleased(e);
         }
 
         @Override
-        public void mouseReleased(MouseEvent arg0) {
+        public void mouseReleased(MouseEvent e) {
             ScrollViewport.this.scrollDirection = NO_SCROLL;
             timer.stop();
         }
 
-        @Override public void mousePressed(MouseEvent arg0) {
+        @Override
+        public void mousePressed(MouseEvent e) {
             ScrollViewport.this.scrollDirection = direction;
             scroll();
             timer.restart();
         }
-
     }
 
     private final JViewport vp = new JViewport();
diff --git a/src/org/openstreetmap/josm/gui/autofilter/AutoFilterManager.java b/src/org/openstreetmap/josm/gui/autofilter/AutoFilterManager.java
index 212ca6c..26ec926 100644
--- a/src/org/openstreetmap/josm/gui/autofilter/AutoFilterManager.java
+++ b/src/org/openstreetmap/josm/gui/autofilter/AutoFilterManager.java
@@ -20,10 +20,9 @@ import java.util.function.Consumer;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.mapmode.MapMode;
-import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
-import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.data.osm.BBox;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Filter;
@@ -55,6 +54,7 @@ import org.openstreetmap.josm.gui.layer.LayerManager.LayerRemoveEvent;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.mappaint.mapcss.Selector;
 import org.openstreetmap.josm.gui.widgets.OSDLabel;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 
 /**
@@ -123,7 +123,7 @@ implements ZoomChangeListener, MapModeChangeListener, DataSetListener, Preferenc
 
     private AutoFilterManager() {
         MapFrame.addMapModeChangeListener(this);
-        Main.pref.addPreferenceChangeListener(this);
+        Config.getPref().addPreferenceChangeListener(this);
         NavigatableComponent.addZoomChangeListener(this);
         MainApplication.getLayerManager().addLayerChangeListener(this);
         DatasetEventManager.getInstance().addDatasetListener(this, FireMode.IN_EDT_CONSOLIDATED);
diff --git a/src/org/openstreetmap/josm/gui/bbox/SlippyMapBBoxChooser.java b/src/org/openstreetmap/josm/gui/bbox/SlippyMapBBoxChooser.java
index 12852b1..62cc20e 100644
--- a/src/org/openstreetmap/josm/gui/bbox/SlippyMapBBoxChooser.java
+++ b/src/org/openstreetmap/josm/gui/bbox/SlippyMapBBoxChooser.java
@@ -43,6 +43,7 @@ import org.openstreetmap.josm.data.osm.BBox;
 import org.openstreetmap.josm.data.preferences.StringProperty;
 import org.openstreetmap.josm.gui.layer.AbstractCachedTileSourceLayer;
 import org.openstreetmap.josm.gui.layer.TMSLayer;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 
 /**
@@ -150,7 +151,7 @@ public class SlippyMapBBoxChooser extends JMapViewer implements BBoxChooser {
 
         uncachedLoader = new OsmTileLoader(this);
         uncachedLoader.headers.putAll(headers);
-        setZoomContolsVisible(Main.pref.getBoolean("slippy_map_chooser.zoomcontrols", false));
+        setZoomContolsVisible(Config.getPref().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
@@ -159,9 +160,9 @@ public class SlippyMapBBoxChooser extends JMapViewer implements BBoxChooser {
         if (cachedLoader == null) {
             setFileCacheEnabled(false);
         } else {
-            setFileCacheEnabled(Main.pref.getBoolean("slippy_map_chooser.file_cache", true));
+            setFileCacheEnabled(Config.getPref().getBoolean("slippy_map_chooser.file_cache", true));
         }
-        setMaxTilesInMemory(Main.pref.getInteger("slippy_map_chooser.max_tiles", 1000));
+        setMaxTilesInMemory(Config.getPref().getInt("slippy_map_chooser.max_tiles", 1000));
 
         List<TileSource> tileSources = getAllTileSources();
 
diff --git a/src/org/openstreetmap/josm/gui/bugreport/BugReportDialog.java b/src/org/openstreetmap/josm/gui/bugreport/BugReportDialog.java
index 37f5d56..fa2b54c 100644
--- a/src/org/openstreetmap/josm/gui/bugreport/BugReportDialog.java
+++ b/src/org/openstreetmap/josm/gui/bugreport/BugReportDialog.java
@@ -18,6 +18,7 @@ import javax.swing.JDialog;
 import javax.swing.JLabel;
 import javax.swing.JOptionPane;
 import javax.swing.JPanel;
+import javax.swing.SwingUtilities;
 import javax.swing.UIManager;
 
 import org.openstreetmap.josm.Main;
@@ -31,9 +32,11 @@ import org.openstreetmap.josm.plugins.PluginHandler;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.InputMapUtils;
+import org.openstreetmap.josm.tools.OpenBrowser;
 import org.openstreetmap.josm.tools.bugreport.BugReport;
 import org.openstreetmap.josm.tools.bugreport.BugReportQueue.SuppressionMode;
 import org.openstreetmap.josm.tools.bugreport.BugReportSender;
+import org.openstreetmap.josm.tools.bugreport.BugReportSender.BugReportSendingHandler;
 import org.openstreetmap.josm.tools.bugreport.ReportedException;
 
 /**
@@ -53,6 +56,33 @@ public class BugReportDialog extends JDialog {
     private JCheckBox cbSuppressAll;
 
     /**
+     * Default bug report callback that opens the bug report form in user browser
+     * and displays a dialog in case of error.
+     * @since 12790
+     */
+    public static final BugReportSendingHandler bugReportSendingHandler = new BugReportSendingHandler() {
+        @Override
+        public String sendingBugReport(String bugUrl, String statusText) {
+            return OpenBrowser.displayUrl(bugUrl);
+        }
+
+        @Override
+        public void failed(String errorMessage, String statusText) {
+            SwingUtilities.invokeLater(() -> {
+                JPanel errorPanel = new JPanel(new GridBagLayout());
+                errorPanel.add(new JMultilineLabel(
+                        tr("Opening the bug report failed. Please report manually using this website:")),
+                        GBC.eol().fill(GridBagConstraints.HORIZONTAL));
+                errorPanel.add(new UrlLabel(Main.getJOSMWebsite() + "/newticket", 2), GBC.eop().insets(8, 0, 0, 0));
+                errorPanel.add(new DebugTextDisplay(statusText));
+
+                JOptionPane.showMessageDialog(Main.parent, errorPanel, tr("You have encountered a bug in JOSM"),
+                        JOptionPane.ERROR_MESSAGE);
+            });
+        }
+    };
+
+    /**
      * Create a new dialog.
      * @param report The report to display the dialog for.
      */
diff --git a/src/org/openstreetmap/josm/gui/bugreport/DebugTextDisplay.java b/src/org/openstreetmap/josm/gui/bugreport/DebugTextDisplay.java
index fe3c7d5..d6cc58c 100644
--- a/src/org/openstreetmap/josm/gui/bugreport/DebugTextDisplay.java
+++ b/src/org/openstreetmap/josm/gui/bugreport/DebugTextDisplay.java
@@ -5,6 +5,7 @@ import java.awt.Dimension;
 
 import javax.swing.JScrollPane;
 
+import org.openstreetmap.josm.actions.ShowStatusReportAction;
 import org.openstreetmap.josm.gui.datatransfer.ClipboardUtils;
 import org.openstreetmap.josm.gui.widgets.JosmTextArea;
 import org.openstreetmap.josm.tools.Utils;
@@ -48,8 +49,8 @@ public class DebugTextDisplay extends JScrollPane {
      */
     public DebugTextDisplay(BugReport report) {
         this();
-        setCodeText(report.getReportText());
-        report.addChangeListener(e -> setCodeText(report.getReportText()));
+        setCodeText(report.getReportText(ShowStatusReportAction.getReportHeader()));
+        report.addChangeListener(e -> setCodeText(report.getReportText(ShowStatusReportAction.getReportHeader())));
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolver.java b/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolver.java
index 485cb29..66621ab 100644
--- a/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolver.java
+++ b/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolver.java
@@ -35,6 +35,7 @@ import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletingTextField;
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionList;
+import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionManager;
 import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
 import org.openstreetmap.josm.tools.ImageProvider;
 
@@ -202,7 +203,7 @@ public class RelationMemberConflictResolver extends JPanel {
         AutoCompletionList acList = new AutoCompletionList();
         OsmDataLayer editLayer = MainApplication.getLayerManager().getEditLayer();
         if (editLayer != null) {
-            editLayer.data.getAutoCompletionManager().populateWithMemberRoles(acList);
+            AutoCompletionManager.of(editLayer.data).populateWithMemberRoles(acList);
         }
         tfRole.setAutoCompletionList(acList);
         AutoCompletingTextField editor = (AutoCompletingTextField) tblResolver.getColumnModel().getColumn(2).getCellEditor();
@@ -211,7 +212,7 @@ public class RelationMemberConflictResolver extends JPanel {
         }
         AutoCompletionList acList2 = new AutoCompletionList();
         if (editLayer != null) {
-            editLayer.data.getAutoCompletionManager().populateWithKeys(acList2);
+            AutoCompletionManager.of(editLayer.data).populateWithKeys(acList2);
         }
         tfKey.setAutoCompletionList(acList2);
     }
diff --git a/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolutionUtil.java b/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolutionUtil.java
index c743164..24bef8f 100644
--- a/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolutionUtil.java
+++ b/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolutionUtil.java
@@ -14,11 +14,12 @@ import java.util.regex.Pattern;
 import java.util.regex.PatternSyntaxException;
 import java.util.stream.Collectors;
 
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.Preferences.pref;
+import org.openstreetmap.josm.data.StructUtils;
+import org.openstreetmap.josm.data.StructUtils.StructEntry;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Tag;
 import org.openstreetmap.josm.data.osm.TagCollection;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Pair;
 
@@ -157,12 +158,13 @@ public final class TagConflictResolutionUtil {
      */
     public static Collection<AutomaticTagConflictResolver> getAutomaticTagConflictResolvers() {
         if (automaticTagConflictResolvers == null) {
-            Collection<AutomaticCombine> automaticTagConflictCombines =
-                    Main.pref.getListOfStructs(
+            Collection<AutomaticCombine> automaticTagConflictCombines = StructUtils.getListOfStructs(
+                            Config.getPref(),
                             "automatic-tag-conflict-resolution.combine",
                             defaultAutomaticTagConflictCombines, AutomaticCombine.class);
             Collection<AutomaticChoiceGroup> automaticTagConflictChoiceGroups =
-                    AutomaticChoiceGroup.groupChoices(Main.pref.getListOfStructs(
+                    AutomaticChoiceGroup.groupChoices(StructUtils.getListOfStructs(
+                            Config.getPref(),
                             "automatic-tag-conflict-resolution.choice",
                             defaultAutomaticTagConflictChoices, AutomaticChoice.class));
             // Use a tmp variable to fully construct the collection before setting
@@ -229,16 +231,16 @@ public final class TagConflictResolutionUtil {
     public static class AutomaticCombine implements AutomaticTagConflictResolver {
 
         /** The Tag key to match */
-        @pref public String key;
+        @StructEntry public String key;
 
         /** A free description */
-        @pref public String description = "";
+        @StructEntry public String description = "";
 
         /** If regular expression must be used to match the Tag key or the value. */
-        @pref public boolean isRegex;
+        @StructEntry public boolean isRegex;
 
         /** The separator to use to combine the values. */
-        @pref public String separator = ";";
+        @StructEntry public String separator = ";";
 
         /** If the combined values must be sorted.
          * Possible values:
@@ -248,7 +250,7 @@ public final class TagConflictResolutionUtil {
          * <li> * - No ordering.</li>
          * </ul>
          */
-        @pref public String sort;
+        @StructEntry public String sort;
 
         /** Default constructor. */
         public AutomaticCombine() {
@@ -316,25 +318,25 @@ public final class TagConflictResolutionUtil {
     public static class AutomaticChoice {
 
         /** The Tag key to match. */
-        @pref public String key;
+        @StructEntry public String key;
 
         /** The name of the {link AutomaticChoice group} this choice belongs to. */
-        @pref public String group;
+        @StructEntry public String group;
 
         /** A free description. */
-        @pref public String description = "";
+        @StructEntry public String description = "";
 
         /** If regular expression must be used to match the Tag key or the value. */
-        @pref public boolean isRegex;
+        @StructEntry public boolean isRegex;
 
         /** The Tag value to match. */
-        @pref public String value;
+        @StructEntry public String value;
 
         /**
          * The score to give to this choice in order to choose the best value
          * Natural String ordering is used to identify the best score.
          */
-        @pref public String score;
+        @StructEntry public String score;
 
         /** Default constructor. */
         public AutomaticChoice() {
@@ -403,13 +405,13 @@ public final class TagConflictResolutionUtil {
     public static class AutomaticChoiceGroup implements AutomaticTagConflictResolver {
 
         /** The Tag key to match. */
-        @pref public String key;
+        @StructEntry public String key;
 
         /** The name of the group. */
         final String group;
 
         /** If regular expression must be used to match the Tag key. */
-        @pref public boolean isRegex;
+        @StructEntry public boolean isRegex;
 
         /** The list of choice to choose from. */
         final List<AutomaticChoice> choices;
diff --git a/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolver.java b/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolver.java
index ae977e8..fb729bc 100644
--- a/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolver.java
+++ b/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolver.java
@@ -13,7 +13,7 @@ import javax.swing.JLabel;
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
 
-import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.spi.preferences.Config;
 
 /**
  * This is a UI widget for resolving tag conflicts, i.e. differences of the tag values
@@ -59,14 +59,12 @@ public class TagConflictResolver extends JPanel {
                 model.setShowTagsWithConflictsOnly(cbShowTagsWithConflictsOnly.isSelected());
                 cbShowTagsWithMultiValuesOnly.setEnabled(cbShowTagsWithConflictsOnly.isSelected());
         });
-        cbShowTagsWithConflictsOnly.setSelected(
-                Main.pref.getBoolean(getClass().getName() + ".showTagsWithConflictsOnly", false)
+        cbShowTagsWithConflictsOnly.setSelected(Config.getPref().getBoolean(getClass().getName() + ".showTagsWithConflictsOnly", false)
         );
         cbShowTagsWithMultiValuesOnly.addChangeListener(
                 e -> model.setShowTagsWithMultiValuesOnly(cbShowTagsWithMultiValuesOnly.isSelected())
         );
-        cbShowTagsWithMultiValuesOnly.setSelected(
-                Main.pref.getBoolean(getClass().getName() + ".showTagsWithMultiValuesOnly", false)
+        cbShowTagsWithMultiValuesOnly.setSelected(Config.getPref().getBoolean(getClass().getName() + ".showTagsWithMultiValuesOnly", false)
         );
         cbShowTagsWithMultiValuesOnly.setEnabled(cbShowTagsWithConflictsOnly.isSelected());
         return pnl;
@@ -77,8 +75,8 @@ public class TagConflictResolver extends JPanel {
      *
      */
     public void rememberPreferences() {
-        Main.pref.put(getClass().getName() + ".showTagsWithConflictsOnly", cbShowTagsWithConflictsOnly.isSelected());
-        Main.pref.put(getClass().getName() + ".showTagsWithMultiValuesOnly", cbShowTagsWithMultiValuesOnly.isSelected());
+        Config.getPref().putBoolean(getClass().getName() + ".showTagsWithConflictsOnly", cbShowTagsWithConflictsOnly.isSelected());
+        Config.getPref().putBoolean(getClass().getName() + ".showTagsWithMultiValuesOnly", cbShowTagsWithMultiValuesOnly.isSelected());
     }
 
     protected final void build() {
diff --git a/src/org/openstreetmap/josm/gui/datatransfer/data/PrimitiveTransferData.java b/src/org/openstreetmap/josm/gui/datatransfer/data/PrimitiveTransferData.java
index 3dfdbcb..4c9cd38 100644
--- a/src/org/openstreetmap/josm/gui/datatransfer/data/PrimitiveTransferData.java
+++ b/src/org/openstreetmap/josm/gui/datatransfer/data/PrimitiveTransferData.java
@@ -131,7 +131,7 @@ public final class PrimitiveTransferData implements Serializable {
         BoundingXYVisitor visitor = new BoundingXYVisitor();
         for (PrimitiveData pd : getAll()) {
             if (pd instanceof NodeData && !pd.isIncomplete()) {
-                visitor.visit(((NodeData) pd).getEastNorth());
+                visitor.visit(((NodeData) pd));
             }
         }
         ProjectionBounds bounds = visitor.getBounds();
diff --git a/src/org/openstreetmap/josm/gui/datatransfer/importers/PrimitiveDataPaster.java b/src/org/openstreetmap/josm/gui/datatransfer/importers/PrimitiveDataPaster.java
index 2cae789..da47095 100644
--- a/src/org/openstreetmap/josm/gui/datatransfer/importers/PrimitiveDataPaster.java
+++ b/src/org/openstreetmap/josm/gui/datatransfer/importers/PrimitiveDataPaster.java
@@ -72,7 +72,7 @@ public final class PrimitiveDataPaster extends AbstractOsmDataPaster {
             try {
                 if (data instanceof NodeData) {
                     NodeData nodeData = (NodeData) data;
-                    nodeData.setEastNorth(nodeData.getEastNorth().add(offset));
+                    nodeData.setEastNorth(nodeData.getEastNorth(Main.getProjection()).add(offset));
                 } else if (data instanceof WayData) {
                     updateNodes(newIds.get(OsmPrimitiveType.NODE), data);
                 } else if (data instanceof RelationData) {
@@ -82,7 +82,7 @@ public final class PrimitiveDataPaster extends AbstractOsmDataPaster {
                 throw BugReport.intercept(e).put("data", data);
             }
         }
-        return new AddPrimitivesCommand(bufferCopy, toSelect, layer);
+        return new AddPrimitivesCommand(bufferCopy, toSelect, layer.data);
     }
 
     private static EnumMap<OsmPrimitiveType, Map<Long, Long>> generateNewPrimitives(PrimitiveTransferData pasteBuffer,
diff --git a/src/org/openstreetmap/josm/gui/datatransfer/importers/PrimitiveTagTransferPaster.java b/src/org/openstreetmap/josm/gui/datatransfer/importers/PrimitiveTagTransferPaster.java
index 264789d..344d8a2 100644
--- a/src/org/openstreetmap/josm/gui/datatransfer/importers/PrimitiveTagTransferPaster.java
+++ b/src/org/openstreetmap/josm/gui/datatransfer/importers/PrimitiveTagTransferPaster.java
@@ -26,7 +26,7 @@ import org.openstreetmap.josm.gui.conflict.tags.PasteTagsConflictResolverDialog;
 import org.openstreetmap.josm.gui.datatransfer.data.PrimitiveTagTransferData;
 
 /**
- * This class helps pasting tags form other primitives. It handles resolving conflicts.
+ * This class helps pasting tags from other primitives. It handles resolving conflicts.
  * @author Michael Zangl
  * @since 10737
  */
@@ -41,12 +41,18 @@ public class PrimitiveTagTransferPaster extends AbstractTagPaster {
     @Override
     public boolean importTagsOn(TransferSupport support, Collection<? extends OsmPrimitive> selection)
             throws UnsupportedFlavorException, IOException {
-        PrimitiveTagTransferData data = (PrimitiveTagTransferData) support.getTransferable().getTransferData(df);
+        Object o = support.getTransferable().getTransferData(df);
+        if (!(o instanceof PrimitiveTagTransferData))
+            return false;
+        PrimitiveTagTransferData data = (PrimitiveTagTransferData) o;
 
         TagPasteSupport tagPaster = new TagPasteSupport(data, selection);
         List<Command> commands = new ArrayList<>();
         for (Tag tag : tagPaster.execute()) {
-            commands.add(new ChangePropertyCommand(selection, tag.getKey(), "".equals(tag.getValue()) ? null : tag.getValue()));
+            ChangePropertyCommand cmd = new ChangePropertyCommand(selection, tag.getKey(), "".equals(tag.getValue()) ? null : tag.getValue());
+            if (cmd.getObjectsNumber() > 0) {
+                commands.add(cmd);
+            }
         }
         commitCommands(selection, commands);
         return true;
diff --git a/src/org/openstreetmap/josm/gui/dialogs/ChangesetDialog.java b/src/org/openstreetmap/josm/gui/dialogs/ChangesetDialog.java
index 75d0946..3d9fd3b 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/ChangesetDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/ChangesetDialog.java
@@ -57,6 +57,7 @@ import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.widgets.ListPopupMenu;
 import org.openstreetmap.josm.gui.widgets.PopupMenuLauncher;
 import org.openstreetmap.josm.io.OnlineResource;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.OpenBrowser;
@@ -164,7 +165,7 @@ public class ChangesetDialog extends ToggleDialog {
         pnl.add(cbInSelectionOnly);
         cbInSelectionOnly.setToolTipText(tr("<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>"));
-        cbInSelectionOnly.setSelected(Main.pref.getBoolean("changeset-dialog.for-selected-objects-only", false));
+        cbInSelectionOnly.setSelected(Config.getPref().getBoolean("changeset-dialog.for-selected-objects-only", false));
         return pnl;
     }
 
@@ -274,7 +275,7 @@ public class ChangesetDialog extends ToggleDialog {
     class FilterChangeHandler implements ItemListener {
         @Override
         public void itemStateChanged(ItemEvent e) {
-            Main.pref.put("changeset-dialog.for-selected-objects-only", cbInSelectionOnly.isSelected());
+            Config.getPref().putBoolean("changeset-dialog.for-selected-objects-only", cbInSelectionOnly.isSelected());
             pnlList.removeAll();
             if (cbInSelectionOnly.isSelected()) {
                 pnlList.add(new JScrollPane(lstInSelection), BorderLayout.CENTER);
diff --git a/src/org/openstreetmap/josm/gui/dialogs/CommandStackDialog.java b/src/org/openstreetmap/josm/gui/dialogs/CommandStackDialog.java
index 4104539..9323ccc 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/CommandStackDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/CommandStackDialog.java
@@ -38,12 +38,12 @@ import javax.swing.tree.TreeSelectionModel;
 import org.openstreetmap.josm.actions.AutoScaleAction;
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.PseudoCommand;
+import org.openstreetmap.josm.data.UndoRedoHandler.CommandQueueListener;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.SideButton;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer.CommandQueueListener;
 import org.openstreetmap.josm.gui.widgets.PopupMenuLauncher;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
@@ -207,20 +207,17 @@ public class CommandStackDialog extends ToggleDialog implements CommandQueueList
 
             @Override
             public void treeNodesInserted(TreeModelEvent e) {
-                updater.updateEnabledState();
-                updateTitle();
+                treeNodesChanged(e);
             }
 
             @Override
             public void treeNodesRemoved(TreeModelEvent e) {
-                updater.updateEnabledState();
-                updateTitle();
+                treeNodesChanged(e);
             }
 
             @Override
             public void treeStructureChanged(TreeModelEvent e) {
-                updater.updateEnabledState();
-                updateTitle();
+                treeNodesChanged(e);
             }
         });
     }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java b/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java
index cdd129c..28dc563 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java
@@ -50,8 +50,7 @@ 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.data.osm.Way;
-import org.openstreetmap.josm.data.osm.visitor.AbstractVisitor;
-import org.openstreetmap.josm.data.osm.visitor.Visitor;
+import org.openstreetmap.josm.data.osm.visitor.OsmPrimitiveVisitor;
 import org.openstreetmap.josm.data.preferences.ColorProperty;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane.ButtonSpec;
@@ -252,7 +251,7 @@ public final class ConflictDialog extends ToggleDialog implements ActiveLayerCha
         if (preferencesColor.equals(BACKGROUND_COLOR.get()))
             return;
         g.setColor(preferencesColor);
-        Visitor conflictPainter = new ConflictPainter(nc, g);
+        OsmPrimitiveVisitor conflictPainter = new ConflictPainter(nc, g);
         synchronized (this) {
             for (OsmPrimitive o : lstConflicts.getSelectedValuesList()) {
                 if (conflicts == null || !conflicts.hasConflictForMy(o)) {
@@ -541,7 +540,7 @@ public final class ConflictDialog extends ToggleDialog implements ActiveLayerCha
     /**
      * Paints conflicts.
      */
-    public static class ConflictPainter extends AbstractVisitor {
+    public static class ConflictPainter implements OsmPrimitiveVisitor {
         // Manage a stack of visited relations to avoid infinite recursion with cyclic relations (fix #7938)
         private final Set<Relation> visited = new HashSet<>();
         private final NavigatableComponent nc;
diff --git a/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java b/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java
index 1547fd6..0948042 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java
@@ -43,10 +43,10 @@ import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.MapFrame;
 import org.openstreetmap.josm.gui.MapFrame.MapModeChangeListener;
 import org.openstreetmap.josm.gui.SideButton;
+import org.openstreetmap.josm.gui.util.MultikeyActionsHandler;
+import org.openstreetmap.josm.gui.util.MultikeyShortcutAction;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.InputMapUtils;
-import org.openstreetmap.josm.tools.MultikeyActionsHandler;
-import org.openstreetmap.josm.tools.MultikeyShortcutAction;
 import org.openstreetmap.josm.tools.Shortcut;
 
 /**
diff --git a/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDataText.java b/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDataText.java
index 9913e1f..bebeae0 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDataText.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDataText.java
@@ -4,11 +4,14 @@ package org.openstreetmap.josm.gui.dialogs;
 import static org.openstreetmap.josm.tools.I18n.tr;
 import static org.openstreetmap.josm.tools.I18n.trn;
 
+import java.util.Arrays;
 import java.util.List;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.conflict.Conflict;
 import org.openstreetmap.josm.data.coor.EastNorth;
+import org.openstreetmap.josm.data.coor.ILatLon;
+import org.openstreetmap.josm.data.coor.conversion.DecimalDegreesCoordinateFormat;
 import org.openstreetmap.josm.data.osm.BBox;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
@@ -17,6 +20,7 @@ import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.tools.Geometry;
+import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.date.DateUtils;
 
 /**
@@ -158,8 +162,9 @@ public class InspectPrimitiveDataText {
             addCoordinates((Node) o);
         } else if (o instanceof Way) {
             addBbox(o);
-            add(tr("Centroid: "), Main.getProjection().eastNorth2latlon(
-                    Geometry.getCentroid(((Way) o).getNodes())).toStringCSV(", "));
+            add(tr("Centroid: "),
+                    toStringCSV(", ", Main.getProjection().eastNorth2latlon(
+                            Geometry.getCentroid(((Way) o).getNodes()))));
             addWayNodes((Way) o);
         } else if (o instanceof Relation) {
             addBbox(o);
@@ -190,14 +195,14 @@ public class InspectPrimitiveDataText {
         BBox bbox = o.getBBox();
         if (bbox != null) {
             add(tr("Bounding box: "), bbox.toStringCSV(", "));
-            EastNorth bottomRigth = bbox.getBottomRight().getEastNorth();
-            EastNorth topLeft = bbox.getTopLeft().getEastNorth();
+            EastNorth bottomRigth = bbox.getBottomRight().getEastNorth(Main.getProjection());
+            EastNorth topLeft = bbox.getTopLeft().getEastNorth(Main.getProjection());
             add(tr("Bounding box (projected): "),
                     Double.toString(topLeft.east()), ", ",
                     Double.toString(bottomRigth.north()), ", ",
                     Double.toString(bottomRigth.east()), ", ",
                     Double.toString(topLeft.north()));
-            add(tr("Center of bounding box: "), bbox.getCenter().toStringCSV(", "));
+            add(tr("Center of bounding box: "), toStringCSV(", ", bbox.getCenter()));
         }
     }
 
@@ -232,6 +237,19 @@ public class InspectPrimitiveDataText {
         }
     }
 
+    /**
+     * Returns lat/lon coordinate in human-readable format separated by {@code separator}.
+     * @param separator values separator
+     * @param ll the lat/lon
+     * @return String in the format {@code "1.23456[separator]2.34567"}
+     */
+    private static String toStringCSV(String separator, ILatLon ll) {
+        return Utils.join(separator, Arrays.asList(
+                DecimalDegreesCoordinateFormat.INSTANCE.latToString(ll),
+                DecimalDegreesCoordinateFormat.INSTANCE.lonToString(ll)
+        ));
+    }
+
     @Override
     public String toString() {
         return s.toString();
diff --git a/src/org/openstreetmap/josm/gui/dialogs/LatLonDialog.java b/src/org/openstreetmap/josm/gui/dialogs/LatLonDialog.java
index a778718..51bed4e 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/LatLonDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/LatLonDialog.java
@@ -23,9 +23,10 @@ import javax.swing.event.DocumentEvent;
 import javax.swing.event.DocumentListener;
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.coor.CoordinateFormat;
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.coor.conversion.CoordinateFormatManager;
+import org.openstreetmap.josm.data.coor.conversion.LatLonParser;
 import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.util.WindowGeometry;
 import org.openstreetmap.josm.gui.widgets.HtmlPanel;
@@ -190,8 +191,8 @@ public class LatLonDialog extends ExtendedDialog {
      */
     public void setCoordinates(LatLon ll) {
         LatLon llc = Optional.ofNullable(ll).orElse(LatLon.ZERO);
-        tfLatLon.setText(llc.latToString(CoordinateFormat.getDefaultFormat()) + ' ' +
-                         llc.lonToString(CoordinateFormat.getDefaultFormat()));
+        tfLatLon.setText(CoordinateFormatManager.getDefaultFormat().latToString(llc) + ' ' +
+                         CoordinateFormatManager.getDefaultFormat().lonToString(llc));
         EastNorth en = Main.getProjection().latlon2eastNorth(llc);
         tfEastNorth.setText(Double.toString(en.east()) + ' ' + Double.toString(en.north()));
         // Both latLonCoordinates and eastNorthCoordinates may have been reset to null if ll is out of the world
@@ -244,7 +245,7 @@ public class LatLonDialog extends ExtendedDialog {
     protected void parseLatLonUserInput() {
         LatLon latLon;
         try {
-            latLon = LatLon.parse(tfLatLon.getText());
+            latLon = LatLonParser.parse(tfLatLon.getText());
             if (!LatLon.isValidLat(latLon.lat()) || !LatLon.isValidLon(latLon.lon())) {
                 latLon = null;
             }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java b/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java
index 6adceaa..bfee31d 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java
@@ -66,15 +66,15 @@ import org.openstreetmap.josm.gui.layer.MainLayerManager;
 import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeEvent;
 import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeListener;
 import org.openstreetmap.josm.gui.layer.NativeScaleLayer;
-import org.openstreetmap.josm.gui.util.GuiHelper;
+import org.openstreetmap.josm.gui.util.MultikeyActionsHandler;
+import org.openstreetmap.josm.gui.util.MultikeyShortcutAction.MultikeyInfo;
 import org.openstreetmap.josm.gui.widgets.DisableShortcutsOnFocusGainedTextField;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
 import org.openstreetmap.josm.gui.widgets.PopupMenuLauncher;
 import org.openstreetmap.josm.gui.widgets.ScrollableTable;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.InputMapUtils;
-import org.openstreetmap.josm.tools.MultikeyActionsHandler;
-import org.openstreetmap.josm.tools.MultikeyShortcutAction.MultikeyInfo;
 import org.openstreetmap.josm.tools.Shortcut;
 
 /**
@@ -215,8 +215,8 @@ public class LayerListDialog extends ToggleDialog {
         layerList.getColumnModel().getColumn(3).setCellEditor(new LayerNameCellEditor(new DisableShortcutsOnFocusGainedTextField()));
         // Disable some default JTable shortcuts to use JOSM ones (see #5678, #10458)
         for (KeyStroke ks : new KeyStroke[] {
-                KeyStroke.getKeyStroke(KeyEvent.VK_C, GuiHelper.getMenuShortcutKeyMaskEx()),
-                KeyStroke.getKeyStroke(KeyEvent.VK_V, GuiHelper.getMenuShortcutKeyMaskEx()),
+                KeyStroke.getKeyStroke(KeyEvent.VK_C, Main.platform.getMenuShortcutKeyMaskEx()),
+                KeyStroke.getKeyStroke(KeyEvent.VK_V, Main.platform.getMenuShortcutKeyMaskEx()),
                 KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, InputEvent.SHIFT_DOWN_MASK),
                 KeyStroke.getKeyStroke(KeyEvent.VK_UP, InputEvent.SHIFT_DOWN_MASK),
                 KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, InputEvent.SHIFT_DOWN_MASK),
@@ -538,7 +538,7 @@ public class LayerListDialog extends ToggleDialog {
             if (isActiveLayer(layer)) {
                 label.setFont(label.getFont().deriveFont(Font.BOLD));
             }
-            if (Main.pref.getBoolean("dialog.layer.colorname", true)) {
+            if (Config.getPref().getBoolean("dialog.layer.colorname", true)) {
                 AbstractProperty<Color> prop = layer.getColorProperty();
                 Color c = prop == null ? null : prop.get();
                 if (c == null || !model.getLayers().stream()
diff --git a/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java b/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java
index 21276b9..1850729 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java
@@ -63,6 +63,7 @@ import org.openstreetmap.josm.gui.SideButton;
 import org.openstreetmap.josm.gui.mappaint.MapPaintStyles;
 import org.openstreetmap.josm.gui.mappaint.MapPaintStyles.MapPaintSylesUpdateListener;
 import org.openstreetmap.josm.gui.mappaint.StyleSetting;
+import org.openstreetmap.josm.gui.mappaint.StyleSettingGuiFactory;
 import org.openstreetmap.josm.gui.mappaint.StyleSource;
 import org.openstreetmap.josm.gui.mappaint.loader.MapPaintStyleLoader;
 import org.openstreetmap.josm.gui.mappaint.mapcss.MapCSSStyleSource;
@@ -699,7 +700,7 @@ public class MapPaintDialog extends ToggleDialog {
                 setMenu.setEnabled(false);
             } else {
                 for (StyleSetting s : style.settings) {
-                    s.addMenuEntry(setMenu);
+                    StyleSettingGuiFactory.getStyleSettingGui(s).addMenuEntry(setMenu);
                 }
             }
 
diff --git a/src/org/openstreetmap/josm/gui/dialogs/NotesDialog.java b/src/org/openstreetmap/josm/gui/dialogs/NotesDialog.java
index 48a4fa2..9060243 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/NotesDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/NotesDialog.java
@@ -35,6 +35,7 @@ import org.openstreetmap.josm.data.notes.Note;
 import org.openstreetmap.josm.data.notes.Note.State;
 import org.openstreetmap.josm.data.notes.NoteComment;
 import org.openstreetmap.josm.data.osm.NoteData;
+import org.openstreetmap.josm.data.osm.NoteData.NoteDataUpdateListener;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.MapFrame;
 import org.openstreetmap.josm.gui.NoteInputDialog;
@@ -54,7 +55,7 @@ import org.openstreetmap.josm.tools.date.DateUtils;
  * @since 7852 (renaming)
  * @since 7608 (creation)
  */
-public class NotesDialog extends ToggleDialog implements LayerChangeListener {
+public class NotesDialog extends ToggleDialog implements LayerChangeListener, NoteDataUpdateListener {
 
     private NoteTableModel model;
     private JList<Note> displayList;
@@ -154,12 +155,14 @@ public class NotesDialog extends ToggleDialog implements LayerChangeListener {
             noteData = ((NoteLayer) e.getAddedLayer()).getNoteData();
             model.setData(noteData.getNotes());
             setNotes(noteData.getSortedNotes());
+            noteData.addNoteDataUpdateListener(this);
         }
     }
 
     @Override
     public void layerRemoving(LayerRemoveEvent e) {
         if (e.getRemovedLayer() instanceof NoteLayer) {
+            noteData.removeNoteDataUpdateListener(this);
             noteData = null;
             model.clearData();
             MapFrame map = MainApplication.getMap();
@@ -174,6 +177,16 @@ public class NotesDialog extends ToggleDialog implements LayerChangeListener {
         // ignored
     }
 
+    @Override
+    public void noteDataUpdated(NoteData data) {
+        setNotes(data.getSortedNotes());
+    }
+
+    @Override
+    public void selectedNoteChanged(NoteData noteData) {
+        selectionChanged();
+    }
+
     /**
      * Sets the list of notes to be displayed in the dialog.
      * The dialog should match the notes displayed in the note layer.
diff --git a/src/org/openstreetmap/josm/gui/dialogs/OsmIdSelectionDialog.java b/src/org/openstreetmap/josm/gui/dialogs/OsmIdSelectionDialog.java
index fa9c6be..df0a0e4 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/OsmIdSelectionDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/OsmIdSelectionDialog.java
@@ -26,7 +26,6 @@ import javax.swing.KeyStroke;
 import javax.swing.border.EtchedBorder;
 import javax.swing.plaf.basic.BasicComboBoxEditor;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
 import org.openstreetmap.josm.data.osm.PrimitiveId;
 import org.openstreetmap.josm.data.osm.SimplePrimitiveId;
@@ -37,6 +36,7 @@ import org.openstreetmap.josm.gui.widgets.HtmlPanel;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
 import org.openstreetmap.josm.gui.widgets.OsmIdTextField;
 import org.openstreetmap.josm.gui.widgets.OsmPrimitiveTypesComboBox;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -179,7 +179,7 @@ public class OsmIdSelectionDialog extends ExtendedDialog implements WindowListen
      */
     protected void restorePrimitivesHistory(HistoryComboBox cbHistory) {
         List<String> cmtHistory = new LinkedList<>(
-                Main.pref.getCollection(getClass().getName() + ".primitivesHistory", new LinkedList<String>()));
+                Config.getPref().getList(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);
@@ -192,7 +192,7 @@ public class OsmIdSelectionDialog extends ExtendedDialog implements WindowListen
      */
     protected void remindPrimitivesHistory(HistoryComboBox cbHistory) {
         cbHistory.addCurrentItemToHistory();
-        Main.pref.putCollection(getClass().getName() + ".primitivesHistory", cbHistory.getHistory());
+        Config.getPref().putList(getClass().getName() + ".primitivesHistory", cbHistory.getHistory());
     }
 
     /**
@@ -207,9 +207,9 @@ public class OsmIdSelectionDialog extends ExtendedDialog implements WindowListen
     @Override
     public void setupDialog() {
         setContent(panel, false);
-        cbType.setSelectedIndex(Main.pref.getInteger("downloadprimitive.lasttype", 0));
+        cbType.setSelectedIndex(Config.getPref().getInt("downloadprimitive.lasttype", 0));
         tfId.setType(cbType.getType());
-        if (Main.pref.getBoolean("downloadprimitive.autopaste", true)) {
+        if (Config.getPref().getBoolean("downloadprimitive.autopaste", true)) {
             tryToPasteFromClipboard(tfId, cbType);
         }
         setDefaultButton(getContinueButtonIndex());
@@ -220,7 +220,7 @@ public class OsmIdSelectionDialog extends ExtendedDialog implements WindowListen
     protected void tryToPasteFromClipboard(OsmIdTextField tfId, OsmPrimitiveTypesComboBox cbType) {
         String buf = ClipboardUtils.getClipboardStringContent();
         if (buf == null || buf.isEmpty()) return;
-        if (buf.length() > Main.pref.getInteger("downloadprimitive.max-autopaste-length", 2000)) return;
+        if (buf.length() > Config.getPref().getInt("downloadprimitive.max-autopaste-length", 2000)) return;
         final List<SimplePrimitiveId> ids = SimplePrimitiveId.fuzzyParse(buf);
         if (!ids.isEmpty()) {
             final String parsedText = ids.stream().map(x -> x.getType().getAPIName().charAt(0) + String.valueOf(x.getUniqueId()))
@@ -243,7 +243,7 @@ public class OsmIdSelectionDialog extends ExtendedDialog implements WindowListen
 
     @Override public void windowClosed(WindowEvent e) {
         if (e != null && e.getComponent() == this && getValue() == getContinueButtonIndex()) {
-            Main.pref.putInteger("downloadprimitive.lasttype", cbType.getSelectedIndex());
+            Config.getPref().putInt("downloadprimitive.lasttype", cbType.getSelectedIndex());
 
             if (!tfId.readIds()) {
                 JOptionPane.showMessageDialog(getParent(),
diff --git a/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java b/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
index 0faf33c..508155a 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
@@ -49,13 +49,13 @@ import org.openstreetmap.josm.data.osm.event.DataChangedEvent;
 import org.openstreetmap.josm.data.osm.event.DataSetListener;
 import org.openstreetmap.josm.data.osm.event.DatasetEventManager;
 import org.openstreetmap.josm.data.osm.event.DatasetEventManager.FireMode;
-import org.openstreetmap.josm.data.osm.search.SearchCompiler;
 import org.openstreetmap.josm.data.osm.event.NodeMovedEvent;
 import org.openstreetmap.josm.data.osm.event.PrimitivesAddedEvent;
 import org.openstreetmap.josm.data.osm.event.PrimitivesRemovedEvent;
 import org.openstreetmap.josm.data.osm.event.RelationMembersChangedEvent;
 import org.openstreetmap.josm.data.osm.event.TagsChangedEvent;
 import org.openstreetmap.josm.data.osm.event.WayNodesChangedEvent;
+import org.openstreetmap.josm.data.osm.search.SearchCompiler;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.MapView;
 import org.openstreetmap.josm.gui.NavigatableComponent;
@@ -71,12 +71,12 @@ import org.openstreetmap.josm.gui.layer.LayerManager.LayerRemoveEvent;
 import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeEvent;
 import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeListener;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
-import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.util.HighlightHelper;
 import org.openstreetmap.josm.gui.widgets.CompileSearchTextDecorator;
 import org.openstreetmap.josm.gui.widgets.DisableShortcutsOnFocusGainedTextField;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
 import org.openstreetmap.josm.gui.widgets.PopupMenuLauncher;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.InputMapUtils;
 import org.openstreetmap.josm.tools.Shortcut;
@@ -122,7 +122,7 @@ public class RelationListDialog extends ToggleDialog
     private transient JMenuItem addSelectionToRelationMenuItem;
 
     private final transient HighlightHelper highlightHelper = new HighlightHelper();
-    private final boolean highlightEnabled = Main.pref.getBoolean("draw.target-highlight", true);
+    private final boolean highlightEnabled = Config.getPref().getBoolean("draw.target-highlight", true);
     private final transient RecentRelationsAction recentRelationsAction;
 
     /**
@@ -182,7 +182,7 @@ public class RelationListDialog extends ToggleDialog
 
         // Do not hide copy action because of default JList override (fix #9815)
         displaylist.getActionMap().put("copy", MainApplication.getMenu().copy);
-        displaylist.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_C, GuiHelper.getMenuShortcutKeyMaskEx()), "copy");
+        displaylist.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_C, Main.platform.getMenuShortcutKeyMaskEx()), "copy");
 
         updateActionsRelationLists();
     }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java b/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java
index bdd9f7b..3d7f78e 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java
@@ -37,7 +37,6 @@ import javax.swing.event.ListDataListener;
 import javax.swing.event.ListSelectionEvent;
 import javax.swing.event.ListSelectionListener;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.AbstractSelectAction;
 import org.openstreetmap.josm.actions.AutoScaleAction;
 import org.openstreetmap.josm.actions.relation.DownloadSelectedIncompleteMembersAction;
@@ -57,7 +56,6 @@ import org.openstreetmap.josm.data.osm.event.DataChangedEvent;
 import org.openstreetmap.josm.data.osm.event.DataSetListener;
 import org.openstreetmap.josm.data.osm.event.DatasetEventManager;
 import org.openstreetmap.josm.data.osm.event.DatasetEventManager.FireMode;
-import org.openstreetmap.josm.data.osm.search.SearchSetting;
 import org.openstreetmap.josm.data.osm.event.NodeMovedEvent;
 import org.openstreetmap.josm.data.osm.event.PrimitivesAddedEvent;
 import org.openstreetmap.josm.data.osm.event.PrimitivesRemovedEvent;
@@ -65,6 +63,7 @@ import org.openstreetmap.josm.data.osm.event.RelationMembersChangedEvent;
 import org.openstreetmap.josm.data.osm.event.SelectionEventManager;
 import org.openstreetmap.josm.data.osm.event.TagsChangedEvent;
 import org.openstreetmap.josm.data.osm.event.WayNodesChangedEvent;
+import org.openstreetmap.josm.data.osm.search.SearchSetting;
 import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.MapFrame;
@@ -81,11 +80,13 @@ import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.util.HighlightHelper;
 import org.openstreetmap.josm.gui.widgets.ListPopupMenu;
 import org.openstreetmap.josm.gui.widgets.PopupMenuLauncher;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.InputMapUtils;
 import org.openstreetmap.josm.tools.Shortcut;
 import org.openstreetmap.josm.tools.SubclassFilteredCollection;
 import org.openstreetmap.josm.tools.Utils;
+import org.openstreetmap.josm.tools.bugreport.BugReport;
 
 /**
  * A small tool dialog for displaying the current selection.
@@ -191,7 +192,7 @@ public class SelectionListDialog extends ToggleDialog {
      */
     class MouseEventHandler extends PopupMenuLauncher {
         private final HighlightHelper helper = new HighlightHelper();
-        private final boolean highlightEnabled = Main.pref.getBoolean("draw.target-highlight", true);
+        private final boolean highlightEnabled = Config.getPref().getBoolean("draw.target-highlight", true);
 
         MouseEventHandler() {
             super(popupMenu);
@@ -463,7 +464,7 @@ public class SelectionListDialog extends ToggleDialog {
      * JOSM selection.
      *
      */
-    private static class SelectionListModel extends AbstractListModel<OsmPrimitive>
+    static class SelectionListModel extends AbstractListModel<OsmPrimitive>
     implements ActiveLayerChangeListener, SelectionChangedListener, DataSetListener {
 
         private static final int SELECTION_HISTORY_SIZE = 10;
@@ -523,7 +524,7 @@ public class SelectionListDialog extends ToggleDialog {
                     break;
                 }
             }
-            int maxsize = Main.pref.getInteger("select.history-size", SELECTION_HISTORY_SIZE);
+            int maxsize = Config.getPref().getInt("select.history-size", SELECTION_HISTORY_SIZE);
             while (history.size() > maxsize) {
                 history.removeLast();
             }
@@ -661,14 +662,19 @@ public class SelectionListDialog extends ToggleDialog {
          * Sorts the current elements in the selection
          */
         public synchronized void sort() {
-            if (selection.size() <= Main.pref.getInteger("selection.no_sort_above", 100_000)) {
-                boolean quick = selection.size() > Main.pref.getInteger("selection.fast_sort_above", 10_000);
-                Comparator<OsmPrimitive> c = Main.pref.getBoolean("selection.sort_relations_before_ways", true)
+            int size = selection.size();
+            if (size > 1 && size <= Config.getPref().getInt("selection.no_sort_above", 100_000)) {
+                boolean quick = size > Config.getPref().getInt("selection.fast_sort_above", 10_000);
+                Comparator<OsmPrimitive> c = Config.getPref().getBoolean("selection.sort_relations_before_ways", true)
                         ? OsmPrimitiveComparator.orderingRelationsWaysNodes()
                         : OsmPrimitiveComparator.orderingWaysRelationsNodes();
-                selection.sort(c.thenComparing(quick
-                        ? OsmPrimitiveComparator.comparingUniqueId()
-                        : OsmPrimitiveComparator.comparingNames()));
+                try {
+                    selection.sort(c.thenComparing(quick
+                            ? OsmPrimitiveComparator.comparingUniqueId()
+                            : OsmPrimitiveComparator.comparingNames()));
+                } catch (IllegalArgumentException e) {
+                    throw BugReport.intercept(e).put("size", size).put("quick", quick).put("selection", selection);
+                }
             }
         }
 
diff --git a/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java b/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java
index 6794213..bff47e8 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java
@@ -49,8 +49,8 @@ import javax.swing.SwingUtilities;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.JosmAction;
-import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
-import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.data.preferences.BooleanProperty;
 import org.openstreetmap.josm.data.preferences.ParametrizedEnumProperty;
 import org.openstreetmap.josm.gui.MainApplication;
@@ -68,6 +68,7 @@ import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.util.WindowGeometry;
 import org.openstreetmap.josm.gui.util.WindowGeometry.WindowGeometryException;
 import org.openstreetmap.josm.gui.widgets.PopupMenuLauncher;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Destroyable;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
@@ -244,9 +245,9 @@ public class ToggleDialog extends JPanel implements ShowHideButtonListener, Help
         String helpId = "Dialog/"+getClass().getName().substring(getClass().getName().lastIndexOf('.')+1);
         toggleAction.putValue("help", helpId.substring(0, helpId.length()-6));
 
-        isShowing = Main.pref.getBoolean(preferencePrefix+".visible", defShow);
-        isDocked = Main.pref.getBoolean(preferencePrefix+".docked", true);
-        isCollapsed = Main.pref.getBoolean(preferencePrefix+".minimized", false);
+        isShowing = Config.getPref().getBoolean(preferencePrefix+".visible", defShow);
+        isDocked = Config.getPref().getBoolean(preferencePrefix+".docked", true);
+        isCollapsed = Config.getPref().getBoolean(preferencePrefix+".minimized", false);
         buttonHiding = propButtonHiding.get();
 
         /** show the minimize button */
@@ -256,7 +257,7 @@ public class ToggleDialog extends JPanel implements ShowHideButtonListener, Help
         setBorder(BorderFactory.createEtchedBorder());
 
         MainApplication.redirectToMainContentPane(this);
-        Main.pref.addPreferenceChangeListener(this);
+        Config.getPref().addPreferenceChangeListener(this);
 
         registerInWindowMenu();
     }
@@ -467,7 +468,7 @@ public class ToggleDialog extends JPanel implements ShowHideButtonListener, Help
             MainApplication.getMenu().windowMenu.remove(windowMenuItem);
         }
         Toolkit.getDefaultToolkit().removeAWTEventListener(this);
-        Main.pref.removePreferenceChangeListener(this);
+        Config.getPref().removePreferenceChangeListener(this);
         destroyComponents(this, false);
     }
 
@@ -772,7 +773,7 @@ public class ToggleDialog extends JPanel implements ShowHideButtonListener, Help
 
     protected void setIsShowing(boolean val) {
         isShowing = val;
-        Main.pref.put(preferencePrefix+".visible", val);
+        Config.getPref().putBoolean(preferencePrefix+".visible", val);
         stateChanged();
     }
 
@@ -781,13 +782,13 @@ public class ToggleDialog extends JPanel implements ShowHideButtonListener, Help
             buttonsPanel.setVisible(!val || buttonHiding != ButtonHidingType.ALWAYS_HIDDEN);
         }
         isDocked = val;
-        Main.pref.put(preferencePrefix+".docked", val);
+        Config.getPref().putBoolean(preferencePrefix+".docked", val);
         stateChanged();
     }
 
     protected void setIsCollapsed(boolean val) {
         isCollapsed = val;
-        Main.pref.put(preferencePrefix+".minimized", val);
+        Config.getPref().putBoolean(preferencePrefix+".minimized", val);
         stateChanged();
     }
 
@@ -924,7 +925,7 @@ public class ToggleDialog extends JPanel implements ShowHideButtonListener, Help
                 if (buttonRow == null) {
                     continue;
                 }
-                final JPanel buttonRowPanel = new JPanel(Main.pref.getBoolean("dialog.align.left", false)
+                final JPanel buttonRowPanel = new JPanel(Config.getPref().getBoolean("dialog.align.left", false)
                         ? new FlowLayout(FlowLayout.LEFT) : new GridLayout(1, buttonRow.size()));
                 buttonsPanel.add(buttonRowPanel);
                 for (SideButton button : buttonRow) {
diff --git a/src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java b/src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java
index 19262c7..df21773 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java
@@ -57,6 +57,7 @@ import org.openstreetmap.josm.gui.preferences.validator.ValidatorPreference;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.gui.widgets.PopupMenuLauncher;
 import org.openstreetmap.josm.io.OsmTransferException;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.InputMapUtils;
 import org.openstreetmap.josm.tools.JosmRuntimeException;
@@ -492,7 +493,7 @@ public class ValidatorDialog extends ToggleDialog implements SelectionChangedLis
                 if (ds != null) {
                     ds.setSelected(sel);
                 }
-                if (Main.pref.getBoolean("validator.autozoom", false)) {
+                if (Config.getPref().getBoolean("validator.autozoom", false)) {
                     AutoScaleAction.zoomTo(sel);
                 }
             }
@@ -572,7 +573,7 @@ public class ValidatorDialog extends ToggleDialog implements SelectionChangedLis
      * @param newSelection The new selection
      */
     public void updateSelection(Collection<? extends OsmPrimitive> newSelection) {
-        if (!Main.pref.getBoolean(ValidatorPrefHelper.PREF_FILTER_BY_SELECTION, false))
+        if (!Config.getPref().getBoolean(ValidatorPrefHelper.PREF_FILTER_BY_SELECTION, false))
             return;
         if (newSelection.isEmpty()) {
             tree.setFilter(null);
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManager.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManager.java
index 36fd893..edd4748 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManager.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManager.java
@@ -46,13 +46,13 @@ import org.openstreetmap.josm.actions.downloadtasks.ChangesetContentDownloadTask
 import org.openstreetmap.josm.actions.downloadtasks.ChangesetHeaderDownloadTask;
 import org.openstreetmap.josm.actions.downloadtasks.ChangesetQueryTask;
 import org.openstreetmap.josm.actions.downloadtasks.PostDownloadHandler;
+import org.openstreetmap.josm.data.UserIdentityManager;
 import org.openstreetmap.josm.data.osm.Changeset;
 import org.openstreetmap.josm.data.osm.ChangesetCache;
 import org.openstreetmap.josm.data.osm.ChangesetDataSet;
 import org.openstreetmap.josm.data.osm.PrimitiveId;
 import org.openstreetmap.josm.data.osm.history.HistoryOsmPrimitive;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane;
-import org.openstreetmap.josm.gui.JosmUserIdentityManager;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.dialogs.changeset.query.ChangesetQueryDialog;
 import org.openstreetmap.josm.gui.help.ContextSensitiveHelpAction;
@@ -464,7 +464,7 @@ public class ChangesetCacheManager extends JFrame {
 
         protected void updateEnabledState() {
             List<Changeset> selected = model.getSelectedChangesets();
-            JosmUserIdentityManager im = JosmUserIdentityManager.getInstance();
+            UserIdentityManager im = UserIdentityManager.getInstance();
             for (Changeset cs: selected) {
                 if (cs.isOpen()) {
                     if (im.isPartiallyIdentified() && cs.getUser() != null && cs.getUser().getName().equals(im.getUserName())) {
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManagerModel.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManagerModel.java
index 1881846..3a72b28 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManagerModel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManagerModel.java
@@ -197,8 +197,10 @@ public class ChangesetCacheManagerModel extends AbstractTableModel implements Ch
                 }
             }
         }
-        sort();
-        fireTableDataChanged();
-        setSelectedChangesets(selected);
+        GuiHelper.runInEDT(() -> {
+            sort();
+            fireTableDataChanged();
+            setSelectedChangesets(selected);
+        });
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDetailPanel.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDetailPanel.java
index 42d94f7..5bf5f76 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDetailPanel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDetailPanel.java
@@ -22,6 +22,7 @@ import java.util.Set;
 
 import javax.swing.AbstractAction;
 import javax.swing.BorderFactory;
+import javax.swing.JButton;
 import javax.swing.JLabel;
 import javax.swing.JOptionPane;
 import javax.swing.JPanel;
@@ -37,6 +38,7 @@ import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.help.HelpUtil;
+import org.openstreetmap.josm.gui.history.OpenChangesetPopupMenu;
 import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeEvent;
 import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeListener;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
@@ -62,12 +64,15 @@ public class ChangesetDetailPanel extends JPanel implements PropertyChangeListen
     private final JosmTextField tfCreatedOn = new JosmTextField(20);
     private final JosmTextField tfClosedOn  = new JosmTextField(20);
 
+    private final OpenChangesetPopupMenuAction   actOpenChangesetPopupMenu   = new OpenChangesetPopupMenuAction();
     private final DownloadChangesetContentAction actDownloadChangesetContent = new DownloadChangesetContentAction(this);
     private final UpdateChangesetAction          actUpdateChangesets         = new UpdateChangesetAction();
     private final RemoveFromCacheAction          actRemoveFromCache          = new RemoveFromCacheAction();
     private final SelectInCurrentLayerAction     actSelectInCurrentLayer     = new SelectInCurrentLayerAction();
     private final ZoomInCurrentLayerAction       actZoomInCurrentLayerAction = new ZoomInCurrentLayerAction();
     // CHECKSTYLE.ON: SingleSpaceSeparator
+    
+    private JButton btnOpenChangesetPopupMenu;
 
     private transient Changeset currentChangeset;
 
@@ -77,6 +82,10 @@ public class ChangesetDetailPanel extends JPanel implements PropertyChangeListen
         JToolBar tb = new JToolBar(JToolBar.VERTICAL);
         tb.setFloatable(false);
 
+        // -- display changeset
+        btnOpenChangesetPopupMenu = tb.add(actOpenChangesetPopupMenu);
+        actOpenChangesetPopupMenu.initProperties(currentChangeset);
+
         // -- remove from cache action
         tb.add(actRemoveFromCache);
         actRemoveFromCache.initProperties(currentChangeset);
@@ -258,6 +267,7 @@ public class ChangesetDetailPanel extends JPanel implements PropertyChangeListen
         } else {
             updateView(cs);
         }
+        actOpenChangesetPopupMenu.initProperties(currentChangeset);
         actDownloadChangesetContent.initProperties();
         actUpdateChangesets.initProperties(currentChangeset);
         actRemoveFromCache.initProperties(currentChangeset);
@@ -325,6 +335,26 @@ public class ChangesetDetailPanel extends JPanel implements PropertyChangeListen
     }
 
     /**
+     * The action for opening {@link OpenChangesetPopupMenu}
+     */
+    class OpenChangesetPopupMenuAction extends AbstractAction {
+        OpenChangesetPopupMenuAction() {
+            putValue(NAME, tr("View changeset"));
+            new ImageProvider("help/internet").getResource().attachImageIcon(this);
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent evt) {
+            if (currentChangeset != null)
+                new OpenChangesetPopupMenu(currentChangeset.getId()).show(btnOpenChangesetPopupMenu);
+        }
+
+        void initProperties(Changeset cs) {
+            setEnabled(cs != null);
+        }
+    }
+
+    /**
      * Selects the primitives in the content of this changeset in the current data layer.
      *
      */
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetListModel.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetListModel.java
index c2d44e5..3af26a5 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetListModel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetListModel.java
@@ -18,6 +18,7 @@ import org.openstreetmap.josm.data.osm.ChangesetCacheListener;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Storage;
+import org.openstreetmap.josm.gui.util.GuiHelper;
 
 /**
  * This is the model that backs a list of changesets
@@ -227,7 +228,9 @@ public class ChangesetListModel extends DefaultListModel<Changeset> implements C
                 data.set(idx, new Changeset(cs.getId()));
             }
         }
-        fireContentsChanged(this, 0, getSize());
-        setSelectedChangesets(sel);
+        GuiHelper.runInEDT(() -> {
+            fireContentsChanged(this, 0, getSize());
+            setSelectedChangesets(sel);
+        });
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/SingleChangesetDownloadPanel.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/SingleChangesetDownloadPanel.java
index 323f72a..8a24753 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/SingleChangesetDownloadPanel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/SingleChangesetDownloadPanel.java
@@ -21,6 +21,7 @@ import org.openstreetmap.josm.actions.downloadtasks.ChangesetContentDownloadTask
 import org.openstreetmap.josm.gui.widgets.ChangesetIdTextField;
 import org.openstreetmap.josm.gui.widgets.SelectAllOnFocusGainedDecorator;
 import org.openstreetmap.josm.io.OnlineResource;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ImageProvider;
 
 /**
@@ -59,7 +60,7 @@ public class SingleChangesetDownloadPanel extends JPanel {
         tfChangesetId.getDocument().addDocumentListener(actDownload);
         add(btn);
 
-        if (Main.pref.getBoolean("downloadchangeset.autopaste", true)) {
+        if (Config.getPref().getBoolean("downloadchangeset.autopaste", true)) {
             tfChangesetId.tryToPasteFromClipboard();
         }
     }
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 f77684f..9b22f2f 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/query/AdvancedChangesetQueryPanel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/query/AdvancedChangesetQueryPanel.java
@@ -14,11 +14,11 @@ import javax.swing.JCheckBox;
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
 import org.openstreetmap.josm.gui.widgets.VerticallyScrollablePanel;
 import org.openstreetmap.josm.io.ChangesetQuery;
+import org.openstreetmap.josm.spi.preferences.Config;
 
 /**
  * This panel allows to specify a changeset query
@@ -208,10 +208,10 @@ public class AdvancedChangesetQueryPanel extends JPanel {
      * Remember settings in preferences.
      */
     public void rememberSettings() {
-        Main.pref.put("changeset-query.advanced.user-restrictions", cbUserRestriction.isSelected());
-        Main.pref.put("changeset-query.advanced.open-restrictions", cbOpenAndCloseRestrictions.isSelected());
-        Main.pref.put("changeset-query.advanced.time-restrictions", cbTimeRestrictions.isSelected());
-        Main.pref.put("changeset-query.advanced.bbox-restrictions", cbBoundingBoxRestriction.isSelected());
+        Config.getPref().putBoolean("changeset-query.advanced.user-restrictions", cbUserRestriction.isSelected());
+        Config.getPref().putBoolean("changeset-query.advanced.open-restrictions", cbOpenAndCloseRestrictions.isSelected());
+        Config.getPref().putBoolean("changeset-query.advanced.time-restrictions", cbTimeRestrictions.isSelected());
+        Config.getPref().putBoolean("changeset-query.advanced.bbox-restrictions", cbBoundingBoxRestriction.isSelected());
 
         pnlUserRestriction.rememberSettings();
         pnlOpenAndCloseRestriction.rememberSettings();
@@ -222,10 +222,10 @@ public class AdvancedChangesetQueryPanel extends JPanel {
      * Restore settings from preferences.
      */
     public void restoreFromSettings() {
-        cbUserRestriction.setSelected(Main.pref.getBoolean("changeset-query.advanced.user-restrictions", false));
-        cbOpenAndCloseRestrictions.setSelected(Main.pref.getBoolean("changeset-query.advanced.open-restrictions", false));
-        cbTimeRestrictions.setSelected(Main.pref.getBoolean("changeset-query.advanced.time-restrictions", false));
-        cbBoundingBoxRestriction.setSelected(Main.pref.getBoolean("changeset-query.advanced.bbox-restrictions", false));
+        cbUserRestriction.setSelected(Config.getPref().getBoolean("changeset-query.advanced.user-restrictions", false));
+        cbOpenAndCloseRestrictions.setSelected(Config.getPref().getBoolean("changeset-query.advanced.open-restrictions", false));
+        cbTimeRestrictions.setSelected(Config.getPref().getBoolean("changeset-query.advanced.time-restrictions", false));
+        cbBoundingBoxRestriction.setSelected(Config.getPref().getBoolean("changeset-query.advanced.bbox-restrictions", false));
     }
 
     class RestrictionGroupStateChangeHandler implements ItemListener {
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 1695c97..5e5bff1 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/query/BasicChangesetQueryPanel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/query/BasicChangesetQueryPanel.java
@@ -18,14 +18,14 @@ import javax.swing.JCheckBox;
 import javax.swing.JPanel;
 import javax.swing.JRadioButton;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Bounds;
-import org.openstreetmap.josm.gui.JosmUserIdentityManager;
+import org.openstreetmap.josm.data.UserIdentityManager;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.MapView;
 import org.openstreetmap.josm.gui.widgets.HtmlPanel;
 import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
 import org.openstreetmap.josm.io.ChangesetQuery;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 
 /**
@@ -157,7 +157,7 @@ public class BasicChangesetQueryPanel extends JPanel {
         // query for open changesets only possible if we have a current user which is at least
         // partially identified
         lbl = lblQueries.get(BasicQuery.MY_OPEN_CHANGESETS);
-        if (JosmUserIdentityManager.getInstance().isAnonymous()) {
+        if (UserIdentityManager.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>"));
@@ -186,11 +186,11 @@ public class BasicChangesetQueryPanel extends JPanel {
     public void rememberInPreferences() {
         BasicQuery q = getSelectedQuery();
         if (q == null) {
-            Main.pref.put("changeset-query.basic.query", null);
+            Config.getPref().put("changeset-query.basic.query", null);
         } else {
-            Main.pref.put("changeset-query.basic.query", q.toString());
+            Config.getPref().put("changeset-query.basic.query", q.toString());
         }
-        Main.pref.put("changeset-query.basic.my-changesets-only", cbMyChangesetsOnly.isSelected());
+        Config.getPref().putBoolean("changeset-query.basic.my-changesets-only", cbMyChangesetsOnly.isSelected());
     }
 
     /**
@@ -198,7 +198,7 @@ public class BasicChangesetQueryPanel extends JPanel {
      */
     public void restoreFromPreferences() {
         BasicQuery q;
-        String value = Main.pref.get("changeset-query.basic.query", null);
+        String value = Config.getPref().get("changeset-query.basic.query", null);
         if (value == null) {
             q = BasicQuery.MOST_RECENT_CHANGESETS;
         } else {
@@ -211,7 +211,7 @@ public class BasicChangesetQueryPanel extends JPanel {
             }
         }
         rbQueries.get(q).setSelected(true);
-        boolean mineOnly = Main.pref.getBoolean("changeset-query.basic.my-changesets-only", false);
+        boolean mineOnly = Config.getPref().getBoolean("changeset-query.basic.my-changesets-only", false);
         mineOnly = mineOnly || q.equals(BasicQuery.MY_OPEN_CHANGESETS);
         cbMyChangesetsOnly.setSelected(mineOnly);
     }
@@ -231,7 +231,7 @@ public class BasicChangesetQueryPanel extends JPanel {
     public ChangesetQuery buildChangesetQuery() {
         BasicQuery q = getSelectedQuery();
         ChangesetQuery query = new ChangesetQuery();
-        JosmUserIdentityManager im = JosmUserIdentityManager.getInstance();
+        UserIdentityManager im = UserIdentityManager.getInstance();
         if (q == null)
             return query;
         switch(q) {
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/query/OpenAndCloseStateRestrictionPanel.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/query/OpenAndCloseStateRestrictionPanel.java
index eb03829..ce79e47 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/query/OpenAndCloseStateRestrictionPanel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/query/OpenAndCloseStateRestrictionPanel.java
@@ -12,9 +12,9 @@ import javax.swing.ButtonGroup;
 import javax.swing.JPanel;
 import javax.swing.JRadioButton;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
 import org.openstreetmap.josm.io.ChangesetQuery;
+import org.openstreetmap.josm.spi.preferences.Config;
 
 /**
  * This is the panel for selecting whether the changeset query should be restricted to
@@ -108,11 +108,11 @@ public class OpenAndCloseStateRestrictionPanel extends JPanel implements Restric
      */
     public void rememberSettings() {
         if (rbBoth.isSelected()) {
-            Main.pref.put(PREF_QUERY_TYPE, "both");
+            Config.getPref().put(PREF_QUERY_TYPE, "both");
         } else if (rbOpenOnly.isSelected()) {
-            Main.pref.put(PREF_QUERY_TYPE, "open");
+            Config.getPref().put(PREF_QUERY_TYPE, "open");
         } else if (rbClosedOnly.isSelected()) {
-            Main.pref.put(PREF_QUERY_TYPE, "closed");
+            Config.getPref().put(PREF_QUERY_TYPE, "closed");
         }
     }
 
@@ -120,7 +120,7 @@ public class OpenAndCloseStateRestrictionPanel extends JPanel implements Restric
      * Restore settings from preferences.
      */
     public void restoreFromSettings() {
-        String v = Main.pref.get(PREF_QUERY_TYPE, "open");
+        String v = Config.getPref().get(PREF_QUERY_TYPE, "open");
         rbBoth.setSelected("both".equals(v));
         rbOpenOnly.setSelected("open".equals(v));
         rbClosedOnly.setSelected("closed".equals(v));
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/query/TimeRestrictionPanel.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/query/TimeRestrictionPanel.java
index fbda6dc..3fc3205 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/query/TimeRestrictionPanel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/query/TimeRestrictionPanel.java
@@ -21,13 +21,13 @@ import javax.swing.JOptionPane;
 import javax.swing.JPanel;
 import javax.swing.JRadioButton;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane;
 import org.openstreetmap.josm.gui.help.HelpUtil;
 import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
 import org.openstreetmap.josm.gui.widgets.SelectAllOnFocusGainedDecorator;
 import org.openstreetmap.josm.io.ChangesetQuery;
+import org.openstreetmap.josm.spi.preferences.Config;
 
 /**
  * This is the panel to apply a time restriction to the changeset query.
@@ -295,16 +295,16 @@ public class TimeRestrictionPanel extends JPanel implements RestrictionPanel {
     public void rememberSettings() {
         String prefRoot = "changeset-query.advanced.time-restrictions";
         if (rbClosedAfter.isSelected()) {
-            Main.pref.put(prefRoot + ".query-type", "closed-after");
+            Config.getPref().put(prefRoot + ".query-type", "closed-after");
         } else if (rbClosedAfterAndCreatedBefore.isSelected()) {
-            Main.pref.put(prefRoot + ".query-type", "closed-after-created-before");
+            Config.getPref().put(prefRoot + ".query-type", "closed-after-created-before");
         }
-        Main.pref.put(prefRoot + ".closed-after.date", tfClosedAfterDate1.getText());
-        Main.pref.put(prefRoot + ".closed-after.time", tfClosedAfterTime1.getText());
-        Main.pref.put(prefRoot + ".closed-created.closed.date", tfClosedAfterDate2.getText());
-        Main.pref.put(prefRoot + ".closed-created.closed.time", tfClosedAfterTime2.getText());
-        Main.pref.put(prefRoot + ".closed-created.created.date", tfCreatedBeforeDate.getText());
-        Main.pref.put(prefRoot + ".closed-created.created.time", tfCreatedBeforeTime.getText());
+        Config.getPref().put(prefRoot + ".closed-after.date", tfClosedAfterDate1.getText());
+        Config.getPref().put(prefRoot + ".closed-after.time", tfClosedAfterTime1.getText());
+        Config.getPref().put(prefRoot + ".closed-created.closed.date", tfClosedAfterDate2.getText());
+        Config.getPref().put(prefRoot + ".closed-created.closed.time", tfClosedAfterTime2.getText());
+        Config.getPref().put(prefRoot + ".closed-created.created.date", tfCreatedBeforeDate.getText());
+        Config.getPref().put(prefRoot + ".closed-created.created.time", tfCreatedBeforeTime.getText());
     }
 
     /**
@@ -312,18 +312,18 @@ public class TimeRestrictionPanel extends JPanel implements RestrictionPanel {
      */
     public void restoreFromSettings() {
         String prefRoot = "changeset-query.advanced.open-restrictions";
-        String v = Main.pref.get(prefRoot + ".query-type", "closed-after");
+        String v = Config.getPref().get(prefRoot + ".query-type", "closed-after");
         rbClosedAfter.setSelected("closed-after".equals(v));
         rbClosedAfterAndCreatedBefore.setSelected("closed-after-created-before".equals(v));
         if (!rbClosedAfter.isSelected() && !rbClosedAfterAndCreatedBefore.isSelected()) {
             rbClosedAfter.setSelected(true);
         }
-        tfClosedAfterDate1.setText(Main.pref.get(prefRoot + ".closed-after.date", ""));
-        tfClosedAfterTime1.setText(Main.pref.get(prefRoot + ".closed-after.time", ""));
-        tfClosedAfterDate2.setText(Main.pref.get(prefRoot + ".closed-created.closed.date", ""));
-        tfClosedAfterTime2.setText(Main.pref.get(prefRoot + ".closed-created.closed.time", ""));
-        tfCreatedBeforeDate.setText(Main.pref.get(prefRoot + ".closed-created.created.date", ""));
-        tfCreatedBeforeTime.setText(Main.pref.get(prefRoot + ".closed-created.created.time", ""));
+        tfClosedAfterDate1.setText(Config.getPref().get(prefRoot + ".closed-after.date", ""));
+        tfClosedAfterTime1.setText(Config.getPref().get(prefRoot + ".closed-after.time", ""));
+        tfClosedAfterDate2.setText(Config.getPref().get(prefRoot + ".closed-created.closed.date", ""));
+        tfClosedAfterTime2.setText(Config.getPref().get(prefRoot + ".closed-created.closed.time", ""));
+        tfCreatedBeforeDate.setText(Config.getPref().get(prefRoot + ".closed-created.created.date", ""));
+        tfCreatedBeforeTime.setText(Config.getPref().get(prefRoot + ".closed-created.created.time", ""));
         if (!valClosedAfterDate1.isValid()) {
             tfClosedAfterDate1.setText("");
         }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/query/UserRestrictionPanel.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/query/UserRestrictionPanel.java
index e20886d..d2fe138 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/query/UserRestrictionPanel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/query/UserRestrictionPanel.java
@@ -17,15 +17,15 @@ import javax.swing.JOptionPane;
 import javax.swing.JPanel;
 import javax.swing.JRadioButton;
 
-import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.UserIdentityManager;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane;
-import org.openstreetmap.josm.gui.JosmUserIdentityManager;
 import org.openstreetmap.josm.gui.help.HelpUtil;
 import org.openstreetmap.josm.gui.preferences.server.UserNameValidator;
 import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
 import org.openstreetmap.josm.gui.widgets.SelectAllOnFocusGainedDecorator;
 import org.openstreetmap.josm.io.ChangesetQuery;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 
 /**
@@ -162,7 +162,7 @@ public class UserRestrictionPanel extends JPanel implements RestrictionPanel {
      * Initializes HMI for user input.
      */
     public void startUserInput() {
-        if (JosmUserIdentityManager.getInstance().isAnonymous()) {
+        if (UserIdentityManager.getInstance().isAnonymous()) {
             lblRestrictedToMyself.setText(tr("Only changesets owned by myself (disabled. JOSM is currently run by an anonymous user)"));
             rbRestrictToMyself.setEnabled(false);
             if (rbRestrictToMyself.isSelected()) {
@@ -187,7 +187,7 @@ public class UserRestrictionPanel extends JPanel implements RestrictionPanel {
     public void fillInQuery(ChangesetQuery query) {
         CheckParameterUtil.ensureParameterNotNull(query, "query");
         if (rbRestrictToMyself.isSelected()) {
-            JosmUserIdentityManager im = JosmUserIdentityManager.getInstance();
+            UserIdentityManager im = UserIdentityManager.getInstance();
             if (im.isPartiallyIdentified()) {
                 query.forUser(im.getUserName());
             } else if (im.isFullyIdentified()) {
@@ -260,23 +260,23 @@ public class UserRestrictionPanel extends JPanel implements RestrictionPanel {
      */
     public void rememberSettings() {
         if (rbRestrictToMyself.isSelected()) {
-            Main.pref.put(PREF_QUERY_TYPE, "mine");
+            Config.getPref().put(PREF_QUERY_TYPE, "mine");
         } else if (rbRestrictToUid.isSelected()) {
-            Main.pref.put(PREF_QUERY_TYPE, "uid");
+            Config.getPref().put(PREF_QUERY_TYPE, "uid");
         } else if (rbRestrictToUserName.isSelected()) {
-            Main.pref.put(PREF_QUERY_TYPE, "username");
+            Config.getPref().put(PREF_QUERY_TYPE, "username");
         }
-        Main.pref.put(PREF_ROOT + ".uid", tfUid.getText());
-        Main.pref.put(PREF_ROOT + ".username", tfUserName.getText());
+        Config.getPref().put(PREF_ROOT + ".uid", tfUid.getText());
+        Config.getPref().put(PREF_ROOT + ".username", tfUserName.getText());
     }
 
     /**
      * Restore settings from preferences.
      */
     public void restoreFromSettings() {
-        String v = Main.pref.get(PREF_QUERY_TYPE, "mine");
+        String v = Config.getPref().get(PREF_QUERY_TYPE, "mine");
         if ("mine".equals(v)) {
-            JosmUserIdentityManager im = JosmUserIdentityManager.getInstance();
+            UserIdentityManager im = UserIdentityManager.getInstance();
             if (im.isAnonymous()) {
                 rbRestrictToUid.setSelected(true);
             } else {
@@ -287,11 +287,11 @@ public class UserRestrictionPanel extends JPanel implements RestrictionPanel {
         } else if ("username".equals(v)) {
             rbRestrictToUserName.setSelected(true);
         }
-        tfUid.setText(Main.pref.get(PREF_ROOT + ".uid", ""));
+        tfUid.setText(Config.getPref().get(PREF_ROOT + ".uid", ""));
         if (!valUid.isValid()) {
             tfUid.setText("");
         }
-        tfUserName.setText(Main.pref.get(PREF_ROOT + ".username", ""));
+        tfUserName.setText(Config.getPref().get(PREF_ROOT + ".username", ""));
     }
 
     class UserRestrictionChangedHandler implements ItemListener {
diff --git a/src/org/openstreetmap/josm/gui/dialogs/layer/ActivateLayerAction.java b/src/org/openstreetmap/josm/gui/dialogs/layer/ActivateLayerAction.java
index eba51fc..ea37260 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/layer/ActivateLayerAction.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/layer/ActivateLayerAction.java
@@ -17,9 +17,9 @@ import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeEvent;
 import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeListener;
 import org.openstreetmap.josm.gui.util.GuiHelper;
+import org.openstreetmap.josm.gui.util.MultikeyShortcutAction;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.ImageProvider;
-import org.openstreetmap.josm.tools.MultikeyShortcutAction;
 import org.openstreetmap.josm.tools.Shortcut;
 
 /**
diff --git a/src/org/openstreetmap/josm/gui/dialogs/layer/ShowHideLayerAction.java b/src/org/openstreetmap/josm/gui/dialogs/layer/ShowHideLayerAction.java
index bfcd8ab..40ac08b 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/layer/ShowHideLayerAction.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/layer/ShowHideLayerAction.java
@@ -18,8 +18,8 @@ import org.openstreetmap.josm.gui.dialogs.LayerListDialog.LayerListModel;
 import org.openstreetmap.josm.gui.help.HelpUtil;
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.Layer.LayerAction;
+import org.openstreetmap.josm.gui.util.MultikeyShortcutAction;
 import org.openstreetmap.josm.tools.ImageProvider;
-import org.openstreetmap.josm.tools.MultikeyShortcutAction;
 import org.openstreetmap.josm.tools.Shortcut;
 
 /**
diff --git a/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java b/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
index 469d6fc..bcacba4 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
@@ -62,7 +62,7 @@ import org.openstreetmap.josm.actions.relation.SelectRelationAction;
 import org.openstreetmap.josm.command.ChangeCommand;
 import org.openstreetmap.josm.command.ChangePropertyCommand;
 import org.openstreetmap.josm.command.Command;
-import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.data.SelectionChangedListener;
 import org.openstreetmap.josm.data.osm.DefaultNameFormatter;
 import org.openstreetmap.josm.data.osm.IRelation;
@@ -76,9 +76,9 @@ import org.openstreetmap.josm.data.osm.event.AbstractDatasetChangedEvent;
 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.osm.search.SearchCompiler;
 import org.openstreetmap.josm.data.osm.search.SearchSetting;
-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.ExtendedDialog;
@@ -99,6 +99,7 @@ import org.openstreetmap.josm.gui.widgets.CompileSearchTextDecorator;
 import org.openstreetmap.josm.gui.widgets.DisableShortcutsOnFocusGainedTextField;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
 import org.openstreetmap.josm.gui.widgets.PopupMenuLauncher;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.AlphanumComparator;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.HttpClient;
@@ -256,7 +257,7 @@ implements SelectionChangedListener, ActiveLayerChangeListener, DataSetListenerA
         tagTableFilter = setupFilter();
 
         // combine both tables and wrap them in a scrollPane
-        boolean top = Main.pref.getBoolean("properties.presets.top", true);
+        boolean top = Config.getPref().getBoolean("properties.presets.top", true);
         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
@@ -294,7 +295,7 @@ implements SelectionChangedListener, ActiveLayerChangeListener, DataSetListenerA
 
         editHelper.loadTagsIfNeeded();
 
-        Main.pref.addKeyPreferenceChangeListener("display.discardable-keys", preferenceListener);
+        Config.getPref().addKeyPreferenceChangeListener("display.discardable-keys", preferenceListener);
     }
 
     private void buildTagsTable() {
@@ -340,7 +341,7 @@ implements SelectionChangedListener, ActiveLayerChangeListener, DataSetListenerA
      * Creates the popup menu @field blankSpaceMenu and its launcher on main panel.
      */
     private void setupBlankSpaceMenu() {
-        if (Main.pref.getBoolean("properties.menu.add_edit_delete", true)) {
+        if (Config.getPref().getBoolean("properties.menu.add_edit_delete", true)) {
             blankSpaceMenuHandler.addAction(addAction);
             PopupMenuLauncher launcher = new BlankSpaceMenuLauncher(blankSpaceMenu);
             bothTables.addMouseListener(launcher);
@@ -353,7 +354,7 @@ implements SelectionChangedListener, ActiveLayerChangeListener, DataSetListenerA
      */
     private void setupMembershipMenu() {
         // setting up the membership table
-        if (Main.pref.getBoolean("properties.menu.add_edit_delete", true)) {
+        if (Config.getPref().getBoolean("properties.menu.add_edit_delete", true)) {
             membershipMenuHandler.addAction(editAction);
             membershipMenuHandler.addAction(deleteAction);
             membershipMenu.addSeparator();
@@ -405,7 +406,7 @@ implements SelectionChangedListener, ActiveLayerChangeListener, DataSetListenerA
      * Creates the popup menu @field tagMenu and its launcher on tag table.
      */
     private void setupTagsMenu() {
-        if (Main.pref.getBoolean("properties.menu.add_edit_delete", true)) {
+        if (Config.getPref().getBoolean("properties.menu.add_edit_delete", true)) {
             tagMenu.add(addAction);
             tagMenu.add(editAction);
             tagMenu.add(deleteAction);
@@ -540,7 +541,7 @@ implements SelectionChangedListener, ActiveLayerChangeListener, DataSetListenerA
     @Override
     public void destroy() {
         super.destroy();
-        Main.pref.removeKeyPreferenceChangeListener("display.discardable-keys", preferenceListener);
+        Config.getPref().removeKeyPreferenceChangeListener("display.discardable-keys", preferenceListener);
         Container parent = pluginHook.getParent();
         if (parent != null) {
             parent.remove(pluginHook);
@@ -572,7 +573,7 @@ implements SelectionChangedListener, ActiveLayerChangeListener, DataSetListenerA
         // re-load tag data
         tagData.setRowCount(0);
 
-        final boolean displayDiscardableKeys = Main.pref.getBoolean("display.discardable-keys", false);
+        final boolean displayDiscardableKeys = Config.getPref().getBoolean("display.discardable-keys", false);
         final Map<String, Integer> keyCount = new HashMap<>();
         final Map<String, String> tags = new HashMap<>();
         valueCount.clear();
@@ -1135,7 +1136,7 @@ implements SelectionChangedListener, ActiveLayerChangeListener, DataSetListenerA
         @Override
         public void actionPerformed(ActionEvent e) {
             try {
-                String base = Main.pref.get("url.openstreetmap-wiki", "https://wiki.openstreetmap.org/wiki/");
+                String base = Config.getPref().get("url.openstreetmap-wiki", "https://wiki.openstreetmap.org/wiki/");
                 String lang = LanguageInfo.getWikiLanguagePrefix();
                 final List<URI> uris = new ArrayList<>();
                 int row;
diff --git a/src/org/openstreetmap/josm/gui/dialogs/properties/RecentTagCollection.java b/src/org/openstreetmap/josm/gui/dialogs/properties/RecentTagCollection.java
index 5b0e65b..e441899 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/properties/RecentTagCollection.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/properties/RecentTagCollection.java
@@ -8,10 +8,10 @@ import java.util.List;
 import java.util.Map;
 
 import org.openstreetmap.josm.data.osm.Tag;
+import org.openstreetmap.josm.data.osm.search.SearchCompiler;
 import org.openstreetmap.josm.data.osm.search.SearchParseError;
 import org.openstreetmap.josm.data.osm.search.SearchSetting;
-import org.openstreetmap.josm.data.osm.search.SearchCompiler;
-import org.openstreetmap.josm.data.preferences.CollectionProperty;
+import org.openstreetmap.josm.data.preferences.ListProperty;
 
 /**
  * Manages list of recently used tags that will be displayed in the {@link PropertiesDialog}.
@@ -43,7 +43,7 @@ class RecentTagCollection {
         tagsToIgnore = SearchCompiler.Never.INSTANCE;
     }
 
-    public void loadFromPreference(CollectionProperty property) {
+    public void loadFromPreference(ListProperty property) {
         recentTags.clear();
         Iterator<String> it = property.get().iterator();
         while (it.hasNext()) {
@@ -53,7 +53,7 @@ class RecentTagCollection {
         }
     }
 
-    public void saveToPreference(CollectionProperty property) {
+    public void saveToPreference(ListProperty property) {
         List<String> c = new ArrayList<>(recentTags.size() * 2);
         for (Tag t : recentTags.keySet()) {
             c.add(t.getKey());
diff --git a/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java b/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java
index 8b930bc..9947851 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java
@@ -68,21 +68,21 @@ import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.SequenceCommand;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Tag;
+import org.openstreetmap.josm.data.osm.search.SearchCompiler;
 import org.openstreetmap.josm.data.osm.search.SearchParseError;
 import org.openstreetmap.josm.data.osm.search.SearchSetting;
-import org.openstreetmap.josm.data.osm.search.SearchCompiler;
 import org.openstreetmap.josm.data.preferences.BooleanProperty;
-import org.openstreetmap.josm.data.preferences.CollectionProperty;
 import org.openstreetmap.josm.data.preferences.EnumProperty;
 import org.openstreetmap.josm.data.preferences.IntegerProperty;
+import org.openstreetmap.josm.data.preferences.ListProperty;
 import org.openstreetmap.josm.data.preferences.StringProperty;
+import org.openstreetmap.josm.data.tagging.ac.AutoCompletionItem;
 import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.IExtendedDialog;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.datatransfer.ClipboardUtils;
 import org.openstreetmap.josm.gui.mappaint.MapPaintStyles;
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletingComboBox;
-import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionListItem;
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionManager;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresets;
@@ -111,7 +111,7 @@ public class TagEditHelper {
     private String changedKey;
     private String objKey;
 
-    static final Comparator<AutoCompletionListItem> DEFAULT_AC_ITEM_COMPARATOR =
+    static final Comparator<AutoCompletionItem> DEFAULT_AC_ITEM_COMPARATOR =
             (o1, o2) -> String.CASE_INSENSITIVE_ORDER.compare(o1.getValue(), o2.getValue());
 
     /** Default number of recent tags */
@@ -127,7 +127,7 @@ public class TagEditHelper {
     public static final IntegerProperty PROPERTY_RECENT_TAGS_NUMBER = new IntegerProperty("properties.recently-added-tags",
             DEFAULT_LRU_TAGS_NUMBER);
     /** The preference storage of recent tags */
-    public static final CollectionProperty PROPERTY_RECENT_TAGS = new CollectionProperty("properties.recent-tags",
+    public static final ListProperty PROPERTY_RECENT_TAGS = new ListProperty("properties.recent-tags",
             Collections.<String>emptyList());
     public static final StringProperty PROPERTY_TAGS_TO_IGNORE = new StringProperty("properties.recent-tags.ignore",
             new SearchSetting().writeToString());
@@ -392,13 +392,13 @@ public class TagEditHelper {
     protected class EditTagDialog extends AbstractTagsDialog implements IEditTagDialog {
         private final String key;
         private final transient Map<String, Integer> m;
-        private final transient Comparator<AutoCompletionListItem> usedValuesAwareComparator;
+        private final transient Comparator<AutoCompletionItem> usedValuesAwareComparator;
 
-        private final transient ListCellRenderer<AutoCompletionListItem> cellRenderer = new ListCellRenderer<AutoCompletionListItem>() {
+        private final transient ListCellRenderer<AutoCompletionItem> cellRenderer = new ListCellRenderer<AutoCompletionItem>() {
             private final DefaultListCellRenderer def = new DefaultListCellRenderer();
             @Override
-            public Component getListCellRendererComponent(JList<? extends AutoCompletionListItem> list,
-                    AutoCompletionListItem value, int index, boolean isSelected, boolean cellHasFocus) {
+            public Component getListCellRendererComponent(JList<? extends AutoCompletionItem> list,
+                    AutoCompletionItem value, int index, boolean isSelected, boolean cellHasFocus) {
                 Component c = def.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
                 if (c instanceof JLabel) {
                     String str = value.getValue();
@@ -445,12 +445,11 @@ public class TagEditHelper {
             JPanel p = new JPanel(new GridBagLayout());
             mainPanel.add(p, BorderLayout.CENTER);
 
-            AutoCompletionManager autocomplete = MainApplication.getLayerManager().getEditLayer().data.getAutoCompletionManager();
-            List<AutoCompletionListItem> keyList = autocomplete.getKeys();
-            keyList.sort(DEFAULT_AC_ITEM_COMPARATOR);
+            AutoCompletionManager autocomplete = AutoCompletionManager.of(MainApplication.getLayerManager().getEditLayer().data);
+            List<AutoCompletionItem> keyList = autocomplete.getTagKeys(DEFAULT_AC_ITEM_COMPARATOR);
 
             keys = new AutoCompletingComboBox(key);
-            keys.setPossibleACItems(keyList);
+            keys.setPossibleAcItems(keyList);
             keys.setEditable(true);
             keys.setSelectedItem(key);
 
@@ -459,8 +458,7 @@ public class TagEditHelper {
             p.add(Box.createHorizontalStrut(10), GBC.std());
             p.add(keys, GBC.eol().fill(GBC.HORIZONTAL));
 
-            List<AutoCompletionListItem> valueList = autocomplete.getValues(getAutocompletionKeys(key));
-            valueList.sort(usedValuesAwareComparator);
+            List<AutoCompletionItem> valueList = autocomplete.getTagValues(getAutocompletionKeys(key), usedValuesAwareComparator);
 
             final String selection = m.size() != 1 ? tr("<different>") : m.entrySet().iterator().next().getKey();
 
@@ -468,7 +466,7 @@ public class TagEditHelper {
             values.setRenderer(cellRenderer);
 
             values.setEditable(true);
-            values.setPossibleACItems(valueList);
+            values.setPossibleAcItems(valueList);
             values.setSelectedItem(selection);
             values.getEditor().setItem(selection);
             p.add(Box.createVerticalStrut(5), GBC.eol());
@@ -629,7 +627,7 @@ public class TagEditHelper {
         * @param comparator Class to decide what values are offered on autocompletion
         * @return The created adapter
         */
-        protected FocusAdapter addFocusAdapter(final AutoCompletionManager autocomplete, final Comparator<AutoCompletionListItem> comparator) {
+        protected FocusAdapter addFocusAdapter(final AutoCompletionManager autocomplete, final Comparator<AutoCompletionItem> comparator) {
            // get the combo box' editor component
            final JTextComponent editor = values.getEditorComponent();
            // Refresh the values model when focus is gained
@@ -638,10 +636,9 @@ public class TagEditHelper {
                public void focusGained(FocusEvent e) {
                    String key = keys.getEditor().getItem().toString();
 
-                   List<AutoCompletionListItem> valueList = autocomplete.getValues(getAutocompletionKeys(key));
-                   valueList.sort(comparator);
+                   List<AutoCompletionItem> valueList = autocomplete.getTagValues(getAutocompletionKeys(key), comparator);
                    Logging.trace("Focus gained by {0}, e={1}", values, e);
-                   values.setPossibleACItems(valueList);
+                   values.setPossibleAcItems(valueList);
                    values.getEditor().selectAll();
                    objKey = key;
                }
@@ -691,14 +688,13 @@ public class TagEditHelper {
                 +"<br><br>"+tr("Please select a key")), GBC.eol().fill(GBC.HORIZONTAL));
 
             cacheRecentTags();
-            AutoCompletionManager autocomplete = MainApplication.getLayerManager().getEditLayer().data.getAutoCompletionManager();
-            List<AutoCompletionListItem> keyList = autocomplete.getKeys();
+            AutoCompletionManager autocomplete = AutoCompletionManager.of(Main.main.getEditDataSet());
+            List<AutoCompletionItem> keyList = autocomplete.getTagKeys(DEFAULT_AC_ITEM_COMPARATOR);
 
             // remove the object's tag keys from the list
             keyList.removeIf(item -> containsDataKey(item.getValue()));
 
-            keyList.sort(DEFAULT_AC_ITEM_COMPARATOR);
-            keys.setPossibleACItems(keyList);
+            keys.setPossibleAcItems(keyList);
             keys.setEditable(true);
 
             mainPanel.add(keys, GBC.eop().fill(GBC.HORIZONTAL));
@@ -809,7 +805,7 @@ public class TagEditHelper {
 
         @Override
         public void setContentPane(Container contentPane) {
-            final int commandDownMask = GuiHelper.getMenuShortcutKeyMaskEx();
+            final int commandDownMask = Main.platform.getMenuShortcutKeyMaskEx();
             List<String> lines = new ArrayList<>();
             Shortcut.findShortcut(KeyEvent.VK_1, commandDownMask).ifPresent(sc ->
                     lines.add(sc.getKeyText() + ' ' + tr("to apply first suggestion"))
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java b/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java
index 0bdbbb1..2455f70 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java
@@ -93,11 +93,13 @@ import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.tagging.TagEditorPanel;
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletingTextField;
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionList;
+import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionManager;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetHandler;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetType;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresets;
 import org.openstreetmap.josm.gui.util.WindowGeometry;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Shortcut;
@@ -422,12 +424,12 @@ public class GenericRelationEditor extends RelationEditor {
                         AutoCompletionList list = tfRole.getAutoCompletionList();
                         if (list != null) {
                             list.clear();
-                            re.getLayer().data.getAutoCompletionManager().populateWithMemberRoles(list, re.getRelation());
+                            AutoCompletionManager.of(re.getLayer().data).populateWithMemberRoles(list, re.getRelation());
                         }
                     }
                 }
         );
-        tfRole.setText(Main.pref.get("relation.editor.generic.lastrole", ""));
+        tfRole.setText(Config.getPref().get("relation.editor.generic.lastrole", ""));
         return tfRole;
     }
 
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/MemberRoleCellEditor.java b/src/org/openstreetmap/josm/gui/dialogs/relation/MemberRoleCellEditor.java
index d627852..c1acc1a 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/MemberRoleCellEditor.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/MemberRoleCellEditor.java
@@ -13,6 +13,7 @@ import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletingTextField;
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionList;
+import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionManager;
 
 /**
  * The {@link CellEditor} for the role cell in the table. Supports autocompletion.
@@ -46,7 +47,7 @@ public class MemberRoleCellEditor extends AbstractCellEditor implements TableCel
         String role = (String) value;
         editor.setText(role);
         autoCompletionList.clear();
-        ds.getAutoCompletionManager().populateWithMemberRoles(autoCompletionList, relation);
+        AutoCompletionManager.of(ds).populateWithMemberRoles(autoCompletionList, relation);
         return editor;
     }
 
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTable.java b/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTable.java
index f46755d..b0aeb81 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTable.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTable.java
@@ -39,6 +39,7 @@ import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeListen
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.util.HighlightHelper;
 import org.openstreetmap.josm.gui.widgets.OsmPrimitivesTable;
+import org.openstreetmap.josm.spi.preferences.Config;
 
 /**
  * The table of members a selected relation has.
@@ -128,7 +129,7 @@ public class MemberTable extends OsmPrimitivesTable implements IMemberModelListe
     };
 
     private void initHighlighting() {
-        highlightEnabled = Main.pref.getBoolean("draw.target-highlight", true);
+        highlightEnabled = Config.getPref().getBoolean("draw.target-highlight", true);
         if (!highlightEnabled) return;
         getMemberTableModel().getSelectionModel().addListSelectionListener(highlighterListener);
         if (MainApplication.isDisplayingMapView()) {
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/ParentRelationLoadingTask.java b/src/org/openstreetmap/josm/gui/dialogs/relation/ParentRelationLoadingTask.java
index 97e6ecc..4cc2da6 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/ParentRelationLoadingTask.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/ParentRelationLoadingTask.java
@@ -75,7 +75,7 @@ public class ParentRelationLoadingTask extends PleaseWaitRunnable {
      */
     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.ensure(child, "child", "id > 0", ch -> ch.getUniqueId() > 0);
         CheckParameterUtil.ensureParameterNotNull(layer, "layer");
         referrers = null;
         this.layer = layer;
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/AbstractRelationEditorAction.java b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/AbstractRelationEditorAction.java
index b2d746f..e6029f5 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/AbstractRelationEditorAction.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/AbstractRelationEditorAction.java
@@ -7,9 +7,9 @@ import javax.swing.event.ListSelectionListener;
 import javax.swing.event.TableModelEvent;
 import javax.swing.event.TableModelListener;
 
+import org.openstreetmap.josm.gui.dialogs.relation.IRelationEditor;
 import org.openstreetmap.josm.gui.dialogs.relation.MemberTable;
 import org.openstreetmap.josm.gui.dialogs.relation.MemberTableModel;
-import org.openstreetmap.josm.gui.dialogs.relation.IRelationEditor;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 
 /**
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/AddFromSelectionAction.java b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/AddFromSelectionAction.java
index e76b4cd..8965da9 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/AddFromSelectionAction.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/AddFromSelectionAction.java
@@ -10,9 +10,9 @@ import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.gui.ConditionalOptionPaneUtil;
 import org.openstreetmap.josm.gui.dialogs.relation.GenericRelationEditor;
 import org.openstreetmap.josm.gui.dialogs.relation.GenericRelationEditor.AddAbortException;
+import org.openstreetmap.josm.gui.dialogs.relation.IRelationEditor;
 import org.openstreetmap.josm.gui.dialogs.relation.MemberTable;
 import org.openstreetmap.josm.gui.dialogs.relation.MemberTableModel;
-import org.openstreetmap.josm.gui.dialogs.relation.IRelationEditor;
 import org.openstreetmap.josm.gui.dialogs.relation.SelectionTable;
 import org.openstreetmap.josm.gui.dialogs.relation.SelectionTableModel;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/CancelAction.java b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/CancelAction.java
index df1c722..59bd596 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/CancelAction.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/CancelAction.java
@@ -12,12 +12,13 @@ import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane.ButtonSpec;
+import org.openstreetmap.josm.gui.dialogs.relation.IRelationEditor;
 import org.openstreetmap.josm.gui.dialogs.relation.MemberTable;
 import org.openstreetmap.josm.gui.dialogs.relation.MemberTableModel;
-import org.openstreetmap.josm.gui.dialogs.relation.IRelationEditor;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.tagging.TagEditorModel;
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletingTextField;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.InputMapUtils;
 
@@ -59,7 +60,7 @@ public class CancelAction extends SavingAction {
             int ret = confirmClosingByCancel();
             if (ret == 0) { //Yes, save the changes
                 //copied from OKAction.run()
-                Main.pref.put("relation.editor.generic.lastrole", tfRole.getText());
+                Config.getPref().put("relation.editor.generic.lastrole", tfRole.getText());
                 if (!applyChanges())
                     return;
             } else if (ret == 2 || ret == JOptionPane.CLOSED_OPTION) //Cancel, continue editing
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/OKAction.java b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/OKAction.java
index e5f7a22..6317915 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/OKAction.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/OKAction.java
@@ -5,13 +5,13 @@ import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.awt.event.ActionEvent;
 
-import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.gui.dialogs.relation.IRelationEditor;
 import org.openstreetmap.josm.gui.dialogs.relation.MemberTable;
 import org.openstreetmap.josm.gui.dialogs.relation.MemberTableModel;
-import org.openstreetmap.josm.gui.dialogs.relation.IRelationEditor;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.tagging.TagEditorModel;
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletingTextField;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ImageProvider;
 
 /**
@@ -39,7 +39,7 @@ public class OKAction extends SavingAction {
 
     @Override
     public void actionPerformed(ActionEvent e) {
-        Main.pref.put("relation.editor.generic.lastrole", tfRole.getText());
+        Config.getPref().put("relation.editor.generic.lastrole", tfRole.getText());
         memberTable.stopHighlighting();
         if (!applyChanges())
             return;
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/RefreshAction.java b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/RefreshAction.java
index cd319ff..6236ba7 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/RefreshAction.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/RefreshAction.java
@@ -10,6 +10,7 @@ import javax.swing.JComponent;
 import javax.swing.JOptionPane;
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.UndoRedoHandler.CommandQueueListener;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane.ButtonSpec;
@@ -18,7 +19,6 @@ import org.openstreetmap.josm.gui.dialogs.relation.IRelationEditor;
 import org.openstreetmap.josm.gui.dialogs.relation.MemberTable;
 import org.openstreetmap.josm.gui.dialogs.relation.MemberTableModel;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer.CommandQueueListener;
 import org.openstreetmap.josm.gui.tagging.TagEditorModel;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Shortcut;
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/SavingAction.java b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/SavingAction.java
index 2816047..a7ae57c 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/SavingAction.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/SavingAction.java
@@ -72,7 +72,7 @@ abstract class SavingAction extends AbstractRelationEditorAction {
         // tags, don't add an empty relation
         if (newRelation.getMembersCount() == 0 && !newRelation.hasKeys())
             return;
-        MainApplication.undoRedo.add(new AddCommand(layer, newRelation));
+        MainApplication.undoRedo.add(new AddCommand(layer.data, newRelation));
 
         // make sure everybody is notified about the changes
         //
@@ -94,7 +94,7 @@ abstract class SavingAction extends AbstractRelationEditorAction {
         tagEditorModel.applyToPrimitive(editedRelation);
         memberTableModel.applyToRelation(editedRelation);
         Conflict<Relation> conflict = new Conflict<>(editor.getRelation(), editedRelation);
-        MainApplication.undoRedo.add(new ConflictAddCommand(layer, conflict));
+        MainApplication.undoRedo.add(new ConflictAddCommand(layer.data, conflict));
     }
 
     /**
@@ -102,11 +102,12 @@ abstract class SavingAction extends AbstractRelationEditorAction {
      * @param tagEditorModel tag editor model
      */
     protected void applyExistingNonConflictingRelation(TagEditorModel tagEditorModel) {
-        Relation editedRelation = new Relation(editor.getRelation());
+        Relation originRelation = editor.getRelation();
+        Relation editedRelation = new Relation(originRelation);
         tagEditorModel.applyToPrimitive(editedRelation);
         memberTableModel.applyToRelation(editedRelation);
-        if (!editedRelation.hasEqualSemanticAttributes(editor.getRelation(), false)) {
-            MainApplication.undoRedo.add(new ChangeCommand(editor.getRelation(), editedRelation));
+        if (!editedRelation.hasEqualSemanticAttributes(originRelation, false)) {
+            MainApplication.undoRedo.add(new ChangeCommand(originRelation, editedRelation));
         }
     }
 
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 51d835d..bc8d083 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationNodeMap.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationNodeMap.java
@@ -107,64 +107,28 @@ public class RelationNodeMap {
     }
 
     private void addPair(Node n, int i) {
-        Set<Integer> ts = map.nodes.get(n);
-        if (ts == null) {
-            ts = new TreeSet<>();
-            map.nodes.put(n, ts);
-        }
-        ts.add(i);
-
-        Set<Node> ts2 = map.ways.get(i);
-        if (ts2 == null) {
-            ts2 = new TreeSet<>();
-            map.ways.put(i, ts2);
-        }
-        ts2.add(n);
+        map.nodes.computeIfAbsent(n, k -> new TreeSet<>()).add(i);
+        map.ways.computeIfAbsent(i, k -> new TreeSet<>()).add(n);
     }
 
     private void addNodeWayMap(Node n, int i) {
-        Set<Integer> ts = onewayMap.nodes.get(n);
-        if (ts == null) {
-            ts = new TreeSet<>();
-            onewayMap.nodes.put(n, ts);
-        }
-        ts.add(i);
+        onewayMap.nodes.computeIfAbsent(n, k -> new TreeSet<>()).add(i);
     }
 
     private void addWayNodeMap(Node n, int i) {
-        Set<Node> ts2 = onewayMap.ways.get(i);
-        if (ts2 == null) {
-            ts2 = new TreeSet<>();
-            onewayMap.ways.put(i, ts2);
-        }
-        ts2.add(n);
+        onewayMap.ways.computeIfAbsent(i, k -> new TreeSet<>()).add(n);
     }
 
     private void addNodeWayMapReverse(Node n, int i) {
-        Set<Integer> ts = onewayReverseMap.nodes.get(n);
-        if (ts == null) {
-            ts = new TreeSet<>();
-            onewayReverseMap.nodes.put(n, ts);
-        }
-        ts.add(i);
+        onewayReverseMap.nodes.computeIfAbsent(n, k -> new TreeSet<>()).add(i);
     }
 
     private void addWayNodeMapReverse(Node n, int i) {
-        Set<Node> ts2 = onewayReverseMap.ways.get(i);
-        if (ts2 == null) {
-            ts2 = new TreeSet<>();
-            onewayReverseMap.ways.put(i, ts2);
-        }
-        ts2.add(n);
+        onewayReverseMap.ways.computeIfAbsent(i, k -> new TreeSet<>()).add(n);
     }
 
     private void addRemainingForward(Node n, int i) {
-        Set<Node> ts2 = remainingOneway.get(i);
-        if (ts2 == null) {
-            ts2 = new TreeSet<>();
-            remainingOneway.put(i, ts2);
-        }
-        ts2.add(n);
+        remainingOneway.computeIfAbsent(i, k -> new TreeSet<>()).add(n);
     }
 
     private Integer firstOneway;
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 b58159c..bea0974 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationSorter.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationSorter.java
@@ -150,14 +150,7 @@ public class RelationSorter {
             boolean wasAdded = false;
             for (AdditionalSorter sorter : ADDITIONAL_SORTERS) {
                 if (sorter.acceptsMember(m)) {
-                    List<RelationMember> list;
-                    list = customMap.get(sorter);
-                    if (list == null) {
-                        list = new LinkedList<>();
-                        customMap.put(sorter, list);
-                    }
-                    list.add(m);
-                    wasAdded = true;
+                    wasAdded = customMap.computeIfAbsent(sorter, k -> new LinkedList<>()).add(m);
                     break;
                 }
             }
diff --git a/src/org/openstreetmap/josm/gui/download/BookmarkList.java b/src/org/openstreetmap/josm/gui/download/BookmarkList.java
index ca17e3f..a80f9e1 100644
--- a/src/org/openstreetmap/josm/gui/download/BookmarkList.java
+++ b/src/org/openstreetmap/josm/gui/download/BookmarkList.java
@@ -22,22 +22,22 @@ import javax.swing.JList;
 import javax.swing.ListCellRenderer;
 import javax.swing.UIManager;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.downloadtasks.ChangesetQueryTask;
 import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.UserIdentityManager;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.Changeset;
 import org.openstreetmap.josm.data.osm.UserInfo;
 import org.openstreetmap.josm.data.preferences.IntegerProperty;
 import org.openstreetmap.josm.data.projection.Projection;
 import org.openstreetmap.josm.data.projection.Projections;
-import org.openstreetmap.josm.gui.JosmUserIdentityManager;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.MapViewState;
 import org.openstreetmap.josm.gui.dialogs.changeset.ChangesetCacheManager;
 import org.openstreetmap.josm.gui.mappaint.mapcss.Selector;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.io.ChangesetQuery;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.ImageProvider.ImageSizes;
 import org.openstreetmap.josm.tools.Logging;
@@ -192,7 +192,7 @@ public class BookmarkList extends JList<BookmarkList.Bookmark> {
         public HomeLocationBookmark() {
             setName(tr("Home location"));
             setIcon(ImageProvider.get("help", "home", ImageSizes.SMALLICON));
-            UserInfo info = JosmUserIdentityManager.getInstance().getUserInfo();
+            UserInfo info = UserIdentityManager.getInstance().getUserInfo();
             if (info == null) {
                 throw new IllegalStateException("User not identified");
             }
@@ -250,7 +250,7 @@ public class BookmarkList extends JList<BookmarkList.Bookmark> {
     public final void load() {
         final DefaultListModel<Bookmark> model = (DefaultListModel<Bookmark>) getModel();
         model.removeAllElements();
-        JosmUserIdentityManager im = JosmUserIdentityManager.getInstance();
+        UserIdentityManager im = UserIdentityManager.getInstance();
         // Add home location bookmark first, if user fully identified
         if (im.isFullyIdentified()) {
             try {
@@ -261,7 +261,7 @@ public class BookmarkList extends JList<BookmarkList.Bookmark> {
             }
         }
         // Then add manual bookmarks previously saved in local preferences
-        Collection<Collection<String>> args = Main.pref.getArray("bookmarks", null);
+        List<List<String>> args = Config.getPref().getListOfLists("bookmarks", null);
         if (args != null) {
             List<Bookmark> bookmarks = new LinkedList<>();
             for (Collection<String> entry : args) {
@@ -299,7 +299,7 @@ public class BookmarkList extends JList<BookmarkList.Bookmark> {
      * Saves all manual bookmarks to the preferences file.
      */
     public final void save() {
-        List<Collection<String>> coll = new LinkedList<>();
+        List<List<String>> coll = new LinkedList<>();
         for (Object o : ((DefaultListModel<Bookmark>) getModel()).toArray()) {
             if (o instanceof HomeLocationBookmark || o instanceof ChangesetBookmark) {
                 continue;
@@ -314,7 +314,7 @@ public class BookmarkList extends JList<BookmarkList.Bookmark> {
             array[4] = String.valueOf(area.getMaxLon());
             coll.add(Arrays.asList(array));
         }
-        Main.pref.putArray("bookmarks", coll);
+        Config.getPref().putListOfLists("bookmarks", coll);
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/gui/download/BookmarkSelection.java b/src/org/openstreetmap/josm/gui/download/BookmarkSelection.java
index 746f9b2..4d5bc57 100644
--- a/src/org/openstreetmap/josm/gui/download/BookmarkSelection.java
+++ b/src/org/openstreetmap/josm/gui/download/BookmarkSelection.java
@@ -23,7 +23,7 @@ import javax.swing.event.ListSelectionListener;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Bounds;
-import org.openstreetmap.josm.gui.JosmUserIdentityManager;
+import org.openstreetmap.josm.data.UserIdentityManager;
 import org.openstreetmap.josm.gui.download.BookmarkList.Bookmark;
 import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
 import org.openstreetmap.josm.gui.widgets.JosmTextArea;
@@ -289,7 +289,7 @@ public class BookmarkSelection implements DownloadSelection {
         RefreshAction() {
             putValue(SMALL_ICON, ImageProvider.get("dialogs/changeset", "downloadchangeset"));
             putValue(SHORT_DESCRIPTION, tr("Download bookmarks for my {0} last changesets", BookmarkList.MAX_CHANGESET_BOOKMARKS.get()));
-            setEnabled(!JosmUserIdentityManager.getInstance().isAnonymous());
+            setEnabled(!UserIdentityManager.getInstance().isAnonymous());
         }
 
         @Override
diff --git a/src/org/openstreetmap/josm/gui/download/BoundingBoxSelection.java b/src/org/openstreetmap/josm/gui/download/BoundingBoxSelection.java
index 8df8678..c8e6b3b 100644
--- a/src/org/openstreetmap/josm/gui/download/BoundingBoxSelection.java
+++ b/src/org/openstreetmap/josm/gui/download/BoundingBoxSelection.java
@@ -24,8 +24,8 @@ import javax.swing.event.DocumentListener;
 import javax.swing.text.JTextComponent;
 
 import org.openstreetmap.josm.data.Bounds;
-import org.openstreetmap.josm.data.coor.CoordinateFormat;
 import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.coor.conversion.DecimalDegreesCoordinateFormat;
 import org.openstreetmap.josm.gui.widgets.JosmTextArea;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
 import org.openstreetmap.josm.tools.GBC;
@@ -162,10 +162,10 @@ public class BoundingBoxSelection implements DownloadSelection {
 
     private void updateBboxFields(Bounds area) {
         if (area == null) return;
-        latlon[0].setText(area.getMin().latToString(CoordinateFormat.DECIMAL_DEGREES));
-        latlon[1].setText(area.getMin().lonToString(CoordinateFormat.DECIMAL_DEGREES));
-        latlon[2].setText(area.getMax().latToString(CoordinateFormat.DECIMAL_DEGREES));
-        latlon[3].setText(area.getMax().lonToString(CoordinateFormat.DECIMAL_DEGREES));
+        latlon[0].setText(DecimalDegreesCoordinateFormat.INSTANCE.latToString(area.getMin()));
+        latlon[1].setText(DecimalDegreesCoordinateFormat.INSTANCE.lonToString(area.getMin()));
+        latlon[2].setText(DecimalDegreesCoordinateFormat.INSTANCE.latToString(area.getMax()));
+        latlon[3].setText(DecimalDegreesCoordinateFormat.INSTANCE.lonToString(area.getMax()));
         for (JosmTextField tf: latlon) {
             resetErrorMessage(tf);
         }
diff --git a/src/org/openstreetmap/josm/gui/download/DownloadDialog.java b/src/org/openstreetmap/josm/gui/download/DownloadDialog.java
index 2ccf97b..b2942da 100644
--- a/src/org/openstreetmap/josm/gui/download/DownloadDialog.java
+++ b/src/org/openstreetmap/josm/gui/download/DownloadDialog.java
@@ -49,10 +49,12 @@ import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.util.WindowGeometry;
 import org.openstreetmap.josm.io.OnlineResource;
 import org.openstreetmap.josm.plugins.PluginHandler;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.InputMapUtils;
 import org.openstreetmap.josm.tools.JosmRuntimeException;
+import org.openstreetmap.josm.tools.ListenerList;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.OsmUrlToBounds;
 
@@ -82,7 +84,14 @@ public class DownloadDialog extends JDialog {
         return instance;
     }
 
-    protected final transient List<DownloadSource<?>> downloadSources = new ArrayList<>();
+    protected static final ListenerList<DownloadSourceListener> downloadSourcesListeners = ListenerList.create();
+    protected static final List<DownloadSource<?>> downloadSources = new ArrayList<>();
+    static {
+        // add default download sources
+        addDownloadSource(new OSMDownloadSource());
+        addDownloadSource(new OverpassDownloadSource());
+    }
+
     protected final transient List<DownloadSelection> downloadSelections = new ArrayList<>();
     protected final JTabbedPane tpDownloadAreaSelectors = new JTabbedPane();
     protected final DownloadSourceTabs downloadSourcesTab = new DownloadSourceTabs();
@@ -113,10 +122,6 @@ public class DownloadDialog extends JDialog {
     protected final JPanel buildMainPanel() {
         mainPanel = new JPanel(new GridBagLayout());
 
-        // add default download sources
-        addDownloadSource(new OSMDownloadSource());
-        addDownloadSource(new OverpassDownloadSource());
-
         // must be created before hook
         slippyMapChooser = new SlippyMapChooser();
 
@@ -333,14 +338,15 @@ public class DownloadDialog extends JDialog {
      * @param <T> The type of the download data.
      * @throws JosmRuntimeException If the download source is already added. Note, download sources are
      * compared by their reference.
+     * @since 12878
      */
-    public <T> void addDownloadSource(DownloadSource<T> downloadSource) {
+    public static <T> void addDownloadSource(DownloadSource<T> downloadSource) {
         if (downloadSources.contains(downloadSource)) {
             throw new JosmRuntimeException("The download source you are trying to add already exists.");
         }
 
         downloadSources.add(downloadSource);
-        addNewDownloadSourceTab(downloadSource);
+        downloadSourcesListeners.fireEvent(l -> l.downloadSourceAdded(downloadSource));
     }
 
     /**
@@ -358,11 +364,12 @@ public class DownloadDialog extends JDialog {
      */
     public void rememberSettings() {
         DOWNLOAD_TAB.put(tpDownloadAreaSelectors.getSelectedIndex());
+        downloadSourcesTab.getAllPanels().forEach(AbstractDownloadSourcePanel::rememberSettings);
         downloadSourcesTab.getSelectedPanel().ifPresent(panel -> DOWNLOAD_SOURCE_TAB.put(panel.getSimpleName()));
         DOWNLOAD_NEWLAYER.put(cbNewLayer.isSelected());
         DOWNLOAD_ZOOMTODATA.put(cbZoomToDownloadedData.isSelected());
         if (currentBounds != null) {
-            Main.pref.put("osm-download.bounds", currentBounds.encodeAsString(";"));
+            Config.getPref().put("osm-download.bounds", currentBounds.encodeAsString(";"));
         }
     }
 
@@ -381,6 +388,7 @@ public class DownloadDialog extends JDialog {
             tpDownloadAreaSelectors.setSelectedIndex(0);
         }
 
+        downloadSourcesTab.getAllPanels().forEach(AbstractDownloadSourcePanel::restoreSettings);
         downloadSourcesTab.setSelected(DOWNLOAD_SOURCE_TAB.get());
 
         if (MainApplication.isDisplayingMapView()) {
@@ -405,7 +413,7 @@ public class DownloadDialog extends JDialog {
      * @since 6509
      */
     public static Bounds getSavedDownloadBounds() {
-        String value = Main.pref.get("osm-download.bounds");
+        String value = Config.getPref().get("osm-download.bounds");
         if (!value.isEmpty()) {
             try {
                 return new Bounds(value, ";");
@@ -479,7 +487,7 @@ public class DownloadDialog extends JDialog {
      * @param <T> The type of the download data.
      */
     protected <T> void addNewDownloadSourceTab(DownloadSource<T> downloadSource) {
-        downloadSourcesTab.addPanel(downloadSource.createPanel());
+        downloadSourcesTab.addPanel(downloadSource.createPanel(this));
     }
 
     /**
@@ -579,9 +587,14 @@ public class DownloadDialog extends JDialog {
      * @author Michael Zangl
      * @since 12706
      */
-    private static class DownloadSourceTabs extends JTabbedPane {
+    private class DownloadSourceTabs extends JTabbedPane implements DownloadSourceListener {
         private final List<AbstractDownloadSourcePanel<?>> allPanels = new ArrayList<>();
 
+        DownloadSourceTabs() {
+            downloadSources.forEach(this::downloadSourceAdded);
+            downloadSourcesListeners.addListener(this);
+        }
+
         List<AbstractDownloadSourcePanel<?>> getAllPanels() {
             return allPanels;
         }
@@ -630,6 +643,11 @@ public class DownloadDialog extends JDialog {
             }
             super.insertTab(title, icon, component, tip, index);
         }
+
+        @Override
+        public void downloadSourceAdded(DownloadSource<?> source) {
+            addPanel(source.createPanel(DownloadDialog.this));
+        }
     }
 
     /**
@@ -642,7 +660,7 @@ public class DownloadDialog extends JDialog {
      */
     private static class DownloadDialogSplitPane extends JSplitPane {
         private DownloadSourceSizingPolicy policy;
-        private JTabbedPane topComponent;
+        private final JTabbedPane topComponent;
 
         DownloadDialogSplitPane(JTabbedPane newTopComponent, Component newBottomComponent) {
             super(VERTICAL_SPLIT, newTopComponent, newBottomComponent);
diff --git a/src/org/openstreetmap/josm/gui/download/DownloadObjectDialog.java b/src/org/openstreetmap/josm/gui/download/DownloadObjectDialog.java
index 32bb74e..f63e941 100644
--- a/src/org/openstreetmap/josm/gui/download/DownloadObjectDialog.java
+++ b/src/org/openstreetmap/josm/gui/download/DownloadObjectDialog.java
@@ -14,6 +14,7 @@ import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
 import org.openstreetmap.josm.gui.dialogs.OsmIdSelectionDialog;
 import org.openstreetmap.josm.io.OnlineResource;
+import org.openstreetmap.josm.spi.preferences.Config;
 
 /**
  * Dialog prompt to user to let him choose OSM primitives to download by specifying their type and IDs
@@ -58,14 +59,14 @@ public class DownloadObjectDialog extends OsmIdSelectionDialog {
     @Override
     protected Collection<Component> getComponentsBeforeHelp() {
         newLayer.setToolTipText(tr("Select if the data should be downloaded into a new layer"));
-        newLayer.setSelected(Main.pref.getBoolean("download.newlayer"));
+        newLayer.setSelected(Config.getPref().getBoolean("download.newlayer"));
 
         referrers.setToolTipText(tr("Select if the referrers of the object should be downloaded as well, i.e.,"
                 + "parent relations and for nodes, additionally, parent ways"));
-        referrers.setSelected(Main.pref.getBoolean("downloadprimitive.referrers", true));
+        referrers.setSelected(Config.getPref().getBoolean("downloadprimitive.referrers", true));
 
         fullRel.setToolTipText(tr("Select if the members of a relation should be downloaded as well"));
-        fullRel.setSelected(Main.pref.getBoolean("downloadprimitive.full", true));
+        fullRel.setSelected(Config.getPref().getBoolean("downloadprimitive.full", true));
 
         cbType.addItemListener(e -> referrers.setText(cbType.getType() == OsmPrimitiveType.NODE
                 ? tr("Download referrers (parent relations and ways)")
@@ -102,9 +103,9 @@ public class DownloadObjectDialog extends OsmIdSelectionDialog {
     public void windowClosed(WindowEvent e) {
         super.windowClosed(e);
         if (e != null && e.getComponent() == this && getValue() == 1) {
-            Main.pref.put("downloadprimitive.referrers", referrers.isSelected());
-            Main.pref.put("downloadprimitive.full", fullRel.isSelected());
-            Main.pref.put("download.newlayer", newLayer.isSelected());
+            Config.getPref().putBoolean("downloadprimitive.referrers", referrers.isSelected());
+            Config.getPref().putBoolean("downloadprimitive.full", fullRel.isSelected());
+            Config.getPref().putBoolean("download.newlayer", newLayer.isSelected());
         }
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/download/DownloadSettings.java b/src/org/openstreetmap/josm/gui/download/DownloadSettings.java
index 3b29e51..e4b6fe8 100644
--- a/src/org/openstreetmap/josm/gui/download/DownloadSettings.java
+++ b/src/org/openstreetmap/josm/gui/download/DownloadSettings.java
@@ -1,10 +1,10 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.download;
 
-import org.openstreetmap.josm.data.Bounds;
-
 import java.util.Optional;
 
+import org.openstreetmap.josm.data.Bounds;
+
 /**
  * The global settings of {@link DownloadDialog}.
  * <p>
diff --git a/src/org/openstreetmap/josm/gui/download/DownloadSource.java b/src/org/openstreetmap/josm/gui/download/DownloadSource.java
index e6605b6..c6ea81a 100644
--- a/src/org/openstreetmap/josm/gui/download/DownloadSource.java
+++ b/src/org/openstreetmap/josm/gui/download/DownloadSource.java
@@ -12,9 +12,11 @@ public interface DownloadSource<T> {
 
     /**
      * Creates a panel with GUI specific for the download source.
+     * @param dialog the parent download dialog, as {@code DownloadDialog.getInstance()} might not be initialized yet
      * @return Returns {@link AbstractDownloadSourcePanel}.
+     * @since 12900
      */
-    AbstractDownloadSourcePanel<T> createPanel();
+    AbstractDownloadSourcePanel<T> createPanel(DownloadDialog dialog);
 
     /**
      * Downloads the data.
diff --git a/src/org/openstreetmap/josm/gui/download/DownloadSourceListener.java b/src/org/openstreetmap/josm/gui/download/DownloadSourceListener.java
new file mode 100644
index 0000000..7c5cd5e
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/download/DownloadSourceListener.java
@@ -0,0 +1,15 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.download;
+
+/**
+ * Listener to get notified about changes in the list of download sources.
+ * @since 12878
+ */
+interface DownloadSourceListener {
+
+    /**
+     * Called when a download source has been added.
+     * @param source the new added download source.
+     */
+    void downloadSourceAdded(DownloadSource<?> source);
+}
diff --git a/src/org/openstreetmap/josm/gui/download/OSMDownloadSource.java b/src/org/openstreetmap/josm/gui/download/OSMDownloadSource.java
index 958657c..4b07431 100644
--- a/src/org/openstreetmap/josm/gui/download/OSMDownloadSource.java
+++ b/src/org/openstreetmap/josm/gui/download/OSMDownloadSource.java
@@ -18,7 +18,6 @@ import javax.swing.JLabel;
 import javax.swing.JOptionPane;
 import javax.swing.event.ChangeListener;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.downloadtasks.AbstractDownloadTask;
 import org.openstreetmap.josm.actions.downloadtasks.DownloadGpsTask;
 import org.openstreetmap.josm.actions.downloadtasks.DownloadNotesTask;
@@ -31,6 +30,7 @@ import org.openstreetmap.josm.data.preferences.BooleanProperty;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.MapFrame;
 import org.openstreetmap.josm.gui.util.GuiHelper;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Logging;
@@ -48,8 +48,8 @@ public class OSMDownloadSource implements DownloadSource<OSMDownloadSource.OSMDo
     public static final String SIMPLE_NAME = "osmdownloadpanel";
 
     @Override
-    public AbstractDownloadSourcePanel<OSMDownloadData> createPanel() {
-        return new OSMDownloadSourcePanel(this);
+    public AbstractDownloadSourcePanel<OSMDownloadData> createPanel(DownloadDialog dialog) {
+        return new OSMDownloadSourcePanel(this, dialog);
     }
 
     @Override
@@ -144,15 +144,17 @@ public class OSMDownloadSource implements DownloadSource<OSMDownloadSource.OSMDo
 
         /**
          * Creates a new {@link OSMDownloadSourcePanel}.
+         * @param dialog the parent download dialog, as {@code DownloadDialog.getInstance()} might not be initialized yet
          * @param ds The osm download source the panel is for.
+         * @since 12900
          */
-        public OSMDownloadSourcePanel(OSMDownloadSource ds) {
+        public OSMDownloadSourcePanel(OSMDownloadSource ds, DownloadDialog dialog) {
             super(ds);
             setLayout(new GridBagLayout());
 
             // size check depends on selected data source
             final ChangeListener checkboxChangeListener = e ->
-                    DownloadDialog.getInstance().getSelectedDownloadArea().ifPresent(this::updateSizeCheck);
+                    dialog.getSelectedDownloadArea().ifPresent(this::updateSizeCheck);
 
             // adding the download tasks
             add(new JLabel(tr("Data Sources and Types:")), GBC.std().insets(5, 5, 1, 5).anchor(GBC.CENTER));
@@ -297,10 +299,10 @@ public class OSMDownloadSource implements DownloadSource<OSMDownloadSource.OSMDo
                 isAreaTooLarge = false;
             } else if (isDownloadNotes() && !isDownloadOsmData() && !isDownloadGpxData()) {
                 // see max_note_request_area in https://github.com/openstreetmap/openstreetmap-website/blob/master/config/example.application.yml
-                isAreaTooLarge = bbox.getArea() > Main.pref.getDouble("osm-server.max-request-area-notes", 25);
+                isAreaTooLarge = bbox.getArea() > Config.getPref().getDouble("osm-server.max-request-area-notes", 25);
             } else {
                 // see max_request_area in https://github.com/openstreetmap/openstreetmap-website/blob/master/config/example.application.yml
-                isAreaTooLarge = bbox.getArea() > Main.pref.getDouble("osm-server.max-request-area", 0.25);
+                isAreaTooLarge = bbox.getArea() > Config.getPref().getDouble("osm-server.max-request-area", 0.25);
             }
 
             displaySizeCheckResult(isAreaTooLarge);
diff --git a/src/org/openstreetmap/josm/gui/download/OverpassDownloadSource.java b/src/org/openstreetmap/josm/gui/download/OverpassDownloadSource.java
index 47896c4..8f3714c 100644
--- a/src/org/openstreetmap/josm/gui/download/OverpassDownloadSource.java
+++ b/src/org/openstreetmap/josm/gui/download/OverpassDownloadSource.java
@@ -7,14 +7,13 @@ import java.awt.BorderLayout;
 import java.awt.Dimension;
 import java.awt.GridBagLayout;
 import java.awt.event.ActionEvent;
+import java.awt.event.FocusAdapter;
 import java.awt.event.FocusEvent;
-import java.awt.event.FocusListener;
 import java.util.Collection;
 import java.util.concurrent.Future;
 import java.util.function.Consumer;
 
 import javax.swing.AbstractAction;
-import javax.swing.Action;
 import javax.swing.Icon;
 import javax.swing.JButton;
 import javax.swing.JLabel;
@@ -31,10 +30,10 @@ import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.preferences.AbstractProperty;
 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.gui.ConditionalOptionPaneUtil;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.download.DownloadSourceSizingPolicy.AdjustableDownloadSizePolicy;
-import org.openstreetmap.josm.gui.preferences.server.OverpassServerPreference;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.widgets.JosmTextArea;
 import org.openstreetmap.josm.io.OverpassDownloadReader;
@@ -48,7 +47,7 @@ import org.openstreetmap.josm.tools.ImageProvider;
 public class OverpassDownloadSource implements DownloadSource<OverpassDownloadSource.OverpassDownloadData> {
 
     @Override
-    public AbstractDownloadSourcePanel<OverpassDownloadData> createPanel() {
+    public AbstractDownloadSourcePanel<OverpassDownloadData> createPanel(DownloadDialog dialog) {
         return new OverpassDownloadSourcePanel(this);
     }
 
@@ -62,7 +61,7 @@ public class OverpassDownloadSource implements DownloadSource<OverpassDownloadSo
         DownloadOsmTask task = new DownloadOsmTask();
         task.setZoomAfterDownload(settings.zoomToData());
         Future<?> future = task.download(
-                new OverpassDownloadReader(area, OverpassServerPreference.getOverpassServer(), data.getQuery()),
+                new OverpassDownloadReader(area, OverpassDownloadReader.OVERPASS_SERVER.get(), data.getQuery()),
                 settings.asNewLayer(), area, null);
         MainApplication.worker.submit(new PostDownloadHandler(task, future, data.getErrorReporter()));
     }
@@ -90,8 +89,11 @@ public class OverpassDownloadSource implements DownloadSource<OverpassDownloadSo
                 new BooleanProperty("download.overpass.query-list.opened", false);
         private static final String ACTION_IMG_SUBDIR = "dialogs";
 
-        private JosmTextArea overpassQuery;
-        private OverpassQueryList overpassQueryList;
+        private static final StringProperty DOWNLOAD_QUERY = new StringProperty("download.overpass.query",
+                "/*\n" + tr("Place your Overpass query below or generate one using the Overpass Turbo Query Wizard") + "\n*/");
+
+        private final JosmTextArea overpassQuery;
+        private final UserQueryList overpassQueryList;
 
         /**
          * Create a new {@link OverpassDownloadSourcePanel}
@@ -102,39 +104,26 @@ public class OverpassDownloadSource implements DownloadSource<OverpassDownloadSo
             setLayout(new BorderLayout());
 
             String tooltip = tr("Build an Overpass query using the Overpass Turbo Query Wizard tool");
-            Action queryWizardAction = new AbstractAction() {
+
+            JButton openQueryWizard = new JButton(tr("Query Wizard"));
+            openQueryWizard.setToolTipText(tooltip);
+            openQueryWizard.addActionListener(new AbstractAction() {
                 @Override
                 public void actionPerformed(ActionEvent e) {
                     new OverpassQueryWizardDialog(OverpassDownloadSourcePanel.this).showDialog();
                 }
-            };
+            });
 
-            JButton openQueryWizard = new JButton(tr("Query Wizard"));
-            openQueryWizard.setToolTipText(tooltip);
-            openQueryWizard.addActionListener(queryWizardAction);
-
-            // CHECKSTYLE.OFF: LineLength
-            this.overpassQuery = new JosmTextArea(
-                    "/*\n" +
-                            tr("Place your Overpass query below or generate one using the Overpass Turbo Query Wizard")
-                            + "\n*/",
-                    8, 80);
-            // CHECKSTYLE.ON: LineLength
+            this.overpassQuery = new JosmTextArea(DOWNLOAD_QUERY.get(), 8, 80);
             this.overpassQuery.setFont(GuiHelper.getMonospacedFont(overpassQuery));
-            this.overpassQuery.addFocusListener(new FocusListener() {
+            this.overpassQuery.addFocusListener(new FocusAdapter() {
                 @Override
                 public void focusGained(FocusEvent e) {
                     overpassQuery.selectAll();
                 }
-
-                @Override
-                public void focusLost(FocusEvent e) {
-                    // ignored
-                }
             });
 
-
-            this.overpassQueryList = new OverpassQueryList(this, this.overpassQuery);
+            this.overpassQueryList = new UserQueryList(this, this.overpassQuery, "download.overpass.query");
             this.overpassQueryList.setPreferredSize(new Dimension(350, 300));
 
             EditSnippetAction edit = new EditSnippetAction();
@@ -207,12 +196,12 @@ public class OverpassDownloadSource implements DownloadSource<OverpassDownloadSo
 
         @Override
         public void rememberSettings() {
-            // nothing
+            DOWNLOAD_QUERY.put(overpassQuery.getText());
         }
 
         @Override
         public void restoreSettings() {
-            // nothing
+            overpassQuery.setText(DOWNLOAD_QUERY.get());
         }
 
         @Override
@@ -288,7 +277,7 @@ public class OverpassDownloadSource implements DownloadSource<OverpassDownloadSo
         }
 
         /**
-         * Action that delegates snippet creation to {@link OverpassQueryList#createNewItem()}.
+         * Action that delegates snippet creation to {@link UserQueryList#createNewItem()}.
          */
         private class AddSnippetAction extends AbstractAction {
 
@@ -308,7 +297,7 @@ public class OverpassDownloadSource implements DownloadSource<OverpassDownloadSo
         }
 
         /**
-         * Action that delegates snippet removal to {@link OverpassQueryList#removeSelectedItem()}.
+         * Action that delegates snippet removal to {@link UserQueryList#removeSelectedItem()}.
          */
         private class RemoveSnippetAction extends AbstractAction implements ListSelectionListener {
 
@@ -341,7 +330,7 @@ public class OverpassDownloadSource implements DownloadSource<OverpassDownloadSo
         }
 
         /**
-         * Action that delegates snippet edit to {@link OverpassQueryList#editSelectedItem()}.
+         * Action that delegates snippet edit to {@link UserQueryList#editSelectedItem()}.
          */
         private class EditSnippetAction extends AbstractAction implements ListSelectionListener {
 
@@ -378,8 +367,8 @@ public class OverpassDownloadSource implements DownloadSource<OverpassDownloadSo
      * Encapsulates data that is required to preform download from Overpass API.
      */
     static class OverpassDownloadData {
-        private String query;
-        private Consumer<Collection<Object>> errorReporter;
+        private final String query;
+        private final Consumer<Collection<Object>> errorReporter;
 
         OverpassDownloadData(String query, Consumer<Collection<Object>> errorReporter) {
             this.query = query;
diff --git a/src/org/openstreetmap/josm/gui/download/OverpassQueryWizardDialog.java b/src/org/openstreetmap/josm/gui/download/OverpassQueryWizardDialog.java
index 51f7073..c857b4b 100644
--- a/src/org/openstreetmap/josm/gui/download/OverpassQueryWizardDialog.java
+++ b/src/org/openstreetmap/josm/gui/download/OverpassQueryWizardDialog.java
@@ -8,6 +8,7 @@ import java.awt.event.ActionEvent;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.List;
 import java.util.Optional;
 
 import javax.swing.JEditorPane;
@@ -19,7 +20,7 @@ import javax.swing.event.HyperlinkEvent;
 import javax.swing.text.JTextComponent;
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.preferences.CollectionProperty;
+import org.openstreetmap.josm.data.preferences.ListProperty;
 import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.widgets.HistoryComboBox;
@@ -46,8 +47,8 @@ public final class OverpassQueryWizardDialog extends ExtendedDialog {
     private static final String TD_END = "</td>";
     private static final String SPAN_START = "<span>";
     private static final String SPAN_END = "</span>";
-    private static final CollectionProperty OVERPASS_WIZARD_HISTORY =
-            new CollectionProperty("download.overpass.wizard", new ArrayList<String>());
+    private static final ListProperty OVERPASS_WIZARD_HISTORY =
+            new ListProperty("download.overpass.wizard", new ArrayList<String>());
     private final transient OverpassTurboQueryWizard overpassQueryBuilder;
 
     // dialog buttons
@@ -88,7 +89,12 @@ public final class OverpassQueryWizardDialog extends ExtendedDialog {
         panel.add(queryWizard, GBC.eol().insets(0, 0, 0, 15).fill(GBC.HORIZONTAL).anchor(GBC.SOUTH));
         panel.add(scroll, GBC.eol().fill(GBC.BOTH).anchor(GBC.CENTER));
 
-        queryWizard.setPossibleItems(OVERPASS_WIZARD_HISTORY.get());
+        List<String> items = new ArrayList<>(OVERPASS_WIZARD_HISTORY.get());
+        Collections.reverse(items);
+        queryWizard.setPossibleItems(items);
+        if (!items.isEmpty()) {
+            queryWizard.setText(items.get(0));
+        }
 
         setCancelButton(CANCEL + 1);
         setDefaultButton(BUILD_AN_EXECUTE_QUERY + 1);
diff --git a/src/org/openstreetmap/josm/gui/download/PlaceSelection.java b/src/org/openstreetmap/josm/gui/download/PlaceSelection.java
index 08d9f19..498cdc6 100644
--- a/src/org/openstreetmap/josm/gui/download/PlaceSelection.java
+++ b/src/org/openstreetmap/josm/gui/download/PlaceSelection.java
@@ -54,6 +54,7 @@ import org.openstreetmap.josm.gui.widgets.JosmComboBox;
 import org.openstreetmap.josm.io.NameFinder;
 import org.openstreetmap.josm.io.NameFinder.SearchResult;
 import org.openstreetmap.josm.io.OsmTransferException;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.HttpClient;
 import org.openstreetmap.josm.tools.ImageProvider;
@@ -104,7 +105,7 @@ public class PlaceSelection implements DownloadSelection {
 
         lpanel.add(new JLabel(tr("Choose the server for searching:")));
         lpanel.add(server);
-        String s = Main.pref.get("namefinder.server", SERVERS[0].name);
+        String s = Config.getPref().get("namefinder.server", SERVERS[0].name);
         for (int i = 0; i < SERVERS.length; ++i) {
             if (SERVERS[i].name.equals(s)) {
                 server.setSelectedIndex(i);
@@ -114,7 +115,7 @@ public class PlaceSelection implements DownloadSelection {
 
         cbSearchExpression = new HistoryComboBox();
         cbSearchExpression.setToolTipText(tr("Enter a place name to search for"));
-        List<String> cmtHistory = new LinkedList<>(Main.pref.getCollection(HISTORY_KEY, new LinkedList<String>()));
+        List<String> cmtHistory = new LinkedList<>(Config.getPref().getList(HISTORY_KEY, new LinkedList<String>()));
         Collections.reverse(cmtHistory);
         cbSearchExpression.setPossibleItems(cmtHistory);
         lpanel.add(cbSearchExpression);
@@ -188,7 +189,7 @@ public class PlaceSelection implements DownloadSelection {
             if (!isEnabled() || cbSearchExpression.getText().trim().isEmpty())
                 return;
             cbSearchExpression.addCurrentItemToHistory();
-            Main.pref.putCollection(HISTORY_KEY, cbSearchExpression.getHistory());
+            Config.getPref().putList(HISTORY_KEY, cbSearchExpression.getHistory());
             NameQueryTask task = new NameQueryTask(cbSearchExpression.getText());
             MainApplication.worker.submit(task);
         }
@@ -226,7 +227,7 @@ public class PlaceSelection implements DownloadSelection {
             super(tr("Querying name server"), false /* don't ignore exceptions */);
             this.searchExpression = searchExpression;
             useserver = (Server) server.getSelectedItem();
-            Main.pref.put("namefinder.server", useserver.name);
+            Config.getPref().put("namefinder.server", useserver.name);
         }
 
         @Override
diff --git a/src/org/openstreetmap/josm/gui/download/OverpassQueryList.java b/src/org/openstreetmap/josm/gui/download/UserQueryList.java
similarity index 93%
rename from src/org/openstreetmap/josm/gui/download/OverpassQueryList.java
rename to src/org/openstreetmap/josm/gui/download/UserQueryList.java
index 71a9041..a5997f2 100644
--- a/src/org/openstreetmap/josm/gui/download/OverpassQueryList.java
+++ b/src/org/openstreetmap/josm/gui/download/UserQueryList.java
@@ -48,15 +48,17 @@ import org.openstreetmap.josm.gui.widgets.AbstractTextComponentValidator;
 import org.openstreetmap.josm.gui.widgets.DefaultTextComponentValidator;
 import org.openstreetmap.josm.gui.widgets.JosmTextArea;
 import org.openstreetmap.josm.gui.widgets.SearchTextResultListPanel;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
 
 /**
- * A component to select user saved Overpass queries.
- * @since 12574
+ * A component to select user saved queries.
+ * @since 12880
+ * @since 12574 as OverpassQueryList
  */
-public final class OverpassQueryList extends SearchTextResultListPanel<OverpassQueryList.SelectorItem> {
+public final class UserQueryList extends SearchTextResultListPanel<UserQueryList.SelectorItem> {
 
     private static final DateTimeFormatter FORMAT = DateTimeFormatter.ofPattern("HH:mm:ss, dd-MM-yyyy");
 
@@ -77,7 +79,7 @@ public final class OverpassQueryList extends SearchTextResultListPanel<OverpassQ
     private static final String KEY_KEY = "key";
     private static final String QUERY_KEY = "query";
     private static final String LAST_EDIT_KEY = "lastEdit";
-    private static final String PREFERENCE_ITEMS = "download.overpass.query";
+    private final String preferenceKey;
 
     private static final String TRANSLATED_HISTORY = tr("history");
 
@@ -85,14 +87,16 @@ public final class OverpassQueryList extends SearchTextResultListPanel<OverpassQ
      * Constructs a new {@code OverpassQueryList}.
      * @param parent The parent of this component.
      * @param target The text component to which the queries must be added.
+     * @param preferenceKey The {@linkplain org.openstreetmap.josm.spi.preferences.IPreferences preference} key to store the user queries
      */
-    public OverpassQueryList(Component parent, JTextComponent target) {
+    public UserQueryList(Component parent, JTextComponent target, String preferenceKey) {
         this.target = target;
         this.componentParent = parent;
+        this.preferenceKey = preferenceKey;
         this.items = restorePreferences();
 
-        OverpassQueryListMouseAdapter mouseHandler = new OverpassQueryListMouseAdapter(lsResult, lsResultModel);
-        super.lsResult.setCellRenderer(new OverpassQueryCellRendered());
+        QueryListMouseAdapter mouseHandler = new QueryListMouseAdapter(lsResult, lsResultModel);
+        super.lsResult.setCellRenderer(new QueryCellRendered());
         super.setDblClickListener(e -> doubleClickEvent());
         super.lsResult.addMouseListener(mouseHandler);
         super.lsResult.addMouseMotionListener(mouseHandler);
@@ -243,7 +247,7 @@ public final class OverpassQueryList extends SearchTextResultListPanel<OverpassQ
      * Saves all elements from the list to {@link Main#pref}.
      */
     private void savePreferences() {
-        Collection<Map<String, String>> toSave = new ArrayList<>(this.items.size());
+        List<Map<String, String>> toSave = new ArrayList<>(this.items.size());
         for (SelectorItem item : this.items.values()) {
             Map<String, String> it = new HashMap<>();
             it.put(KEY_KEY, item.getKey());
@@ -253,16 +257,16 @@ public final class OverpassQueryList extends SearchTextResultListPanel<OverpassQ
             toSave.add(it);
         }
 
-        Main.pref.putListOfStructs(PREFERENCE_ITEMS, toSave);
+        Config.getPref().putListOfMaps(preferenceKey, toSave);
     }
 
     /**
      * Loads the user saved items from {@link Main#pref}.
      * @return A set of the user saved items.
      */
-    private static Map<String, SelectorItem> restorePreferences() {
+    private Map<String, SelectorItem> restorePreferences() {
         Collection<Map<String, String>> toRetrieve =
-                Main.pref.getListOfStructs(PREFERENCE_ITEMS, Collections.emptyList());
+                Config.getPref().getListOfMaps(preferenceKey, Collections.emptyList());
         Map<String, SelectorItem> result = new HashMap<>();
 
         for (Map<String, String> entry : toRetrieve) {
@@ -283,14 +287,14 @@ public final class OverpassQueryList extends SearchTextResultListPanel<OverpassQ
         return result;
     }
 
-    private class OverpassQueryListMouseAdapter extends MouseAdapter {
+    private class QueryListMouseAdapter extends MouseAdapter {
 
         private final JList<SelectorItem> list;
         private final ResultListModel<SelectorItem> model;
         private final JPopupMenu emptySelectionPopup = new JPopupMenu();
         private final JPopupMenu elementPopup = new JPopupMenu();
 
-        OverpassQueryListMouseAdapter(JList<SelectorItem> list, ResultListModel<SelectorItem> listModel) {
+        QueryListMouseAdapter(JList<SelectorItem> list, ResultListModel<SelectorItem> listModel) {
             this.list = list;
             this.model = listModel;
 
@@ -370,9 +374,9 @@ public final class OverpassQueryList extends SearchTextResultListPanel<OverpassQ
     /**
      * This class defines the way each element is rendered in the list.
      */
-    private static class OverpassQueryCellRendered extends JLabel implements ListCellRenderer<SelectorItem> {
+    private static class QueryCellRendered extends JLabel implements ListCellRenderer<SelectorItem> {
 
-        OverpassQueryCellRendered() {
+        QueryCellRendered() {
             setOpaque(true);
         }
 
@@ -548,7 +552,7 @@ public final class OverpassQueryList extends SearchTextResultListPanel<OverpassQ
 
     /**
      * This class represents an Overpass query used by the user that can be
-     * shown within {@link OverpassQueryList}.
+     * shown within {@link UserQueryList}.
      */
     public static class SelectorItem {
         private final String itemKey;
@@ -600,8 +604,8 @@ public final class OverpassQueryList extends SearchTextResultListPanel<OverpassQ
         }
 
         /**
-         * Gets the overpass query of this item.
-         * @return A string representing the overpass query of this item.
+         * Gets the query of this item.
+         * @return A string representing the query of this item.
          */
         public String getQuery() {
             return this.query;
diff --git a/src/org/openstreetmap/josm/gui/help/HelpUtil.java b/src/org/openstreetmap/josm/gui/help/HelpUtil.java
index 9c50d40..e953850 100644
--- a/src/org/openstreetmap/josm/gui/help/HelpUtil.java
+++ b/src/org/openstreetmap/josm/gui/help/HelpUtil.java
@@ -13,6 +13,7 @@ import javax.swing.KeyStroke;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.HelpAction;
 import org.openstreetmap.josm.gui.MainApplication;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.LanguageInfo;
 import org.openstreetmap.josm.tools.LanguageInfo.LocaleType;
 
@@ -32,7 +33,7 @@ public final class HelpUtil {
      * @return the base wiki URL
      */
     public static String getWikiBaseUrl() {
-        return Main.pref.get("help.baseurl", Main.getJOSMWebsite());
+        return Config.getPref().get("help.baseurl", Main.getJOSMWebsite());
     }
 
     /**
@@ -131,7 +132,7 @@ public final class HelpUtil {
         String ret = LanguageInfo.getWikiLanguagePrefix(type);
         if (ret == null)
             return ret;
-        ret = '/' + ret + Main.pref.get("help.pathhelp", "/Help").replaceAll("^\\/+", ""); // remove leading /
+        ret = '/' + ret + Config.getPref().get("help.pathhelp", "/Help").replaceAll("^\\/+", ""); // remove leading /
         return ret.replaceAll("\\/+", "\\/"); // collapse sequences of //
     }
 
diff --git a/src/org/openstreetmap/josm/gui/history/CoordinateInfoViewer.java b/src/org/openstreetmap/josm/gui/history/CoordinateInfoViewer.java
index eb53b16..8bb96c7 100644
--- a/src/org/openstreetmap/josm/gui/history/CoordinateInfoViewer.java
+++ b/src/org/openstreetmap/josm/gui/history/CoordinateInfoViewer.java
@@ -19,8 +19,8 @@ import javax.swing.event.ChangeListener;
 import org.openstreetmap.gui.jmapviewer.JMapViewer;
 import org.openstreetmap.gui.jmapviewer.MapMarkerDot;
 import org.openstreetmap.gui.jmapviewer.tilesources.OsmTileSource;
-import org.openstreetmap.josm.data.coor.CoordinateFormat;
 import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.coor.conversion.DecimalDegreesCoordinateFormat;
 import org.openstreetmap.josm.data.osm.history.HistoryNode;
 import org.openstreetmap.josm.data.osm.history.HistoryOsmPrimitive;
 import org.openstreetmap.josm.gui.NavigatableComponent;
@@ -307,8 +307,8 @@ public class CoordinateInfoViewer extends JPanel {
             final LatLon oppositeCoord = coordinates.b;
 
             // 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)"));
+            lblLat.setText(coord != null ? DecimalDegreesCoordinateFormat.INSTANCE.latToString(coord) : tr("(none)"));
+            lblLon.setText(coord != null ? DecimalDegreesCoordinateFormat.INSTANCE.lonToString(coord) : tr("(none)"));
 
             // update background color to reflect differences in the coordinates
             if (coord == oppositeCoord ||
diff --git a/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java b/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java
index 3299a3f..91d39ba 100644
--- a/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java
+++ b/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java
@@ -10,6 +10,7 @@ import javax.swing.JTable;
 import javax.swing.table.TableModel;
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.UserIdentityManager;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
@@ -33,8 +34,7 @@ import org.openstreetmap.josm.data.osm.history.HistoryNode;
 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.data.osm.visitor.AbstractVisitor;
-import org.openstreetmap.josm.gui.JosmUserIdentityManager;
+import org.openstreetmap.josm.data.osm.visitor.OsmPrimitiveVisitor;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeEvent;
@@ -644,7 +644,7 @@ public class HistoryBrowserModel extends ChangeNotifier implements ActiveLayerCh
      * Creates a {@link HistoryOsmPrimitive} from a {@link OsmPrimitive}
      *
      */
-    static class HistoryPrimitiveBuilder extends AbstractVisitor {
+    static class HistoryPrimitiveBuilder implements OsmPrimitiveVisitor {
         private HistoryOsmPrimitive clone;
 
         @Override
@@ -673,7 +673,7 @@ public class HistoryBrowserModel extends ChangeNotifier implements ActiveLayerCh
         }
 
         private static User getCurrentUser() {
-            UserInfo info = JosmUserIdentityManager.getInstance().getUserInfo();
+            UserInfo info = UserIdentityManager.getInstance().getUserInfo();
             return info == null ? User.getAnonymous() : User.createOsmUser(info.getId(), info.getDisplayName());
         }
 
diff --git a/src/org/openstreetmap/josm/gui/history/HistoryLoadTask.java b/src/org/openstreetmap/josm/gui/history/HistoryLoadTask.java
index 128f415..7169277 100644
--- a/src/org/openstreetmap/josm/gui/history/HistoryLoadTask.java
+++ b/src/org/openstreetmap/josm/gui/history/HistoryLoadTask.java
@@ -80,7 +80,7 @@ public class HistoryLoadTask extends PleaseWaitRunnable {
      * @return this task
      */
     public HistoryLoadTask add(PrimitiveId pid) {
-        CheckParameterUtil.ensureValidPrimitiveId(pid, "pid");
+        CheckParameterUtil.ensure(pid, "pid", "pid > 0", id -> id.getUniqueId() > 0);
         toLoad.add(pid);
         return this;
     }
@@ -118,7 +118,7 @@ public class HistoryLoadTask extends PleaseWaitRunnable {
      * @throws IllegalArgumentException if primitive.getId() <= 0
      */
     public HistoryLoadTask add(OsmPrimitive primitive) {
-        CheckParameterUtil.ensureValidPrimitiveId(primitive, "primitive");
+        CheckParameterUtil.ensure(primitive, "primitive", "id > 0", prim -> prim.getUniqueId() > 0);
         return add(primitive.getPrimitiveId());
     }
 
diff --git a/src/org/openstreetmap/josm/gui/history/OpenChangesetPopupMenu.java b/src/org/openstreetmap/josm/gui/history/OpenChangesetPopupMenu.java
new file mode 100644
index 0000000..db4ec4a
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/history/OpenChangesetPopupMenu.java
@@ -0,0 +1,101 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.history;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.Rectangle;
+import java.awt.event.ActionEvent;
+import java.text.MessageFormat;
+import java.util.Arrays;
+import java.util.List;
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.JComponent;
+import javax.swing.JPopupMenu;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.StructUtils;
+import org.openstreetmap.josm.data.StructUtils.StructEntry;
+import org.openstreetmap.josm.spi.preferences.Config;
+import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.OpenBrowser;
+
+/**
+ * A menu displaying links to external history viewers for a changeset.
+ *
+ * @since 12871
+ */
+public class OpenChangesetPopupMenu extends JPopupMenu {
+
+    /**
+     * Constructs a new {@code OpenChangesetPopupMenu} for the given changeset id.
+     *
+     * @param changesetId the changeset id
+     */
+    public OpenChangesetPopupMenu(final long changesetId) {
+        StructUtils.getListOfStructs(Config.getPref(), "history-dialog.tools", DEFAULT_ENTRIES, ChangesetViewerEntry.class)
+                .stream()
+                .map(entry -> entry.toAction(changesetId))
+                .forEach(this::add);
+    }
+
+    /**
+     * Displays the popup menu at the lower-left corner of {@code parent}.
+     *
+     * @param parent the parent component to use for positioning this menu
+     */
+    public void show(final JComponent parent) {
+        final Rectangle r = parent.getBounds();
+        show(parent.getParent(), r.x, r.y + r.height);
+    }
+
+    private static final List<ChangesetViewerEntry> DEFAULT_ENTRIES = Arrays.asList(
+            new ChangesetViewerEntry(tr("View changeset in web browser"), Main.getBaseBrowseUrl() + "/changeset/{0}"),
+            new ChangesetViewerEntry(tr("Open {0}", "OSM History Viewer"), "http://osmhv.openstreetmap.de/changeset.jsp?id={0}"),
+            new ChangesetViewerEntry(tr("Open {0}", "achavi (Augmented OSM Change Viewer)"), "https://overpass-api.de/achavi/?changeset={0}"),
+            new ChangesetViewerEntry(tr("Open {0}", "OSMCha (OSM Changeset Analyzer)"), "https://osmcha.mapbox.com/changesets/{0}")
+    );
+
+    /**
+     * Auxiliary class to save a link to a history viewer in the preferences.
+     */
+    public static class ChangesetViewerEntry {
+        @StructEntry
+        public String name;
+        @StructEntry
+        public String url;
+
+        /**
+         * Constructs a new {@code ChangesetViewerEntry}.
+         */
+        public ChangesetViewerEntry() {
+        }
+
+        ChangesetViewerEntry(String name, String url) {
+            this.name = name;
+            this.url = url;
+        }
+
+        Action toAction(final long changesetId) {
+            final String url = MessageFormat.format(this.url, Long.toString(changesetId));
+            return new OpenBrowserAction(name, url);
+        }
+    }
+
+    static class OpenBrowserAction extends AbstractAction {
+        final String url;
+
+        OpenBrowserAction(String name, String url) {
+            super(name);
+            putValue(SHORT_DESCRIPTION, tr("Open {0}", url));
+            new ImageProvider("help/internet").getResource().attachImageIcon(this, true);
+            this.url = url;
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            OpenBrowser.displayUrl(url);
+        }
+    }
+}
diff --git a/src/org/openstreetmap/josm/gui/history/VersionInfoPanel.java b/src/org/openstreetmap/josm/gui/history/VersionInfoPanel.java
index 7c0d4ad..b526c1a 100644
--- a/src/org/openstreetmap/josm/gui/history/VersionInfoPanel.java
+++ b/src/org/openstreetmap/josm/gui/history/VersionInfoPanel.java
@@ -15,6 +15,7 @@ import java.util.Collections;
 import java.util.Date;
 
 import javax.swing.AbstractAction;
+import javax.swing.AbstractButton;
 import javax.swing.JButton;
 import javax.swing.JComponent;
 import javax.swing.JLabel;
@@ -22,13 +23,14 @@ import javax.swing.JPanel;
 import javax.swing.JTextArea;
 import javax.swing.event.ChangeEvent;
 import javax.swing.event.ChangeListener;
+import javax.swing.plaf.basic.BasicArrowButton;
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.UserIdentityManager;
 import org.openstreetmap.josm.data.osm.Changeset;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.User;
 import org.openstreetmap.josm.data.osm.history.HistoryOsmPrimitive;
-import org.openstreetmap.josm.gui.JosmUserIdentityManager;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.dialogs.ChangesetDialog;
 import org.openstreetmap.josm.gui.dialogs.changeset.ChangesetCacheManager;
@@ -108,8 +110,18 @@ public class VersionInfoPanel extends JPanel implements ChangeListener {
         lblUser = new UrlLabel("", 2);
         pnlUserAndChangeset.add(lblUser, GBC.eol().insets(5, 0, 0, 0).weight(1, 0));
 
+        final JPanel changesetPanel = new JPanel(new BorderLayout());
         changesetButton.setMargin(new Insets(0, 0, 0, 2));
-        pnlUserAndChangeset.add(changesetButton, GBC.std().fill().weight(0, 0));
+        changesetPanel.add(changesetButton, BorderLayout.CENTER);
+        final BasicArrowButton arrowButton = new BasicArrowButton(BasicArrowButton.SOUTH);
+        arrowButton.addActionListener(action -> {
+            final OpenChangesetPopupMenu popupMenu = new OpenChangesetPopupMenu(changesetDialogAction.id);
+            popupMenu.insert(changesetDialogAction, 0);
+            ((AbstractButton) popupMenu.getComponent(0)).setText(tr("Open Changeset Manager"));
+            popupMenu.show(arrowButton);
+        });
+        changesetPanel.add(arrowButton, BorderLayout.EAST);
+        pnlUserAndChangeset.add(changesetPanel, GBC.std().fill().weight(0, 0));
 
         lblChangeset = new UrlLabel("", 2);
         pnlUserAndChangeset.add(lblChangeset, GBC.std().insets(5, 0, 0, 0).weight(1, 0));
@@ -255,7 +267,7 @@ public class VersionInfoPanel extends JPanel implements ChangeListener {
                 lblUser.setUrl(null);
             }
         } else {
-            String username = JosmUserIdentityManager.getInstance().getUserName();
+            String username = UserIdentityManager.getInstance().getUserName();
             if (username == null) {
                 lblUser.setDescription(tr("anonymous"));
                 lblUser.setUrl(null);
diff --git a/src/org/openstreetmap/josm/gui/history/VersionTable.java b/src/org/openstreetmap/josm/gui/history/VersionTable.java
index 4540fb0..7431e78 100644
--- a/src/org/openstreetmap/josm/gui/history/VersionTable.java
+++ b/src/org/openstreetmap/josm/gui/history/VersionTable.java
@@ -34,6 +34,7 @@ import org.openstreetmap.josm.data.osm.history.HistoryOsmPrimitive;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.widgets.PopupMenuLauncher;
 import org.openstreetmap.josm.io.XmlWriter;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.OpenBrowser;
 
@@ -340,7 +341,7 @@ public class VersionTable extends JTable implements ChangeListener {
         TableCellRenderer tcr = tbl.getTableHeader().getDefaultRenderer();
         Object val = tbl.getColumnModel().getColumn(col).getHeaderValue();
         Component comp = tcr.getTableCellRendererComponent(tbl, val, false, false, -1, col);
-        maxwidth = Math.max(comp.getPreferredSize().width + Main.pref.getInteger("table.header-inset", 0), maxwidth);
+        maxwidth = Math.max(comp.getPreferredSize().width + Config.getPref().getInt("table.header-inset", 0), maxwidth);
 
         int spacing = tbl.getIntercellSpacing().width;
         tbl.getColumnModel().getColumn(col).setPreferredWidth(maxwidth + spacing);
diff --git a/src/org/openstreetmap/josm/gui/io/ActionFlagsTableCell.java b/src/org/openstreetmap/josm/gui/io/ActionFlagsTableCell.java
index 1c27c9b..b0067dc 100644
--- a/src/org/openstreetmap/josm/gui/io/ActionFlagsTableCell.java
+++ b/src/org/openstreetmap/josm/gui/io/ActionFlagsTableCell.java
@@ -100,9 +100,7 @@ class ActionFlagsTableCell extends JPanel implements TableCellRenderer, TableCel
 
     @Override
     public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
-        updatePanel((SaveLayerInfo) value);
-        updateCheckboxes(value);
-        return this;
+        return getTableCellEditorComponent(table, value, isSelected, row, column);
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/gui/io/BasicUploadSettingsPanel.java b/src/org/openstreetmap/josm/gui/io/BasicUploadSettingsPanel.java
index 7dc0cba..22a521e 100644
--- a/src/org/openstreetmap/josm/gui/io/BasicUploadSettingsPanel.java
+++ b/src/org/openstreetmap/josm/gui/io/BasicUploadSettingsPanel.java
@@ -9,6 +9,7 @@ import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.FocusAdapter;
 import java.awt.event.FocusEvent;
+import java.awt.event.ItemEvent;
 import java.awt.event.KeyAdapter;
 import java.awt.event.KeyEvent;
 import java.util.Arrays;
@@ -19,17 +20,18 @@ import java.util.concurrent.TimeUnit;
 
 import javax.swing.Action;
 import javax.swing.BorderFactory;
+import javax.swing.JCheckBox;
 import javax.swing.JEditorPane;
 import javax.swing.JPanel;
 import javax.swing.event.ChangeEvent;
 import javax.swing.event.ChangeListener;
 import javax.swing.event.HyperlinkEvent;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.Changeset;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.widgets.HistoryComboBox;
 import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.Utils;
@@ -61,9 +63,12 @@ public class BasicUploadSettingsPanel extends JPanel {
     private final HistoryComboBox hcbUploadSource = new HistoryComboBox();
     /** the panel with a summary of the upload parameters */
     private final UploadParameterSummaryPanel pnlUploadParameterSummary = new UploadParameterSummaryPanel();
+    /** the checkbox to request feedback from other users */
+    private final JCheckBox cbRequestReview = new JCheckBox(tr("I would like someone to review my edits."));
     /** the changeset comment model */
     private final transient ChangesetCommentModel changesetCommentModel;
     private final transient ChangesetCommentModel changesetSourceModel;
+    private final transient ChangesetReviewModel changesetReviewModel;
 
     protected JPanel buildUploadCommentPanel() {
         JPanel pnl = new JPanel(new GridBagLayout());
@@ -72,7 +77,7 @@ public class BasicUploadSettingsPanel extends JPanel {
         pnl.add(commentLabel, GBC.eol().insets(0, 5, 10, 3).fill(GBC.HORIZONTAL));
         hcbUploadComment.setToolTipText(tr("Enter an upload comment"));
         hcbUploadComment.setMaxTextLength(Changeset.MAX_CHANGESET_TAG_LENGTH);
-        List<String> cmtHistory = new LinkedList<>(Main.pref.getCollection(HISTORY_KEY, new LinkedList<String>()));
+        List<String> cmtHistory = new LinkedList<>(Config.getPref().getList(HISTORY_KEY, new LinkedList<String>()));
         Collections.reverse(cmtHistory); // we have to reverse the history, because ComboBoxHistory will reverse it again in addElement()
         hcbUploadComment.setPossibleItems(cmtHistory);
         CommentModelListener commentModelListener = new CommentModelListener(hcbUploadComment, changesetCommentModel);
@@ -94,7 +99,7 @@ public class BasicUploadSettingsPanel extends JPanel {
 
         hcbUploadSource.setToolTipText(tr("Enter a source"));
         hcbUploadSource.setMaxTextLength(Changeset.MAX_CHANGESET_TAG_LENGTH);
-        List<String> sourceHistory = new LinkedList<>(Main.pref.getCollection(SOURCE_HISTORY_KEY, getDefaultSources()));
+        List<String> sourceHistory = new LinkedList<>(Config.getPref().getList(SOURCE_HISTORY_KEY, getDefaultSources()));
         Collections.reverse(sourceHistory); // we have to reverse the history, because ComboBoxHistory will reverse it again in addElement()
         hcbUploadSource.setPossibleItems(sourceHistory);
         CommentModelListener sourceModelListener = new CommentModelListener(hcbUploadSource, changesetSourceModel);
@@ -117,6 +122,8 @@ public class BasicUploadSettingsPanel extends JPanel {
         setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
         add(buildUploadCommentPanel(), BorderLayout.NORTH);
         add(pnlUploadParameterSummary, BorderLayout.CENTER);
+        add(cbRequestReview, BorderLayout.SOUTH);
+        cbRequestReview.addItemListener(e -> changesetReviewModel.setReviewRequested(e.getStateChange() == ItemEvent.SELECTED));
     }
 
     /**
@@ -124,15 +131,21 @@ public class BasicUploadSettingsPanel extends JPanel {
      *
      * @param changesetCommentModel the model for the changeset comment. Must not be null
      * @param changesetSourceModel the model for the changeset source. Must not be null.
+     * @param changesetReviewModel the model for the changeset review. Must not be null.
      * @throws IllegalArgumentException if {@code changesetCommentModel} is null
+     * @since 12719 (signature)
      */
-    public BasicUploadSettingsPanel(ChangesetCommentModel changesetCommentModel, ChangesetCommentModel changesetSourceModel) {
+    public BasicUploadSettingsPanel(ChangesetCommentModel changesetCommentModel, ChangesetCommentModel changesetSourceModel,
+            ChangesetReviewModel changesetReviewModel) {
         CheckParameterUtil.ensureParameterNotNull(changesetCommentModel, "changesetCommentModel");
         CheckParameterUtil.ensureParameterNotNull(changesetSourceModel, "changesetSourceModel");
+        CheckParameterUtil.ensureParameterNotNull(changesetReviewModel, "changesetReviewModel");
         this.changesetCommentModel = changesetCommentModel;
         this.changesetSourceModel = changesetSourceModel;
+        this.changesetReviewModel = changesetReviewModel;
         changesetCommentModel.addChangeListener(new ChangesetCommentChangeListener(hcbUploadComment));
         changesetSourceModel.addChangeListener(new ChangesetCommentChangeListener(hcbUploadSource));
+        changesetReviewModel.addChangeListener(new ChangesetReviewChangeListener());
         build();
     }
 
@@ -152,11 +165,11 @@ public class BasicUploadSettingsPanel extends JPanel {
     public void rememberUserInput() {
         // store the history of comments
         hcbUploadComment.addCurrentItemToHistory();
-        Main.pref.putCollection(HISTORY_KEY, hcbUploadComment.getHistory());
-        Main.pref.putInteger(HISTORY_LAST_USED_KEY, (int) (TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis())));
+        Config.getPref().putList(HISTORY_KEY, hcbUploadComment.getHistory());
+        Config.getPref().putInt(HISTORY_LAST_USED_KEY, (int) (TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis())));
         // store the history of sources
         hcbUploadSource.addCurrentItemToHistory();
-        Main.pref.putCollection(SOURCE_HISTORY_KEY, hcbUploadSource.getHistory());
+        Config.getPref().putList(SOURCE_HISTORY_KEY, hcbUploadSource.getHistory());
     }
 
     /**
@@ -249,4 +262,19 @@ public class BasicUploadSettingsPanel extends JPanel {
             }
         }
     }
+
+    /**
+     * Observes the changeset review model and keeps the review checkbox
+     * in sync with the current changeset review request
+     */
+    class ChangesetReviewChangeListener implements ChangeListener {
+        @Override
+        public void stateChanged(ChangeEvent e) {
+            if (!(e.getSource() instanceof ChangesetReviewModel)) return;
+            boolean newState = ((ChangesetReviewModel) e.getSource()).isReviewRequested();
+            if (cbRequestReview.isSelected() != newState) {
+                cbRequestReview.setSelected(newState);
+            }
+        }
+    }
 }
diff --git a/src/org/openstreetmap/josm/gui/io/ChangesetManagementPanel.java b/src/org/openstreetmap/josm/gui/io/ChangesetManagementPanel.java
index 2523fba..f18f08c 100644
--- a/src/org/openstreetmap/josm/gui/io/ChangesetManagementPanel.java
+++ b/src/org/openstreetmap/josm/gui/io/ChangesetManagementPanel.java
@@ -22,12 +22,12 @@ import javax.swing.JRadioButton;
 import javax.swing.event.ListDataEvent;
 import javax.swing.event.ListDataListener;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.Changeset;
 import org.openstreetmap.josm.data.osm.ChangesetCache;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
 import org.openstreetmap.josm.gui.widgets.JosmComboBox;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.ImageProvider;
 
@@ -155,7 +155,7 @@ public class ChangesetManagementPanel extends JPanel implements ListDataListener
         cbCloseAfterUpload = new JCheckBox(tr("Close changeset after upload"));
         cbCloseAfterUpload.setToolTipText(tr("Select to close the changeset after the next upload"));
         add(cbCloseAfterUpload, gc);
-        cbCloseAfterUpload.setSelected(Main.pref.getBoolean("upload.changeset.close", true));
+        cbCloseAfterUpload.setSelected(Config.getPref().getBoolean("upload.changeset.close", true));
         cbCloseAfterUpload.addItemListener(new CloseAfterUploadItemStateListener());
 
         gc.gridx = 0;
@@ -255,11 +255,11 @@ public class ChangesetManagementPanel extends JPanel implements ListDataListener
             switch(e.getStateChange()) {
             case ItemEvent.SELECTED:
                 firePropertyChange(CLOSE_CHANGESET_AFTER_UPLOAD, false, true);
-                Main.pref.put("upload.changeset.close", true);
+                Config.getPref().putBoolean("upload.changeset.close", true);
                 break;
             case ItemEvent.DESELECTED:
                 firePropertyChange(CLOSE_CHANGESET_AFTER_UPLOAD, true, false);
-                Main.pref.put("upload.changeset.close", false);
+                Config.getPref().putBoolean("upload.changeset.close", false);
                 break;
             default: // Do nothing
             }
diff --git a/src/org/openstreetmap/josm/gui/io/ChangesetReviewModel.java b/src/org/openstreetmap/josm/gui/io/ChangesetReviewModel.java
new file mode 100644
index 0000000..353694e
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/io/ChangesetReviewModel.java
@@ -0,0 +1,35 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.io;
+
+import org.openstreetmap.josm.gui.util.ChangeNotifier;
+
+/**
+ * ChangesetReviewModel is an observable model for the changeset review requested
+ * in the {@link UploadDialog}.
+ * @since 12719
+ */
+public class ChangesetReviewModel extends ChangeNotifier {
+    private boolean review;
+
+    /**
+     * Sets the current changeset review request state and notifies observers if it has changed.
+     *
+     * @param review the new review request state
+     */
+    public void setReviewRequested(boolean review) {
+        boolean oldValue = this.review;
+        this.review = review;
+        if (oldValue != this.review) {
+            fireStateChanged();
+        }
+    }
+
+    /**
+     * Determines if a changeset review has been requested.
+     *
+     * @return {@code true} if a changeset review has been requested
+     */
+    public boolean isReviewRequested() {
+        return review;
+    }
+}
diff --git a/src/org/openstreetmap/josm/gui/io/CredentialDialog.java b/src/org/openstreetmap/josm/gui/io/CredentialDialog.java
index 88e0d1e..fa45462 100644
--- a/src/org/openstreetmap/josm/gui/io/CredentialDialog.java
+++ b/src/org/openstreetmap/josm/gui/io/CredentialDialog.java
@@ -17,6 +17,7 @@ import java.awt.event.KeyAdapter;
 import java.awt.event.KeyEvent;
 import java.awt.event.WindowAdapter;
 import java.awt.event.WindowEvent;
+import java.net.Authenticator.RequestorType;
 import java.util.Objects;
 
 import javax.swing.AbstractAction;
@@ -31,12 +32,16 @@ import org.openstreetmap.josm.Main;
 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.preferences.server.ProxyPreferencesPanel;
+import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.util.WindowGeometry;
 import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
 import org.openstreetmap.josm.gui.widgets.JosmPasswordField;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
+import org.openstreetmap.josm.io.DefaultProxySelector;
 import org.openstreetmap.josm.io.OsmApi;
+import org.openstreetmap.josm.io.auth.AbstractCredentialsAgent;
+import org.openstreetmap.josm.io.auth.CredentialsAgentResponse;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.InputMapUtils;
 import org.openstreetmap.josm.tools.Logging;
@@ -69,6 +74,36 @@ public class CredentialDialog extends JDialog {
         return dialog;
     }
 
+    /**
+     * Prompts the user (in the EDT) for credentials and fills the given response with what has been entered.
+     * @param requestorType type of the entity requesting authentication
+     * @param agent the credentials agent requesting credentials
+     * @param response authentication response to fill
+     * @param username the known username, if any. Likely to be empty
+     * @param password the known password, if any. Likely to be empty
+     * @param host the host against authentication will be performed
+     * @since 12821
+     */
+    public static void promptCredentials(RequestorType requestorType, AbstractCredentialsAgent agent, CredentialsAgentResponse response,
+            String username, String password, String host) {
+        GuiHelper.runInEDTAndWait(() -> {
+            CredentialDialog dialog;
+            if (requestorType.equals(RequestorType.PROXY))
+                dialog = getHttpProxyCredentialDialog(
+                        username, password, host, agent.getSaveUsernameAndPasswordCheckboxText());
+            else
+                dialog = getOsmApiCredentialDialog(
+                        username, password, host, agent.getSaveUsernameAndPasswordCheckboxText());
+            dialog.setVisible(true);
+            response.setCanceled(dialog.isCanceled());
+            if (dialog.isCanceled())
+                return;
+            response.setUsername(dialog.getUsername());
+            response.setPassword(dialog.getPassword());
+            response.setSaveCredentials(dialog.isSaveCredentials());
+        });
+    }
+
     private boolean canceled;
     protected CredentialPanel pnlCredentials;
     private final String saveUsernameAndPasswordCheckboxText;
@@ -320,10 +355,10 @@ public class CredentialDialog extends JDialog {
             super.build();
             tfUserName.setToolTipText(tr("Please enter the user name for authenticating at your proxy server"));
             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>");
+            lblHeading.setText("<html>" +
+                    tr("Authenticating at the HTTP proxy ''{0}'' failed. Please enter a valid username and a valid password.",
+                            Config.getPref().get(DefaultProxySelector.PROXY_HTTP_HOST) + ':' +
+                            Config.getPref().get(DefaultProxySelector.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>");
diff --git a/src/org/openstreetmap/josm/gui/io/CustomConfigurator.java b/src/org/openstreetmap/josm/gui/io/CustomConfigurator.java
index 0500a1a..d95dcc8 100644
--- a/src/org/openstreetmap/josm/gui/io/CustomConfigurator.java
+++ b/src/org/openstreetmap/josm/gui/io/CustomConfigurator.java
@@ -44,11 +44,12 @@ import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Preferences;
 import org.openstreetmap.josm.data.PreferencesUtils;
 import org.openstreetmap.josm.data.Version;
-import org.openstreetmap.josm.data.preferences.Setting;
+import org.openstreetmap.josm.spi.preferences.Setting;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.plugins.PluginDownloadTask;
 import org.openstreetmap.josm.plugins.PluginInformation;
 import org.openstreetmap.josm.plugins.ReadLocalPluginInformationTask;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.LanguageInfo;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
@@ -65,8 +66,6 @@ import org.xml.sax.SAXException;
  */
 public final class CustomConfigurator {
 
-    private static StringBuilder summary = new StringBuilder();
-
     private CustomConfigurator() {
         // Hide default constructor for utils classes
     }
@@ -76,17 +75,21 @@ public final class CustomConfigurator {
      * @param fmt format
      * @param vars arguments
      * @see String#format
+     * @deprecated to be removed end of 2017. Use {@link PreferencesUtils#log(String, Object...)} instead
      */
+    @Deprecated
     public static void log(String fmt, Object... vars) {
-        summary.append(String.format(fmt, vars));
+        PreferencesUtils.log(fmt, vars);
     }
 
     /**
      * Log a message.
      * @param s message to log
+     * @deprecated to be removed end of 2017. Use {@link PreferencesUtils#log(String)} instead
      */
+    @Deprecated
     public static void log(String s) {
-        summary.append(s).append('\n');
+        PreferencesUtils.log(s);
     }
 
     /**
@@ -94,24 +97,30 @@ public final class CustomConfigurator {
      * @param e exception to log
      * @param s message prefix
      * @since 10469
+     * @deprecated to be removed end of 2017. Use {@link PreferencesUtils#log(Exception, String)} instead
      */
+    @Deprecated
     public static void log(Exception e, String s) {
-        summary.append(s).append(' ').append(Logging.getErrorMessage(e)).append('\n');
+        PreferencesUtils.log(e, s);
     }
 
     /**
      * Returns the log.
      * @return the log
+     * @deprecated to be removed end of 2017. Use {@link PreferencesUtils#getLog()} instead
      */
+    @Deprecated
     public static String getLog() {
-        return summary.toString();
+        return PreferencesUtils.getLog();
     }
 
     /**
      * Resets the log.
+     * @deprecated to be removed end of 2017. Use {@link PreferencesUtils#resetLog()} instead
      */
+    @Deprecated
     public static void resetLog() {
-        summary = new StringBuilder();
+        PreferencesUtils.resetLog();
     }
 
     /**
@@ -184,8 +193,8 @@ public final class CustomConfigurator {
         DownloadFileTask downloadFileTask = new DownloadFileTask(Main.parent, address, fOut, mkdir, unzip);
 
         MainApplication.worker.submit(downloadFileTask);
-        log("Info: downloading file from %s to %s in background ", parentDir, fOut.getAbsolutePath());
-        if (unzip) log("and unpacking it"); else log("");
+        PreferencesUtils.log("Info: downloading file from %s to %s in background ", parentDir, fOut.getAbsolutePath());
+        if (unzip) PreferencesUtils.log("and unpacking it"); else PreferencesUtils.log("");
 
     }
 
@@ -314,10 +323,10 @@ public final class CustomConfigurator {
     public static void deleteFile(String path, String base) {
         String dir = getDirectoryByAbbr(base);
         if (dir == null) {
-            log("Error: Can not find base, use base=cache, base=prefs or base=plugins attribute.");
+            PreferencesUtils.log("Error: Can not find base, use base=cache, base=prefs or base=plugins attribute.");
             return;
         }
-        log("Delete file: %s\n", path);
+        PreferencesUtils.log("Delete file: %s\n", path);
         if (path.contains("..") || path.startsWith("/") || path.contains(":")) {
             return; // some basic protection
         }
@@ -337,7 +346,7 @@ public final class CustomConfigurator {
             }
         }
         if (!Utils.deleteFile(f)) {
-            log("Warning: Can not delete file "+f.getPath());
+            PreferencesUtils.log("Warning: Can not delete file "+f.getPath());
         }
     }
 
@@ -355,13 +364,13 @@ public final class CustomConfigurator {
         deleteList.remove("");
 
         if (!installList.isEmpty()) {
-            log("Plugins install: "+installList);
+            PreferencesUtils.log("Plugins install: "+installList);
         }
         if (!removeList.isEmpty()) {
-            log("Plugins turn off: "+removeList);
+            PreferencesUtils.log("Plugins turn off: "+removeList);
         }
         if (!deleteList.isEmpty()) {
-            log("Plugins delete: "+deleteList);
+            PreferencesUtils.log("Plugins delete: "+deleteList);
         }
 
         final ReadLocalPluginInformationTask task = new ReadLocalPluginInformationTask();
@@ -391,7 +400,7 @@ public final class CustomConfigurator {
                                 new PluginDownloadTask(Main.parent, toInstallPlugins, tr("Installing plugins"));
                         MainApplication.worker.submit(pluginDownloadTask);
                     }
-                    Collection<String> pls = new ArrayList<>(Main.pref.getCollection("plugins"));
+                    List<String> pls = new ArrayList<>(Config.getPref().getList("plugins"));
                     for (PluginInformation pi2: toInstallPlugins) {
                         if (!pls.contains(pi2.name)) {
                             pls.add(pi2.name);
@@ -404,7 +413,7 @@ public final class CustomConfigurator {
                         pls.remove(pi4.name);
                         new File(Main.pref.getPluginsDirectory(), pi4.name+".jar").deleteOnExit();
                     }
-                    Main.pref.putCollection("plugins", pls);
+                    Config.getPref().putList("plugins", pls);
                 });
             }
         };
@@ -415,9 +424,9 @@ public final class CustomConfigurator {
     private static String getDirectoryByAbbr(String base) {
         String dir;
         if ("prefs".equals(base) || base.isEmpty()) {
-            dir = Main.pref.getPreferencesDirectory().getAbsolutePath();
+            dir = Config.getDirs().getPreferencesDirectory(false).getAbsolutePath();
         } else if ("cache".equals(base)) {
-            dir = Main.pref.getCacheDirectory().getAbsolutePath();
+            dir = Config.getDirs().getCacheDirectory(false).getAbsolutePath();
         } else if ("plugins".equals(base)) {
             dir = Main.pref.getPluginsDirectory().getAbsolutePath();
         } else {
@@ -436,7 +445,7 @@ public final class CustomConfigurator {
         private ScriptEngine engine;
 
         public void openAndReadXML(File file) {
-            log("-- Reading custom preferences from " + file.getAbsolutePath() + " --");
+            PreferencesUtils.log("-- Reading custom preferences from " + file.getAbsolutePath() + " --");
             try {
                 String fileDir = file.getParentFile().getAbsolutePath();
                 if (fileDir != null) engine.eval("scriptDir='"+normalizeDirName(fileDir) +"';");
@@ -444,7 +453,7 @@ public final class CustomConfigurator {
                     openAndReadXML(is);
                 }
             } catch (ScriptException | IOException | SecurityException ex) {
-                log(ex, "Error reading custom preferences:");
+                PreferencesUtils.log(ex, "Error reading custom preferences:");
             }
         }
 
@@ -455,19 +464,19 @@ public final class CustomConfigurator {
                     processXML(document);
                 }
             } catch (SAXException | IOException | ParserConfigurationException ex) {
-                log(ex, "Error reading custom preferences:");
+                PreferencesUtils.log(ex, "Error reading custom preferences:");
             }
-            log("-- Reading complete --");
+            PreferencesUtils.log("-- Reading complete --");
         }
 
         public XMLCommandProcessor(Preferences mainPrefs) {
             try {
                 this.mainPrefs = mainPrefs;
-                resetLog();
+                PreferencesUtils.resetLog();
                 engine = new ScriptEngineManager().getEngineByName("JavaScript");
                 engine.eval("API={}; API.pref={}; API.fragments={};");
 
-                engine.eval("homeDir='"+normalizeDirName(Main.pref.getPreferencesDirectory().getAbsolutePath()) +"';");
+                engine.eval("homeDir='"+normalizeDirName(Config.getDirs().getPreferencesDirectory(false).getAbsolutePath()) +"';");
                 engine.eval("josmVersion="+Version.getInstance().getVersion()+';');
                 String className = CustomConfigurator.class.getName();
                 engine.eval("API.messageBox="+className+".messageBox");
@@ -481,7 +490,7 @@ public final class CustomConfigurator {
                 engine.eval("API.pluginUninstall = function(names) { "+className+".pluginOperation('',names,'');}");
                 engine.eval("API.pluginDelete = function(names) { "+className+".pluginOperation('','',names);}");
             } catch (ScriptException ex) {
-                log("Error: initializing script engine: "+ex.getMessage());
+                PreferencesUtils.log("Error: initializing script engine: "+ex.getMessage());
                 Logging.error(ex);
             }
         }
@@ -539,7 +548,7 @@ public final class CustomConfigurator {
                     processScriptElement(elem);
                     break;
                 default:
-                    log("Error: Unknown element " + elementName);
+                    PreferencesUtils.log("Error: Unknown element " + elementName);
                 }
             }
         }
@@ -566,16 +575,16 @@ public final class CustomConfigurator {
                     PreferencesUtils.loadPrefsToJS(engine, tmpPref, fragmentVar, false);
                     // we store this fragment as API.fragments['id']
                 } catch (ScriptException ex) {
-                    log(ex, "Error: can not load preferences fragment:");
+                    PreferencesUtils.log(ex, "Error: can not load preferences fragment:");
                 }
             }
 
             if ("replace".equals(oper)) {
-                log("Preferences replace: %d keys: %s\n",
+                PreferencesUtils.log("Preferences replace: %d keys: %s\n",
                    tmpPref.getAllSettings().size(), tmpPref.getAllSettings().keySet().toString());
                 PreferencesUtils.replacePreferences(tmpPref, mainPrefs);
             } else if ("append".equals(oper)) {
-                log("Preferences append: %d keys: %s\n",
+                PreferencesUtils.log("Preferences append: %d keys: %s\n",
                    tmpPref.getAllSettings().size(), tmpPref.getAllSettings().keySet().toString());
                 PreferencesUtils.appendPreferences(tmpPref, mainPrefs);
             } else if ("delete-values".equals(oper)) {
@@ -593,7 +602,7 @@ public final class CustomConfigurator {
             String base = evalVars(item.getAttribute("base"));
             String dir = getDirectoryByAbbr(base);
             if (dir == null) {
-                log("Error: Can not find directory to place file, use base=cache, base=prefs or base=plugins attribute.");
+                PreferencesUtils.log("Error: Can not find directory to place file, use base=cache, base=prefs or base=plugins attribute.");
                 return;
             }
 
@@ -604,7 +613,7 @@ public final class CustomConfigurator {
 
             String address = evalVars(item.getAttribute("url"));
             if (address.isEmpty() || path.isEmpty()) {
-                log("Error: Please specify url=\"where to get file\" and path=\"where to place it\"");
+                PreferencesUtils.log("Error: Please specify url=\"where to get file\" and path=\"where to place it\"");
                 return;
             }
 
@@ -651,7 +660,7 @@ public final class CustomConfigurator {
             try {
                 engine.eval(name+"='"+value+"';");
             } catch (ScriptException ex) {
-                log(ex, String.format("Error: Can not assign variable: %s=%s :", name, value));
+                PreferencesUtils.log(ex, String.format("Error: Can not assign variable: %s=%s :", name, value));
             }
         }
 
@@ -662,7 +671,7 @@ public final class CustomConfigurator {
                 processXmlFragment(elem);
                 v = true;
             } else {
-                log("Error: Illegal test expression in if: %s=%s\n", elem.getAttribute("test"), realValue);
+                PreferencesUtils.log("Error: Illegal test expression in if: %s=%s\n", elem.getAttribute("test"), realValue);
             }
 
             lastV = v;
@@ -678,10 +687,10 @@ public final class CustomConfigurator {
             String taskName = elem.getAttribute("name");
             Element task = tasksMap.get(taskName);
             if (task != null) {
-                log("EXECUTING TASK "+taskName);
+                PreferencesUtils.log("EXECUTING TASK "+taskName);
                 processXmlFragment(task); // process task recursively
             } else {
-                log("Error: Can not execute task "+taskName);
+                PreferencesUtils.log("Error: Can not execute task "+taskName);
                 return true;
             }
             return false;
@@ -689,14 +698,14 @@ public final class CustomConfigurator {
 
         private void processScriptElement(Element elem) {
             String js = elem.getChildNodes().item(0).getTextContent();
-            log("Processing script...");
+            PreferencesUtils.log("Processing script...");
             try {
                 PreferencesUtils.modifyPreferencesByScript(engine, mainPrefs, js);
             } catch (ScriptException ex) {
                 messageBox("e", ex.getMessage());
-                log(ex, "JS error:");
+                PreferencesUtils.log(ex, "JS error:");
             }
-            log("Script finished");
+            PreferencesUtils.log("Script finished");
         }
 
         /**
@@ -712,7 +721,7 @@ public final class CustomConfigurator {
                     String result = engine.eval(mr.group(1)).toString();
                     mr.appendReplacement(sb, result);
                 } catch (ScriptException ex) {
-                    log(ex, String.format("Error: Can not evaluate expression %s :", mr.group(1)));
+                    PreferencesUtils.log(ex, String.format("Error: Can not evaluate expression %s :", mr.group(1)));
                 }
             }
             mr.appendTail(sb);
@@ -733,7 +742,7 @@ public final class CustomConfigurator {
                 CharArrayReader reader = new CharArrayReader(fragmentWithReplacedVars.toCharArray());
                 tmpPref.fromXML(reader);
             } catch (TransformerException | XMLStreamException | IOException ex) {
-                log(ex, "Error: can not read XML fragment:");
+                PreferencesUtils.log(ex, "Error: can not read XML fragment:");
             }
 
             return tmpPref;
diff --git a/src/org/openstreetmap/josm/gui/io/DownloadOpenChangesetsTask.java b/src/org/openstreetmap/josm/gui/io/DownloadOpenChangesetsTask.java
index 0fe0a81..c228e53 100644
--- a/src/org/openstreetmap/josm/gui/io/DownloadOpenChangesetsTask.java
+++ b/src/org/openstreetmap/josm/gui/io/DownloadOpenChangesetsTask.java
@@ -13,11 +13,11 @@ import javax.swing.JOptionPane;
 import javax.swing.SwingUtilities;
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.UserIdentityManager;
 import org.openstreetmap.josm.data.osm.Changeset;
 import org.openstreetmap.josm.data.osm.ChangesetCache;
 import org.openstreetmap.josm.data.osm.UserInfo;
 import org.openstreetmap.josm.gui.ExceptionDialogUtil;
-import org.openstreetmap.josm.gui.JosmUserIdentityManager;
 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.io.ChangesetQuery;
@@ -60,7 +60,7 @@ public class DownloadOpenChangesetsTask extends PleaseWaitRunnable {
 
     @Override
     protected void finish() {
-        if (JosmUserIdentityManager.getInstance().isAnonymous()) {
+        if (UserIdentityManager.getInstance().isAnonymous()) {
             String msg = tr("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>"
@@ -95,7 +95,7 @@ public class DownloadOpenChangesetsTask extends PleaseWaitRunnable {
      * Refreshes the user info from the server. This is necessary if we don't know the users id yet.
      */
     protected void refreshUserIdentity() {
-        JosmUserIdentityManager im = JosmUserIdentityManager.getInstance();
+        UserIdentityManager im = UserIdentityManager.getInstance();
         try {
             OsmServerUserInfoReader infoReader = new OsmServerUserInfoReader();
             UserInfo info = infoReader.fetchUserInfo(getProgressMonitor().createSubTaskMonitor(1, false));
@@ -121,7 +121,7 @@ public class DownloadOpenChangesetsTask extends PleaseWaitRunnable {
     @Override
     protected void realRun() throws SAXException, IOException, OsmTransferException {
         try {
-            JosmUserIdentityManager im = JosmUserIdentityManager.getInstance();
+            UserIdentityManager im = UserIdentityManager.getInstance();
             if (im.isAnonymous()) {
                 refreshUserIdentity();
             } else if (im.isFullyIdentified()) {
diff --git a/src/org/openstreetmap/josm/gui/io/OpenChangesetComboBoxModel.java b/src/org/openstreetmap/josm/gui/io/OpenChangesetComboBoxModel.java
index 8ce565e..9e61372 100644
--- a/src/org/openstreetmap/josm/gui/io/OpenChangesetComboBoxModel.java
+++ b/src/org/openstreetmap/josm/gui/io/OpenChangesetComboBoxModel.java
@@ -10,6 +10,7 @@ import org.openstreetmap.josm.data.osm.Changeset;
 import org.openstreetmap.josm.data.osm.ChangesetCache;
 import org.openstreetmap.josm.data.osm.ChangesetCacheEvent;
 import org.openstreetmap.josm.data.osm.ChangesetCacheListener;
+import org.openstreetmap.josm.gui.util.GuiHelper;
 
 /**
  * A combobox model for the list of open changesets. The model is populated with the list
@@ -66,7 +67,7 @@ public class OpenChangesetComboBoxModel extends DefaultComboBoxModel<Changeset>
     /* ------------------------------------------------------------------------------------ */
     @Override
     public void changesetCacheUpdated(ChangesetCacheEvent event) {
-        refresh();
+        GuiHelper.runInEDT(this::refresh);
     }
 
     /* ------------------------------------------------------------------------------------ */
diff --git a/src/org/openstreetmap/josm/gui/io/RecentlyOpenedFilesMenu.java b/src/org/openstreetmap/josm/gui/io/RecentlyOpenedFilesMenu.java
index 4ebef48..c17c3cb 100644
--- a/src/org/openstreetmap/josm/gui/io/RecentlyOpenedFilesMenu.java
+++ b/src/org/openstreetmap/josm/gui/io/RecentlyOpenedFilesMenu.java
@@ -16,9 +16,9 @@ import javax.swing.JSeparator;
 import javax.swing.event.MenuEvent;
 import javax.swing.event.MenuListener;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.OpenFileAction.OpenFileTask;
 import org.openstreetmap.josm.gui.MainApplication;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ImageProvider;
 
 /**
@@ -57,7 +57,7 @@ public class RecentlyOpenedFilesMenu extends JMenu {
 
     private void rebuild() {
         removeAll();
-        Collection<String> fileHistory = Main.pref.getCollection("file-open.history");
+        Collection<String> fileHistory = Config.getPref().getList("file-open.history");
 
         for (final String file : fileHistory) {
             add(new OpenRecentAction(file));
@@ -100,7 +100,7 @@ public class RecentlyOpenedFilesMenu extends JMenu {
 
         @Override
         public void actionPerformed(ActionEvent e) {
-            Main.pref.putCollection("file-open.history", null);
+            Config.getPref().putList("file-open.history", null);
         }
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/io/TagSettingsPanel.java b/src/org/openstreetmap/josm/gui/io/TagSettingsPanel.java
index c8e2b86..4ad02c7 100644
--- a/src/org/openstreetmap/josm/gui/io/TagSettingsPanel.java
+++ b/src/org/openstreetmap/josm/gui/io/TagSettingsPanel.java
@@ -28,21 +28,28 @@ public class TagSettingsPanel extends JPanel implements TableModelListener {
     /** the model for the changeset comment */
     private final transient ChangesetCommentModel changesetCommentModel;
     private final transient ChangesetCommentModel changesetSourceModel;
+    private final transient ChangesetReviewModel changesetReviewModel;
 
     /**
      * Creates a new panel
      *
      * @param changesetCommentModel the changeset comment model. Must not be null.
      * @param changesetSourceModel the changeset source model. Must not be null.
+     * @param changesetReviewModel the model for the changeset review. Must not be null.
      * @throws IllegalArgumentException if {@code changesetCommentModel} is null
+     * @since 12719 (signature)
      */
-    public TagSettingsPanel(ChangesetCommentModel changesetCommentModel, ChangesetCommentModel changesetSourceModel) {
+    public TagSettingsPanel(ChangesetCommentModel changesetCommentModel, ChangesetCommentModel changesetSourceModel,
+            ChangesetReviewModel changesetReviewModel) {
         CheckParameterUtil.ensureParameterNotNull(changesetCommentModel, "changesetCommentModel");
         CheckParameterUtil.ensureParameterNotNull(changesetSourceModel, "changesetSourceModel");
+        CheckParameterUtil.ensureParameterNotNull(changesetReviewModel, "changesetReviewModel");
         this.changesetCommentModel = changesetCommentModel;
         this.changesetSourceModel = changesetSourceModel;
-        this.changesetCommentModel.addChangeListener(new ChangesetCommentChangeListener("comment"));
-        this.changesetSourceModel.addChangeListener(new ChangesetCommentChangeListener("source"));
+        this.changesetReviewModel = changesetReviewModel;
+        changesetCommentModel.addChangeListener(new ChangesetCommentChangeListener("comment"));
+        changesetSourceModel.addChangeListener(new ChangesetCommentChangeListener("source"));
+        changesetReviewModel.addChangeListener(new ChangesetReviewChangeListener());
         build();
         pnlTagEditor.getModel().addTableModelListener(this);
     }
@@ -108,6 +115,7 @@ public class TagSettingsPanel extends JPanel implements TableModelListener {
     public void tableChanged(TableModelEvent e) {
         changesetCommentModel.setComment(getTagEditorValue("comment"));
         changesetSourceModel.setComment(getTagEditorValue("source"));
+        changesetReviewModel.setReviewRequested("yes".equals(getTagEditorValue("review_requested")));
     }
 
     /**
@@ -116,6 +124,7 @@ public class TagSettingsPanel extends JPanel implements TableModelListener {
     private void forceCommentFieldReload() {
         setProperty("comment", changesetCommentModel.getComment());
         setProperty("source", changesetSourceModel.getComment());
+        setProperty("review_requested", changesetReviewModel.isReviewRequested() ? "yes" : null);
     }
 
     /**
@@ -141,4 +150,24 @@ public class TagSettingsPanel extends JPanel implements TableModelListener {
             }
         }
     }
+
+    /**
+     * Observes the changeset review model and keeps the tag editor in sync
+     * with the current changeset review request
+     */
+    class ChangesetReviewChangeListener implements ChangeListener {
+
+        private static final String KEY = "review_requested";
+
+        @Override
+        public void stateChanged(ChangeEvent e) {
+            if (e.getSource() instanceof ChangesetReviewModel) {
+                boolean newState = ((ChangesetReviewModel) e.getSource()).isReviewRequested();
+                boolean oldState = "yes".equals(Optional.ofNullable(getTagEditorValue(KEY)).orElse(""));
+                if (oldState != newState) {
+                    setProperty(KEY, newState ? "yes" : null);
+                }
+            }
+        }
+    }
 }
diff --git a/src/org/openstreetmap/josm/gui/io/UploadDialog.java b/src/org/openstreetmap/josm/gui/io/UploadDialog.java
index d8a0508..c26ced0 100644
--- a/src/org/openstreetmap/josm/gui/io/UploadDialog.java
+++ b/src/org/openstreetmap/josm/gui/io/UploadDialog.java
@@ -42,28 +42,29 @@ import javax.swing.KeyStroke;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.APIDataSet;
-import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
-import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.data.Version;
 import org.openstreetmap.josm.data.osm.Changeset;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
-import org.openstreetmap.josm.data.preferences.Setting;
+import org.openstreetmap.josm.spi.preferences.Setting;
 import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane;
 import org.openstreetmap.josm.gui.help.ContextSensitiveHelpAction;
 import org.openstreetmap.josm.gui.help.HelpUtil;
 import org.openstreetmap.josm.gui.util.GuiHelper;
+import org.openstreetmap.josm.gui.util.MultiLineFlowLayout;
 import org.openstreetmap.josm.gui.util.WindowGeometry;
 import org.openstreetmap.josm.io.OsmApi;
 import org.openstreetmap.josm.io.UploadStrategy;
 import org.openstreetmap.josm.io.UploadStrategySpecification;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageOverlay;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.ImageProvider.ImageSizes;
 import org.openstreetmap.josm.tools.InputMapUtils;
-import org.openstreetmap.josm.tools.MultiLineFlowLayout;
 import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -100,6 +101,7 @@ public class UploadDialog extends AbstractUploadDialog implements PropertyChange
     /** the changeset comment model keeping the state of the changeset comment */
     private final transient ChangesetCommentModel changesetCommentModel = new ChangesetCommentModel();
     private final transient ChangesetCommentModel changesetSourceModel = new ChangesetCommentModel();
+    private final transient ChangesetReviewModel changesetReviewModel = new ChangesetReviewModel();
 
     private transient DataSet dataSet;
 
@@ -144,12 +146,12 @@ public class UploadDialog extends AbstractUploadDialog implements PropertyChange
         // a tabbed pane with configuration panels in the lower half
         tpConfigPanels = new CompactTabbedPane();
 
-        pnlBasicUploadSettings = new BasicUploadSettingsPanel(changesetCommentModel, changesetSourceModel);
+        pnlBasicUploadSettings = new BasicUploadSettingsPanel(changesetCommentModel, changesetSourceModel, changesetReviewModel);
         tpConfigPanels.add(pnlBasicUploadSettings);
         tpConfigPanels.setTitleAt(0, tr("Settings"));
         tpConfigPanels.setToolTipTextAt(0, tr("Decide how to upload the data and which changeset to use"));
 
-        pnlTagSettings = new TagSettingsPanel(changesetCommentModel, changesetSourceModel);
+        pnlTagSettings = new TagSettingsPanel(changesetCommentModel, changesetSourceModel, changesetReviewModel);
         tpConfigPanels.add(pnlTagSettings);
         tpConfigPanels.setTitleAt(1, tr("Tags of new changeset"));
         tpConfigPanels.setToolTipTextAt(1, tr("Apply tags to the changeset data is uploaded to"));
@@ -250,7 +252,7 @@ public class UploadDialog extends AbstractUploadDialog implements PropertyChange
 
         setMinimumSize(new Dimension(600, 350));
 
-        Main.pref.addPreferenceChangeListener(this);
+        Config.getPref().addPreferenceChangeListener(this);
     }
 
     /**
@@ -651,9 +653,9 @@ public class UploadDialog extends AbstractUploadDialog implements PropertyChange
     }
 
     private static String getLastChangesetTagFromHistory(String historyKey, List<String> def) {
-        Collection<String> history = Main.pref.getCollection(historyKey, def);
-        int age = (int) (System.currentTimeMillis() / 1000 - Main.pref.getInteger(BasicUploadSettingsPanel.HISTORY_LAST_USED_KEY, 0));
-        if (history != null && age < Main.pref.getLong(BasicUploadSettingsPanel.HISTORY_MAX_AGE_KEY, TimeUnit.HOURS.toMillis(4))
+        Collection<String> history = Config.getPref().getList(historyKey, def);
+        int age = (int) (System.currentTimeMillis() / 1000 - Config.getPref().getInt(BasicUploadSettingsPanel.HISTORY_LAST_USED_KEY, 0));
+        if (history != null && age < Config.getPref().getLong(BasicUploadSettingsPanel.HISTORY_MAX_AGE_KEY, TimeUnit.HOURS.toMillis(4))
                 && !history.isEmpty()) {
             return history.iterator().next();
         } else {
diff --git a/src/org/openstreetmap/josm/gui/io/UploadStrategySelectionPanel.java b/src/org/openstreetmap/josm/gui/io/UploadStrategySelectionPanel.java
index 12700b4..2d4d78e 100644
--- a/src/org/openstreetmap/josm/gui/io/UploadStrategySelectionPanel.java
+++ b/src/org/openstreetmap/josm/gui/io/UploadStrategySelectionPanel.java
@@ -30,7 +30,6 @@ import javax.swing.UIManager;
 import javax.swing.event.DocumentEvent;
 import javax.swing.event.DocumentListener;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
 import org.openstreetmap.josm.io.Capabilities;
@@ -38,6 +37,7 @@ import org.openstreetmap.josm.io.MaxChangesetSizeExceededPolicy;
 import org.openstreetmap.josm.io.OsmApi;
 import org.openstreetmap.josm.io.UploadStrategy;
 import org.openstreetmap.josm.io.UploadStrategySpecification;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 
 /**
@@ -322,7 +322,7 @@ public class UploadStrategySelectionPanel extends JPanel implements PropertyChan
     public void initFromPreferences() {
         UploadStrategy strategy = UploadStrategy.getFromPreferences();
         rbStrategy.get(strategy).setSelected(true);
-        int chunkSize = Main.pref.getInteger("osm-server.upload-strategy.chunk-size", 1);
+        int chunkSize = Config.getPref().getInt("osm-server.upload-strategy.chunk-size", 1);
         tfChunkSize.setText(Integer.toString(chunkSize));
         updateNumRequestsLabels();
     }
@@ -336,7 +336,7 @@ public class UploadStrategySelectionPanel extends JPanel implements PropertyChan
         int chunkSize;
         try {
             chunkSize = Integer.parseInt(tfChunkSize.getText().trim());
-            Main.pref.putInteger("osm-server.upload-strategy.chunk-size", chunkSize);
+            Config.getPref().putInt("osm-server.upload-strategy.chunk-size", chunkSize);
         } catch (NumberFormatException e) {
             // don't save invalid value to preferences
             Logging.trace(e);
diff --git a/src/org/openstreetmap/josm/gui/io/importexport/GeoJSONExporter.java b/src/org/openstreetmap/josm/gui/io/importexport/GeoJSONExporter.java
index 00ffbc5..b43c729 100644
--- a/src/org/openstreetmap/josm/gui/io/importexport/GeoJSONExporter.java
+++ b/src/org/openstreetmap/josm/gui/io/importexport/GeoJSONExporter.java
@@ -35,7 +35,7 @@ public class GeoJSONExporter extends FileExporter {
     public void exportData(File file, Layer layer) throws IOException {
         if (layer instanceof OsmDataLayer) {
             try (Writer out = Files.newBufferedWriter(file.toPath(), StandardCharsets.UTF_8)) {
-                out.write(new GeoJSONWriter((OsmDataLayer) layer).write());
+                out.write(new GeoJSONWriter(((OsmDataLayer) layer).data).write());
             }
         } else {
             throw new IllegalArgumentException(tr("Layer ''{0}'' not supported", layer.getClass().toString()));
diff --git a/src/org/openstreetmap/josm/gui/io/importexport/GpxExporter.java b/src/org/openstreetmap/josm/gui/io/importexport/GpxExporter.java
index 9bd65bb..f83dfee 100644
--- a/src/org/openstreetmap/josm/gui/io/importexport/GpxExporter.java
+++ b/src/org/openstreetmap/josm/gui/io/importexport/GpxExporter.java
@@ -35,6 +35,7 @@ import org.openstreetmap.josm.gui.widgets.JosmTextArea;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
 import org.openstreetmap.josm.io.Compression;
 import org.openstreetmap.josm.io.GpxWriter;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.Logging;
@@ -109,7 +110,7 @@ public class GpxExporter extends FileExporter implements GpxConstants {
         desc.setText(gpxData.getString(META_DESC));
         p.add(new JScrollPane(desc), GBC.eop().fill(GBC.BOTH));
 
-        JCheckBox author = new JCheckBox(tr("Add author information"), Main.pref.getBoolean("lastAddAuthor", true));
+        JCheckBox author = new JCheckBox(tr("Add author information"), Config.getPref().getBoolean("lastAddAuthor", true));
         p.add(author, GBC.eol());
 
         JLabel nameLabel = new JLabel(tr("Real name"));
@@ -161,12 +162,12 @@ public class GpxExporter extends FileExporter implements GpxConstants {
         }
         setCanceled(false);
 
-        Main.pref.put("lastAddAuthor", author.isSelected());
+        Config.getPref().putBoolean("lastAddAuthor", author.isSelected());
         if (!authorName.getText().isEmpty()) {
-            Main.pref.put("lastAuthorName", authorName.getText());
+            Config.getPref().put("lastAuthorName", authorName.getText());
         }
         if (!copyright.getText().isEmpty()) {
-            Main.pref.put("lastCopyright", copyright.getText());
+            Config.getPref().put("lastCopyright", copyright.getText());
         }
 
         if (layer instanceof OsmDataLayer) {
@@ -231,7 +232,7 @@ public class GpxExporter extends FileExporter implements GpxConstants {
             }
             if (copyright.getText().isEmpty()) {
                 copyright.setText(Optional.ofNullable(data.getString(META_COPYRIGHT_LICENSE)).orElseGet(
-                        () -> Main.pref.get("lastCopyright", "https://creativecommons.org/licenses/by-sa/2.5")));
+                        () -> Config.getPref().get("lastCopyright", "https://creativecommons.org/licenses/by-sa/2.5")));
                 copyright.setCaretPosition(0);
             }
         } else {
@@ -279,8 +280,10 @@ public class GpxExporter extends FileExporter implements GpxConstants {
             nameLabel.setEnabled(b);
             emailLabel.setEnabled(b);
             if (b) {
-                authorName.setText(Optional.ofNullable(data.getString(META_AUTHOR_NAME)).orElseGet(() -> Main.pref.get("lastAuthorName")));
-                email.setText(Optional.ofNullable(data.getString(META_AUTHOR_EMAIL)).orElseGet(() -> Main.pref.get("lastAuthorEmail")));
+                authorName.setText(Optional.ofNullable(data.getString(META_AUTHOR_NAME)).orElseGet(
+                        () -> Config.getPref().get("lastAuthorName")));
+                email.setText(Optional.ofNullable(data.getString(META_AUTHOR_EMAIL)).orElseGet(
+                        () -> Config.getPref().get("lastAuthorEmail")));
             } else {
                 authorName.setText("");
                 email.setText("");
diff --git a/src/org/openstreetmap/josm/gui/io/importexport/GpxImporter.java b/src/org/openstreetmap/josm/gui/io/importexport/GpxImporter.java
index 76d11b4..6990dc2 100644
--- a/src/org/openstreetmap/josm/gui/io/importexport/GpxImporter.java
+++ b/src/org/openstreetmap/josm/gui/io/importexport/GpxImporter.java
@@ -9,7 +9,6 @@ import java.io.InputStream;
 
 import javax.swing.JOptionPane;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.ExtensionFileFilter;
 import org.openstreetmap.josm.data.gpx.GpxData;
 import org.openstreetmap.josm.gui.MainApplication;
@@ -19,6 +18,7 @@ import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.io.Compression;
 import org.openstreetmap.josm.io.GpxReader;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 import org.xml.sax.SAXException;
 
@@ -94,8 +94,8 @@ public class GpxImporter extends FileImporter {
      * @return a GPX file filter
      */
     public static ExtensionFileFilter getFileFilter() {
-        return ExtensionFileFilter.newFilterWithArchiveExtensions(
-            "gpx", Main.pref.get("save.extension.gpx", "gpx"), tr("GPX Files"), true);
+        return ExtensionFileFilter.newFilterWithArchiveExtensions("gpx",
+                Config.getPref().get("save.extension.gpx", "gpx"), tr("GPX Files"), true);
     }
 
     @Override
@@ -147,7 +147,7 @@ public class GpxImporter extends FileImporter {
         if (data.hasRoutePoints() || data.hasTrackPoints()) {
             gpxLayer = new GpxLayer(data, gpxLayerName, data.storageFile != null);
         }
-        if (Main.pref.getBoolean("marker.makeautomarkers", true) && !data.waypoints.isEmpty()) {
+        if (Config.getPref().getBoolean("marker.makeautomarkers", true) && !data.waypoints.isEmpty()) {
             markerLayer = new MarkerLayer(data, markerLayerName, data.storageFile, gpxLayer);
             if (markerLayer.data.isEmpty()) {
                 markerLayer = null;
diff --git a/src/org/openstreetmap/josm/gui/io/importexport/NMEAImporter.java b/src/org/openstreetmap/josm/gui/io/importexport/NMEAImporter.java
index f9a9c77..39d8f44 100644
--- a/src/org/openstreetmap/josm/gui/io/importexport/NMEAImporter.java
+++ b/src/org/openstreetmap/josm/gui/io/importexport/NMEAImporter.java
@@ -22,6 +22,7 @@ import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.io.Compression;
 import org.openstreetmap.josm.io.nmea.NmeaReader;
+import org.openstreetmap.josm.spi.preferences.Config;
 
 /**
  * File importer allowing to import NMEA-0183 files (*.nmea/nme/nma/log/txt files).
@@ -54,7 +55,7 @@ public class NMEAImporter extends FileImporter {
 
                 GuiHelper.runInEDT(() -> {
                     MainApplication.getLayerManager().addLayer(gpxLayer);
-                    if (Main.pref.getBoolean("marker.makeautomarkers", true)) {
+                    if (Config.getPref().getBoolean("marker.makeautomarkers", true)) {
                         MarkerLayer ml = new MarkerLayer(r.data, tr("Markers from {0}", fn), fileFinal, gpxLayer);
                         if (!ml.data.isEmpty()) {
                             MainApplication.getLayerManager().addLayer(ml);
diff --git a/src/org/openstreetmap/josm/gui/io/importexport/OsmExporter.java b/src/org/openstreetmap/josm/gui/io/importexport/OsmExporter.java
index 55d10d8..6238634 100644
--- a/src/org/openstreetmap/josm/gui/io/importexport/OsmExporter.java
+++ b/src/org/openstreetmap/josm/gui/io/importexport/OsmExporter.java
@@ -21,6 +21,7 @@ import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.io.Compression;
 import org.openstreetmap.josm.io.OsmWriter;
 import org.openstreetmap.josm.io.OsmWriterFactory;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -89,7 +90,7 @@ public class OsmExporter extends FileExporter {
             }
 
             doSave(file, layer);
-            if ((noBackup || !Main.pref.getBoolean("save.keepbackup", false)) && tmpFile != null) {
+            if ((noBackup || !Config.getPref().getBoolean("save.keepbackup", false)) && tmpFile != null) {
                 Utils.deleteFile(tmpFile);
             }
             layer.onPostSaveToFile();
@@ -130,7 +131,7 @@ public class OsmExporter extends FileExporter {
         ) {
             layer.data.getReadLock().lock();
             try {
-                w.writeLayer(layer);
+                w.write(layer.data);
             } finally {
                 layer.data.getReadLock().unlock();
             }
diff --git a/src/org/openstreetmap/josm/gui/io/importexport/WMSLayerExporter.java b/src/org/openstreetmap/josm/gui/io/importexport/WMSLayerExporter.java
index 4e2a945..88d9670 100644
--- a/src/org/openstreetmap/josm/gui/io/importexport/WMSLayerExporter.java
+++ b/src/org/openstreetmap/josm/gui/io/importexport/WMSLayerExporter.java
@@ -6,7 +6,7 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.ObjectOutputStream;
 
-import org.openstreetmap.josm.data.Preferences;
+import org.openstreetmap.josm.data.StructUtils;
 import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryPreferenceEntry;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.layer.AbstractTileSourceLayer;
@@ -41,7 +41,7 @@ public class WMSLayerExporter extends FileExporter {
                 oos.writeInt(CURRENT_FILE_VERSION); // file version
                 oos.writeObject(MainApplication.getMap().mapView.getCenter());
                 ImageryPreferenceEntry entry = new ImageryPreferenceEntry(((AbstractTileSourceLayer) layer).getInfo());
-                oos.writeObject(Preferences.serializeStruct(entry, ImageryPreferenceEntry.class));
+                oos.writeObject(StructUtils.serializeStruct(entry, ImageryPreferenceEntry.class));
             }
         }
     }
diff --git a/src/org/openstreetmap/josm/gui/io/importexport/WMSLayerImporter.java b/src/org/openstreetmap/josm/gui/io/importexport/WMSLayerImporter.java
index 65aa375..08928f9 100644
--- a/src/org/openstreetmap/josm/gui/io/importexport/WMSLayerImporter.java
+++ b/src/org/openstreetmap/josm/gui/io/importexport/WMSLayerImporter.java
@@ -11,7 +11,7 @@ import java.io.ObjectInputStream;
 import java.util.Map;
 
 import org.openstreetmap.josm.actions.ExtensionFileFilter;
-import org.openstreetmap.josm.data.Preferences;
+import org.openstreetmap.josm.data.StructUtils;
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.imagery.ImageryInfo;
 import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryPreferenceEntry;
@@ -71,7 +71,7 @@ public class WMSLayerImporter extends FileImporter {
                 zoomTo = (EastNorth) ois.readObject();
 
                 @SuppressWarnings("unchecked")
-                ImageryPreferenceEntry entry = Preferences.deserializeStruct(
+                ImageryPreferenceEntry entry = StructUtils.deserializeStruct(
                         (Map<String, String>) ois.readObject(),
                         ImageryPreferenceEntry.class);
                 info = new ImageryInfo(entry);
diff --git a/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java b/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java
index c864bb5..a7b3b46 100644
--- a/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java
@@ -1142,6 +1142,8 @@ implements ImageObserver, TileLoaderListener, ZoomChangeListener, FilterChangeLi
 
     protected class TileSet extends TileRange {
 
+        private volatile TileSetInfo info;
+
         protected TileSet(TileXY t1, TileXY t2, int zoom) {
             super(t1, t2, zoom);
             sanitize();
@@ -1268,6 +1270,78 @@ implements ImageObserver, TileLoaderListener, ZoomChangeListener, FilterChangeLi
             }
         }
 
+        /**
+         * Check if there is any tile fully loaded without error.
+         * @return true if there is any tile fully loaded without error
+         */
+        public boolean hasVisibleTiles() {
+            return getTileSetInfo().hasVisibleTiles;
+        }
+
+        /**
+         * Check if there there is a tile that is overzoomed.
+         * <p>
+         * I.e. the server response for one tile was "there is no tile here".
+         * This usually happens when zoomed in too much. The limit depends on
+         * the region, so at the edge of such a region, some tiles may be
+         * available and some not.
+         * @return true if there there is a tile that is overzoomed
+         */
+        public boolean hasOverzoomedTiles() {
+            return getTileSetInfo().hasOverzoomedTiles;
+        }
+
+        /**
+         * Check if there are tiles still loading.
+         * <p>
+         * This is the case if there is a tile not yet in the cache, or in the
+         * cache but marked as loading ({@link Tile#isLoading()}.
+         * @return true if there are tiles still loading
+         */
+        public boolean hasLoadingTiles() {
+            return getTileSetInfo().hasLoadingTiles;
+        }
+
+        /**
+         * Check if all tiles in the range are fully loaded.
+         * <p>
+         * A tile is considered to be fully loaded even if the result of loading
+         * the tile was an error.
+         * @return true if all tiles in the range are fully loaded
+         */
+        public boolean hasAllLoadedTiles() {
+            return getTileSetInfo().hasAllLoadedTiles;
+        }
+
+        private TileSetInfo getTileSetInfo() {
+            if (info == null) {
+                synchronized (this) {
+                    if (info == null) {
+                        List<Tile> allTiles = this.allExistingTiles();
+                        info = new TileSetInfo();
+                        info.hasLoadingTiles = allTiles.size() < this.size();
+                        info.hasAllLoadedTiles = true;
+                        for (Tile t : allTiles) {
+                            if ("no-tile".equals(t.getValue("tile-info"))) {
+                                info.hasOverzoomedTiles = true;
+                            }
+                            if (t.isLoaded()) {
+                                if (!t.hasError()) {
+                                    info.hasVisibleTiles = true;
+                                }
+                            } else {
+                                info.hasAllLoadedTiles = false;
+                                if (t.isLoading()) {
+                                    info.hasLoadingTiles = true;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            return info;
+        }
+
         @Override
         public String toString() {
             return getClass().getName() + ": zoom: " + zoom + " X(" + minX + ", " + maxX + ") Y(" + minY + ", " + maxY + ") size: " + size();
@@ -1275,6 +1349,16 @@ implements ImageObserver, TileLoaderListener, ZoomChangeListener, FilterChangeLi
     }
 
     /**
+     * Data container to hold information about a {@link TileSet} class.
+     */
+    private static class TileSetInfo {
+        boolean hasVisibleTiles;
+        boolean hasOverzoomedTiles;
+        boolean hasLoadingTiles;
+        boolean hasAllLoadedTiles;
+    }
+
+    /**
      * Create a TileSet by EastNorth bbox taking a layer shift in account
      * @param bounds the EastNorth bounds
      * @param zoom zoom level
@@ -1301,41 +1385,10 @@ implements ImageObserver, TileLoaderListener, ZoomChangeListener, FilterChangeLi
         return new TileSet(t1, t2, zoom);
     }
 
-    private static class TileSetInfo {
-        boolean hasVisibleTiles;
-        boolean hasOverzoomedTiles;
-        boolean hasLoadingTiles;
-        boolean hasAllLoadedTiles;
-    }
-
-    private static <S extends AbstractTMSTileSource> TileSetInfo getTileSetInfo(AbstractTileSourceLayer<S>.TileSet ts) {
-        List<Tile> allTiles = ts.allExistingTiles();
-        TileSetInfo result = new TileSetInfo();
-        result.hasLoadingTiles = allTiles.size() < ts.size();
-        result.hasAllLoadedTiles = true;
-        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 {
-                result.hasAllLoadedTiles = false;
-                if (t.isLoading()) {
-                    result.hasLoadingTiles = true;
-                }
-            }
-        }
-        return result;
-    }
-
     private class DeepTileSet {
         private final ProjectionBounds bounds;
         private final int minZoom, maxZoom;
         private final TileSet[] tileSets;
-        private final TileSetInfo[] tileSetInfos;
 
         @SuppressWarnings("unchecked")
         DeepTileSet(ProjectionBounds bounds, int minZoom, int maxZoom) {
@@ -1343,7 +1396,6 @@ implements ImageObserver, TileLoaderListener, ZoomChangeListener, FilterChangeLi
             this.minZoom = minZoom;
             this.maxZoom = maxZoom;
             this.tileSets = new AbstractTileSourceLayer.TileSet[maxZoom - minZoom + 1];
-            this.tileSetInfos = new TileSetInfo[maxZoom - minZoom + 1];
         }
 
         public TileSet getTileSet(int zoom) {
@@ -1358,19 +1410,6 @@ implements ImageObserver, TileLoaderListener, ZoomChangeListener, FilterChangeLi
                 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
@@ -1385,28 +1424,27 @@ implements ImageObserver, TileLoaderListener, ZoomChangeListener, FilterChangeLi
         }
 
         DeepTileSet dts = new DeepTileSet(pb, getMinZoomLvl(), zoom);
-        TileSet ts = dts.getTileSet(zoom);
 
         int displayZoomLevel = zoom;
 
         boolean noTilesAtZoom = false;
         if (getDisplaySettings().isAutoZoom() && getDisplaySettings().isAutoLoad()) {
             // Auto-detection of tilesource maxzoom (currently fully works only for Bing)
-            TileSetInfo tsi = dts.getTileSetInfo(zoom);
-            if (!tsi.hasVisibleTiles && (!tsi.hasLoadingTiles || tsi.hasOverzoomedTiles)) {
+            TileSet ts0 = dts.getTileSet(zoom);
+            if (!ts0.hasVisibleTiles() && (!ts0.hasLoadingTiles() || ts0.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) {
+                if (dts.getTileSet(tmpZoom).hasVisibleTiles()) {
                     displayZoomLevel = tmpZoom;
                     break;
                 }
             }
             // Do binary search between currentZoomLevel and displayZoomLevel
-            while (zoom > displayZoomLevel && !tsi.hasVisibleTiles && tsi.hasOverzoomedTiles) {
+            while (zoom > displayZoomLevel && !ts0.hasVisibleTiles() && ts0.hasOverzoomedTiles()) {
                 zoom = (zoom + displayZoomLevel)/2;
-                tsi = dts.getTileSetInfo(zoom);
+                ts0 = dts.getTileSet(zoom);
             }
 
             setZoomLevel(zoom, false);
@@ -1414,21 +1452,21 @@ implements ImageObserver, TileLoaderListener, ZoomChangeListener, FilterChangeLi
             // 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) {
+            if (zoom == displayZoomLevel && !ts0.hasLoadingTiles() && zoom < dts.maxZoom) {
                 zoom++;
-                tsi = dts.getTileSetInfo(zoom);
+                ts0 = dts.getTileSet(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) {
+            while (zoom > dts.minZoom && ts0.hasOverzoomedTiles() && !ts0.hasLoadingTiles()) {
                 zoom--;
-                tsi = dts.getTileSetInfo(zoom);
+                ts0 = dts.getTileSet(zoom);
             }
-            ts = dts.getTileSet(zoom);
         } else if (getDisplaySettings().isAutoZoom()) {
             setZoomLevel(zoom, false);
         }
+        TileSet ts = dts.getTileSet(zoom);
 
         // Too many tiles... refuse to download
         if (!ts.tooLarge()) {
@@ -1439,7 +1477,7 @@ implements ImageObserver, TileLoaderListener, ZoomChangeListener, FilterChangeLi
 
         if (displayZoomLevel != zoom) {
             ts = dts.getTileSet(displayZoomLevel);
-            if (!dts.getTileSetInfo(displayZoomLevel).hasAllLoadedTiles && displayZoomLevel < zoom) {
+            if (!dts.getTileSet(displayZoomLevel).hasAllLoadedTiles() && displayZoomLevel < zoom) {
                 // if we are showing tiles from lower zoom level, ensure that all tiles are loaded as they are few,
                 // and should not trash the tile cache
                 // This is especially needed when dts.getTileSet(zoom).tooLarge() is true and we are not loading tiles
diff --git a/src/org/openstreetmap/josm/gui/layer/AutosaveTask.java b/src/org/openstreetmap/josm/gui/layer/AutosaveTask.java
index cdfe375..8b7485f 100644
--- a/src/org/openstreetmap/josm/gui/layer/AutosaveTask.java
+++ b/src/org/openstreetmap/josm/gui/layer/AutosaveTask.java
@@ -28,7 +28,6 @@ import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 import java.util.regex.Pattern;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.OpenFileAction.OpenFileTask;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.event.AbstractDatasetChangedEvent;
@@ -45,6 +44,7 @@ import org.openstreetmap.josm.gui.layer.LayerManager.LayerChangeListener;
 import org.openstreetmap.josm.gui.layer.LayerManager.LayerOrderChangeEvent;
 import org.openstreetmap.josm.gui.layer.LayerManager.LayerRemoveEvent;
 import org.openstreetmap.josm.gui.util.GuiHelper;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -115,8 +115,8 @@ public class AutosaveTask extends TimerTask implements LayerChangeListener, List
     private final Object layersLock = new Object();
     private final Deque<File> deletedLayers = new LinkedList<>();
 
-    private final File autosaveDir = new File(Main.pref.getUserDataDirectory(), AUTOSAVE_DIR);
-    private final File deletedLayersDir = new File(Main.pref.getUserDataDirectory(), DELETED_LAYERS_DIR);
+    private final File autosaveDir = new File(Config.getDirs().getUserDataDirectory(true), AUTOSAVE_DIR);
+    private final File deletedLayersDir = new File(Config.getDirs().getUserDataDirectory(true), DELETED_LAYERS_DIR);
 
     /**
      * Replies the autosave directory.
@@ -192,7 +192,7 @@ public class AutosaveTask extends TimerTask implements LayerChangeListener, List
         while (true) {
             String filename = String.format("%1$s_%2$tY%2$tm%2$td_%2$tH%2$tM%2$tS%2$tL%3$s",
                     layer.layerFileName, now, index == 0 ? "" : ('_' + Integer.toString(index)));
-            File result = new File(autosaveDir, filename + '.' + Main.pref.get("autosave.extension", "osm"));
+            File result = new File(autosaveDir, filename + '.' + Config.getPref().get("autosave.extension", "osm"));
             try {
                 if (index > PROP_INDEX_LIMIT.get())
                     throw new IOException("index limit exceeded");
diff --git a/src/org/openstreetmap/josm/gui/layer/ImageryLayer.java b/src/org/openstreetmap/josm/gui/layer/ImageryLayer.java
index 161c822..9d8051e 100644
--- a/src/org/openstreetmap/josm/gui/layer/ImageryLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/ImageryLayer.java
@@ -40,6 +40,7 @@ import org.openstreetmap.josm.gui.MenuScroller;
 import org.openstreetmap.josm.gui.layer.imagery.ImageryFilterSettings;
 import org.openstreetmap.josm.gui.layer.imagery.TileSourceDisplaySettings;
 import org.openstreetmap.josm.tools.GBC;
+import org.openstreetmap.josm.tools.ImageProcessor;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.ImageProvider.ImageSizes;
 import org.openstreetmap.josm.tools.Utils;
diff --git a/src/org/openstreetmap/josm/gui/layer/JumpToMarkerActions.java b/src/org/openstreetmap/josm/gui/layer/JumpToMarkerActions.java
index a76aefb..5713ed1 100644
--- a/src/org/openstreetmap/josm/gui/layer/JumpToMarkerActions.java
+++ b/src/org/openstreetmap/josm/gui/layer/JumpToMarkerActions.java
@@ -11,8 +11,8 @@ import java.util.List;
 import javax.swing.AbstractAction;
 
 import org.openstreetmap.josm.gui.dialogs.LayerListDialog;
-import org.openstreetmap.josm.tools.MultikeyActionsHandler;
-import org.openstreetmap.josm.tools.MultikeyShortcutAction;
+import org.openstreetmap.josm.gui.util.MultikeyActionsHandler;
+import org.openstreetmap.josm.gui.util.MultikeyShortcutAction;
 import org.openstreetmap.josm.tools.Shortcut;
 
 /**
diff --git a/src/org/openstreetmap/josm/gui/layer/Layer.java b/src/org/openstreetmap/josm/gui/layer/Layer.java
index 6c025cc..2a3c32b 100644
--- a/src/org/openstreetmap/josm/gui/layer/Layer.java
+++ b/src/org/openstreetmap/josm/gui/layer/Layer.java
@@ -32,6 +32,7 @@ import org.openstreetmap.josm.data.preferences.ColorProperty;
 import org.openstreetmap.josm.data.projection.Projection;
 import org.openstreetmap.josm.data.projection.ProjectionChangeListener;
 import org.openstreetmap.josm.tools.Destroyable;
+import org.openstreetmap.josm.tools.ImageProcessor;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -338,7 +339,7 @@ public abstract class Layer extends AbstractMapViewPaintable implements Destroya
      *
      * @param name the name. If null, the name is set to the empty string.
      */
-    public final void setName(String name) {
+    public void setName(String name) {
         if (this.name != null) {
             removeColorPropertyListener();
         }
diff --git a/src/org/openstreetmap/josm/gui/layer/NoteLayer.java b/src/org/openstreetmap/josm/gui/layer/NoteLayer.java
index 15586a8..92f311e 100644
--- a/src/org/openstreetmap/josm/gui/layer/NoteLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/NoteLayer.java
@@ -22,7 +22,6 @@ import javax.swing.ImageIcon;
 import javax.swing.JToolTip;
 import javax.swing.SwingUtilities;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.SaveActionBase;
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.notes.Note;
@@ -42,6 +41,7 @@ import org.openstreetmap.josm.gui.io.importexport.NoteExporter;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.io.OsmApi;
 import org.openstreetmap.josm.io.XmlWriter;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ColorHelper;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Logging;
@@ -164,7 +164,7 @@ public class NoteLayer extends AbstractModifiableLayer implements MouseListener,
             toolTip.setTipText(sb.toString());
             Point p = mv.getPoint(noteData.getSelectedNote().getLatLon());
 
-            g.setColor(ColorHelper.html2color(Main.pref.get("color.selected")));
+            g.setColor(ColorHelper.html2color(Config.getPref().get("color.selected")));
             g.drawRect(p.x - (iconWidth / 2), p.y - iconHeight,
                     iconWidth - 1, iconHeight - 1);
 
diff --git a/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java b/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
index 1591e70..4bc317b 100644
--- a/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
@@ -75,8 +75,8 @@ import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.osm.event.AbstractDatasetChangedEvent;
 import org.openstreetmap.josm.data.osm.event.DataSetListenerAdapter;
 import org.openstreetmap.josm.data.osm.event.DataSetListenerAdapter.Listener;
-import org.openstreetmap.josm.data.osm.visitor.AbstractVisitor;
 import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
+import org.openstreetmap.josm.data.osm.visitor.OsmPrimitiveVisitor;
 import org.openstreetmap.josm.data.osm.visitor.paint.MapRendererFactory;
 import org.openstreetmap.josm.data.osm.visitor.paint.Rendering;
 import org.openstreetmap.josm.data.osm.visitor.paint.relations.MultipolygonCache;
@@ -103,6 +103,7 @@ import org.openstreetmap.josm.gui.progress.swing.PleaseWaitProgressMonitor;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.widgets.FileChooserManager;
 import org.openstreetmap.josm.gui.widgets.JosmTextArea;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.AlphanumComparator;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.GBC;
@@ -242,7 +243,7 @@ public class OsmDataLayer extends AbstractModifiableLayer implements Listener, D
     /**
      * A listener that counts the number of primitives it encounters
      */
-    public static final class DataCountVisitor extends AbstractVisitor {
+    public static final class DataCountVisitor implements OsmPrimitiveVisitor {
         /**
          * Nodes that have been visited
          */
@@ -294,19 +295,6 @@ public class OsmDataLayer extends AbstractModifiableLayer implements Listener, D
     }
 
     /**
-     * A listener that gets notified of command queue (undo/redo) size changes.
-     */
-    @FunctionalInterface
-    public interface CommandQueueListener {
-        /**
-         * Notifies the listener about the new queue size
-         * @param queueSize Undo stack size
-         * @param redoSize Redo stack size
-         */
-        void commandChanged(int queueSize, int redoSize);
-    }
-
-    /**
      * Listener called when a state of this layer has changed.
      * @since 10600 (functional interface)
      */
@@ -400,6 +388,7 @@ public class OsmDataLayer extends AbstractModifiableLayer implements Listener, D
         super(name);
         CheckParameterUtil.ensureParameterNotNull(data, "data");
         this.data = data;
+        this.data.setName(name);
         this.setAssociatedFile(associatedFile);
         data.addDataSetListener(new DataSetListenerAdapter(this));
         data.addDataSetListener(MultipolygonCache.getInstance());
@@ -441,12 +430,12 @@ public class OsmDataLayer extends AbstractModifiableLayer implements Listener, D
      */
     @Override public void paint(final Graphics2D g, final MapView mv, Bounds box) {
         boolean active = mv.getLayerManager().getActiveLayer() == this;
-        boolean inactive = !active && Main.pref.getBoolean("draw.data.inactive_color", true);
+        boolean inactive = !active && Config.getPref().getBoolean("draw.data.inactive_color", true);
         boolean virtual = !inactive && mv.isVirtualNodesEnabled();
 
         // draw the hatched area for non-downloaded region. only draw if we're the active
         // and bounds are defined; don't draw for inactive layers or loaded GPX files etc
-        if (active && Main.pref.getBoolean("draw.data.downloaded_area", true) && !data.getDataSources().isEmpty()) {
+        if (active && Config.getPref().getBoolean("draw.data.downloaded_area", true) && !data.getDataSources().isEmpty()) {
             // initialize area with current viewport
             Rectangle b = mv.getBounds();
             // on some platforms viewport bounds seem to be offset from the left,
@@ -602,7 +591,7 @@ public class OsmDataLayer extends AbstractModifiableLayer implements Listener, D
         if (processed == null || processed.isEmpty())
             return;
 
-        MainApplication.undoRedo.clean(this);
+        MainApplication.undoRedo.clean(data);
 
         // if uploaded, clean the modified flags as well
         data.cleanupDeletedPrimitives();
@@ -883,7 +872,7 @@ public class OsmDataLayer extends AbstractModifiableLayer implements Listener, D
                 gpxLayer.setAssociatedFile(new File(getAssociatedFile().getParentFile(), filename));
             }
             MainApplication.getLayerManager().addLayer(gpxLayer);
-            if (Main.pref.getBoolean("marker.makeautomarkers", true) && !gpxData.waypoints.isEmpty()) {
+            if (Config.getPref().getBoolean("marker.makeautomarkers", true) && !gpxData.waypoints.isEmpty()) {
                 MainApplication.getLayerManager().addLayer(new MarkerLayer(gpxData, tr("Converted from: {0}", getName()), null, gpxLayer));
             }
             MainApplication.getLayerManager().removeLayer(OsmDataLayer.this);
@@ -1100,7 +1089,7 @@ public class OsmDataLayer extends AbstractModifiableLayer implements Listener, D
         String extension = PROPERTY_SAVE_EXTENSION.get();
         File file = getAssociatedFile();
         if (file == null && isRenamed()) {
-            StringBuilder filename = new StringBuilder(Main.pref.get("lastDirectory")).append('/').append(getName());
+            StringBuilder filename = new StringBuilder(Config.getPref().get("lastDirectory")).append('/').append(getName());
             if (!OsmImporter.FILE_FILTER.acceptName(filename.toString())) {
                 filename.append('.').append(extension);
             }
@@ -1145,4 +1134,12 @@ public class OsmDataLayer extends AbstractModifiableLayer implements Listener, D
     public void highlightUpdated(HighlightUpdateEvent e) {
         invalidate();
     }
+
+    @Override
+    public void setName(String name) {
+        if (data != null) {
+            data.setName(name);
+        }
+        super.setName(name);
+    }
 }
diff --git a/src/org/openstreetmap/josm/gui/layer/ValidatorLayer.java b/src/org/openstreetmap/josm/gui/layer/ValidatorLayer.java
index bb42536..ec5448f 100644
--- a/src/org/openstreetmap/josm/gui/layer/ValidatorLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/ValidatorLayer.java
@@ -19,7 +19,6 @@ import org.openstreetmap.josm.actions.SaveActionBase;
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
 import org.openstreetmap.josm.data.validation.OsmValidator;
-import org.openstreetmap.josm.data.validation.PaintVisitor;
 import org.openstreetmap.josm.data.validation.Severity;
 import org.openstreetmap.josm.data.validation.TestError;
 import org.openstreetmap.josm.gui.MainApplication;
@@ -31,6 +30,7 @@ import org.openstreetmap.josm.gui.layer.LayerManager.LayerAddEvent;
 import org.openstreetmap.josm.gui.layer.LayerManager.LayerChangeListener;
 import org.openstreetmap.josm.gui.layer.LayerManager.LayerOrderChangeEvent;
 import org.openstreetmap.josm.gui.layer.LayerManager.LayerRemoveEvent;
+import org.openstreetmap.josm.gui.layer.validation.PaintVisitor;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.MultiMap;
 
diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java b/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java
index 3c40425..fba1256 100644
--- a/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java
+++ b/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java
@@ -78,6 +78,7 @@ 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.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ExifReader;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
@@ -171,9 +172,9 @@ public class CorrelateGpxWithImages extends AbstractAction {
                 actionPerformed(null);
                 break;
             case DONE:
-                Main.pref.put("geoimage.timezone", timezone.formatTimezone());
-                Main.pref.put("geoimage.delta", delta.formatOffset());
-                Main.pref.put("geoimage.showThumbs", yLayer.useThumbs);
+                Config.getPref().put("geoimage.timezone", timezone.formatTimezone());
+                Config.getPref().put("geoimage.delta", delta.formatOffset());
+                Config.getPref().putBoolean("geoimage.showThumbs", yLayer.useThumbs);
 
                 yLayer.useThumbs = cbShowThumbs.isSelected();
                 yLayer.startLoadThumbs();
@@ -420,7 +421,7 @@ public class CorrelateGpxWithImages extends AbstractAction {
 
             JosmComboBox<String> cbTimezones = new JosmComboBox<>(vtTimezones.toArray(new String[vtTimezones.size()]));
 
-            String tzId = Main.pref.get("geoimage.timezoneid", "");
+            String tzId = Config.getPref().get("geoimage.timezoneid", "");
             TimeZone defaultTz;
             if (tzId.isEmpty()) {
                 defaultTz = TimeZone.getDefault();
@@ -528,7 +529,7 @@ public class CorrelateGpxWithImages extends AbstractAction {
                 tzId = selectedTz.substring(0, pos - 1);
                 String tzValue = selectedTz.substring(pos + 1, selectedTz.length() - 1);
 
-                Main.pref.put("geoimage.timezoneid", tzId);
+                Config.getPref().put("geoimage.timezoneid", tzId);
                 tfOffset.setText(Offset.milliseconds(delta).formatOffset());
                 tfTimezone.setText(tzValue);
 
@@ -583,7 +584,7 @@ public class CorrelateGpxWithImages extends AbstractAction {
         JPanel panelTf = new JPanel(new GridBagLayout());
 
         try {
-            timezone = Timezone.parseTimezone(Optional.ofNullable(Main.pref.get("geoimage.timezone", "0:00")).orElse("0:00"));
+            timezone = Timezone.parseTimezone(Optional.ofNullable(Config.getPref().get("geoimage.timezone", "0:00")).orElse("0:00"));
         } catch (ParseException e) {
             timezone = Timezone.ZERO;
         }
@@ -592,7 +593,7 @@ public class CorrelateGpxWithImages extends AbstractAction {
         tfTimezone.setText(timezone.formatTimezone());
 
         try {
-            delta = Offset.parseOffset(Main.pref.get("geoimage.delta", "0"));
+            delta = Offset.parseOffset(Config.getPref().get("geoimage.delta", "0"));
         } catch (ParseException e) {
             delta = Offset.ZERO;
         }
@@ -626,7 +627,7 @@ public class CorrelateGpxWithImages extends AbstractAction {
 
         labelPosition.setEnabled(cbExifImg.isEnabled() || cbTaggedImg.isEnabled());
 
-        boolean ticked = yLayer.thumbsLoaded || Main.pref.getBoolean("geoimage.showThumbs", false);
+        boolean ticked = yLayer.thumbsLoaded || Config.getPref().getBoolean("geoimage.showThumbs", false);
         cbShowThumbs = new JCheckBox(tr("Show Thumbnail images on the map"), ticked);
         cbShowThumbs.setEnabled(!yLayer.thumbsLoaded);
 
diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplay.java b/src/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplay.java
index 322cfc6..566ed85 100644
--- a/src/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplay.java
+++ b/src/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplay.java
@@ -25,7 +25,7 @@ import java.io.File;
 
 import javax.swing.JComponent;
 
-import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ExifReader;
 import org.openstreetmap.josm.tools.Logging;
 
@@ -57,7 +57,7 @@ public class ImageDisplay extends JComponent {
 
     private String osdText;
 
-    private static final int DRAG_BUTTON = Main.pref.getBoolean("geoimage.agpifo-style-drag-and-zoom", false) ? 1 : 3;
+    private static final int DRAG_BUTTON = Config.getPref().getBoolean("geoimage.agpifo-style-drag-and-zoom", false) ? 1 : 3;
     private static final int ZOOM_BUTTON = DRAG_BUTTON == 1 ? 3 : 1;
 
     /** The thread that reads the images. */
diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/ThumbsLoader.java b/src/org/openstreetmap/josm/gui/layer/geoimage/ThumbsLoader.java
index 715d9c4..50ce57d 100644
--- a/src/org/openstreetmap/josm/gui/layer/geoimage/ThumbsLoader.java
+++ b/src/org/openstreetmap/josm/gui/layer/geoimage/ThumbsLoader.java
@@ -17,10 +17,10 @@ import java.util.Collection;
 import javax.imageio.ImageIO;
 
 import org.apache.commons.jcs.access.behavior.ICacheAccess;
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.cache.BufferedImageCacheEntry;
 import org.openstreetmap.josm.data.cache.JCSCacheManager;
 import org.openstreetmap.josm.gui.MainApplication;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ExifReader;
 import org.openstreetmap.josm.tools.Logging;
 
@@ -37,7 +37,7 @@ public class ThumbsLoader implements Runnable {
     private final GeoImageLayer layer;
     private MediaTracker tracker;
     private ICacheAccess<String, BufferedImageCacheEntry> cache;
-    private final boolean cacheOff = Main.pref.getBoolean("geoimage.noThumbnailCache", false);
+    private final boolean cacheOff = Config.getPref().getBoolean("geoimage.noThumbnailCache", false);
 
     private ThumbsLoader(Collection<ImageEntry> data, GeoImageLayer layer) {
         this.data = data;
@@ -68,7 +68,7 @@ public class ThumbsLoader implements Runnable {
         if (!cacheOff) {
             try {
                 cache = JCSCacheManager.getCache("geoimage-thumbnails", 0, 120,
-                        Main.pref.getCacheDirectory().getPath() + File.separator + "geoimage-thumbnails");
+                        Config.getDirs().getCacheDirectory(true).getPath() + File.separator + "geoimage-thumbnails");
             } catch (IOException e) {
                 Logging.warn("Failed to initialize cache for geoimage-thumbnails");
                 Logging.warn(e);
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/ConvertToDataLayerAction.java b/src/org/openstreetmap/josm/gui/layer/gpx/ConvertToDataLayerAction.java
index 5a0f238..597498b 100644
--- a/src/org/openstreetmap/josm/gui/layer/gpx/ConvertToDataLayerAction.java
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/ConvertToDataLayerAction.java
@@ -35,6 +35,7 @@ import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.layer.markerlayer.Marker;
 import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
 import org.openstreetmap.josm.gui.widgets.UrlLabel;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Logging;
@@ -118,7 +119,7 @@ public abstract class ConvertToDataLayerAction<T extends Layer> extends Abstract
             final DataSet ds = new DataSet();
             for (Marker marker : layer.data) {
                 final Node node = new Node(marker.getCoor());
-                final Collection<String> mapping = Main.pref.getCollection("gpx.to-osm-mapping", Arrays.asList(
+                final Collection<String> mapping = Config.getPref().getList("gpx.to-osm-mapping", Arrays.asList(
                         GpxConstants.GPX_NAME, "name",
                         GpxConstants.GPX_DESC, "description",
                         GpxConstants.GPX_CMT, "note",
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/DateFilterPanel.java b/src/org/openstreetmap/josm/gui/layer/gpx/DateFilterPanel.java
index d7f2b6b..a55dbfe 100644
--- a/src/org/openstreetmap/josm/gui/layer/gpx/DateFilterPanel.java
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/DateFilterPanel.java
@@ -15,9 +15,9 @@ import javax.swing.JPanel;
 import javax.swing.Timer;
 import javax.swing.event.ChangeListener;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.layer.GpxLayer;
 import org.openstreetmap.josm.gui.widgets.DateEditorWithSlider;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
 
 /**
@@ -102,9 +102,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(prefDateMin, dateFrom.getDate().getTime());
-        Main.pref.putLong(prefDateMax, dateTo.getDate().getTime());
-        Main.pref.put(prefDate0, noTimestampCb.isSelected());
+        Config.getPref().putLong(prefDateMin, dateFrom.getDate().getTime());
+        Config.getPref().putLong(prefDateMax, dateTo.getDate().getTime());
+        Config.getPref().putBoolean(prefDate0, noTimestampCb.isSelected());
     }
 
     /**
@@ -112,11 +112,11 @@ public class DateFilterPanel extends JPanel {
      * Called by other components when it is needed.
      */
     public void loadFromPrefs() {
-        long t1 = Main.pref.getLong(prefDateMin, 0);
+        long t1 = Config.getPref().getLong(prefDateMin, 0);
         if (t1 != 0) dateFrom.setDate(new Date(t1));
-        long t2 = Main.pref.getLong(prefDateMax, 0);
+        long t2 = Config.getPref().getLong(prefDateMax, 0);
         if (t2 != 0) dateTo.setDate(new Date(t2));
-        noTimestampCb.setSelected(Main.pref.getBoolean(prefDate0, false));
+        noTimestampCb.setSelected(Config.getPref().getBoolean(prefDate0, false));
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/DownloadAlongPanel.java b/src/org/openstreetmap/josm/gui/layer/gpx/DownloadAlongPanel.java
index 27dcb7a..1f4d960 100644
--- a/src/org/openstreetmap/josm/gui/layer/gpx/DownloadAlongPanel.java
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/DownloadAlongPanel.java
@@ -18,6 +18,7 @@ import javax.swing.event.ChangeListener;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane.ButtonSpec;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
 
@@ -59,10 +60,10 @@ public class DownloadAlongPanel extends JPanel {
         this.prefArea = prefArea;
         this.prefNear = prefNear;
 
-        cbDownloadOsmData = new JCheckBox(tr("OpenStreetMap data"), Main.pref.getBoolean(prefOsm, true));
+        cbDownloadOsmData = new JCheckBox(tr("OpenStreetMap data"), Config.getPref().getBoolean(prefOsm, true));
         cbDownloadOsmData.setToolTipText(tr("Select to download OSM data."));
         add(cbDownloadOsmData, GBC.std().insets(1, 5, 1, 5));
-        cbDownloadGpxData = new JCheckBox(tr("Raw GPS data"), Main.pref.getBoolean(prefGps, false));
+        cbDownloadGpxData = new JCheckBox(tr("Raw GPS data"), Config.getPref().getBoolean(prefGps, false));
         cbDownloadGpxData.setToolTipText(tr("Select to download GPS traces."));
         add(cbDownloadGpxData, GBC.eol().insets(5, 5, 1, 5));
 
@@ -84,7 +85,7 @@ public class DownloadAlongPanel extends JPanel {
         if (prefNear != null) {
             add(new JLabel(tr("Download near:")), GBC.eol());
             downloadNear = new JList<>(new String[]{tr("track only"), tr("waypoints only"), tr("track and waypoints")});
-            downloadNear.setSelectedIndex(Main.pref.getInteger(prefNear, 0));
+            downloadNear.setSelectedIndex(Config.getPref().getInt(prefNear, 0));
             add(downloadNear, GBC.eol());
         } else {
             downloadNear = null;
@@ -137,12 +138,12 @@ public class DownloadAlongPanel extends JPanel {
      * Remembers the current settings in the download panel
      */
     protected final void rememberSettings() {
-        Main.pref.put(prefOsm, isDownloadOsmData());
-        Main.pref.put(prefGps, isDownloadGpxData());
-        Main.pref.putDouble(prefDist, getDistance());
-        Main.pref.putDouble(prefArea, getArea());
+        Config.getPref().putBoolean(prefOsm, isDownloadOsmData());
+        Config.getPref().putBoolean(prefGps, isDownloadGpxData());
+        Config.getPref().putDouble(prefDist, getDistance());
+        Config.getPref().putDouble(prefArea, getArea());
         if (prefNear != null) {
-            Main.pref.putInteger(prefNear, getNear());
+            Config.getPref().putInt(prefNear, getNear());
         }
     }
 
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelper.java b/src/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelper.java
index 2d8b2db..9934d89 100644
--- a/src/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelper.java
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelper.java
@@ -32,8 +32,8 @@ import java.util.Random;
 
 import javax.swing.ImageIcon;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.PreferencesUtils;
 import org.openstreetmap.josm.data.SystemOfMeasurement;
 import org.openstreetmap.josm.data.SystemOfMeasurement.SoMChangeListener;
 import org.openstreetmap.josm.data.coor.LatLon;
@@ -52,6 +52,7 @@ import org.openstreetmap.josm.gui.layer.MapViewPaintable.MapViewEvent;
 import org.openstreetmap.josm.gui.layer.MapViewPaintable.PaintableInvalidationEvent;
 import org.openstreetmap.josm.gui.layer.MapViewPaintable.PaintableInvalidationListener;
 import org.openstreetmap.josm.io.CachedFile;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ColorScale;
 import org.openstreetmap.josm.tools.JosmRuntimeException;
 import org.openstreetmap.josm.tools.Logging;
@@ -182,7 +183,7 @@ public class GpxDrawHelper implements SoMChangeListener, MapViewPaintable.LayerP
     private boolean gpxLayerInvalidated;
 
     private void setupColors() {
-        hdopAlpha = Main.pref.getInteger("hdop.color.alpha", -1);
+        hdopAlpha = Config.getPref().getInt("hdop.color.alpha", -1);
         velocityScale = ColorScale.createHSBScale(256);
         /** Colors (without custom alpha channel, if given) for HDOP painting. **/
         hdopScale = ColorScale.createHSBScale(256).makeReversed().addTitle(tr("HDOP"));
@@ -277,7 +278,7 @@ public class GpxDrawHelper implements SoMChangeListener, MapViewPaintable.LayerP
      */
     public ColorMode getColorMode(String layerName) {
         try {
-            int i = Main.pref.getInteger("draw.rawgps.colors", specName(layerName), 0);
+            int i = PreferencesUtils.getInteger(Config.getPref(), "draw.rawgps.colors", specName(layerName), 0);
             return ColorMode.fromIndex(i);
         } catch (IndexOutOfBoundsException e) {
             Logging.warn(e);
@@ -298,38 +299,38 @@ public class GpxDrawHelper implements SoMChangeListener, MapViewPaintable.LayerP
      **/
     public void readPreferences(String layerName) {
         String spec = specName(layerName);
-        forceLines = Main.pref.getBoolean("draw.rawgps.lines.force", spec, false);
-        direction = Main.pref.getBoolean("draw.rawgps.direction", spec, false);
-        lineWidth = Main.pref.getInteger("draw.rawgps.linewidth", spec, 0);
-        alphaLines = Main.pref.getBoolean("draw.rawgps.lines.alpha-blend", spec, false);
+        forceLines = PreferencesUtils.getBoolean(Config.getPref(), "draw.rawgps.lines.force", spec, false);
+        direction = PreferencesUtils.getBoolean(Config.getPref(), "draw.rawgps.direction", spec, false);
+        lineWidth = PreferencesUtils.getInteger(Config.getPref(), "draw.rawgps.linewidth", spec, 0);
+        alphaLines = PreferencesUtils.getBoolean(Config.getPref(), "draw.rawgps.lines.alpha-blend", spec, false);
 
         if (!data.fromServer) {
-            maxLineLength = Main.pref.getInteger("draw.rawgps.max-line-length.local", spec, -1);
-            lines = Main.pref.getBoolean("draw.rawgps.lines.local", spec, true);
+            maxLineLength = PreferencesUtils.getInteger(Config.getPref(), "draw.rawgps.max-line-length.local", spec, -1);
+            lines = PreferencesUtils.getBoolean(Config.getPref(), "draw.rawgps.lines.local", spec, true);
         } else {
-            maxLineLength = Main.pref.getInteger("draw.rawgps.max-line-length", spec, 200);
-            lines = Main.pref.getBoolean("draw.rawgps.lines", spec, true);
+            maxLineLength = PreferencesUtils.getInteger(Config.getPref(), "draw.rawgps.max-line-length", spec, 200);
+            lines = PreferencesUtils.getBoolean(Config.getPref(), "draw.rawgps.lines", spec, true);
         }
-        large = Main.pref.getBoolean("draw.rawgps.large", spec, false);
-        largesize = Main.pref.getInteger("draw.rawgps.large.size", spec, 3);
-        hdopCircle = Main.pref.getBoolean("draw.rawgps.hdopcircle", spec, false);
+        large = PreferencesUtils.getBoolean(Config.getPref(), "draw.rawgps.large", spec, false);
+        largesize = PreferencesUtils.getInteger(Config.getPref(), "draw.rawgps.large.size", spec, 3);
+        hdopCircle = PreferencesUtils.getBoolean(Config.getPref(), "draw.rawgps.hdopcircle", spec, false);
         colored = getColorMode(layerName);
-        alternateDirection = Main.pref.getBoolean("draw.rawgps.alternatedirection", spec, false);
-        delta = Main.pref.getInteger("draw.rawgps.min-arrow-distance", spec, 40);
-        colorTracksTune = Main.pref.getInteger("draw.rawgps.colorTracksTune", spec, 45);
-        colorModeDynamic = Main.pref.getBoolean("draw.rawgps.colors.dynamic", spec, false);
+        alternateDirection = PreferencesUtils.getBoolean(Config.getPref(), "draw.rawgps.alternatedirection", spec, false);
+        delta = PreferencesUtils.getInteger(Config.getPref(), "draw.rawgps.min-arrow-distance", spec, 40);
+        colorTracksTune = PreferencesUtils.getInteger(Config.getPref(), "draw.rawgps.colorTracksTune", spec, 45);
+        colorModeDynamic = PreferencesUtils.getBoolean(Config.getPref(), "draw.rawgps.colors.dynamic", spec, false);
         /* good HDOP's are between 1 and 3, very bad HDOP's go into 3 digit values */
-        hdoprange = Main.pref.getInteger("hdop.range", 7);
-        minTrackDurationForTimeColoring = Main.pref.getInteger("draw.rawgps.date-coloring-min-dt", 60);
-        largePointAlpha = Main.pref.getInteger("draw.rawgps.large.alpha", -1) & 0xFF;
+        hdoprange = Config.getPref().getInt("hdop.range", 7);
+        minTrackDurationForTimeColoring = Config.getPref().getInt("draw.rawgps.date-coloring-min-dt", 60);
+        largePointAlpha = Config.getPref().getInt("draw.rawgps.large.alpha", -1) & 0xFF;
 
         // get heatmap parameters
-        heatMapEnabled = Main.pref.getBoolean("draw.rawgps.heatmap.enabled", spec, false);
-        heatMapDrawExtraLine = Main.pref.getBoolean("draw.rawgps.heatmap.line-extra", spec, false);
-        heatMapDrawColorTableIdx = Main.pref.getInteger("draw.rawgps.heatmap.colormap", spec, 0);
-        heatMapDrawPointMode = Main.pref.getBoolean("draw.rawgps.heatmap.use-points", spec, false);
-        heatMapDrawGain = Main.pref.getInteger("draw.rawgps.heatmap.gain", spec, 0);
-        heatMapDrawLowerLimit = Main.pref.getInteger("draw.rawgps.heatmap.lower-limit", spec, 0);
+        heatMapEnabled = PreferencesUtils.getBoolean(Config.getPref(), "draw.rawgps.heatmap.enabled", spec, false);
+        heatMapDrawExtraLine = PreferencesUtils.getBoolean(Config.getPref(), "draw.rawgps.heatmap.line-extra", spec, false);
+        heatMapDrawColorTableIdx = PreferencesUtils.getInteger(Config.getPref(), "draw.rawgps.heatmap.colormap", spec, 0);
+        heatMapDrawPointMode = PreferencesUtils.getBoolean(Config.getPref(), "draw.rawgps.heatmap.use-points", spec, false);
+        heatMapDrawGain = PreferencesUtils.getInteger(Config.getPref(), "draw.rawgps.heatmap.gain", spec, 0);
+        heatMapDrawLowerLimit = PreferencesUtils.getInteger(Config.getPref(), "draw.rawgps.heatmap.lower-limit", spec, 0);
 
         // shrink to range
         heatMapDrawGain = Utils.clamp(heatMapDrawGain, -10, 10);
@@ -427,7 +428,7 @@ public class GpxDrawHelper implements SoMChangeListener, MapViewPaintable.LayerP
 
         // set hints for the render
         g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
-            Main.pref.getBoolean("mappaint.gpx.use-antialiasing", false) ?
+            Config.getPref().getBoolean("mappaint.gpx.use-antialiasing", false) ?
                     RenderingHints.VALUE_ANTIALIAS_ON : RenderingHints.VALUE_ANTIALIAS_OFF);
 
         if (lineWidth != 0) {
@@ -650,7 +651,7 @@ public class GpxDrawHelper implements SoMChangeListener, MapViewPaintable.LayerP
                     old = null;
                     continue;
                 }
-                Point screen = mv.getPoint(trkPnt.getEastNorth());
+                Point screen = mv.getPoint(trkPnt);
                 // skip points that are on the same screenposition
                 if (trkPnt.drawLine && old != null && ((old.x != screen.x) || (old.y != screen.y))) {
                     g.setColor(trkPnt.customColoring);
@@ -680,7 +681,7 @@ public class GpxDrawHelper implements SoMChangeListener, MapViewPaintable.LayerP
                     continue;
                 }
                 if (trkPnt.drawLine) {
-                    Point screen = mv.getPoint(trkPnt.getEastNorth());
+                    Point screen = mv.getPoint(trkPnt);
                     // skip points that are on the same screenposition
                     if (old != null
                             && (oldA == null || screen.x < oldA.x - delta || screen.x > oldA.x + delta
@@ -710,7 +711,7 @@ public class GpxDrawHelper implements SoMChangeListener, MapViewPaintable.LayerP
                     continue;
                 }
                 if (trkPnt.drawLine) {
-                    Point screen = mv.getPoint(trkPnt.getEastNorth());
+                    Point screen = mv.getPoint(trkPnt);
                     // skip points that are on the same screenposition
                     if (old != null
                             && (oldA == null || screen.x < oldA.x - delta || screen.x > oldA.x + delta
@@ -745,7 +746,7 @@ public class GpxDrawHelper implements SoMChangeListener, MapViewPaintable.LayerP
                 if (Double.isNaN(c.lat()) || Double.isNaN(c.lon())) {
                     continue;
                 }
-                Point screen = mv.getPoint(trkPnt.getEastNorth());
+                Point screen = mv.getPoint(trkPnt);
 
                 if (hdopCircle && trkPnt.get(GpxConstants.PT_HDOP) != null) {
                     // hdop value
@@ -786,7 +787,7 @@ public class GpxDrawHelper implements SoMChangeListener, MapViewPaintable.LayerP
                     continue;
                 }
                 if (!trkPnt.drawLine) {
-                    Point screen = mv.getPoint(trkPnt.getEastNorth());
+                    Point screen = mv.getPoint(trkPnt);
                     g.drawRect(screen.x, screen.y, 0, 0);
                 }
             } // end for trkpnt
@@ -802,7 +803,7 @@ public class GpxDrawHelper implements SoMChangeListener, MapViewPaintable.LayerP
                 if (Double.isNaN(c.lat()) || Double.isNaN(c.lon())) {
                     continue;
                 }
-                Point screen = mv.getPoint(trkPnt.getEastNorth());
+                Point screen = mv.getPoint(trkPnt);
                 g.setColor(trkPnt.customColoring);
                 g.drawRect(screen.x, screen.y, 0, 0);
             } // end for trkpnt
@@ -852,7 +853,7 @@ public class GpxDrawHelper implements SoMChangeListener, MapViewPaintable.LayerP
         for (WayPoint trkPnt : visibleSegments) {
 
             // transform coordinates
-            final Point paintPnt = mv.getPoint(trkPnt.getEastNorth());
+            final Point paintPnt = mv.getPoint(trkPnt);
 
             // skip single points
             if (lastPaintPnt != null && trkPnt.drawLine && !lastPaintPnt.equals(paintPnt)) {
@@ -1111,7 +1112,7 @@ public class GpxDrawHelper implements SoMChangeListener, MapViewPaintable.LayerP
         for (WayPoint trkPnt : listSegm) {
 
             // get transformed coordinates
-            final Point paintPnt = mv.getPoint(trkPnt.getEastNorth());
+            final Point paintPnt = mv.getPoint(trkPnt);
 
             // end of line segment or end of list reached
             if (!trkPnt.drawLine || (lastPnt == trkPnt)) {
@@ -1361,7 +1362,7 @@ public class GpxDrawHelper implements SoMChangeListener, MapViewPaintable.LayerP
         for (WayPoint trkPnt : listSegm) {
 
             // get transformed coordinates
-            final Point paintPnt = mv.getPoint(trkPnt.getEastNorth());
+            final Point paintPnt = mv.getPoint(trkPnt);
 
             // end of line segment or end of list reached
             if (trkPnt.drawLine && null != lastPnt) {
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/ImportAudioAction.java b/src/org/openstreetmap/josm/gui/layer/gpx/ImportAudioAction.java
index 5085113..a276bb4 100644
--- a/src/org/openstreetmap/josm/gui/layer/gpx/ImportAudioAction.java
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/ImportAudioAction.java
@@ -31,6 +31,7 @@ import org.openstreetmap.josm.gui.layer.markerlayer.AudioMarker;
 import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
 import org.openstreetmap.josm.gui.widgets.AbstractFileChooser;
 import org.openstreetmap.josm.io.audio.AudioUtil;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -137,7 +138,7 @@ public class ImportAudioAction extends AbstractAction {
         Collection<WayPoint> waypoints = new ArrayList<>();
         boolean timedMarkersOmitted = false;
         boolean untimedMarkersOmitted = false;
-        double snapDistance = Main.pref.getDouble("marker.audiofromuntimedwaypoints.distance", 1.0e-3);
+        double snapDistance = Config.getPref().getDouble("marker.audiofromuntimedwaypoints.distance", 1.0e-3);
         // about 25 m
         WayPoint wayPointFromTimeStamp = null;
 
@@ -170,7 +171,7 @@ public class ImportAudioAction extends AbstractAction {
         }
 
         // (a) try explicit timestamped waypoints - unless suppressed
-        if (hasWaypoints && Main.pref.getBoolean("marker.audiofromexplicitwaypoints", true)) {
+        if (hasWaypoints && Config.getPref().getBoolean("marker.audiofromexplicitwaypoints", true)) {
             for (WayPoint w : layer.data.waypoints) {
                 if (w.time > firstTime) {
                     waypoints.add(w);
@@ -181,12 +182,12 @@ public class ImportAudioAction extends AbstractAction {
         }
 
         // (b) try explicit waypoints without timestamps - unless suppressed
-        if (hasWaypoints && Main.pref.getBoolean("marker.audiofromuntimedwaypoints", true)) {
+        if (hasWaypoints && Config.getPref().getBoolean("marker.audiofromuntimedwaypoints", true)) {
             for (WayPoint w : layer.data.waypoints) {
                 if (waypoints.contains(w)) {
                     continue;
                 }
-                WayPoint wNear = layer.data.nearestPointOnTrack(w.getEastNorth(), snapDistance);
+                WayPoint wNear = layer.data.nearestPointOnTrack(w.getEastNorth(Main.getProjection()), snapDistance);
                 if (wNear != null) {
                     WayPoint wc = new WayPoint(w.getCoor());
                     wc.time = wNear.time;
@@ -201,7 +202,7 @@ public class ImportAudioAction extends AbstractAction {
         }
 
         // (c) use explicitly named track points, again unless suppressed
-        if (layer.data.tracks != null && Main.pref.getBoolean("marker.audiofromnamedtrackpoints", false)
+        if (layer.data.tracks != null && Config.getPref().getBoolean("marker.audiofromnamedtrackpoints", false)
                 && !layer.data.tracks.isEmpty()) {
             for (GpxTrack track : layer.data.tracks) {
                 for (GpxTrackSegment seg : track.getSegments()) {
@@ -215,12 +216,12 @@ public class ImportAudioAction extends AbstractAction {
         }
 
         // (d) use timestamp of file as location on track
-        if (hasTracks && Main.pref.getBoolean("marker.audiofromwavtimestamps", false)) {
+        if (hasTracks && Config.getPref().getBoolean("marker.audiofromwavtimestamps", false)) {
             double lastModified = audioFile.lastModified() / 1000.0; // lastModified is in milliseconds
             double duration = AudioUtil.getCalibratedDuration(audioFile);
             double startTime = lastModified - duration;
             startTime = firstStartTime + (startTime - firstStartTime)
-                    / Main.pref.getDouble("audio.calibration", 1.0 /* default, ratio */);
+                    / Config.getPref().getDouble("audio.calibration", 1.0 /* default, ratio */);
             WayPoint w1 = null;
             WayPoint w2 = null;
 
@@ -258,7 +259,7 @@ public class ImportAudioAction extends AbstractAction {
         // (e) analyse audio for spoken markers here, in due course
 
         // (f) simply add a single marker at the start of the track
-        if ((Main.pref.getBoolean("marker.audiofromstart") || waypoints.isEmpty()) && hasTracks) {
+        if ((Config.getPref().getBoolean("marker.audiofromstart") || waypoints.isEmpty()) && hasTracks) {
             boolean gotOne = false;
             for (GpxTrack track : layer.data.tracks) {
                 for (GpxTrackSegment seg : track.getSegments()) {
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/ImportImagesAction.java b/src/org/openstreetmap/josm/gui/layer/gpx/ImportImagesAction.java
index 5d57798..f520073 100644
--- a/src/org/openstreetmap/josm/gui/layer/gpx/ImportImagesAction.java
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/ImportImagesAction.java
@@ -20,6 +20,7 @@ import org.openstreetmap.josm.gui.layer.GpxLayer;
 import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
 import org.openstreetmap.josm.gui.widgets.AbstractFileChooser;
 import org.openstreetmap.josm.gui.widgets.FileChooserManager;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -67,7 +68,7 @@ public class ImportImagesAction extends AbstractAction {
             return;
         }
         JpgImporter importer = new JpgImporter(layer);
-        AbstractFileChooser fc = new FileChooserManager(true, "geoimage.lastdirectory", Main.pref.get("lastDirectory")).
+        AbstractFileChooser fc = new FileChooserManager(true, "geoimage.lastdirectory", Config.getPref().get("lastDirectory")).
                 createFileChooser(true, null, importer.filter, JFileChooser.FILES_AND_DIRECTORIES).openFileChooser();
         if (fc != null) {
             File[] sel = fc.getSelectedFiles();
diff --git a/src/org/openstreetmap/josm/gui/layer/imagery/ColorfulImageProcessor.java b/src/org/openstreetmap/josm/gui/layer/imagery/ColorfulImageProcessor.java
index f19eeca..d548f19 100644
--- a/src/org/openstreetmap/josm/gui/layer/imagery/ColorfulImageProcessor.java
+++ b/src/org/openstreetmap/josm/gui/layer/imagery/ColorfulImageProcessor.java
@@ -5,8 +5,8 @@ import java.awt.image.BufferedImage;
 import java.util.Collections;
 import java.util.Map;
 
-import org.openstreetmap.josm.gui.layer.ImageProcessor;
 import org.openstreetmap.josm.io.session.SessionAwareReadApply;
+import org.openstreetmap.josm.tools.ImageProcessor;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
 
diff --git a/src/org/openstreetmap/josm/gui/layer/imagery/GammaImageProcessor.java b/src/org/openstreetmap/josm/gui/layer/imagery/GammaImageProcessor.java
index b8fb145..d64eeb0 100644
--- a/src/org/openstreetmap/josm/gui/layer/imagery/GammaImageProcessor.java
+++ b/src/org/openstreetmap/josm/gui/layer/imagery/GammaImageProcessor.java
@@ -8,8 +8,8 @@ import java.awt.image.ShortLookupTable;
 import java.util.Collections;
 import java.util.Map;
 
-import org.openstreetmap.josm.gui.layer.ImageProcessor;
 import org.openstreetmap.josm.io.session.SessionAwareReadApply;
+import org.openstreetmap.josm.tools.ImageProcessor;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
 
diff --git a/src/org/openstreetmap/josm/gui/layer/imagery/ImageryFilterSettings.java b/src/org/openstreetmap/josm/gui/layer/imagery/ImageryFilterSettings.java
index 380b6a3..8c8b4fb 100644
--- a/src/org/openstreetmap/josm/gui/layer/imagery/ImageryFilterSettings.java
+++ b/src/org/openstreetmap/josm/gui/layer/imagery/ImageryFilterSettings.java
@@ -5,7 +5,7 @@ import java.util.Arrays;
 import java.util.List;
 import java.util.concurrent.CopyOnWriteArrayList;
 
-import org.openstreetmap.josm.gui.layer.ImageProcessor;
+import org.openstreetmap.josm.tools.ImageProcessor;
 
 /**
  * This class holds the filter settings for an imagery layer.
diff --git a/src/org/openstreetmap/josm/gui/layer/imagery/ReprojectionTile.java b/src/org/openstreetmap/josm/gui/layer/imagery/ReprojectionTile.java
index 3d5e3dc..e13f380 100644
--- a/src/org/openstreetmap/josm/gui/layer/imagery/ReprojectionTile.java
+++ b/src/org/openstreetmap/josm/gui/layer/imagery/ReprojectionTile.java
@@ -14,6 +14,7 @@ import org.openstreetmap.josm.data.imagery.CoordinateConversion;
 import org.openstreetmap.josm.data.projection.Projection;
 import org.openstreetmap.josm.data.projection.Projections;
 import org.openstreetmap.josm.gui.MainApplication;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ImageWarp;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -112,7 +113,7 @@ public class ReprojectionTile extends Tile {
         }
         double scaleMapView = MainApplication.getMap().mapView.getScale();
         ImageWarp.Interpolation interpolation;
-        switch (Main.pref.get("imagery.warp.pixel-interpolation", "bilinear")) {
+        switch (Config.getPref().get("imagery.warp.pixel-interpolation", "bilinear")) {
             case "nearest_neighbor":
                 interpolation = ImageWarp.Interpolation.NEAREST_NEIGHBOR;
                 break;
@@ -158,7 +159,7 @@ public class ReprojectionTile extends Tile {
                 (pbTargetAligned.maxNorth - en11Current.north()) / scale);
 
         ImageWarp.PointTransform transform;
-        int stride = Main.pref.getInteger("imagery.warp.projection-interpolation.stride", 7);
+        int stride = Config.getPref().getInt("imagery.warp.projection-interpolation.stride", 7);
         if (stride > 0) {
             transform = new ImageWarp.GridTransform(pointTransform, stride);
         } else {
diff --git a/src/org/openstreetmap/josm/gui/layer/imagery/SharpenImageProcessor.java b/src/org/openstreetmap/josm/gui/layer/imagery/SharpenImageProcessor.java
index 1a89f21..470f36d 100644
--- a/src/org/openstreetmap/josm/gui/layer/imagery/SharpenImageProcessor.java
+++ b/src/org/openstreetmap/josm/gui/layer/imagery/SharpenImageProcessor.java
@@ -7,8 +7,8 @@ import java.awt.image.Kernel;
 import java.util.Collections;
 import java.util.Map;
 
-import org.openstreetmap.josm.gui.layer.ImageProcessor;
 import org.openstreetmap.josm.io.session.SessionAwareReadApply;
+import org.openstreetmap.josm.tools.ImageProcessor;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
 
diff --git a/src/org/openstreetmap/josm/gui/layer/imagery/TileSourceDisplaySettings.java b/src/org/openstreetmap/josm/gui/layer/imagery/TileSourceDisplaySettings.java
index 774fedc..fb449b0 100644
--- a/src/org/openstreetmap/josm/gui/layer/imagery/TileSourceDisplaySettings.java
+++ b/src/org/openstreetmap/josm/gui/layer/imagery/TileSourceDisplaySettings.java
@@ -12,6 +12,7 @@ import org.openstreetmap.josm.data.imagery.OffsetBookmark;
 import org.openstreetmap.josm.data.preferences.BooleanProperty;
 import org.openstreetmap.josm.gui.layer.AbstractTileSourceLayer;
 import org.openstreetmap.josm.io.session.SessionAwareReadApply;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.JosmRuntimeException;
 import org.openstreetmap.josm.tools.bugreport.BugReport;
@@ -100,8 +101,8 @@ public class TileSourceDisplaySettings implements SessionAwareReadApply {
         boolean value = true;
         for (String p : prefixes) {
             String key = p + "." + name;
-            boolean currentValue = Main.pref.getBoolean(key, true);
-            if (!Main.pref.get(key).isEmpty()) {
+            boolean currentValue = Config.getPref().getBoolean(key, true);
+            if (!Config.getPref().get(key).isEmpty()) {
                 value = currentValue;
             }
         }
@@ -215,7 +216,7 @@ public class TileSourceDisplaySettings implements SessionAwareReadApply {
     }
 
     private void setDisplacement(EastNorth displacement) {
-        CheckParameterUtil.ensureValidCoordinates(displacement, "displacement");
+        CheckParameterUtil.ensure(displacement, "displacement", EastNorth::isValid);
         this.displacement = displacement;
         fireSettingsChange(DISPLACEMENT);
     }
diff --git a/src/org/openstreetmap/josm/gui/layer/markerlayer/ButtonMarker.java b/src/org/openstreetmap/josm/gui/layer/markerlayer/ButtonMarker.java
index 1df2597..ec3ee99 100644
--- a/src/org/openstreetmap/josm/gui/layer/markerlayer/ButtonMarker.java
+++ b/src/org/openstreetmap/josm/gui/layer/markerlayer/ButtonMarker.java
@@ -10,10 +10,10 @@ import javax.swing.BorderFactory;
 import javax.swing.border.BevelBorder;
 import javax.swing.border.Border;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.MapView;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.template_engine.TemplateEngineDataProvider;
 
 /**
@@ -38,7 +38,7 @@ public class ButtonMarker extends Marker {
     }
 
     @Override public boolean containsPoint(Point p) {
-        Point screen = MainApplication.getMap().mapView.getPoint(getEastNorth());
+        Point screen = MainApplication.getMap().mapView.getPoint(this);
         buttonRectangle.setLocation(screen.x+4, screen.y+2);
         return buttonRectangle.contains(p);
     }
@@ -48,7 +48,7 @@ public class ButtonMarker extends Marker {
             super.paint(g, mv, mousePressed, showTextOrIcon);
             return;
         }
-        Point screen = mv.getPoint(getEastNorth());
+        Point screen = mv.getPoint(this);
         buttonRectangle.setLocation(screen.x+4, screen.y+2);
         paintIcon(mv, g, screen.x+4, screen.y+2);
         Border b;
@@ -66,7 +66,7 @@ public class ButtonMarker extends Marker {
         b.paintBorder(mv, g, r.x, r.y, r.width, r.height);
 
         String labelText = getText();
-        if (labelText != null && Main.pref.getBoolean("marker.buttonlabels", true)) {
+        if (labelText != null && Config.getPref().getBoolean("marker.buttonlabels", true)) {
             g.drawString(labelText, screen.x+4, screen.y+2);
         }
     }
diff --git a/src/org/openstreetmap/josm/gui/layer/markerlayer/Marker.java b/src/org/openstreetmap/josm/gui/layer/markerlayer/Marker.java
index 38d6f8a..f118c79 100644
--- a/src/org/openstreetmap/josm/gui/layer/markerlayer/Marker.java
+++ b/src/org/openstreetmap/josm/gui/layer/markerlayer/Marker.java
@@ -22,9 +22,11 @@ import java.util.TimeZone;
 
 import javax.swing.ImageIcon;
 
-import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
 import org.openstreetmap.josm.data.coor.CachedLatLon;
 import org.openstreetmap.josm.data.coor.EastNorth;
+import org.openstreetmap.josm.data.coor.ILatLon;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.gpx.GpxConstants;
 import org.openstreetmap.josm.data.gpx.WayPoint;
@@ -74,7 +76,7 @@ import org.openstreetmap.josm.tools.template_engine.TemplateParser;
  *
  * @author Frederik Ramm
  */
-public class Marker implements TemplateEngineDataProvider {
+public class Marker implements TemplateEngineDataProvider, ILatLon {
 
     public static final class TemplateEntryProperty extends CachedProperty<TemplateEntry> {
         // This class is a bit complicated because it supports both global and per layer settings. I've added per layer settings because
@@ -317,11 +319,29 @@ public class Marker implements TemplateEngineDataProvider {
     }
 
     /**
+     * @since 12725
+     */
+    @Override
+    public double lon() {
+        return coor == null ? Double.NaN : coor.lon();
+    }
+
+    /**
+     * @since 12725
+     */
+    @Override
+    public double lat() {
+        return coor == null ? Double.NaN : coor.lat();
+    }
+
+    /**
      * Returns the marker's projected coordinates.
      * @return The marker's projected coordinates (easting/northing)
+     * @deprecated use {@link #getEastNorth(org.openstreetmap.josm.data.projection.Projecting)}
      */
+    @Deprecated
     public final EastNorth getEastNorth() {
-        return coor.getEastNorth();
+        return coor.getEastNorth(Main.getProjection());
     }
 
     /**
@@ -353,7 +373,7 @@ public class Marker implements TemplateEngineDataProvider {
      * @param showTextOrIcon true if text and icon shall be drawn
      */
     public void paint(Graphics g, MapView mv, boolean mousePressed, boolean showTextOrIcon) {
-        Point screen = mv.getPoint(getEastNorth());
+        Point screen = mv.getPoint(this);
         if (symbol != null && showTextOrIcon) {
             paintIcon(mv, g, screen.x-symbol.getIconWidth()/2, screen.y-symbol.getIconHeight()/2);
         } else {
diff --git a/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java b/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java
index dd1ff07..592b364 100644
--- a/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java
@@ -50,6 +50,7 @@ import org.openstreetmap.josm.gui.layer.JumpToMarkerActions.JumpToPreviousMarker
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.gpx.ConvertToDataLayerAction;
 import org.openstreetmap.josm.io.audio.AudioPlayer;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
@@ -210,7 +211,7 @@ public class MarkerLayer extends Layer implements JumpToMarkerLayer {
 
     @Override public void visitBoundingBox(BoundingXYVisitor v) {
         for (Marker mkr : data) {
-            v.visit(mkr.getEastNorth());
+            v.visit(mkr);
         }
     }
 
@@ -229,7 +230,7 @@ public class MarkerLayer extends Layer implements JumpToMarkerLayer {
         components.add(new CustomizeColor(this));
         components.add(SeparatorLayerAction.INSTANCE);
         components.add(new SynchronizeAudio());
-        if (Main.pref.getBoolean("marker.traceaudio", true)) {
+        if (Config.getPref().getBoolean("marker.traceaudio", true)) {
             components.add(new MoveAudio());
         }
         components.add(new JumpToNextMarker(this));
@@ -351,7 +352,7 @@ public class MarkerLayer extends Layer implements JumpToMarkerLayer {
                 }
             }
         }
-        MainApplication.getMap().mapView.zoomTo(currentMarker.getEastNorth());
+        MainApplication.getMap().mapView.zoomTo(currentMarker);
     }
 
     @Override
@@ -370,7 +371,7 @@ public class MarkerLayer extends Layer implements JumpToMarkerLayer {
                 }
             }
         }
-        MainApplication.getMap().mapView.zoomTo(currentMarker.getEastNorth());
+        MainApplication.getMap().mapView.zoomTo(currentMarker);
     }
 
     public static void playAudio() {
@@ -438,7 +439,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 = Config.getPref().get("marker.show "+getName(), "show");
         return "show".equalsIgnoreCase(current);
     }
 
@@ -490,7 +491,7 @@ public class MarkerLayer extends Layer implements JumpToMarkerLayer {
 
         @Override
         public void actionPerformed(ActionEvent e) {
-            Main.pref.put("marker.show "+layer.getName(), layer.isTextOrIconShown() ? "hide" : "show");
+            Config.getPref().put("marker.show "+layer.getName(), layer.isTextOrIconShown() ? "hide" : "show");
             layer.invalidate();
         }
 
diff --git a/src/org/openstreetmap/josm/gui/layer/markerlayer/PlayHeadMarker.java b/src/org/openstreetmap/josm/gui/layer/markerlayer/PlayHeadMarker.java
index 2421fc7..363973b 100644
--- a/src/org/openstreetmap/josm/gui/layer/markerlayer/PlayHeadMarker.java
+++ b/src/org/openstreetmap/josm/gui/layer/markerlayer/PlayHeadMarker.java
@@ -27,6 +27,7 @@ import org.openstreetmap.josm.gui.MapView;
 import org.openstreetmap.josm.gui.layer.GpxLayer;
 import org.openstreetmap.josm.io.audio.AudioPlayer;
 import org.openstreetmap.josm.io.audio.AudioUtil;
+import org.openstreetmap.josm.spi.preferences.Config;
 
 /**
  * Singleton marker class to track position of audio.
@@ -59,11 +60,11 @@ public final class PlayHeadMarker extends Marker {
 
     private PlayHeadMarker() {
         super(LatLon.ZERO, "",
-                Main.pref.get("marker.audiotracericon", "audio-tracer"),
+                Config.getPref().get("marker.audiotracericon", "audio-tracer"),
                 null, -1.0, 0.0);
-        enabled = Main.pref.getBoolean("marker.traceaudio", true);
+        enabled = Config.getPref().getBoolean("marker.traceaudio", true);
         if (!enabled) return;
-        dropTolerance = Main.pref.getInteger("marker.playHeadDropTolerance", 50);
+        dropTolerance = Config.getPref().getInt("marker.playHeadDropTolerance", 50);
         if (MainApplication.isDisplayingMapView()) {
             MapFrame map = MainApplication.getMap();
             map.mapView.addMouseListener(new MouseAdapter() {
@@ -84,7 +85,7 @@ public final class PlayHeadMarker extends Marker {
 
     @Override
     public boolean containsPoint(Point p) {
-        Point screen = MainApplication.getMap().mapView.getPoint(getEastNorth());
+        Point screen = MainApplication.getMap().mapView.getPoint(this);
         Rectangle r = new Rectangle(screen.x, screen.y, symbol.getIconWidth(),
                 symbol.getIconHeight());
         return r.contains(p);
@@ -213,7 +214,7 @@ public final class PlayHeadMarker extends Marker {
             double closestAudioMarkerDistanceSquared = 1.0E100;
             for (Marker m : recent.parentLayer.data) {
                 if (m instanceof AudioMarker) {
-                    double distanceSquared = m.getEastNorth().distanceSq(en);
+                    double distanceSquared = m.getEastNorth(Main.getProjection()).distanceSq(en);
                     if (distanceSquared < closestAudioMarkerDistanceSquared) {
                         ca = (AudioMarker) m;
                         closestAudioMarkerDistanceSquared = distanceSquared;
@@ -282,7 +283,7 @@ public final class PlayHeadMarker extends Marker {
      */
     public void paint(Graphics g, MapView mv) {
         if (time < 0.0) return;
-        Point screen = mv.getPoint(getEastNorth());
+        Point screen = mv.getPoint(this);
         paintIcon(mv, g, screen.x, screen.y);
     }
 
@@ -293,7 +294,7 @@ public final class PlayHeadMarker extends Marker {
         if (!enabled) return;
         jumpToMarker = true;
         if (timer == null) {
-            animationInterval = Main.pref.getDouble("marker.audioanimationinterval", 1.0); //milliseconds
+            animationInterval = Config.getPref().getDouble("marker.audioanimationinterval", 1.0); //milliseconds
             timer = new Timer((int) (animationInterval * 1000.0), e -> timerAction());
             timer.setInitialDelay(0);
         } else {
@@ -346,14 +347,14 @@ public final class PlayHeadMarker extends Marker {
         if (w1 == null)
             return;
         setEastNorth(w2 == null ?
-                w1.getEastNorth() :
-                    w1.getEastNorth().interpolate(w2.getEastNorth(),
+                w1.getEastNorth(Main.getProjection()) :
+                    w1.getEastNorth(Main.getProjection()).interpolate(w2.getEastNorth(Main.getProjection()),
                             (audioTime - w1.time)/(w2.time - w1.time)));
         time = audioTime;
         MapView mapView = MainApplication.getMap().mapView;
         if (jumpToMarker) {
             jumpToMarker = false;
-            mapView.zoomTo(w1.getEastNorth());
+            mapView.zoomTo(w1);
         }
         mapView.repaint();
     }
diff --git a/src/org/openstreetmap/josm/data/validation/PaintVisitor.java b/src/org/openstreetmap/josm/gui/layer/validation/PaintVisitor.java
similarity index 95%
rename from src/org/openstreetmap/josm/data/validation/PaintVisitor.java
rename to src/org/openstreetmap/josm/gui/layer/validation/PaintVisitor.java
index d239608..ba5c174 100644
--- a/src/org/openstreetmap/josm/data/validation/PaintVisitor.java
+++ b/src/org/openstreetmap/josm/gui/layer/validation/PaintVisitor.java
@@ -1,5 +1,5 @@
 // License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.data.validation;
+package org.openstreetmap.josm.gui.layer.validation;
 
 import java.awt.Color;
 import java.awt.Graphics2D;
@@ -15,7 +15,9 @@ import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.osm.WaySegment;
-import org.openstreetmap.josm.data.osm.visitor.AbstractVisitor;
+import org.openstreetmap.josm.data.osm.visitor.OsmPrimitiveVisitor;
+import org.openstreetmap.josm.data.validation.TestError;
+import org.openstreetmap.josm.data.validation.ValidatorVisitor;
 import org.openstreetmap.josm.gui.MapView;
 import org.openstreetmap.josm.gui.draw.MapViewPath;
 import org.openstreetmap.josm.gui.draw.SymbolShape;
@@ -25,8 +27,9 @@ import org.openstreetmap.josm.tools.Utils;
  * Visitor that highlights the primitives affected by an error
  * @author frsantos
  * @since 5671
+ * @since 12823 (moved from {@code data.validation} package)
  */
-public class PaintVisitor extends AbstractVisitor implements ValidatorVisitor {
+public class PaintVisitor implements OsmPrimitiveVisitor, ValidatorVisitor {
     /** The graphics */
     private final Graphics2D g;
     /** The MapView */
diff --git a/src/org/openstreetmap/josm/gui/layer/validation/package-info.java b/src/org/openstreetmap/josm/gui/layer/validation/package-info.java
new file mode 100644
index 0000000..b723294
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/layer/validation/package-info.java
@@ -0,0 +1,6 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Provides classes for handling validation layer.
+ */
+package org.openstreetmap.josm.gui.layer.validation;
diff --git a/src/org/openstreetmap/josm/gui/mappaint/BooleanStyleSettingGui.java b/src/org/openstreetmap/josm/gui/mappaint/BooleanStyleSettingGui.java
new file mode 100644
index 0000000..8c61334
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/mappaint/BooleanStyleSettingGui.java
@@ -0,0 +1,41 @@
+// License: GPL. For details, see LICENSE file.
+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.gui.MainApplication;
+import org.openstreetmap.josm.gui.mappaint.loader.MapPaintStyleLoader;
+
+/**
+ * GUI elements for a {@link StyleSetting.BooleanStyleSetting} class.
+ * @since 12831
+ */
+public class BooleanStyleSettingGui implements StyleSettingGui {
+
+    final StyleSetting.BooleanStyleSetting setting;
+
+    public BooleanStyleSettingGui(StyleSetting.BooleanStyleSetting setting) {
+        this.setting = setting;
+    }
+
+    @Override
+    public void addMenuEntry(JMenu menu) {
+        final JCheckBoxMenuItem item = new JCheckBoxMenuItem();
+        Action a = new AbstractAction(setting.label) {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                setting.setValue(item.isSelected());
+                MainApplication.worker.submit(new MapPaintStyleLoader(Arrays.asList(setting.parentStyle)));
+            }
+        };
+        item.setAction(a);
+        item.setSelected((boolean) setting.getValue());
+        menu.add(item);
+    }
+}
diff --git a/src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java b/src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java
index e7c2156..6a1e2a5 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java
@@ -10,9 +10,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
-import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Relation;
@@ -32,6 +31,7 @@ import org.openstreetmap.josm.gui.mappaint.styleelement.StyleElement;
 import org.openstreetmap.josm.gui.mappaint.styleelement.TextElement;
 import org.openstreetmap.josm.gui.mappaint.styleelement.TextLabel;
 import org.openstreetmap.josm.gui.util.GuiHelper;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Pair;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -73,7 +73,7 @@ public class ElemStyles implements PreferenceChangedListener {
      */
     public ElemStyles() {
         styleSources = new ArrayList<>();
-        Main.pref.addPreferenceChangeListener(this);
+        Config.getPref().addPreferenceChangeListener(this);
     }
 
     /**
@@ -516,7 +516,7 @@ public class ElemStyles implements PreferenceChangedListener {
     /**
      * Determines whether primitive has area-type {@link StyleElement}s, but
      * no line-type StyleElements.
-     * 
+     *
      * {@link TextElement} is ignored, as it can be both line and area-type.
      * @param p the OSM primitive
      * @return {@code true} if primitive has area elements, but no line elements
@@ -550,7 +550,7 @@ public class ElemStyles implements PreferenceChangedListener {
      * as soon as this preference value is changed by the user.
      *
      * In addition, it adds an intermediate cache for the preference values,
-     * as frequent preference lookup (using <code>Main.pref.get()</code>) for
+     * as frequent preference lookup (using <code>Config.getPref().get()</code>) for
      * each primitive can be slow during rendering.
      *
      * @param key preference key
@@ -563,7 +563,7 @@ public class ElemStyles implements PreferenceChangedListener {
         if (preferenceCache.containsKey(key)) {
             res = preferenceCache.get(key);
         } else {
-            res = Main.pref.get(key, null);
+            res = Config.getPref().get(key, null);
             preferenceCache.put(key, res);
         }
         return res != null ? res : def;
diff --git a/src/org/openstreetmap/josm/gui/mappaint/MapPaintStyles.java b/src/org/openstreetmap/josm/gui/mappaint/MapPaintStyles.java
index 89ee08c..b2b24b6 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/MapPaintStyles.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/MapPaintStyles.java
@@ -26,6 +26,7 @@ import org.openstreetmap.josm.gui.mappaint.styleelement.MapImage;
 import org.openstreetmap.josm.gui.mappaint.styleelement.NodeElement;
 import org.openstreetmap.josm.gui.mappaint.styleelement.StyleElement;
 import org.openstreetmap.josm.io.CachedFile;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.ListenerList;
 import org.openstreetmap.josm.tools.Logging;
@@ -255,7 +256,7 @@ public final class MapPaintStyles {
             dirs.add(sourceDir.getPath());
         }
 
-        Collection<String> prefIconDirs = Main.pref.getCollection("mappaint.icon.sources");
+        Collection<String> prefIconDirs = Config.getPref().getList("mappaint.icon.sources");
         for (String fileset : prefIconDirs) {
             String[] a;
             if (fileset.indexOf('=') >= 0) {
@@ -270,7 +271,7 @@ public final class MapPaintStyles {
             }
         }
 
-        if (Main.pref.getBoolean("mappaint.icon.enable-defaults", true)) {
+        if (Config.getPref().getBoolean("mappaint.icon.enable-defaults", true)) {
             /* don't prefix icon path, as it should be generic */
             dirs.add("resource://images/");
         }
@@ -298,9 +299,9 @@ public final class MapPaintStyles {
     private static void loadStyleForFirstTime(StyleSource source) {
         final long startTime = System.currentTimeMillis();
         source.loadStyleSource();
-        if (Main.pref.getBoolean("mappaint.auto_reload_local_styles", true) && source.isLocal()) {
+        if (Config.getPref().getBoolean("mappaint.auto_reload_local_styles", true) && source.isLocal()) {
             try {
-                Main.fileWatcher.registerStyleSource(source);
+                Main.fileWatcher.registerSource(source);
             } catch (IOException | IllegalStateException | IllegalArgumentException e) {
                 Logging.error(e);
             }
diff --git a/src/org/openstreetmap/josm/gui/mappaint/RenderingCLI.java b/src/org/openstreetmap/josm/gui/mappaint/RenderingCLI.java
new file mode 100644
index 0000000..300d819
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/mappaint/RenderingCLI.java
@@ -0,0 +1,649 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.mappaint;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.Graphics2D;
+import java.awt.Point;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Optional;
+import java.util.function.Supplier;
+import java.util.logging.Level;
+
+import javax.imageio.ImageIO;
+
+import org.openstreetmap.gui.jmapviewer.OsmMercator;
+import org.openstreetmap.josm.CLIModule;
+import org.openstreetmap.josm.tools.I18n;
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.Preferences;
+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.coor.conversion.LatLonParser;
+import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.visitor.paint.PaintColors;
+import org.openstreetmap.josm.data.osm.visitor.paint.StyledMapRenderer;
+import org.openstreetmap.josm.data.preferences.sources.SourceEntry;
+import org.openstreetmap.josm.data.preferences.sources.SourceType;
+import org.openstreetmap.josm.data.projection.Projection;
+import org.openstreetmap.josm.data.projection.Projections;
+import org.openstreetmap.josm.gui.NavigatableComponent;
+import org.openstreetmap.josm.gui.mappaint.StyleSetting.BooleanStyleSetting;
+import org.openstreetmap.josm.gui.mappaint.mapcss.MapCSSStyleSource;
+import org.openstreetmap.josm.io.IllegalDataException;
+import org.openstreetmap.josm.io.OsmReader;
+import org.openstreetmap.josm.spi.preferences.Config;
+import org.openstreetmap.josm.spi.preferences.MemoryPreferences;
+import org.openstreetmap.josm.tools.Logging;
+import org.openstreetmap.josm.tools.RightAndLefthandTraffic;
+
+import gnu.getopt.Getopt;
+import gnu.getopt.LongOpt;
+
+/**
+ * Command line interface for rendering osm data to an image file.
+ *
+ * @since 12906
+ */
+public class RenderingCLI implements CLIModule {
+
+    /**
+     * The singleton instance of this class.
+     */
+    public static final RenderingCLI INSTANCE = new RenderingCLI();
+
+    private static final double PIXEL_PER_METER = 96 / 2.54 * 100; // standard value of 96 dpi display resolution
+    private static final int DEFAULT_MAX_IMAGE_SIZE = 20000;
+
+    private boolean argDebug;
+    private boolean argTrace;
+    private String argInput;
+    private String argOutput;
+    private List<StyleData> argStyles;
+    private Integer argZoom;
+    private Double argScale;
+    private Bounds argBounds;
+    private LatLon argAnchor;
+    private Double argWidthM;
+    private Double argHeightM;
+    private Integer argWidthPx;
+    private Integer argHeightPx;
+    private String argProjection;
+    private Integer argMaxImageSize;
+
+    private enum Option {
+        HELP(false, 'h'),
+        DEBUG(false, '*'),
+        TRACE(false, '*'),
+        INPUT(true, 'i'),
+        STYLE(true, 's'),
+        SETTING(true, '*'),
+        OUTPUT(true, 'o'),
+        ZOOM(true, 'z'),
+        SCALE(true, '*'),
+        BOUNDS(true, 'b'),
+        ANCHOR(true, '*'),
+        WIDTH_M(true, '*'),
+        HEIGHT_M(true, '*'),
+        WIDTH_PX(true, '*'),
+        HEIGHT_PX(true, '*'),
+        PROJECTION(true, '*'),
+        MAX_IMAGE_SIZE(true, '*');
+
+        private final String name;
+        private final boolean requiresArg;
+        private final char shortOption;
+
+        Option(boolean requiresArgument, char shortOption) {
+            this.name = name().toLowerCase(Locale.US).replace('_', '-');
+            this.requiresArg = requiresArgument;
+            this.shortOption = shortOption;
+        }
+
+        /**
+         * Replies the option name
+         * @return The option name, in lowercase
+         */
+        public String getName() {
+            return name;
+        }
+
+        /**
+         * Determines if this option requires an argument.
+         * @return {@code true} if this option requires an argument, {@code false} otherwise
+         */
+        public boolean requiresArgument() {
+            return requiresArg;
+        }
+
+        /**
+         * Replies the short option (single letter) associated with this option.
+         * @return the short option or '*' if there is no short option
+         */
+        public char getShortOption() {
+            return shortOption;
+        }
+
+        LongOpt toLongOpt() {
+            return new LongOpt(getName(), requiresArgument() ? LongOpt.REQUIRED_ARGUMENT : LongOpt.NO_ARGUMENT, null, getShortOption());
+        }
+    }
+
+    /**
+     * Data class to save style settings along with the corresponding style url.
+     */
+    private static class StyleData {
+        public String styleUrl;
+        public Map<String, String> settings = new HashMap<>();
+    }
+
+    /**
+     * Data class to hold return values for {@link #determineRenderingArea(DataSet)}.
+     *
+     * Package private access for unit tests.
+     */
+    static class RenderingArea {
+        public Bounds bounds;
+        public ProjectionBounds projBounds;
+        public double scale; // in east-north units per pixel (unlike the --scale option, which is in meter per meter)
+    }
+
+    RenderingCLI() {
+        // hide constructor (package private access for unit tests)
+    }
+
+    @Override
+    public String getActionKeyword() {
+        return "render";
+    }
+
+    @Override
+    public void processArguments(String[] argArray) {
+        try {
+            parseArguments(argArray);
+            initialize();
+            run();
+        } catch (FileNotFoundException e) {
+            if (Logging.isDebugEnabled()) {
+                e.printStackTrace();
+            }
+            System.err.println(tr("Error - file not found: ''{0}''", e.getMessage()));
+            System.exit(1);
+        } catch (IllegalArgumentException | IllegalDataException | IOException e) {
+            if (Logging.isDebugEnabled()) {
+                e.printStackTrace();
+            }
+            if (e.getMessage() != null) {
+                System.err.println(tr("Error: {0}", e.getMessage()));
+            }
+            System.exit(1);
+        }
+        System.exit(0);
+    }
+
+    /**
+     * Parse command line arguments and do some low-level error checking.
+     * @param argArray the arguments array
+     */
+    void parseArguments(String[] argArray) {
+        Getopt.setI18nHandler(I18n::tr);
+        Logging.setLogLevel(Level.INFO);
+
+        LongOpt[] opts = new LongOpt[Option.values().length];
+        StringBuilder optString = new StringBuilder();
+        for (Option o : Option.values()) {
+            opts[o.ordinal()] = o.toLongOpt();
+            if (o.getShortOption() != '*') {
+                optString.append(o.getShortOption());
+                if (o.requiresArgument()) {
+                    optString.append(':');
+                }
+            }
+        }
+
+        Getopt getopt = new Getopt("JOSM rendering", argArray, optString.toString(), opts);
+
+        StyleData currentStyle = new StyleData();
+        argStyles = new ArrayList<>();
+
+        int c;
+        while ((c = getopt.getopt()) != -1) {
+            switch (c) {
+            case 'h':
+                showHelp();
+                System.exit(0);
+            case 'i':
+                argInput = getopt.getOptarg();
+                break;
+            case 's':
+                if (currentStyle.styleUrl != null) {
+                    argStyles.add(currentStyle);
+                    currentStyle = new StyleData();
+                }
+                currentStyle.styleUrl = getopt.getOptarg();
+                break;
+            case 'o':
+                argOutput = getopt.getOptarg();
+                break;
+            case 'z':
+                try {
+                    argZoom = Integer.parseInt(getopt.getOptarg());
+                } catch (NumberFormatException nfe) {
+                    throw new IllegalArgumentException(
+                            tr("Expected integer number for option {0}, but got ''{1}''", "--zoom", getopt.getOptarg()));
+                }
+                if (argZoom < 0)
+                    throw new IllegalArgumentException(
+                            tr("Expected integer number >= 0 for option {0}, but got ''{1}''", "--zoom", getopt.getOptarg()));
+                break;
+            case 'b':
+                if (!getopt.getOptarg().equals("auto")) {
+                    try {
+                        argBounds = new Bounds(getopt.getOptarg(), ",", Bounds.ParseMethod.LEFT_BOTTOM_RIGHT_TOP, false);
+                    } catch (IllegalArgumentException iae) { // NOPMD
+                        throw new IllegalArgumentException(tr("Unable to parse {0} parameter: {1}", "--bounds", iae.getMessage()));
+                    }
+                }
+                break;
+            case '*':
+                switch (Option.values()[getopt.getLongind()]) {
+                case DEBUG:
+                    argDebug = true;
+                    break;
+                case TRACE:
+                    argTrace = true;
+                    break;
+                case SETTING:
+                    String keyval = getopt.getOptarg();
+                    String[] comp = keyval.split(":");
+                    if (comp.length != 2)
+                        throw new IllegalArgumentException(
+                                tr("Expected key and value, separated by '':'' character for option {0}, but got ''{1}''",
+                                        "--setting", getopt.getOptarg()));
+                    currentStyle.settings.put(comp[0].trim(), comp[1].trim());
+                    break;
+                case SCALE:
+                    try {
+                        argScale = Double.parseDouble(getopt.getOptarg());
+                    } catch (NumberFormatException nfe) {
+                        throw new IllegalArgumentException(
+                                tr("Expected floating point number for option {0}, but got ''{1}''", "--scale", getopt.getOptarg()));
+                    }
+                    break;
+                case ANCHOR:
+                    String[] parts = getopt.getOptarg().split(",");
+                    if (parts.length != 2)
+                        throw new IllegalArgumentException(
+                                tr("Expected two coordinates, separated by comma, for option {0}, but got ''{1}''",
+                                "--anchor", getopt.getOptarg()));
+                    try {
+                        double lon = LatLonParser.parseCoordinate(parts[0]);
+                        double lat = LatLonParser.parseCoordinate(parts[1]);
+                        argAnchor = new LatLon(lat, lon);
+                    } catch (IllegalArgumentException iae) { // NOPMD
+                        throw new IllegalArgumentException(tr("In option {0}: {1}", "--anchor", iae.getMessage()));
+                    }
+                    break;
+                case WIDTH_M:
+                    try {
+                        argWidthM = Double.parseDouble(getopt.getOptarg());
+                    } catch (NumberFormatException nfe) {
+                        throw new IllegalArgumentException(
+                                tr("Expected floating point number for option {0}, but got ''{1}''", "--width-m", getopt.getOptarg()));
+                    }
+                    if (argWidthM <= 0) throw new IllegalArgumentException(
+                            tr("Expected floating point number > 0 for option {0}, but got ''{1}''", "--width-m", getopt.getOptarg()));
+                    break;
+                case HEIGHT_M:
+                    try {
+                        argHeightM = Double.parseDouble(getopt.getOptarg());
+                    } catch (NumberFormatException nfe) {
+                        throw new IllegalArgumentException(
+                                tr("Expected floating point number for option {0}, but got ''{1}''", "--height-m", getopt.getOptarg()));
+                    }
+                    if (argHeightM <= 0) throw new IllegalArgumentException(
+                            tr("Expected floating point number > 0 for option {0}, but got ''{1}''", "--width-m", getopt.getOptarg()));
+                    break;
+                case WIDTH_PX:
+                    try {
+                        argWidthPx = Integer.parseInt(getopt.getOptarg());
+                    } catch (NumberFormatException nfe) {
+                        throw new IllegalArgumentException(
+                                tr("Expected integer number for option {0}, but got ''{1}''", "--width-px", getopt.getOptarg()));
+                    }
+                    if (argWidthPx <= 0) throw new IllegalArgumentException(
+                            tr("Expected integer number > 0 for option {0}, but got ''{1}''", "--width-px", getopt.getOptarg()));
+                    break;
+                case HEIGHT_PX:
+                    try {
+                        argHeightPx = Integer.parseInt(getopt.getOptarg());
+                    } catch (NumberFormatException nfe) {
+                        throw new IllegalArgumentException(
+                                tr("Expected integer number for option {0}, but got ''{1}''", "--height-px", getopt.getOptarg()));
+                    }
+                    if (argHeightPx <= 0) throw new IllegalArgumentException(
+                            tr("Expected integer number > 0 for option {0}, but got ''{1}''", "--height-px", getopt.getOptarg()));
+                    break;
+                case PROJECTION:
+                    argProjection = getopt.getOptarg();
+                    break;
+                case MAX_IMAGE_SIZE:
+                    try {
+                        argMaxImageSize = Integer.parseInt(getopt.getOptarg());
+                    } catch (NumberFormatException nfe) {
+                        throw new IllegalArgumentException(
+                                tr("Expected integer number for option {0}, but got ''{1}''", "--max-image-size", getopt.getOptarg()));
+                    }
+                    if (argMaxImageSize < 0) throw new IllegalArgumentException(
+                            tr("Expected integer number => 0 for option {0}, but got ''{1}''", "--max-image-size", getopt.getOptarg()));
+                    break;
+                default:
+                    throw new AssertionError("Unexpected option index: " + getopt.getLongind());
+                }
+                break;
+            case '?':
+                throw new IllegalArgumentException();   // getopt error
+            default:
+                throw new AssertionError("Unrecognized option: " + c);
+            }
+        }
+        if (currentStyle.styleUrl != null) {
+            argStyles.add(currentStyle);
+        }
+    }
+
+    /**
+     * Displays help on the console
+     */
+    public static void showHelp() {
+        System.out.println(getHelp());
+    }
+
+    private static String getHelp() {
+        return tr("JOSM rendering command line interface")+"\n\n"+
+                tr("Usage")+":\n"+
+                "\tjava -jar josm.jar render <options>\n\n"+
+                tr("Description")+":\n"+
+                tr("Renders data and saves the result to an image file.")+"\n\n"+
+                tr("Options")+":\n"+
+                "\t--help|-h                 "+tr("Show this help")+"\n"+
+                "\t--input|-i <file>         "+tr("Input data file name (.osm)")+"\n"+
+                "\t--output|-o <file>        "+tr("Output image file name (.png); defaults to ''{0}''", "out.png")+"\n"+
+                "\t--style|-s <file>         "+tr("Style file to use for rendering (.mapcss or .zip)")+"\n"+
+                "\t                          "+tr("This option can be repeated to load multiple styles.")+"\n"+
+                "\t--setting <key>:<value>   "+tr("Style setting (in JOSM accessible in the style list dialog right click menu)")+"\n"+
+                "\t                          "+tr("Applies to the last style loaded with the {0} option.", "--style")+"\n"+
+                "\t--zoom|-z <lvl>           "+tr("Select zoom level to render. (integer value, 0=entire earth, 18=street level)")+"\n"+
+                "\t--scale <scale>           "+tr("Select the map scale")+"\n"+
+                "\t                          "+tr("A value of 10000 denotes a scale of 1:10000 (1 cm on the map equals 100 m on the ground; "
+                                                + "display resolution: 96 dpi)")+"\n"+
+                "\t                          "+tr("Options {0} and {1} are mutually exclusive.", "--zoom", "--scale")+"\n"+
+                "\t--bounds|-b auto|<min_lon>,<min_lat>,<max_lon>,<max_lat>\n"+
+                "\t                          "+tr("Area to render, default value is ''{0}''", "auto")+"\n"+
+                "\t                          "+tr("With keyword ''{0}'', the downloaded area in the .osm input file will be used (if recorded).",
+                                                     "auto")+"\n"+
+                "\t--anchor <lon>,<lat>      "+tr("Specify bottom left corner of the rendering area")+"\n"+
+                "\t                          "+tr("Used in combination with width and height options to determine the area to render.")+"\n"+
+                "\t--width-m <number>        "+tr("Width of the rendered area, in meter")+"\n"+
+                "\t--height-m <number>       "+tr("Height of the rendered area, in meter")+"\n"+
+                "\t--width-px <number>       "+tr("Width of the target image, in pixel")+"\n"+
+                "\t--height-px <number>      "+tr("Height of the target image, in pixel")+"\n"+
+                "\t--projection <code>       "+tr("Projection to use, default value ''{0}'' (web-Mercator)", "epsg:3857")+"\n"+
+                "\t--max-image-size <number> "+tr("Maximum image width/height in pixel (''{0}'' means no limit), default value: {1}",
+                                                    0, Integer.toString(DEFAULT_MAX_IMAGE_SIZE))+"\n"+
+                "\n"+
+                tr("To specify the rendered area and scale, the options can be combined in various ways")+":\n"+
+                "  * --bounds (--zoom|--scale|--width-px|--height-px)\n"+
+                "  * --anchor (--width-m|--width-px) (--height-m|--height-px) (--zoom|--scale)\n"+
+                "  * --anchor --width-m --height-m (--width-px|--height-px)\n"+
+                "  * --anchor --width-px --height-px (--width-m|--height-m)\n"+
+                tr("If neither ''{0}'' nor ''{1}'' is given, the default value {2} takes effect "
+                        + "and the bounds of the download area in the .osm input file are used.",
+                        "bounds", "anchor", "--bounds=auto")+"\n\n"+
+                tr("Examples")+":\n"+
+                "  java -jar josm.jar render -i data.osm -s style.mapcss -z 16\n"+
+                "  josm render -i data.osm -s style.mapcss --scale 5000\n"+
+                "  josm render -i data.osm -s style.mapcss -z 16 -o image.png\n"+
+                "  josm render -i data.osm -s elemstyles.mapcss --setting hide_icons:false -z 16\n"+
+                "  josm render -i data.osm -s style.mapcss -s another_style.mapcss -z 16 -o image.png\n"+
+                "  josm render -i data.osm -s style.mapcss --bounds 21.151,51.401,21.152,51.402 -z 16\n"+
+                "  josm render -i data.osm -s style.mapcss --anchor 21.151,51.401 --width-m 500 --height-m 300 -z 16\n"+
+                "  josm render -i data.osm -s style.mapcss --anchor 21.151,51.401 --width-m 500 --height-m 300 --width-px 1800\n"+
+                "  josm render -i data.osm -s style.mapcss --scale 5000 --projection epsg:4326\n";
+    }
+
+    /**
+     * Initialization.
+     *
+     * Requires arguments to be parsed already ({@link #parseArguments(java.lang.String[])}).
+     */
+    void initialize() {
+        Logging.setLogLevel(getLogLevel());
+
+        Config.setBaseDirectoriesProvider(new Preferences()); // for right-left-hand traffic cache file
+        Config.setPreferencesInstance(new MemoryPreferences());
+        Config.getPref().putBoolean("mappaint.auto_reload_local_styles", false); // unnecessary to listen for external changes
+        String projCode = Optional.ofNullable(argProjection).orElse("epsg:3857");
+        Main.setProjection(Projections.getProjectionByCode(projCode.toUpperCase(Locale.US)));
+
+        RightAndLefthandTraffic.initialize();
+    }
+
+    private Level getLogLevel() {
+        if (argTrace) {
+            return Logging.LEVEL_TRACE;
+        } else if (argDebug) {
+            return Logging.LEVEL_DEBUG;
+        } else {
+            return Logging.LEVEL_INFO;
+        }
+    }
+
+    /**
+     * Find the area to render and the scale, given certain command line options and the dataset.
+     * @param ds the dataset
+     * @return area to render and the scale
+     */
+    RenderingArea determineRenderingArea(DataSet ds) {
+
+        Projection proj = Main.getProjection();
+        Double scale = null; // scale in east-north units per pixel
+        if (argZoom != null) {
+            scale = OsmMercator.EARTH_RADIUS * Math.PI * 2 / Math.pow(2, argZoom) / OsmMercator.DEFAUL_TILE_SIZE / proj.getMetersPerUnit();
+        }
+        Bounds bounds = argBounds;
+        ProjectionBounds pb = null;
+
+        if (bounds == null) {
+            if (argAnchor != null) {
+                EastNorth projAnchor = proj.latlon2eastNorth(argAnchor);
+
+                Double enPerMeter = null;
+                Supplier<Double> getEnPerMeter = () -> {
+                    double shiftMeter = 10;
+                    EastNorth projAnchorShifted = projAnchor.add(
+                            shiftMeter / proj.getMetersPerUnit(), shiftMeter / proj.getMetersPerUnit());
+                    LatLon anchorShifted = proj.eastNorth2latlon(projAnchorShifted);
+                    return projAnchor.distance(projAnchorShifted) / argAnchor.greatCircleDistance(anchorShifted);
+                };
+
+                if (scale == null) {
+                    if (argScale != null) {
+                        enPerMeter = getEnPerMeter.get();
+                        scale = argScale * enPerMeter / PIXEL_PER_METER;
+                    } else if (argWidthM != null && argWidthPx != null) {
+                        enPerMeter = getEnPerMeter.get();
+                        scale = argWidthM / argWidthPx * enPerMeter;
+                    } else if (argHeightM != null && argHeightPx != null) {
+                        enPerMeter = getEnPerMeter.get();
+                        scale = argHeightM / argHeightPx * enPerMeter;
+                    } else {
+                        throw new IllegalArgumentException(
+                                tr("Argument {0} given, but scale cannot be determined from remaining arguments", "--anchor"));
+                    }
+                }
+
+                double widthEn;
+                if (argWidthM != null) {
+                    enPerMeter = Optional.ofNullable(enPerMeter).orElseGet(getEnPerMeter);
+                    widthEn = argWidthM * enPerMeter;
+                } else if (argWidthPx != null) {
+                    widthEn = argWidthPx * scale;
+                } else {
+                    throw new IllegalArgumentException(
+                            tr("Argument {0} given, expected {1} or {2}", "--anchor", "--width-m", "--width-px"));
+                }
+
+                double heightEn;
+                if (argHeightM != null) {
+                    enPerMeter = Optional.ofNullable(enPerMeter).orElseGet(getEnPerMeter);
+                    heightEn = argHeightM * enPerMeter;
+                } else if (argHeightPx != null) {
+                    heightEn = argHeightPx * scale;
+                } else {
+                    throw new IllegalArgumentException(
+                            tr("Argument {0} given, expected {1} or {2}", "--anchor", "--height-m", "--height-px"));
+                }
+                pb = new ProjectionBounds(projAnchor);
+                pb.extend(new EastNorth(projAnchor.east() + widthEn, projAnchor.north() + heightEn));
+                bounds = new Bounds(proj.eastNorth2latlon(pb.getMin()), false);
+                bounds.extend(proj.eastNorth2latlon(pb.getMax()));
+            } else {
+                if (ds.getDataSourceBounds().isEmpty()) {
+                    throw new IllegalArgumentException(tr("{0} mode, but no bounds found in osm data input file", "--bounds=auto"));
+                }
+                bounds = ds.getDataSourceBounds().get(0);
+            }
+        }
+
+        if (pb == null) {
+            pb = new ProjectionBounds();
+            pb.extend(proj.latlon2eastNorth(bounds.getMin()));
+            pb.extend(proj.latlon2eastNorth(bounds.getMax()));
+        }
+
+        if (scale == null) {
+            if (argScale != null) {
+                double enPerMeter = pb.getMin().distance(pb.getMax()) / bounds.getMin().greatCircleDistance(bounds.getMax());
+                scale = argScale * enPerMeter / PIXEL_PER_METER;
+            } else if (argWidthPx != null) {
+                scale = (pb.maxEast - pb.minEast) / argWidthPx;
+            } else if (argHeightPx != null) {
+                scale = (pb.maxNorth - pb.minNorth) / argHeightPx;
+            } else {
+                throw new IllegalArgumentException(
+                        tr("Unable to determine scale, one of the options {0}, {1}, {2} or {3} expected",
+                                "--zoom", "--scale", "--width-px", "--height-px"));
+            }
+        }
+
+        RenderingArea ra = new RenderingArea();
+        ra.bounds = bounds;
+        ra.projBounds = pb;
+        ra.scale = scale;
+        return ra;
+    }
+
+    private void run() throws FileNotFoundException, IllegalDataException, IOException {
+
+        if (argInput == null) {
+            throw new IllegalArgumentException(tr("Missing argument - input data file ({0})", "--input|-i"));
+        }
+        DataSet ds;
+        try {
+            ds = OsmReader.parseDataSet(new FileInputStream(argInput), null);
+        } catch (IllegalDataException e) {
+            throw new IllegalDataException(tr("In .osm data file ''{0}'' - ", argInput) + e.getMessage());
+        }
+
+        RenderingArea area = determineRenderingArea(ds);
+        double widthEn = area.projBounds.maxEast - area.projBounds.minEast;
+        double heightEn = area.projBounds.maxNorth - area.projBounds.minNorth;
+        int widthPx = (int) Math.round(widthEn / area.scale);
+        int heightPx = (int) Math.round(heightEn / area.scale);
+        Logging.debug("image size (px): {0}x{1}", widthPx, heightPx);
+
+        int maxSize = Optional.ofNullable(argMaxImageSize).orElse(DEFAULT_MAX_IMAGE_SIZE);
+        if (maxSize != 0 && (widthPx > maxSize || heightPx > maxSize)) {
+            throw new IllegalArgumentException(
+                    tr("Image dimensions ({0}x{1}) exceeds maximum image size {2} (use option {3} to change limit)",
+                            widthPx, heightPx, maxSize, "--max-image-size"));
+        }
+
+        // load the styles
+        MapCSSStyleSource.STYLE_SOURCE_LOCK.writeLock().lock();
+        try {
+            MapPaintStyles.getStyles().clear();
+            if (argStyles.isEmpty())
+                throw new IllegalArgumentException(tr("Missing argument - at least one style expected ({0})", "--style"));
+            for (StyleData sd : argStyles) {
+                SourceEntry se = new SourceEntry(SourceType.MAP_PAINT_STYLE, sd.styleUrl,
+                            "cliRenderingStyle", "cli rendering style '" + sd.styleUrl + "'", true /* active */);
+                StyleSource source = MapPaintStyles.addStyle(se);
+                if (!source.getErrors().isEmpty()) {
+                    throw new IllegalDataException("Failed to load style file. Errors: " + source.getErrors());
+                }
+                for (String key : sd.settings.keySet()) {
+                    BooleanStyleSetting match = source.settings.stream()
+                            .filter(s -> s instanceof BooleanStyleSetting)
+                            .map(s -> (BooleanStyleSetting) s)
+                            .filter(bs -> bs.prefKey.endsWith(":" + key))
+                            .findFirst().orElse(null);
+                    if (match == null) {
+                        Logging.warn(tr("Style setting not found: ''{0}''", key));
+                    } else {
+                        boolean value = Boolean.parseBoolean(sd.settings.get(key));
+                        Logging.trace("setting applied: ''{0}:{1}''", key, value);
+                        match.setValue(value);
+                    }
+                }
+                if (!sd.settings.isEmpty()) {
+                    source.loadStyleSource(); // reload to apply settings
+                }
+            }
+        } finally {
+            MapCSSStyleSource.STYLE_SOURCE_LOCK.writeLock().unlock();
+        }
+
+        NavigatableComponent nc = new NavigatableComponent() {
+            {
+                setBounds(0, 0, widthPx, heightPx);
+                updateLocationState();
+            }
+
+            @Override
+            protected boolean isVisibleOnScreen() {
+                return true;
+            }
+
+            @Override
+            public Point getLocationOnScreen() {
+                return new Point(0, 0);
+            }
+        };
+        nc.zoomTo(area.projBounds.getCenter(), area.scale);
+
+        // render the data
+        BufferedImage image = new BufferedImage(widthPx, heightPx, BufferedImage.TYPE_INT_ARGB);
+        Graphics2D g = image.createGraphics();
+        g.setColor(PaintColors.getBackgroundColor());
+        g.fillRect(0, 0, widthPx, heightPx);
+        new StyledMapRenderer(g, nc, false).render(ds, false, area.bounds);
+
+        // write to file
+        String output = Optional.ofNullable(argOutput).orElse("out.png");
+        ImageIO.write(image, "png", new File(output));
+    }
+
+}
diff --git a/src/org/openstreetmap/josm/gui/mappaint/StyleSetting.java b/src/org/openstreetmap/josm/gui/mappaint/StyleSetting.java
index c469993..2b6ee2b 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/StyleSetting.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/StyleSetting.java
@@ -1,17 +1,7 @@
 // License: GPL. For details, see LICENSE file.
 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;
-import org.openstreetmap.josm.gui.MainApplication;
-import org.openstreetmap.josm.gui.mappaint.loader.MapPaintStyleLoader;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 
 /**
@@ -37,12 +27,6 @@ import org.openstreetmap.josm.tools.Logging;
 public interface StyleSetting {
 
     /**
-     * Adds the menu entry for this style setting to the menu
-     * @param menu The menu to add the setting to
-     */
-    void addMenuEntry(JMenu menu);
-
-    /**
      * gets the value for this setting
      * @return The value the user selected
      */
@@ -64,21 +48,6 @@ public interface StyleSetting {
             this.def = def;
         }
 
-        @Override
-        public void addMenuEntry(JMenu menu) {
-            final JCheckBoxMenuItem item = new JCheckBoxMenuItem();
-            Action a = new AbstractAction(label) {
-                @Override
-                public void actionPerformed(ActionEvent e) {
-                    setValue(item.isSelected());
-                    MainApplication.worker.submit(new MapPaintStyleLoader(Arrays.asList(parentStyle)));
-                }
-            };
-            item.setAction(a);
-            item.setSelected((boolean) getValue());
-            menu.add(item);
-        }
-
         public static BooleanStyleSetting create(Cascade c, StyleSource parentStyle, String key) {
             String label = c.get("label", null, String.class);
             if (label == null) {
@@ -96,7 +65,7 @@ public interface StyleSetting {
 
         @Override
         public Object getValue() {
-            String val = Main.pref.get(prefKey, null);
+            String val = Config.getPref().get(prefKey, null);
             if (val == null) return def;
             return Boolean.valueOf(val);
         }
@@ -107,9 +76,9 @@ public interface StyleSetting {
             }
             boolean b = (Boolean) o;
             if (b == def) {
-                Main.pref.put(prefKey, null);
+                Config.getPref().put(prefKey, null);
             } else {
-                Main.pref.put(prefKey, b);
+                Config.getPref().putBoolean(prefKey, b);
             }
         }
     }
diff --git a/src/org/openstreetmap/josm/gui/mappaint/StyleSettingGui.java b/src/org/openstreetmap/josm/gui/mappaint/StyleSettingGui.java
new file mode 100644
index 0000000..88d7a22
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/mappaint/StyleSettingGui.java
@@ -0,0 +1,18 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.mappaint;
+
+import javax.swing.JMenu;
+
+/**
+ * GUI elements for a {@link StyleSetting} class.
+ * @since 12831
+ */
+public interface StyleSettingGui {
+
+    /**
+     * Adds the menu entry for the corresponding style setting to the menu
+     * @param menu The menu to add the setting to
+     */
+    void addMenuEntry(JMenu menu);
+
+}
diff --git a/src/org/openstreetmap/josm/gui/mappaint/StyleSettingGuiFactory.java b/src/org/openstreetmap/josm/gui/mappaint/StyleSettingGuiFactory.java
new file mode 100644
index 0000000..a8f8a52
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/mappaint/StyleSettingGuiFactory.java
@@ -0,0 +1,32 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.mappaint;
+
+import org.openstreetmap.josm.gui.mappaint.StyleSetting.BooleanStyleSetting;
+
+/**
+ * Factory to create matching {@link StyleSettingGui} instances for given
+ * {@link StyleSetting} objects.
+ * @since 12831
+ */
+public final class StyleSettingGuiFactory {
+
+    private StyleSettingGuiFactory() {
+        // hide constructor
+    }
+
+    /**
+     * Create a matching {@link StyleSettingGui} instances for a given
+     * {@link StyleSetting} object.
+     * @param setting the {@code StyleSetting} object
+     * @return matching {@code StyleSettingGui}
+     * @throws UnsupportedOperationException when class of {@link StyleSetting}
+     * is not supported
+     */
+    public static StyleSettingGui getStyleSettingGui(StyleSetting setting) {
+        if (setting instanceof BooleanStyleSetting) {
+            return new BooleanStyleSettingGui((BooleanStyleSetting) setting);
+        }
+        throw new UnsupportedOperationException("class " + setting.getClass() + " not supported");
+    }
+
+}
diff --git a/src/org/openstreetmap/josm/gui/mappaint/StyleSource.java b/src/org/openstreetmap/josm/gui/mappaint/StyleSource.java
index 7bd08e2..372201f 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/StyleSource.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/StyleSource.java
@@ -21,6 +21,7 @@ import javax.swing.ImageIcon;
 
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.preferences.sources.SourceEntry;
+import org.openstreetmap.josm.data.preferences.sources.SourceType;
 import org.openstreetmap.josm.gui.mappaint.MapPaintStyles.IconReference;
 import org.openstreetmap.josm.io.CachedFile;
 import org.openstreetmap.josm.tools.ImageOverlay;
@@ -69,7 +70,7 @@ public abstract class StyleSource extends SourceEntry {
      * @param title The title that can be used as menu entry
      */
     public StyleSource(String url, String name, String title) {
-        super(url, name, title, true);
+        super(SourceType.MAP_PAINT_STYLE, url, name, title, true);
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/gui/mappaint/loader/MapPaintStyleLoader.java b/src/org/openstreetmap/josm/gui/mappaint/loader/MapPaintStyleLoader.java
index 2c3bd70..e0c5091 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/loader/MapPaintStyleLoader.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/loader/MapPaintStyleLoader.java
@@ -5,8 +5,10 @@ import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
 
+import org.openstreetmap.josm.data.preferences.sources.SourceEntry;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
 import org.openstreetmap.josm.gui.mappaint.MapPaintStyles;
@@ -66,4 +68,18 @@ public class MapPaintStyleLoader extends PleaseWaitRunnable {
         }
         MainApplication.worker.submit(new MapPaintStyleLoader(toReload));
     }
+
+    /**
+     * Reload style.
+     * @param style {@link StyleSource} to reload
+     * @throws IllegalArgumentException if {@code style} is not a {@code StyleSource} instance
+     * @since 12825
+     */
+    public static void reloadStyle(SourceEntry style) {
+        if (style instanceof StyleSource) {
+            MainApplication.worker.submit(new MapPaintStyleLoader(Collections.singleton((StyleSource) style)));
+        } else {
+            throw new IllegalArgumentException(style + " is not a StyleSource");
+        }
+    }
 }
diff --git a/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java b/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java
index 42fb516..5a7becd 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java
@@ -27,13 +27,12 @@ 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.data.osm.Way;
-import org.openstreetmap.josm.data.osm.search.SearchParseError;
 import org.openstreetmap.josm.data.osm.search.SearchCompiler;
 import org.openstreetmap.josm.data.osm.search.SearchCompiler.Match;
+import org.openstreetmap.josm.data.osm.search.SearchParseError;
 import org.openstreetmap.josm.gui.mappaint.Cascade;
 import org.openstreetmap.josm.gui.mappaint.Environment;
 import org.openstreetmap.josm.gui.mappaint.MapPaintStyles;
-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;
@@ -41,6 +40,7 @@ import org.openstreetmap.josm.tools.Geometry;
 import org.openstreetmap.josm.tools.JosmRuntimeException;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.RightAndLefthandTraffic;
+import org.openstreetmap.josm.tools.RotationAngle;
 import org.openstreetmap.josm.tools.SubclassFilteredCollection;
 import org.openstreetmap.josm.tools.Territories;
 import org.openstreetmap.josm.tools.Utils;
diff --git a/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java b/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java
index e694b66..bcb01bd 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java
@@ -31,11 +31,11 @@ import java.util.zip.ZipFile;
 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.preferences.sources.SourceEntry;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.data.preferences.sources.SourceEntry;
 import org.openstreetmap.josm.gui.mappaint.Cascade;
 import org.openstreetmap.josm.gui.mappaint.Environment;
 import org.openstreetmap.josm.gui.mappaint.MultiCascade;
diff --git a/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java b/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java
index 9b3c7a3..e423725 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java
@@ -18,7 +18,7 @@ import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.data.osm.Way;
-import org.openstreetmap.josm.data.osm.visitor.AbstractVisitor;
+import org.openstreetmap.josm.data.osm.visitor.OsmPrimitiveVisitor;
 import org.openstreetmap.josm.data.osm.visitor.paint.relations.MultipolygonCache;
 import org.openstreetmap.josm.gui.mappaint.Environment;
 import org.openstreetmap.josm.gui.mappaint.Range;
@@ -142,7 +142,7 @@ public interface Selector {
          * referrer was found.</p>
          *
          */
-        private class MatchingReferrerFinder extends AbstractVisitor {
+        private class MatchingReferrerFinder implements OsmPrimitiveVisitor {
             private final Environment e;
 
             /**
@@ -194,7 +194,7 @@ public interface Selector {
             }
         }
 
-        private abstract static class AbstractFinder extends AbstractVisitor {
+        private abstract static class AbstractFinder implements OsmPrimitiveVisitor {
             protected final Environment e;
 
             protected AbstractFinder(Environment e) {
@@ -240,7 +240,7 @@ public interface Selector {
                 super(e);
             }
 
-            private final AbstractVisitor innerVisitor = new AbstractFinder(e) {
+            private final OsmPrimitiveVisitor innerVisitor = new AbstractFinder(e) {
                 @Override
                 public void visit(Relation r) {
                     if (left.matches(e.withPrimitive(r))) {
diff --git a/src/org/openstreetmap/josm/gui/mappaint/styleelement/AreaElement.java b/src/org/openstreetmap/josm/gui/mappaint/styleelement/AreaElement.java
index cb394c7..fea54a9 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/styleelement/AreaElement.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/styleelement/AreaElement.java
@@ -2,9 +2,10 @@
 package org.openstreetmap.josm.gui.mappaint.styleelement;
 
 import java.awt.Color;
+import java.awt.Image;
+import java.awt.image.BufferedImage;
 import java.util.Objects;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.Way;
@@ -14,7 +15,9 @@ import org.openstreetmap.josm.data.preferences.IntegerProperty;
 import org.openstreetmap.josm.gui.mappaint.Cascade;
 import org.openstreetmap.josm.gui.mappaint.Environment;
 import org.openstreetmap.josm.gui.mappaint.MapPaintStyles.IconReference;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
+import org.openstreetmap.josm.tools.HiDPISupport;
 import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -78,12 +81,15 @@ public class AreaElement extends StyleElement {
         IconReference iconRef = c.get(FILL_IMAGE, null, IconReference.class);
         if (iconRef != null) {
             fillImage = new MapImage(iconRef.iconName, iconRef.source, false);
-
-            color = new Color(fillImage.getImage(false).getRGB(
+            Image img = fillImage.getImage(false);
+            // get base image from possible multi-resolution image, so we can
+            // cast to BufferedImage and get pixel value at the center of the image
+            img = HiDPISupport.getBaseImage(img);
+            color = new Color(((BufferedImage) img).getRGB(
                     fillImage.getWidth() / 2, fillImage.getHeight() / 2)
             );
 
-            fillImage.alpha = Utils.clamp(Main.pref.getInteger("mappaint.fill-image-alpha", 255), 0, 255);
+            fillImage.alpha = Utils.clamp(Config.getPref().getInt("mappaint.fill-image-alpha", 255), 0, 255);
             Integer pAlpha = Utils.colorFloat2int(c.get(FILL_OPACITY, null, float.class));
             if (pAlpha != null) {
                 fillImage.alpha = pAlpha;
diff --git a/src/org/openstreetmap/josm/gui/mappaint/styleelement/AreaIconElement.java b/src/org/openstreetmap/josm/gui/mappaint/styleelement/AreaIconElement.java
index 4dd93ff..6ca9856 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/styleelement/AreaIconElement.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/styleelement/AreaIconElement.java
@@ -11,7 +11,7 @@ import org.openstreetmap.josm.gui.mappaint.Environment;
 import org.openstreetmap.josm.gui.mappaint.Keyword;
 import org.openstreetmap.josm.gui.mappaint.styleelement.placement.PartiallyInsideAreaStrategy;
 import org.openstreetmap.josm.gui.mappaint.styleelement.placement.PositionForAreaStrategy;
-import org.openstreetmap.josm.gui.util.RotationAngle;
+import org.openstreetmap.josm.tools.RotationAngle;
 
 /**
  * This class defines how an icon is rendered onto the area.
diff --git a/src/org/openstreetmap/josm/gui/mappaint/styleelement/LabelCompositionStrategy.java b/src/org/openstreetmap/josm/gui/mappaint/styleelement/LabelCompositionStrategy.java
index b3aee0b..4bf49d0 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/styleelement/LabelCompositionStrategy.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/styleelement/LabelCompositionStrategy.java
@@ -7,10 +7,10 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Objects;
 
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
-import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.LanguageInfo;
 
 /**
@@ -232,15 +232,15 @@ public interface LabelCompositionStrategy {
          * <tt>mappaint.nameOrder</tt> and <tt>mappaint.nameComplementOrder</tt>.
          */
         public final void initNameTagsFromPreferences() {
-            if (Main.pref == null) {
+            if (Config.getPref() == null) {
                 this.nameTags = new ArrayList<>(Arrays.asList(DEFAULT_NAME_TAGS));
                 this.nameComplementTags = new ArrayList<>(Arrays.asList(DEFAULT_NAME_COMPLEMENT_TAGS));
             } else {
                 this.nameTags = new ArrayList<>(
-                        Main.pref.getCollection("mappaint.nameOrder", Arrays.asList(DEFAULT_NAME_TAGS))
+                        Config.getPref().getList("mappaint.nameOrder", Arrays.asList(DEFAULT_NAME_TAGS))
                 );
                 this.nameComplementTags = new ArrayList<>(
-                        Main.pref.getCollection("mappaint.nameComplementOrder", Arrays.asList(DEFAULT_NAME_COMPLEMENT_TAGS))
+                        Config.getPref().getList("mappaint.nameComplementOrder", Arrays.asList(DEFAULT_NAME_COMPLEMENT_TAGS))
                 );
             }
         }
diff --git a/src/org/openstreetmap/josm/gui/mappaint/styleelement/MapImage.java b/src/org/openstreetmap/josm/gui/mappaint/styleelement/MapImage.java
index ca85b38..a667534 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/styleelement/MapImage.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/styleelement/MapImage.java
@@ -31,7 +31,7 @@ public class MapImage {
     /**
      * ImageIcon can change while the image is loading.
      */
-    private BufferedImage img;
+    private Image img;
 
     /**
      * The alpha (opacity) value of the image. It is multiplied to the image alpha channel.
@@ -101,7 +101,7 @@ public class MapImage {
      * @param disabled {@code} true to request disabled version, {@code false} for the standard version
      * @return the image
      */
-    public BufferedImage getImage(boolean disabled) {
+    public Image getImage(boolean disabled) {
         if (disabled) {
             return getDisabled();
         } else {
@@ -109,7 +109,7 @@ public class MapImage {
         }
     }
 
-    private BufferedImage getDisabled() {
+    private Image getDisabled() {
         if (disabledImgCache != null)
                 return disabledImgCache;
         if (img == null)
@@ -126,7 +126,7 @@ public class MapImage {
         return disabledImgCache;
     }
 
-    private BufferedImage getImage() {
+    private Image getImage() {
         if (img != null)
             return img;
         temporary = false;
@@ -143,9 +143,9 @@ public class MapImage {
                         if (result == null) {
                             source.logWarning(tr("Failed to locate image ''{0}''", name));
                             ImageIcon noIcon = MapPaintStyles.getNoIconIcon(source);
-                            img = noIcon == null ? null : (BufferedImage) noIcon.getImage();
+                            img = noIcon == null ? null : noIcon.getImage();
                         } else {
-                            img = (BufferedImage) rescale(result.getImage());
+                            img = rescale(result.getImage());
                         }
                         if (temporary) {
                             disabledImgCache = null;
@@ -159,7 +159,7 @@ public class MapImage {
         );
         synchronized (this) {
             if (img == null) {
-                img = (BufferedImage) ImageProvider.get("clock").getImage();
+                img = ImageProvider.get("clock").getImage();
                 temporary = true;
             }
         }
diff --git a/src/org/openstreetmap/josm/gui/mappaint/styleelement/NodeElement.java b/src/org/openstreetmap/josm/gui/mappaint/styleelement/NodeElement.java
index 1d98f12..285b4ed 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/styleelement/NodeElement.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/styleelement/NodeElement.java
@@ -9,7 +9,6 @@ import java.util.Objects;
 import java.util.Optional;
 import java.util.stream.IntStream;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Relation;
@@ -24,9 +23,10 @@ import org.openstreetmap.josm.gui.mappaint.MultiCascade;
 import org.openstreetmap.josm.gui.mappaint.StyleElementList;
 import org.openstreetmap.josm.gui.mappaint.styleelement.BoxTextElement.BoxProvider;
 import org.openstreetmap.josm.gui.mappaint.styleelement.BoxTextElement.SimpleBoxProvider;
-import org.openstreetmap.josm.gui.util.RotationAngle;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.Logging;
+import org.openstreetmap.josm.tools.RotationAngle;
 import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -195,7 +195,7 @@ public class NodeElement extends StyleElement {
         mapImage.offsetX = Math.round(offsetXF);
         mapImage.offsetY = Math.round(offsetYF);
 
-        mapImage.alpha = Utils.clamp(Main.pref.getInteger("mappaint.icon-image-alpha", 255), 0, 255);
+        mapImage.alpha = Utils.clamp(Config.getPref().getInt("mappaint.icon-image-alpha", 255), 0, 255);
         Integer pAlpha = Utils.colorFloat2int(c.get(keys[ICON_OPACITY_IDX], null, float.class));
         if (pAlpha != null) {
             mapImage.alpha = pAlpha;
@@ -355,11 +355,10 @@ public class NodeElement extends StyleElement {
         else {
             // This is only executed once, so no performance concerns.
             // However, it would be better, if the settings could be changed at runtime.
-            int size = max(
-                    Main.pref.getInteger("mappaint.node.selected-size", 5),
-                    Main.pref.getInteger("mappaint.node.unselected-size", 3),
-                    Main.pref.getInteger("mappaint.node.connection-size", 5),
-                    Main.pref.getInteger("mappaint.node.tagged-size", 3)
+            int size = max(Config.getPref().getInt("mappaint.node.selected-size", 5),
+                    Config.getPref().getInt("mappaint.node.unselected-size", 3),
+                    Config.getPref().getInt("mappaint.node.connection-size", 5),
+                    Config.getPref().getInt("mappaint.node.tagged-size", 3)
             );
             return new SimpleBoxProvider(new Rectangle(-size/2, -size/2, size, size));
         }
diff --git a/src/org/openstreetmap/josm/gui/mappaint/styleelement/StyleElement.java b/src/org/openstreetmap/josm/gui/mappaint/styleelement/StyleElement.java
index c0e0e23..6a82f49 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/styleelement/StyleElement.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/styleelement/StyleElement.java
@@ -6,7 +6,6 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.Objects;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.visitor.paint.MapPaintSettings;
 import org.openstreetmap.josm.data.osm.visitor.paint.StyledMapRenderer;
@@ -14,6 +13,7 @@ import org.openstreetmap.josm.gui.mappaint.Cascade;
 import org.openstreetmap.josm.gui.mappaint.Keyword;
 import org.openstreetmap.josm.gui.mappaint.StyleKeys;
 import org.openstreetmap.josm.gui.mappaint.mapcss.Instruction.RelativeFloat;
+import org.openstreetmap.josm.spi.preferences.Config;
 
 /**
  * Class that defines how objects ({@link OsmPrimitive}) should be drawn on the map.
@@ -147,7 +147,7 @@ public abstract class StyleElement implements StyleKeys {
             synchronized (lock) {
                 s = defaultFontSize;
                 if (s == null) {
-                    defaultFontSize = s = (float) Main.pref.getInteger("mappaint.fontsize", 8);
+                    defaultFontSize = s = (float) Config.getPref().getInt("mappaint.fontsize", 8);
                 }
             }
         }
@@ -160,7 +160,7 @@ public abstract class StyleElement implements StyleKeys {
             synchronized (lock) {
                 n = defaultFontName;
                 if (n == null) {
-                    defaultFontName = n = Main.pref.get("mappaint.font", "Droid Sans");
+                    defaultFontName = n = Config.getPref().get("mappaint.font", "Droid Sans");
                 }
             }
         }
diff --git a/src/org/openstreetmap/josm/gui/oauth/AdvancedOAuthPropertiesPanel.java b/src/org/openstreetmap/josm/gui/oauth/AdvancedOAuthPropertiesPanel.java
index b3d247a..658bb2a 100644
--- a/src/org/openstreetmap/josm/gui/oauth/AdvancedOAuthPropertiesPanel.java
+++ b/src/org/openstreetmap/josm/gui/oauth/AdvancedOAuthPropertiesPanel.java
@@ -280,7 +280,7 @@ public class AdvancedOAuthPropertiesPanel extends VerticallyScrollablePanel {
      */
     public void rememberPreferences(Preferences pref) {
         CheckParameterUtil.ensureParameterNotNull(pref, "pref");
-        pref.put("oauth.settings.use-default", cbUseDefaults.isSelected());
+        pref.putBoolean("oauth.settings.use-default", cbUseDefaults.isSelected());
         if (cbUseDefaults.isSelected()) {
             new OAuthParameters(null, null, null, null, null, null, null).rememberPreferences(pref);
         } else {
diff --git a/src/org/openstreetmap/josm/gui/oauth/OAuthAuthorizationWizard.java b/src/org/openstreetmap/josm/gui/oauth/OAuthAuthorizationWizard.java
index 2fae6d2..0955084 100644
--- a/src/org/openstreetmap/josm/gui/oauth/OAuthAuthorizationWizard.java
+++ b/src/org/openstreetmap/josm/gui/oauth/OAuthAuthorizationWizard.java
@@ -20,7 +20,10 @@ import java.awt.event.WindowAdapter;
 import java.awt.event.WindowEvent;
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
+import java.lang.reflect.InvocationTargetException;
+import java.net.URL;
 import java.util.concurrent.Executor;
+import java.util.concurrent.FutureTask;
 
 import javax.swing.AbstractAction;
 import javax.swing.BorderFactory;
@@ -29,6 +32,7 @@ import javax.swing.JDialog;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
+import javax.swing.SwingUtilities;
 import javax.swing.UIManager;
 import javax.swing.event.HyperlinkEvent;
 import javax.swing.event.HyperlinkListener;
@@ -50,6 +54,7 @@ import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.InputMapUtils;
 import org.openstreetmap.josm.tools.OpenBrowser;
 import org.openstreetmap.josm.tools.UserCancelException;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
  * This wizard walks the user to the necessary steps to retrieve an OAuth Access Token which
@@ -332,6 +337,30 @@ public class OAuthAuthorizationWizard extends JDialog {
         this.canceled = canceled;
     }
 
+    /**
+     * Obtains an OAuth access token for the connection. Afterwards, the token is accessible via {@link OAuthAccessTokenHolder}.
+     * @param serverUrl the URL to OSM server
+     * @throws InterruptedException if we're interrupted while waiting for the event dispatching thread to finish OAuth authorization task
+     * @throws InvocationTargetException if an exception is thrown while running OAuth authorization task
+     * @since 12803
+     */
+    public static void obtainAccessToken(final URL serverUrl) throws InvocationTargetException, InterruptedException {
+        final Runnable authTask = new FutureTask<>(() -> {
+            // Concerning Utils.newDirectExecutor: Main worker cannot be used since this connection is already
+            // executed via main worker. The OAuth connections would block otherwise.
+            final OAuthAuthorizationWizard wizard = new OAuthAuthorizationWizard(
+                    Main.parent, serverUrl.toExternalForm(), Utils.newDirectExecutor());
+            wizard.showDialog();
+            return wizard;
+        });
+        // exception handling differs from implementation at GuiHelper.runInEDTAndWait()
+        if (SwingUtilities.isEventDispatchThread()) {
+            authTask.run();
+        } else {
+            SwingUtilities.invokeAndWait(authTask);
+        }
+    }
+
     class AuthorisationProcedureChangeListener implements ItemListener {
         @Override
         public void itemStateChanged(ItemEvent arg0) {
diff --git a/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java b/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java
index 43eec34..ed6b982 100644
--- a/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java
+++ b/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java
@@ -92,6 +92,7 @@ import org.openstreetmap.josm.gui.widgets.JosmTextField;
 import org.openstreetmap.josm.io.CachedFile;
 import org.openstreetmap.josm.io.OnlineResource;
 import org.openstreetmap.josm.io.OsmTransferException;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageOverlay;
 import org.openstreetmap.josm.tools.ImageProvider;
@@ -422,10 +423,10 @@ public abstract class SourceEditor extends JPanel {
             List<String> iconPaths = iconPathsModel.getIconPaths();
 
             if (!iconPaths.isEmpty()) {
-                if (Main.pref.putCollection(iconPref, iconPaths)) {
+                if (Config.getPref().putList(iconPref, iconPaths)) {
                     changed = true;
                 }
-            } else if (Main.pref.putCollection(iconPref, null)) {
+            } else if (Config.getPref().putList(iconPref, null)) {
                 changed = true;
             }
         }
@@ -740,7 +741,7 @@ public abstract class SourceEditor extends JPanel {
         public void addExtendedSourceEntries(List<ExtendedSourceEntry> sources) {
             if (sources == null) return;
             for (ExtendedSourceEntry info: sources) {
-                data.add(new SourceEntry(info.url, info.name, info.getDisplayName(), true));
+                data.add(new SourceEntry(info.type, info.url, info.name, info.getDisplayName(), true));
             }
             fireTableDataChanged();
             selectionModel.setValueIsAdjusting(true);
@@ -968,7 +969,7 @@ public abstract class SourceEditor extends JPanel {
                 if (canEnable) {
                     active = editEntryDialog.active();
                 }
-                final SourceEntry entry = new SourceEntry(
+                final SourceEntry entry = new SourceEntry(sourceType,
                         editEntryDialog.getURL(),
                         null, editEntryDialog.getTitle(), active);
                 entry.title = getTitleForSourceEntry(entry);
@@ -1508,7 +1509,7 @@ public abstract class SourceEditor extends JPanel {
                         last = null;
                         Matcher m = Pattern.compile("^(.+);(.+)$").matcher(line);
                         if (m.matches()) {
-                            last = new ExtendedSourceEntry(m.group(1), m.group(2));
+                            last = new ExtendedSourceEntry(sourceType, m.group(1), m.group(2));
                             sources.add(last);
                         } else {
                             Logging.error(tr(getStr(I18nString.ILLEGAL_FORMAT_OF_ENTRY), url, line));
diff --git a/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java b/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java
index 9c521f6..b776eb3 100644
--- a/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java
+++ b/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java
@@ -70,6 +70,7 @@ import org.openstreetmap.josm.data.imagery.ImageryLayerInfo;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset;
 import org.openstreetmap.josm.gui.util.GuiHelper;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Logging;
@@ -487,7 +488,7 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
 
         private void setActionAndAdapt(ActionDefinition action) {
             this.act = action;
-            doNotHide.setSelected(Main.pref.getBoolean("toolbar.always-visible", true));
+            doNotHide.setSelected(Config.getPref().getBoolean("toolbar.always-visible", true));
             remove.setVisible(act != null);
             shortcutEdit.setVisible(act != null);
         }
@@ -495,13 +496,13 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
         private final JMenuItem remove = new JMenuItem(new AbstractAction(tr("Remove from toolbar")) {
             @Override
             public void actionPerformed(ActionEvent e) {
-                Collection<String> t = new LinkedList<>(getToolString());
+                List<String> t = new LinkedList<>(getToolString());
                 ActionParser parser = new ActionParser(null);
                 // get text definition of current action
                 String res = parser.saveAction(act);
                 // remove the button from toolbar preferences
                 t.remove(res);
-                Main.pref.putCollection("toolbar", t);
+                Config.getPref().putList("toolbar", t);
                 MainApplication.getToolbar().refreshToolbarControl();
             }
         });
@@ -531,8 +532,8 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
             @Override
             public void actionPerformed(ActionEvent e) {
                 boolean sel = ((JCheckBoxMenuItem) e.getSource()).getState();
-                Main.pref.put("toolbar.always-visible", sel);
-                Main.pref.put("menu.always-visible", sel);
+                Config.getPref().putBoolean("toolbar.always-visible", sel);
+                Config.getPref().putBoolean("menu.always-visible", sel);
             }
         });
 
@@ -970,7 +971,7 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
 
         @Override
         public boolean ok() {
-            Collection<String> t = new LinkedList<>();
+            List<String> t = new LinkedList<>();
             ActionParser parser = new ActionParser(null);
             for (int i = 0; i < selected.size(); ++i) {
                 ActionDefinition action = selected.get(i);
@@ -986,7 +987,7 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
             if (t.isEmpty()) {
                 t = Collections.singletonList(EMPTY_TOOLBAR_MARKER);
             }
-            Main.pref.putCollection("toolbar", t);
+            Config.getPref().putList("toolbar", t);
             MainApplication.getToolbar().refreshToolbarControl();
             return false;
         }
@@ -1001,7 +1002,7 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
             control.setFloatable(false);
             control.setComponentPopupMenu(popupMenu);
         });
-        Main.pref.addPreferenceChangeListener(e -> {
+        Config.getPref().addPreferenceChangeListener(e -> {
             if ("toolbar.visible".equals(e.getKey())) {
                 refreshToolbarControl();
             }
@@ -1073,7 +1074,7 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
 
     public static Collection<String> getToolString() {
 
-        Collection<String> toolStr = Main.pref.getCollection("toolbar", Arrays.asList(deftoolbar));
+        Collection<String> toolStr = Config.getPref().getList("toolbar", Arrays.asList(deftoolbar));
         if (toolStr == null || toolStr.isEmpty()) {
             toolStr = Arrays.asList(deftoolbar);
         }
@@ -1187,7 +1188,7 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
             }
         }
 
-        boolean visible = Main.pref.getBoolean("toolbar.visible", true);
+        boolean visible = Config.getPref().getBoolean("toolbar.visible", true);
 
         control.setFocusTraversalKeysEnabled(!unregisterTab);
         control.setVisible(visible && control.getComponentCount() != 0);
@@ -1213,7 +1214,7 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
                 t.add(definitionText); // add to the end
             }
         }
-        Main.pref.putCollection("toolbar", t);
+        Config.getPref().putList("toolbar", t);
         MainApplication.getToolbar().refreshToolbarControl();
     }
 
diff --git a/src/org/openstreetmap/josm/gui/preferences/advanced/AdvancedPreference.java b/src/org/openstreetmap/josm/gui/preferences/advanced/AdvancedPreference.java
index bcf8025..81e1535 100644
--- a/src/org/openstreetmap/josm/gui/preferences/advanced/AdvancedPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/advanced/AdvancedPreference.java
@@ -38,8 +38,9 @@ import javax.swing.filechooser.FileFilter;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.DiskAccessAction;
 import org.openstreetmap.josm.data.Preferences;
-import org.openstreetmap.josm.data.preferences.Setting;
-import org.openstreetmap.josm.data.preferences.StringSetting;
+import org.openstreetmap.josm.data.PreferencesUtils;
+import org.openstreetmap.josm.spi.preferences.Setting;
+import org.openstreetmap.josm.spi.preferences.StringSetting;
 import org.openstreetmap.josm.gui.dialogs.LogShowDialog;
 import org.openstreetmap.josm.gui.io.CustomConfigurator;
 import org.openstreetmap.josm.gui.preferences.DefaultTabPreferenceSetting;
@@ -49,6 +50,7 @@ import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
 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.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
@@ -263,7 +265,7 @@ public final class AdvancedPreference extends DefaultTabPreferenceSetting {
         log.append("<html>");
         for (File f : files) {
             CustomConfigurator.readXML(f, tmpPrefs);
-            log.append(CustomConfigurator.getLog());
+            log.append(PreferencesUtils.getLog());
         }
         log.append("</html>");
         String msg = log.toString().replace("\n", "<br/>");
@@ -367,7 +369,7 @@ public final class AdvancedPreference extends DefaultTabPreferenceSetting {
                        }
                     }
                 }
-                files = Main.pref.getPreferencesDirectory().listFiles();
+                files = Config.getDirs().getPreferencesDirectory(false).listFiles();
                 if (files != null) {
                     for (File f: files) {
                        String s = f.getName();
diff --git a/src/org/openstreetmap/josm/gui/preferences/advanced/ExportProfileAction.java b/src/org/openstreetmap/josm/gui/preferences/advanced/ExportProfileAction.java
index f67b5a6..84cb969 100644
--- a/src/org/openstreetmap/josm/gui/preferences/advanced/ExportProfileAction.java
+++ b/src/org/openstreetmap/josm/gui/preferences/advanced/ExportProfileAction.java
@@ -19,7 +19,7 @@ import javax.swing.filechooser.FileFilter;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.DiskAccessAction;
 import org.openstreetmap.josm.data.Preferences;
-import org.openstreetmap.josm.data.preferences.Setting;
+import org.openstreetmap.josm.spi.preferences.Setting;
 import org.openstreetmap.josm.gui.io.CustomConfigurator;
 import org.openstreetmap.josm.gui.widgets.AbstractFileChooser;
 import org.openstreetmap.josm.tools.Utils;
diff --git a/src/org/openstreetmap/josm/gui/preferences/advanced/ListEditor.java b/src/org/openstreetmap/josm/gui/preferences/advanced/ListEditor.java
index 489107e..76bda7b 100644
--- a/src/org/openstreetmap/josm/gui/preferences/advanced/ListEditor.java
+++ b/src/org/openstreetmap/josm/gui/preferences/advanced/ListEditor.java
@@ -15,7 +15,7 @@ import javax.swing.JScrollPane;
 import javax.swing.JTable;
 import javax.swing.table.AbstractTableModel;
 
-import org.openstreetmap.josm.data.preferences.ListSetting;
+import org.openstreetmap.josm.spi.preferences.ListSetting;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.SubclassFilteredCollection;
diff --git a/src/org/openstreetmap/josm/gui/preferences/advanced/ListListEditor.java b/src/org/openstreetmap/josm/gui/preferences/advanced/ListListEditor.java
index dc3b78f..0fea23b 100644
--- a/src/org/openstreetmap/josm/gui/preferences/advanced/ListListEditor.java
+++ b/src/org/openstreetmap/josm/gui/preferences/advanced/ListListEditor.java
@@ -11,7 +11,7 @@ import javax.swing.JComponent;
 import javax.swing.JPanel;
 import javax.swing.table.AbstractTableModel;
 
-import org.openstreetmap.josm.data.preferences.ListListSetting;
+import org.openstreetmap.josm.spi.preferences.ListListSetting;
 
 /**
  * Editor for List of Lists preference entries.
diff --git a/src/org/openstreetmap/josm/gui/preferences/advanced/MapListEditor.java b/src/org/openstreetmap/josm/gui/preferences/advanced/MapListEditor.java
index 542b34a..f720a2d 100644
--- a/src/org/openstreetmap/josm/gui/preferences/advanced/MapListEditor.java
+++ b/src/org/openstreetmap/josm/gui/preferences/advanced/MapListEditor.java
@@ -15,7 +15,7 @@ import javax.swing.JComponent;
 import javax.swing.JPanel;
 import javax.swing.table.AbstractTableModel;
 
-import org.openstreetmap.josm.data.preferences.MapListSetting;
+import org.openstreetmap.josm.spi.preferences.MapListSetting;
 
 /**
  * Editor for List of Maps preference entries.
diff --git a/src/org/openstreetmap/josm/gui/preferences/advanced/PrefEntry.java b/src/org/openstreetmap/josm/gui/preferences/advanced/PrefEntry.java
index 2c3ca47..2801fb3 100644
--- a/src/org/openstreetmap/josm/gui/preferences/advanced/PrefEntry.java
+++ b/src/org/openstreetmap/josm/gui/preferences/advanced/PrefEntry.java
@@ -1,7 +1,7 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.preferences.advanced;
 
-import org.openstreetmap.josm.data.preferences.Setting;
+import org.openstreetmap.josm.spi.preferences.Setting;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 
 /**
diff --git a/src/org/openstreetmap/josm/gui/preferences/advanced/PreferencesTable.java b/src/org/openstreetmap/josm/gui/preferences/advanced/PreferencesTable.java
index 51ca0f0..0a7f62b 100644
--- a/src/org/openstreetmap/josm/gui/preferences/advanced/PreferencesTable.java
+++ b/src/org/openstreetmap/josm/gui/preferences/advanced/PreferencesTable.java
@@ -29,11 +29,11 @@ import javax.swing.table.DefaultTableCellRenderer;
 import javax.swing.table.DefaultTableModel;
 
 import org.openstreetmap.josm.data.preferences.ColorProperty;
-import org.openstreetmap.josm.data.preferences.ListListSetting;
-import org.openstreetmap.josm.data.preferences.ListSetting;
-import org.openstreetmap.josm.data.preferences.MapListSetting;
-import org.openstreetmap.josm.data.preferences.Setting;
-import org.openstreetmap.josm.data.preferences.StringSetting;
+import org.openstreetmap.josm.spi.preferences.ListListSetting;
+import org.openstreetmap.josm.spi.preferences.ListSetting;
+import org.openstreetmap.josm.spi.preferences.MapListSetting;
+import org.openstreetmap.josm.spi.preferences.Setting;
+import org.openstreetmap.josm.spi.preferences.StringSetting;
 import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
diff --git a/src/org/openstreetmap/josm/gui/preferences/advanced/StringEditor.java b/src/org/openstreetmap/josm/gui/preferences/advanced/StringEditor.java
index d1b15c9..74c9088 100644
--- a/src/org/openstreetmap/josm/gui/preferences/advanced/StringEditor.java
+++ b/src/org/openstreetmap/josm/gui/preferences/advanced/StringEditor.java
@@ -9,7 +9,7 @@ import javax.swing.JComponent;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
 
-import org.openstreetmap.josm.data.preferences.StringSetting;
+import org.openstreetmap.josm.spi.preferences.StringSetting;
 import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
 import org.openstreetmap.josm.tools.GBC;
diff --git a/src/org/openstreetmap/josm/gui/preferences/audio/AudioPreference.java b/src/org/openstreetmap/josm/gui/preferences/audio/AudioPreference.java
index 95f7f5f..54db066 100644
--- a/src/org/openstreetmap/josm/gui/preferences/audio/AudioPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/audio/AudioPreference.java
@@ -10,13 +10,13 @@ import javax.swing.JCheckBox;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.preferences.DefaultTabPreferenceSetting;
 import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
 import org.openstreetmap.josm.gui.preferences.PreferenceSettingFactory;
 import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
 import org.openstreetmap.josm.gui.widgets.VerticallyScrollablePanel;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
 
 /**
@@ -59,68 +59,68 @@ public final class AudioPreference extends DefaultTabPreferenceSetting {
         JPanel audio = new VerticallyScrollablePanel(new GridBagLayout());
 
         // audioMenuVisible
-        audioMenuVisible.setSelected(!Main.pref.getBoolean("audio.menuinvisible"));
+        audioMenuVisible.setSelected(!Config.getPref().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));
 
         // audioTraceVisible
-        markerAudioTraceVisible.setSelected(Main.pref.getBoolean("marker.traceaudio", true));
+        markerAudioTraceVisible.setSelected(Config.getPref().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));
 
         // buttonLabels
-        markerButtonLabels.setSelected(Main.pref.getBoolean("marker.buttonlabels", true));
+        markerButtonLabels.setSelected(Config.getPref().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(new JLabel(tr("When importing audio, make markers from...")), GBC.eol());
 
         // audioMarkersFromExplicitWaypoints
-        audioMarkersFromExplicitWaypoints.setSelected(Main.pref.getBoolean("marker.audiofromexplicitwaypoints", true));
+        audioMarkersFromExplicitWaypoints.setSelected(Config.getPref().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));
 
         // audioMarkersFromUntimedWaypoints
-        audioMarkersFromUntimedWaypoints.setSelected(Main.pref.getBoolean("marker.audiofromuntimedwaypoints", true));
+        audioMarkersFromUntimedWaypoints.setSelected(Config.getPref().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));
 
         // audioMarkersFromNamedTrackpoints
-        audioMarkersFromNamedTrackpoints.setSelected(Main.pref.getBoolean("marker.audiofromnamedtrackpoints", false));
+        audioMarkersFromNamedTrackpoints.setSelected(Config.getPref().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));
 
         // audioMarkersFromWavTimestamps
-        audioMarkersFromWavTimestamps.setSelected(Main.pref.getBoolean("marker.audiofromwavtimestamps", false));
+        audioMarkersFromWavTimestamps.setSelected(Config.getPref().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));
 
         // audioMarkersFromStart
-        audioMarkersFromStart.setSelected(Main.pref.getBoolean("marker.audiofromstart"));
+        audioMarkersFromStart.setSelected(Config.getPref().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));
 
-        audioForwardBackAmount.setText(Main.pref.get("audio.forwardbackamount", "10.0"));
+        audioForwardBackAmount.setText(Config.getPref().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));
 
-        audioFastForwardMultiplier.setText(Main.pref.get("audio.fastfwdmultiplier", "1.3"));
+        audioFastForwardMultiplier.setText(Config.getPref().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));
 
-        audioLeadIn.setText(Main.pref.get("audio.leadin", "1.0"));
+        audioLeadIn.setText(Config.getPref().get("audio.leadin", "1.0"));
         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));
 
-        audioCalibration.setText(Main.pref.get("audio.calibration", "1.0"));
+        audioCalibration.setText(Config.getPref().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));
@@ -132,18 +132,18 @@ public final class AudioPreference extends DefaultTabPreferenceSetting {
 
     @Override
     public boolean ok() {
-        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());
-        Main.pref.put("marker.audiofromuntimedwaypoints", audioMarkersFromUntimedWaypoints.isSelected());
-        Main.pref.put("marker.audiofromnamedtrackpoints", audioMarkersFromNamedTrackpoints.isSelected());
-        Main.pref.put("marker.audiofromwavtimestamps", audioMarkersFromWavTimestamps.isSelected());
-        Main.pref.put("marker.audiofromstart", audioMarkersFromStart.isSelected());
-        Main.pref.put("audio.forwardbackamount", audioForwardBackAmount.getText());
-        Main.pref.put("audio.fastfwdmultiplier", audioFastForwardMultiplier.getText());
-        Main.pref.put("audio.leadin", audioLeadIn.getText());
-        Main.pref.put("audio.calibration", audioCalibration.getText());
+        Config.getPref().putBoolean("audio.menuinvisible", !audioMenuVisible.isSelected());
+        Config.getPref().putBoolean("marker.traceaudio", markerAudioTraceVisible.isSelected());
+        Config.getPref().putBoolean("marker.buttonlabels", markerButtonLabels.isSelected());
+        Config.getPref().putBoolean("marker.audiofromexplicitwaypoints", audioMarkersFromExplicitWaypoints.isSelected());
+        Config.getPref().putBoolean("marker.audiofromuntimedwaypoints", audioMarkersFromUntimedWaypoints.isSelected());
+        Config.getPref().putBoolean("marker.audiofromnamedtrackpoints", audioMarkersFromNamedTrackpoints.isSelected());
+        Config.getPref().putBoolean("marker.audiofromwavtimestamps", audioMarkersFromWavTimestamps.isSelected());
+        Config.getPref().putBoolean("marker.audiofromstart", audioMarkersFromStart.isSelected());
+        Config.getPref().put("audio.forwardbackamount", audioForwardBackAmount.getText());
+        Config.getPref().put("audio.fastfwdmultiplier", audioFastForwardMultiplier.getText());
+        Config.getPref().put("audio.leadin", audioLeadIn.getText());
+        Config.getPref().put("audio.calibration", audioCalibration.getText());
         return false;
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java b/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java
index 01b5a6b..b848d7c 100644
--- a/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java
@@ -45,6 +45,7 @@ import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
 import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting;
 import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
 import org.openstreetmap.josm.gui.util.GuiHelper;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ColorHelper;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.Logging;
@@ -271,7 +272,7 @@ public class ColorPreference implements SubPreferenceSetting {
     public boolean ok() {
         boolean ret = false;
         for (String d : del) {
-            Main.pref.put("color."+d, null);
+            Config.getPref().put("color."+d, null);
         }
         for (int i = 0; i < colors.getRowCount(); ++i) {
             String key = (String) colors.getValueAt(i, 0);
diff --git a/src/org/openstreetmap/josm/gui/preferences/display/DrawingPreference.java b/src/org/openstreetmap/josm/gui/preferences/display/DrawingPreference.java
index 1e1d628..0b6035d 100644
--- a/src/org/openstreetmap/josm/gui/preferences/display/DrawingPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/display/DrawingPreference.java
@@ -12,7 +12,6 @@ import javax.swing.JLabel;
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.ExpertToggleAction;
 import org.openstreetmap.josm.gui.autofilter.AutoFilterManager;
 import org.openstreetmap.josm.gui.autofilter.AutoFilterRule;
@@ -23,6 +22,7 @@ import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting;
 import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.widgets.JosmComboBox;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
 
 /**
@@ -78,64 +78,64 @@ public class DrawingPreference implements SubPreferenceSetting {
         // directionHint
         directionHint.addActionListener(e -> {
             if (directionHint.isSelected()) {
-                headArrow.setSelected(Main.pref.getBoolean("draw.segment.head_only", false));
+                headArrow.setSelected(Config.getPref().getBoolean("draw.segment.head_only", false));
             } else {
                 headArrow.setSelected(false);
             }
             headArrow.setEnabled(directionHint.isSelected());
         });
         directionHint.setToolTipText(tr("Draw direction hints for way segments."));
-        directionHint.setSelected(Main.pref.getBoolean("draw.segment.direction", false));
+        directionHint.setSelected(Config.getPref().getBoolean("draw.segment.direction", false));
 
         // only on the head of a way
         headArrow.setToolTipText(tr("Only on the head of a way."));
-        headArrow.setSelected(Main.pref.getBoolean("draw.segment.head_only", false));
+        headArrow.setSelected(Config.getPref().getBoolean("draw.segment.head_only", false));
         headArrow.setEnabled(directionHint.isSelected());
 
         // draw oneway arrows
         onewayArrow.setToolTipText(tr("Draw arrows in the direction of oneways and other directed features."));
-        onewayArrow.setSelected(Main.pref.getBoolean("draw.oneway", true));
+        onewayArrow.setSelected(Config.getPref().getBoolean("draw.oneway", true));
 
         // segment order number
         segmentOrderNumber.setToolTipText(tr("Draw the order numbers of all segments within their way."));
-        segmentOrderNumber.setSelected(Main.pref.getBoolean("draw.segment.order_number", false));
+        segmentOrderNumber.setSelected(Config.getPref().getBoolean("draw.segment.order_number", false));
         segmentOrderNumberOnSelectedWay.setToolTipText(tr("Draw the order numbers of all segments within their way."));
-        segmentOrderNumberOnSelectedWay.setSelected(Main.pref.getBoolean("draw.segment.order_number.on_selected", false));
+        segmentOrderNumberOnSelectedWay.setSelected(Config.getPref().getBoolean("draw.segment.order_number.on_selected", false));
 
         // downloaded area
         sourceBounds.setToolTipText(tr("Draw the boundaries of data loaded from the server."));
-        sourceBounds.setSelected(Main.pref.getBoolean("draw.data.downloaded_area", true));
+        sourceBounds.setSelected(Config.getPref().getBoolean("draw.data.downloaded_area", true));
 
         // virtual nodes
         virtualNodes.setToolTipText(tr("Draw virtual nodes in select mode for easy way modification."));
-        virtualNodes.setSelected(Main.pref.getInteger("mappaint.node.virtual-size", 8) != 0);
+        virtualNodes.setSelected(Config.getPref().getInt("mappaint.node.virtual-size", 8) != 0);
 
         // background layers in inactive color
         inactive.setToolTipText(tr("Draw the inactive data layers in a different color."));
-        inactive.setSelected(Main.pref.getBoolean("draw.data.inactive_color", true));
+        inactive.setSelected(Config.getPref().getBoolean("draw.data.inactive_color", true));
 
         // antialiasing
         useAntialiasing.setToolTipText(tr("Apply antialiasing to the map view resulting in a smoother appearance."));
-        useAntialiasing.setSelected(Main.pref.getBoolean("mappaint.use-antialiasing", true));
+        useAntialiasing.setSelected(Config.getPref().getBoolean("mappaint.use-antialiasing", true));
 
         // wireframe mode antialiasing
         useWireframeAntialiasing.setToolTipText(tr("Apply antialiasing to the map view in wireframe mode resulting in a smoother appearance."));
-        useWireframeAntialiasing.setSelected(Main.pref.getBoolean("mappaint.wireframe.use-antialiasing", false));
+        useWireframeAntialiasing.setSelected(Config.getPref().getBoolean("mappaint.wireframe.use-antialiasing", false));
 
         // highlighting
         useHighlighting.setToolTipText(tr("Hightlight target nodes and ways while drawing or selecting"));
-        useHighlighting.setSelected(Main.pref.getBoolean("draw.target-highlight", true));
+        useHighlighting.setSelected(Config.getPref().getBoolean("draw.target-highlight", true));
 
         drawHelperLine.setToolTipText(tr("Draw rubber-band helper line"));
-        drawHelperLine.setSelected(Main.pref.getBoolean("draw.helper-line", true));
+        drawHelperLine.setSelected(Config.getPref().getBoolean("draw.helper-line", true));
 
         // outlineOnly
         outlineOnly.setToolTipText(tr("This option suppresses the filling of areas, overriding anything specified in the selected style."));
-        outlineOnly.setSelected(Main.pref.getBoolean("draw.data.area_outline_only", false));
+        outlineOnly.setSelected(Config.getPref().getBoolean("draw.data.area_outline_only", false));
 
         // discardable keys
         discardableKeys.setToolTipText(tr("Display keys which have been deemed uninteresting to the point that they can be silently removed."));
-        discardableKeys.setSelected(Main.pref.getBoolean("display.discardable-keys", false));
+        discardableKeys.setSelected(Config.getPref().getBoolean("display.discardable-keys", false));
 
         // auto filters
         autoFilters.setToolTipText(tr("Display buttons to automatically filter numeric values of a predefined tag"));
@@ -194,22 +194,22 @@ public class DrawingPreference implements SubPreferenceSetting {
     @Override
     public boolean ok() {
         boolean restart = gpxPanel.savePreferences();
-        Main.pref.put("draw.data.area_outline_only", outlineOnly.isSelected());
-        Main.pref.put("draw.segment.direction", directionHint.isSelected());
-        Main.pref.put("draw.segment.head_only", headArrow.isSelected());
-        Main.pref.put("draw.oneway", onewayArrow.isSelected());
-        Main.pref.put("draw.segment.order_number", segmentOrderNumber.isSelected());
-        Main.pref.put("draw.segment.order_number.on_selected", segmentOrderNumberOnSelectedWay.isSelected());
-        Main.pref.put("draw.data.downloaded_area", sourceBounds.isSelected());
-        Main.pref.put("draw.data.inactive_color", inactive.isSelected());
-        Main.pref.put("mappaint.use-antialiasing", useAntialiasing.isSelected());
-        Main.pref.put("mappaint.wireframe.use-antialiasing", useWireframeAntialiasing.isSelected());
-        Main.pref.put("draw.target-highlight", useHighlighting.isSelected());
-        Main.pref.put("draw.helper-line", drawHelperLine.isSelected());
-        Main.pref.put("display.discardable-keys", discardableKeys.isSelected());
+        Config.getPref().putBoolean("draw.data.area_outline_only", outlineOnly.isSelected());
+        Config.getPref().putBoolean("draw.segment.direction", directionHint.isSelected());
+        Config.getPref().putBoolean("draw.segment.head_only", headArrow.isSelected());
+        Config.getPref().putBoolean("draw.oneway", onewayArrow.isSelected());
+        Config.getPref().putBoolean("draw.segment.order_number", segmentOrderNumber.isSelected());
+        Config.getPref().putBoolean("draw.segment.order_number.on_selected", segmentOrderNumberOnSelectedWay.isSelected());
+        Config.getPref().putBoolean("draw.data.downloaded_area", sourceBounds.isSelected());
+        Config.getPref().putBoolean("draw.data.inactive_color", inactive.isSelected());
+        Config.getPref().putBoolean("mappaint.use-antialiasing", useAntialiasing.isSelected());
+        Config.getPref().putBoolean("mappaint.wireframe.use-antialiasing", useWireframeAntialiasing.isSelected());
+        Config.getPref().putBoolean("draw.target-highlight", useHighlighting.isSelected());
+        Config.getPref().putBoolean("draw.helper-line", drawHelperLine.isSelected());
+        Config.getPref().putBoolean("display.discardable-keys", discardableKeys.isSelected());
         AutoFilterManager.PROP_AUTO_FILTER_ENABLED.put(autoFilters.isSelected());
         AutoFilterManager.PROP_AUTO_FILTER_RULE.put(((AutoFilterRule) autoFilterRules.getSelectedItem()).getKey());
-        int vn = Main.pref.getInteger("mappaint.node.virtual-size", 8);
+        int vn = Config.getPref().getInt("mappaint.node.virtual-size", 8);
         if (virtualNodes.isSelected()) {
             if (vn < 1) {
                 vn = 8;
@@ -217,7 +217,7 @@ public class DrawingPreference implements SubPreferenceSetting {
         } else {
             vn = 0;
         }
-        Main.pref.putInteger("mappaint.node.virtual-size", vn);
+        Config.getPref().putInt("mappaint.node.virtual-size", vn);
         return restart;
     }
 
diff --git a/src/org/openstreetmap/josm/gui/preferences/display/GPXSettingsPanel.java b/src/org/openstreetmap/josm/gui/preferences/display/GPXSettingsPanel.java
index 5e328f6..7534432 100644
--- a/src/org/openstreetmap/josm/gui/preferences/display/GPXSettingsPanel.java
+++ b/src/org/openstreetmap/josm/gui/preferences/display/GPXSettingsPanel.java
@@ -24,12 +24,14 @@ import javax.swing.JSlider;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.ExpertToggleAction;
+import org.openstreetmap.josm.data.PreferencesUtils;
 import org.openstreetmap.josm.gui.layer.gpx.GpxDrawHelper;
 import org.openstreetmap.josm.gui.layer.markerlayer.Marker;
 import org.openstreetmap.josm.gui.layer.markerlayer.Marker.TemplateEntryProperty;
 import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane.ValidationListener;
 import org.openstreetmap.josm.gui.widgets.JosmComboBox;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.template_engine.ParseError;
@@ -384,14 +386,14 @@ public class GPXSettingsPanel extends JPanel implements ValidationListener {
      * Loads preferences to UI controls
      */
     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()) {
+        makeAutoMarkers.setSelected(Config.getPref().getBoolean("marker.makeautomarkers", true));
+        if (layerName != null && Config.getPref().get("draw.rawgps.lines."+layerName).isEmpty()
+                && Config.getPref().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 = PreferencesUtils.getBoolean(Config.getPref(), "draw.rawgps.lines.local", layerName, true);
+            if (PreferencesUtils.getBoolean(Config.getPref(), "draw.rawgps.lines", layerName, true)) {
                 drawRawGpsLinesAll.setSelected(true);
             } else if (lf) {
                 drawRawGpsLinesLocal.setSelected(true);
@@ -400,21 +402,31 @@ 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)));
-        drawLineWithAlpha.setSelected(Main.pref.getBoolean("draw.rawgps.lines.alpha-blend", layerName, false));
-        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));
+        drawRawGpsMaxLineLengthLocal.setText(Integer.toString(PreferencesUtils.getInteger(Config.getPref(),
+                "draw.rawgps.max-line-length.local", layerName, -1)));
+        drawRawGpsMaxLineLength.setText(Integer.toString(PreferencesUtils.getInteger(Config.getPref(),
+                "draw.rawgps.max-line-length", layerName, 200)));
+        drawLineWidth.setText(Integer.toString(PreferencesUtils.getInteger(Config.getPref(),
+                "draw.rawgps.linewidth", layerName, 0)));
+        drawLineWithAlpha.setSelected(PreferencesUtils.getBoolean(Config.getPref(),
+                "draw.rawgps.lines.alpha-blend", layerName, false));
+        forceRawGpsLines.setSelected(PreferencesUtils.getBoolean(Config.getPref(),
+                "draw.rawgps.lines.force", layerName, false));
+        drawGpsArrows.setSelected(PreferencesUtils.getBoolean(Config.getPref(),
+                "draw.rawgps.direction", layerName, false));
+        drawGpsArrowsFast.setSelected(PreferencesUtils.getBoolean(Config.getPref(),
+                "draw.rawgps.alternatedirection", layerName, false));
+        drawGpsArrowsMinDist.setText(Integer.toString(PreferencesUtils.getInteger(Config.getPref(),
+                "draw.rawgps.min-arrow-distance", layerName, 40)));
+        hdopCircleGpsPoints.setSelected(PreferencesUtils.getBoolean(Config.getPref(),
+                "draw.rawgps.hdopcircle", layerName, false));
+        largeGpsPoints.setSelected(PreferencesUtils.getBoolean(Config.getPref(),
+                "draw.rawgps.large", layerName, false));
+        useGpsAntialiasing.setSelected(Config.getPref().getBoolean("mappaint.gpx.use-antialiasing", false));
 
         drawRawGpsLinesActionListener.actionPerformed(null);
 
-        if (layerName != null && Main.pref.get("draw.rawgps.colors."+layerName).isEmpty()) {
+        if (layerName != null && Config.getPref().get("draw.rawgps.colors."+layerName).isEmpty()) {
             colorTypeGlobal.setSelected(true);
             colorDynamic.setSelected(false);
             colorDynamic.setEnabled(false);
@@ -422,7 +434,7 @@ public class GPXSettingsPanel extends JPanel implements ValidationListener {
             colorTypeHeatMapGain.setValue(0);
             colorTypeHeatMapLowerLimit.setValue(0);
         } else {
-            int colorType = Main.pref.getInteger("draw.rawgps.colors", layerName, 0);
+            int colorType = PreferencesUtils.getInteger(Config.getPref(), "draw.rawgps.colors", layerName, 0);
             switch (colorType) {
             case 0: colorTypeNone.setSelected(true); break;
             case 1: colorTypeVelocity.setSelected(true); break;
@@ -432,13 +444,18 @@ public class GPXSettingsPanel extends JPanel implements ValidationListener {
             case 5: colorTypeHeatMap.setSelected(true); break;
             default: Logging.warn("Unknown color type: " + colorType);
             }
-            int ccts = Main.pref.getInteger("draw.rawgps.colorTracksTune", layerName, 45);
+            int ccts = PreferencesUtils.getInteger(Config.getPref(), "draw.rawgps.colorTracksTune", layerName, 45);
             colorTypeVelocityTune.setSelectedIndex(ccts == 10 ? 2 : (ccts == 20 ? 1 : 0));
-            colorTypeHeatMapTune.setSelectedIndex(Main.pref.getInteger("draw.rawgps.heatmap.colormap", layerName, 0));
-            colorDynamic.setSelected(Main.pref.getBoolean("draw.rawgps.colors.dynamic", layerName, false));
-            colorTypeHeatMapPoints.setSelected(Main.pref.getBoolean("draw.rawgps.heatmap.use-points", layerName, false));
-            colorTypeHeatMapGain.setValue(Main.pref.getInteger("draw.rawgps.heatmap.gain", layerName, 0));
-            colorTypeHeatMapLowerLimit.setValue(Main.pref.getInteger("draw.rawgps.heatmap.lower-limit", layerName, 0));
+            colorTypeHeatMapTune.setSelectedIndex(PreferencesUtils.getInteger(Config.getPref(),
+                    "draw.rawgps.heatmap.colormap", layerName, 0));
+            colorDynamic.setSelected(PreferencesUtils.getBoolean(Config.getPref(),
+                    "draw.rawgps.colors.dynamic", layerName, false));
+            colorTypeHeatMapPoints.setSelected(PreferencesUtils.getBoolean(Config.getPref(),
+                    "draw.rawgps.heatmap.use-points", layerName, false));
+            colorTypeHeatMapGain.setValue(PreferencesUtils.getInteger(Config.getPref(),
+                    "draw.rawgps.heatmap.gain", layerName, 0));
+            colorTypeHeatMapLowerLimit.setValue(PreferencesUtils.getInteger(Config.getPref(),
+                    "draw.rawgps.heatmap.lower-limit", layerName, 0));
         }
     }
 
@@ -453,66 +470,68 @@ public class GPXSettingsPanel extends JPanel implements ValidationListener {
         if (layerName == null) {
             layerNameDot = "";
         }
-        Main.pref.put("marker.makeautomarkers"+layerNameDot, makeAutoMarkers.isSelected());
+        Config.getPref().putBoolean("marker.makeautomarkers"+layerNameDot, makeAutoMarkers.isSelected());
         if (drawRawGpsLinesGlobal.isSelected()) {
-            Main.pref.put("draw.rawgps.lines" + layerNameDot, null);
-            Main.pref.put("draw.rawgps.max-line-length" + layerNameDot, null);
-            Main.pref.put("draw.rawgps.lines.local" + layerNameDot, null);
-            Main.pref.put("draw.rawgps.max-line-length.local" + layerNameDot, null);
-            Main.pref.put("draw.rawgps.lines.force"+layerNameDot, null);
-            Main.pref.put("draw.rawgps.direction"+layerNameDot, null);
-            Main.pref.put("draw.rawgps.alternatedirection"+layerNameDot, null);
-            Main.pref.put("draw.rawgps.min-arrow-distance"+layerNameDot, null);
+            Config.getPref().put("draw.rawgps.lines" + layerNameDot, null);
+            Config.getPref().put("draw.rawgps.max-line-length" + layerNameDot, null);
+            Config.getPref().put("draw.rawgps.lines.local" + layerNameDot, null);
+            Config.getPref().put("draw.rawgps.max-line-length.local" + layerNameDot, null);
+            Config.getPref().put("draw.rawgps.lines.force"+layerNameDot, null);
+            Config.getPref().put("draw.rawgps.direction"+layerNameDot, null);
+            Config.getPref().put("draw.rawgps.alternatedirection"+layerNameDot, null);
+            Config.getPref().put("draw.rawgps.min-arrow-distance"+layerNameDot, null);
         } else {
             if (layerName == null || !locLayer) {
-                Main.pref.put("draw.rawgps.lines" + layerNameDot, drawRawGpsLinesAll.isSelected());
-                Main.pref.put("draw.rawgps.max-line-length" + layerNameDot, drawRawGpsMaxLineLength.getText());
+                Config.getPref().putBoolean("draw.rawgps.lines" + layerNameDot, drawRawGpsLinesAll.isSelected());
+                Config.getPref().put("draw.rawgps.max-line-length" + layerNameDot, drawRawGpsMaxLineLength.getText());
             }
             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());
+                Config.getPref().putBoolean("draw.rawgps.lines.local" + layerNameDot,
+                        drawRawGpsLinesAll.isSelected() || drawRawGpsLinesLocal.isSelected());
+                Config.getPref().put("draw.rawgps.max-line-length.local" + layerNameDot,
+                        drawRawGpsMaxLineLengthLocal.getText());
             }
-            Main.pref.put("draw.rawgps.lines.force"+layerNameDot, forceRawGpsLines.isSelected());
-            Main.pref.put("draw.rawgps.direction"+layerNameDot, drawGpsArrows.isSelected());
-            Main.pref.put("draw.rawgps.alternatedirection"+layerNameDot, drawGpsArrowsFast.isSelected());
-            Main.pref.put("draw.rawgps.min-arrow-distance"+layerNameDot, drawGpsArrowsMinDist.getText());
+            Config.getPref().putBoolean("draw.rawgps.lines.force"+layerNameDot, forceRawGpsLines.isSelected());
+            Config.getPref().putBoolean("draw.rawgps.direction"+layerNameDot, drawGpsArrows.isSelected());
+            Config.getPref().putBoolean("draw.rawgps.alternatedirection"+layerNameDot, drawGpsArrowsFast.isSelected());
+            Config.getPref().put("draw.rawgps.min-arrow-distance"+layerNameDot, drawGpsArrowsMinDist.getText());
         }
 
-        Main.pref.put("draw.rawgps.hdopcircle"+layerNameDot, hdopCircleGpsPoints.isSelected());
-        Main.pref.put("draw.rawgps.large"+layerNameDot, largeGpsPoints.isSelected());
-        Main.pref.put("draw.rawgps.linewidth"+layerNameDot, drawLineWidth.getText());
-        Main.pref.put("draw.rawgps.lines.alpha-blend"+layerNameDot, drawLineWithAlpha.isSelected());
+        Config.getPref().putBoolean("draw.rawgps.hdopcircle"+layerNameDot, hdopCircleGpsPoints.isSelected());
+        Config.getPref().putBoolean("draw.rawgps.large"+layerNameDot, largeGpsPoints.isSelected());
+        Config.getPref().put("draw.rawgps.linewidth"+layerNameDot, drawLineWidth.getText());
+        Config.getPref().putBoolean("draw.rawgps.lines.alpha-blend"+layerNameDot, drawLineWithAlpha.isSelected());
 
-        Main.pref.put("mappaint.gpx.use-antialiasing", useGpsAntialiasing.isSelected());
+        Config.getPref().putBoolean("mappaint.gpx.use-antialiasing", useGpsAntialiasing.isSelected());
 
         TemplateEntryProperty.forMarker(layerName).put(waypointLabelPattern.getText());
         TemplateEntryProperty.forAudioMarker(layerName).put(audioWaypointLabelPattern.getText());
 
         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);
+            Config.getPref().put("draw.rawgps.colors"+layerNameDot, null);
+            Config.getPref().put("draw.rawgps.colors.dynamic"+layerNameDot, null);
+            Config.getPref().put("draw.rawgps.colorTracksTunec"+layerNameDot, null);
             return false;
         } else if (colorTypeVelocity.isSelected()) {
-            Main.pref.putInteger("draw.rawgps.colors"+layerNameDot, 1);
+            Config.getPref().putInt("draw.rawgps.colors"+layerNameDot, 1);
         } else if (colorTypeDilution.isSelected()) {
-            Main.pref.putInteger("draw.rawgps.colors"+layerNameDot, 2);
+            Config.getPref().putInt("draw.rawgps.colors"+layerNameDot, 2);
         } else if (colorTypeDirection.isSelected()) {
-            Main.pref.putInteger("draw.rawgps.colors"+layerNameDot, 3);
+            Config.getPref().putInt("draw.rawgps.colors"+layerNameDot, 3);
         } else if (colorTypeTime.isSelected()) {
-            Main.pref.putInteger("draw.rawgps.colors"+layerNameDot, 4);
+            Config.getPref().putInt("draw.rawgps.colors"+layerNameDot, 4);
         } else if (colorTypeHeatMap.isSelected()) {
-            Main.pref.putInteger("draw.rawgps.colors"+layerNameDot, 5);
+            Config.getPref().putInt("draw.rawgps.colors"+layerNameDot, 5);
         } else {
-            Main.pref.putInteger("draw.rawgps.colors"+layerNameDot, 0);
+            Config.getPref().putInt("draw.rawgps.colors"+layerNameDot, 0);
         }
-        Main.pref.put("draw.rawgps.colors.dynamic"+layerNameDot, colorDynamic.isSelected());
+        Config.getPref().putBoolean("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));
-        Main.pref.putInteger("draw.rawgps.heatmap.colormap"+layerNameDot, colorTypeHeatMapTune.getSelectedIndex());
-        Main.pref.put("draw.rawgps.heatmap.use-points"+layerNameDot, colorTypeHeatMapPoints.isSelected());
-        Main.pref.putInteger("draw.rawgps.heatmap.gain"+layerNameDot, colorTypeHeatMapGain.getValue());
-        Main.pref.putInteger("draw.rawgps.heatmap.lower-limit"+layerNameDot, colorTypeHeatMapLowerLimit.getValue());
+        Config.getPref().putInt("draw.rawgps.colorTracksTune"+layerNameDot, ccti == 2 ? 10 : (ccti == 1 ? 20 : 45));
+        Config.getPref().putInt("draw.rawgps.heatmap.colormap"+layerNameDot, colorTypeHeatMapTune.getSelectedIndex());
+        Config.getPref().putBoolean("draw.rawgps.heatmap.use-points"+layerNameDot, colorTypeHeatMapPoints.isSelected());
+        Config.getPref().putInt("draw.rawgps.heatmap.gain"+layerNameDot, colorTypeHeatMapGain.getValue());
+        Config.getPref().putInt("draw.rawgps.heatmap.lower-limit"+layerNameDot, colorTypeHeatMapLowerLimit.getValue());
 
         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 20e3e92..0fedc11 100644
--- a/src/org/openstreetmap/josm/gui/preferences/display/LafPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/display/LafPreference.java
@@ -38,6 +38,7 @@ import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
 import org.openstreetmap.josm.gui.widgets.FileChooserManager;
 import org.openstreetmap.josm.gui.widgets.JosmComboBox;
 import org.openstreetmap.josm.gui.widgets.VerticallyScrollablePanel;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.date.DateUtils;
@@ -123,16 +124,16 @@ public class LafPreference implements SubPreferenceSetting {
 
         // Show splash screen on startup
         showSplashScreen.setToolTipText(tr("Show splash screen at startup"));
-        showSplashScreen.setSelected(Main.pref.getBoolean("draw.splashscreen", true));
+        showSplashScreen.setSelected(Config.getPref().getBoolean("draw.splashscreen", true));
         panel.add(showSplashScreen, GBC.eop().insets(20, 0, 0, 0));
 
         // Show ID in selection
         showID.setToolTipText(tr("Show object ID in selection lists"));
-        showID.setSelected(Main.pref.getBoolean("osm-primitives.showid", false));
+        showID.setSelected(Config.getPref().getBoolean("osm-primitives.showid", false));
 
         // Show localized names
         showLocalizedName.setToolTipText(tr("Show localized name in selection lists, if available"));
-        showLocalizedName.setSelected(Main.pref.getBoolean("osm-primitives.localize-name", true));
+        showLocalizedName.setSelected(Config.getPref().getBoolean("osm-primitives.localize-name", true));
         ExpertToggleAction.addVisibilitySwitcher(showLocalizedName);
 
         modeless.setToolTipText(tr("Do not require to switch modes (potlatch style workflow)"));
@@ -201,13 +202,13 @@ public class LafPreference implements SubPreferenceSetting {
     @Override
     public boolean ok() {
         boolean mod = false;
-        Main.pref.put("draw.splashscreen", showSplashScreen.isSelected());
-        Main.pref.put("osm-primitives.showid", showID.isSelected());
-        Main.pref.put("osm-primitives.localize-name", showLocalizedName.isSelected());
+        Config.getPref().putBoolean("draw.splashscreen", showSplashScreen.isSelected());
+        Config.getPref().putBoolean("osm-primitives.showid", showID.isSelected());
+        Config.getPref().putBoolean("osm-primitives.localize-name", showLocalizedName.isSelected());
         MapFrame.MODELESS.put(modeless.isSelected());
-        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());
+        Config.getPref().putBoolean(ToggleDialog.PROP_DYNAMIC_BUTTONS.getKey(), dynamicButtons.isSelected());
+        Config.getPref().putBoolean(DateUtils.PROP_ISO_DATES.getKey(), isoDates.isSelected());
+        Config.getPref().putBoolean(FileChooserManager.PROP_USE_NATIVE_FILE_DIALOG.getKey(), nativeFileChoosers.isSelected());
         MapMover.PROP_ZOOM_REVERSE_WHEEL.put(zoomReverseWheel.isSelected());
         NavigatableComponent.PROP_ZOOM_INTERMEDIATE_STEPS.put(zoomIntermediateSteps.isSelected());
         NavigatableComponent.PROP_ZOOM_RATIO.put(Math.pow(2, 1/(double) spinZoomRatio.getModel().getValue()));
diff --git a/src/org/openstreetmap/josm/gui/preferences/display/LanguagePreference.java b/src/org/openstreetmap/josm/gui/preferences/display/LanguagePreference.java
index 9fe52a0..1699f8b 100644
--- a/src/org/openstreetmap/josm/gui/preferences/display/LanguagePreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/display/LanguagePreference.java
@@ -17,13 +17,13 @@ import javax.swing.JList;
 import javax.swing.JPanel;
 import javax.swing.ListCellRenderer;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
 import org.openstreetmap.josm.gui.preferences.PreferenceSettingFactory;
 import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
 import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting;
 import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
 import org.openstreetmap.josm.gui.widgets.JosmComboBox;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.I18n;
 import org.openstreetmap.josm.tools.LanguageInfo;
@@ -54,7 +54,7 @@ public class LanguagePreference implements SubPreferenceSetting {
         LanguageComboBoxModel model = new LanguageComboBoxModel();
         // Selecting the language BEFORE the JComboBox listens to model changes speed up initialization by ~35ms (see #7386)
         // See https://stackoverflow.com/questions/3194958/fast-replacement-for-jcombobox-basiccomboboxui
-        model.selectLanguage(Main.pref.get(LANGUAGE));
+        model.selectLanguage(Config.getPref().get(LANGUAGE));
         langCombo = new JosmComboBox<>(model);
         langCombo.setRenderer(new LanguageCellRenderer());
 
@@ -72,9 +72,9 @@ public class LanguagePreference implements SubPreferenceSetting {
     @Override
     public boolean ok() {
         if (langCombo.getSelectedItem() == null)
-            return Main.pref.put(LANGUAGE, null);
+            return Config.getPref().put(LANGUAGE, null);
         else
-            return Main.pref.put(LANGUAGE,
+            return Config.getPref().put(LANGUAGE,
                     LanguageInfo.getJOSMLocaleCode((Locale) langCombo.getSelectedItem()));
     }
 
diff --git a/src/org/openstreetmap/josm/gui/preferences/map/MapPaintPreference.java b/src/org/openstreetmap/josm/gui/preferences/map/MapPaintPreference.java
index 4d2e669..731484d 100644
--- a/src/org/openstreetmap/josm/gui/preferences/map/MapPaintPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/map/MapPaintPreference.java
@@ -28,6 +28,7 @@ import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
 import org.openstreetmap.josm.gui.preferences.SourceEditor;
 import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting;
 import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.Logging;
 
@@ -64,7 +65,7 @@ public class MapPaintPreference implements SubPreferenceSetting {
     @Override
     public void addGui(PreferenceTabbedPane gui) {
         enableIconDefault = new JCheckBox(tr("Enable built-in icon defaults"),
-                Main.pref.getBoolean("mappaint.icon.enable-defaults", true));
+                Config.getPref().getBoolean("mappaint.icon.enable-defaults", true));
 
         sources = new MapPaintSourceEditor();
 
@@ -104,7 +105,7 @@ public class MapPaintPreference implements SubPreferenceSetting {
 
         @Override
         public Collection<String> getInitialIconPathsList() {
-            return Main.pref.getCollection(ICONPREF, null);
+            return Config.getPref().getList(ICONPREF, null);
         }
 
         @Override
@@ -169,7 +170,7 @@ public class MapPaintPreference implements SubPreferenceSetting {
 
     @Override
     public boolean ok() {
-        boolean reload = Main.pref.put("mappaint.icon.enable-defaults", enableIconDefault.isSelected());
+        boolean reload = Config.getPref().putBoolean("mappaint.icon.enable-defaults", enableIconDefault.isSelected());
         reload |= sources.finish();
         if (reload) {
             MapPaintStyles.readFromPreferences();
diff --git a/src/org/openstreetmap/josm/gui/preferences/map/TaggingPresetPreference.java b/src/org/openstreetmap/josm/gui/preferences/map/TaggingPresetPreference.java
index a8eb654..9fe04b4 100644
--- a/src/org/openstreetmap/josm/gui/preferences/map/TaggingPresetPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/map/TaggingPresetPreference.java
@@ -31,6 +31,7 @@ import org.openstreetmap.josm.gui.preferences.SourceEditor;
 import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting;
 import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetReader;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
@@ -167,7 +168,7 @@ public final class TaggingPresetPreference implements SubPreferenceSetting {
     @Override
     public void addGui(PreferenceTabbedPane gui) {
         sortMenu = new JCheckBox(tr("Sort presets menu alphabetically"),
-                Main.pref.getBoolean("taggingpreset.sortmenu", false));
+                Config.getPref().getBoolean("taggingpreset.sortmenu", false));
 
         final JPanel panel = new JPanel(new GridBagLayout());
         panel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
@@ -205,7 +206,7 @@ public final class TaggingPresetPreference implements SubPreferenceSetting {
 
         @Override
         public Collection<String> getInitialIconPathsList() {
-            return Main.pref.getCollection(ICONPREF, null);
+            return Config.getPref().getList(ICONPREF, null);
         }
 
         @Override
@@ -245,7 +246,7 @@ public final class TaggingPresetPreference implements SubPreferenceSetting {
 
     @Override
     public boolean ok() {
-        boolean restart = Main.pref.put("taggingpreset.sortmenu", sortMenu.getSelectedObjects() != null);
+        boolean restart = Config.getPref().putBoolean("taggingpreset.sortmenu", sortMenu.getSelectedObjects() != null);
         restart |= sources.finish();
 
         return restart;
diff --git a/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreference.java b/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreference.java
index 5462f45..08d2f2e 100644
--- a/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreference.java
@@ -60,6 +60,7 @@ import org.openstreetmap.josm.plugins.PluginDownloadTask;
 import org.openstreetmap.josm.plugins.PluginInformation;
 import org.openstreetmap.josm.plugins.ReadLocalPluginInformationTask;
 import org.openstreetmap.josm.plugins.ReadRemotePluginInformationTask;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Logging;
@@ -301,7 +302,7 @@ public final class PluginPreference extends DefaultTabPreferenceSetting {
         if (model.isActivePluginsChanged()) {
             List<String> l = new LinkedList<>(model.getSelectedPluginNames());
             Collections.sort(l);
-            Main.pref.putCollection("plugins", l);
+            Config.getPref().putList("plugins", l);
             if (!model.getNewlyDeactivatedPlugins().isEmpty())
                 return true;
             for (PluginInformation pi : model.getNewlyActivatedPlugins()) {
@@ -358,7 +359,7 @@ public final class PluginPreference extends DefaultTabPreferenceSetting {
                     SwingUtilities.invokeLater(() -> {
                         model.updateAvailablePlugins(task.getAvailablePlugins());
                         pnlPluginPreferences.refreshView();
-                        Main.pref.putInteger("pluginmanager.version", Version.getInstance().getVersion()); // fix #7030
+                        Config.getPref().putInt("pluginmanager.version", Version.getInstance().getVersion()); // fix #7030
                     });
                 }
             };
diff --git a/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreferencesModel.java b/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreferencesModel.java
index 57adfe1..5c948c1 100644
--- a/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreferencesModel.java
+++ b/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreferencesModel.java
@@ -14,11 +14,11 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.util.ChangeNotifier;
 import org.openstreetmap.josm.plugins.PluginException;
 import org.openstreetmap.josm.plugins.PluginHandler;
 import org.openstreetmap.josm.plugins.PluginInformation;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 
 /**
@@ -39,7 +39,7 @@ public class PluginPreferencesModel extends ChangeNotifier {
      */
     public PluginPreferencesModel() {
         currentActivePlugins = new HashSet<>();
-        currentActivePlugins.addAll(Main.pref.getCollection("plugins", currentActivePlugins));
+        currentActivePlugins.addAll(Config.getPref().getList("plugins"));
     }
 
     /**
@@ -79,7 +79,7 @@ public class PluginPreferencesModel extends ChangeNotifier {
         sort();
         filterDisplayedPlugins(filterExpression);
         Set<String> activePlugins = new HashSet<>();
-        activePlugins.addAll(Main.pref.getCollection("plugins", activePlugins));
+        activePlugins.addAll(Config.getPref().getList("plugins"));
         for (PluginInformation pi: availablePlugins) {
             if (selectedPluginsMap.get(pi) == null && activePlugins.contains(pi.name)) {
                 selectedPluginsMap.put(pi, Boolean.TRUE);
@@ -229,7 +229,7 @@ public class PluginPreferencesModel extends ChangeNotifier {
      * Initializes the model from preferences
      */
     public void initFromPreferences() {
-        Collection<String> enabledPlugins = Main.pref.getCollection("plugins", null);
+        Collection<String> enabledPlugins = Config.getPref().getList("plugins", null);
         if (enabledPlugins == null) {
             this.selectedPluginsMap.clear();
             return;
diff --git a/src/org/openstreetmap/josm/gui/preferences/plugin/PluginUpdatePolicyPanel.java b/src/org/openstreetmap/josm/gui/preferences/plugin/PluginUpdatePolicyPanel.java
index 2bccf36..9436c84 100644
--- a/src/org/openstreetmap/josm/gui/preferences/plugin/PluginUpdatePolicyPanel.java
+++ b/src/org/openstreetmap/josm/gui/preferences/plugin/PluginUpdatePolicyPanel.java
@@ -19,11 +19,11 @@ import javax.swing.JRadioButton;
 import javax.swing.event.ChangeEvent;
 import javax.swing.event.ChangeListener;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
 import org.openstreetmap.josm.gui.widgets.SelectAllOnFocusGainedDecorator;
 import org.openstreetmap.josm.plugins.PluginHandler;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 
 /**
@@ -174,16 +174,20 @@ public class PluginUpdatePolicyPanel extends JPanel {
      * Loads the relevant preference values from the JOSM preferences
      */
     public final void initFromPreferences() {
-        rbVersionBasedUpatePolicy.get(Optional.ofNullable(Policy.fromPreferenceValue(
-                Main.pref.get("pluginmanager.version-based-update.policy", "ask"))).orElse(Policy.ASK)).setSelected(true);
-        rbTimeBasedUpatePolicy.get(Optional.ofNullable(Policy.fromPreferenceValue(
-                Main.pref.get("pluginmanager.time-based-update.policy", "ask"))).orElse(Policy.ASK)).setSelected(true);
-
-        String pref = Main.pref.get("pluginmanager.warntime", null);
+        rbVersionBasedUpatePolicy.get(
+                Optional.ofNullable(Policy.fromPreferenceValue(
+                        Config.getPref().get("pluginmanager.version-based-update.policy", "ask"))).orElse(Policy.ASK))
+                .setSelected(true);
+        rbTimeBasedUpatePolicy.get(
+                Optional.ofNullable(Policy.fromPreferenceValue(
+                        Config.getPref().get("pluginmanager.time-based-update.policy", "ask"))).orElse(Policy.ASK))
+                .setSelected(true);
+
+        String pref = Config.getPref().get("pluginmanager.warntime", null);
         int days = 0;
         if (pref != null) {
             // remove legacy preference
-            Main.pref.put("pluginmanager.warntime", null);
+            Config.getPref().put("pluginmanager.warntime", null);
             try {
                 days = Integer.parseInt(pref.trim());
             } catch (NumberFormatException e) {
@@ -195,7 +199,7 @@ public class PluginUpdatePolicyPanel extends JPanel {
             }
         }
         if (days == 0) {
-            days = Main.pref.getInteger("pluginmanager.time-based-update.interval", PluginHandler.DEFAULT_TIME_BASED_UPDATE_INTERVAL);
+            days = Config.getPref().getInt("pluginmanager.time-based-update.interval", PluginHandler.DEFAULT_TIME_BASED_UPDATE_INTERVAL);
         }
         tfUpdateInterval.setText(Integer.toString(days));
     }
@@ -209,7 +213,7 @@ public class PluginUpdatePolicyPanel extends JPanel {
         //
         for (Policy p: Policy.values()) {
             if (rbVersionBasedUpatePolicy.get(p).isSelected()) {
-                Main.pref.put("pluginmanager.version-based-update.policy", p.getPreferencesValue());
+                Config.getPref().put("pluginmanager.version-based-update.policy", p.getPreferencesValue());
                 break;
             }
         }
@@ -218,7 +222,7 @@ public class PluginUpdatePolicyPanel extends JPanel {
         //
         for (Policy p: Policy.values()) {
             if (rbTimeBasedUpatePolicy.get(p).isSelected()) {
-                Main.pref.put("pluginmanager.time-based-update.policy", p.getPreferencesValue());
+                Config.getPref().put("pluginmanager.time-based-update.policy", p.getPreferencesValue());
                 break;
             }
         }
@@ -234,7 +238,7 @@ public class PluginUpdatePolicyPanel extends JPanel {
         } catch (NumberFormatException e) {
             days = PluginHandler.DEFAULT_TIME_BASED_UPDATE_INTERVAL;
         }
-        Main.pref.putInteger("pluginmanager.time-based-update.interval", days);
+        Config.getPref().putInt("pluginmanager.time-based-update.interval", days);
     }
 
     class TimeBasedPolicyChangeListener implements ChangeListener {
diff --git a/src/org/openstreetmap/josm/gui/preferences/projection/CustomProjectionChoice.java b/src/org/openstreetmap/josm/gui/preferences/projection/CustomProjectionChoice.java
index 7ca14ca..544591a 100644
--- a/src/org/openstreetmap/josm/gui/preferences/projection/CustomProjectionChoice.java
+++ b/src/org/openstreetmap/josm/gui/preferences/projection/CustomProjectionChoice.java
@@ -19,17 +19,17 @@ import javax.swing.JLabel;
 import javax.swing.JPanel;
 import javax.swing.plaf.basic.BasicComboBoxEditor;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.projection.CustomProjection;
 import org.openstreetmap.josm.data.projection.Projection;
 import org.openstreetmap.josm.data.projection.ProjectionConfigurationException;
 import org.openstreetmap.josm.data.projection.Projections;
+import org.openstreetmap.josm.data.tagging.ac.AutoCompletionItem;
 import org.openstreetmap.josm.gui.ExtendedDialog;
-import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionListItem;
 import org.openstreetmap.josm.gui.widgets.AbstractTextComponentValidator;
 import org.openstreetmap.josm.gui.widgets.HistoryComboBox;
 import org.openstreetmap.josm.gui.widgets.HtmlPanel;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Logging;
@@ -64,17 +64,17 @@ public class CustomProjectionChoice extends AbstractProjectionChoice implements
         private void build(String initialText, final ActionListener listener) {
             input = new JosmTextField(30);
             cbInput = new HistoryComboBox();
-            cbInput.setPrototypeDisplayValue(new AutoCompletionListItem("xxxx"));
+            cbInput.setPrototypeDisplayValue(new AutoCompletionItem("xxxx"));
             cbInput.setEditor(new BasicComboBoxEditor() {
                 @Override
                 protected JosmTextField createEditorComponent() {
                     return input;
                 }
             });
-            Collection<String> samples = Arrays.asList(
+            List<String> samples = Arrays.asList(
                     "+proj=lonlat +ellps=WGS84 +datum=WGS84 +bounds=-180,-90,180,90",
                     "+proj=tmerc +lat_0=0 +lon_0=9 +k_0=1 +x_0=3500000 +y_0=0 +ellps=bessel +nadgrids=BETA2007.gsb");
-            List<String> inputHistory = new LinkedList<>(Main.pref.getCollection("projection.custom.value.history", samples));
+            List<String> inputHistory = new LinkedList<>(Config.getPref().getList("projection.custom.value.history", samples));
             Collections.reverse(inputHistory);
             cbInput.setPossibleItems(inputHistory);
             cbInput.setText(initialText == null ? "" : initialText);
@@ -148,7 +148,7 @@ public class CustomProjectionChoice extends AbstractProjectionChoice implements
 
         public void rememberHistory() {
             cbInput.addCurrentItemToHistory();
-            Main.pref.putCollection("projection.custom.value.history", cbInput.getHistory());
+            Config.getPref().putList("projection.custom.value.history", cbInput.getHistory());
         }
     }
 
diff --git a/src/org/openstreetmap/josm/gui/preferences/projection/ProjectionPreference.java b/src/org/openstreetmap/josm/gui/preferences/projection/ProjectionPreference.java
index 77c5366..0d31be6 100644
--- a/src/org/openstreetmap/josm/gui/preferences/projection/ProjectionPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/projection/ProjectionPreference.java
@@ -25,11 +25,13 @@ import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.ExpertToggleAction;
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.SystemOfMeasurement;
-import org.openstreetmap.josm.data.coor.CoordinateFormat;
-import org.openstreetmap.josm.data.preferences.CollectionProperty;
+import org.openstreetmap.josm.data.coor.conversion.CoordinateFormatManager;
+import org.openstreetmap.josm.data.coor.conversion.ICoordinateFormat;
+import org.openstreetmap.josm.data.preferences.ListProperty;
 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.data.projection.Projections;
 import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
 import org.openstreetmap.josm.gui.preferences.PreferenceSettingFactory;
@@ -38,8 +40,10 @@ import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting;
 import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
 import org.openstreetmap.josm.gui.widgets.JosmComboBox;
 import org.openstreetmap.josm.gui.widgets.VerticallyScrollablePanel;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.JosmRuntimeException;
+import org.openstreetmap.josm.tools.Logging;
 
 /**
  * Projection preferences.
@@ -253,6 +257,18 @@ public class ProjectionPreference implements SubPreferenceSetting {
     public static void registerProjectionChoice(ProjectionChoice c) {
         projectionChoices.add(c);
         projectionChoicesById.put(c.getId(), c);
+        for (String code : c.allCodes()) {
+            Projections.registerProjectionSupplier(code, () -> {
+                Collection<String> pref = c.getPreferencesFromCode(code);
+                c.setPreferences(pref);
+                try {
+                    return c.getProjection();
+                } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException e) {
+                    Logging.log(Logging.LEVEL_WARN, "Unable to get projection "+code+" with "+c+':', e);
+                    return null;
+                }
+            });
+        }
     }
 
     public static ProjectionChoice registerProjectionChoice(String name, String id, Integer epsg, String cacheDir) {
@@ -275,7 +291,7 @@ public class ProjectionPreference implements SubPreferenceSetting {
 
     private static final StringProperty PROP_PROJECTION_DEFAULT = new StringProperty("projection.default", mercator.getId());
     private static final StringProperty PROP_COORDINATES = new StringProperty("coordinates", null);
-    private static final CollectionProperty PROP_SUB_PROJECTION_DEFAULT = new CollectionProperty("projection.default.sub", null);
+    private static final ListProperty PROP_SUB_PROJECTION_DEFAULT = new ListProperty("projection.default.sub", null);
     private static final String[] unitsValues = ALL_SYSTEMS.keySet().toArray(new String[ALL_SYSTEMS.size()]);
     private static final String[] unitsValuesTr = new String[unitsValues.length];
     static {
@@ -287,13 +303,12 @@ public class ProjectionPreference implements SubPreferenceSetting {
     /**
      * Combobox with all projections available
      */
-    private final JosmComboBox<ProjectionChoice> projectionCombo = new JosmComboBox<>(
-            projectionChoices.toArray(new ProjectionChoice[projectionChoices.size()]));
+    private final JosmComboBox<ProjectionChoice> projectionCombo;
 
     /**
      * Combobox with all coordinate display possibilities
      */
-    private final JosmComboBox<CoordinateFormat> coordinatesCombo = new JosmComboBox<>(CoordinateFormat.values());
+    private final JosmComboBox<ICoordinateFormat> coordinatesCombo;
 
     private final JosmComboBox<String> unitsCombo = new JosmComboBox<>(unitsValuesTr);
 
@@ -325,12 +340,19 @@ public class ProjectionPreference implements SubPreferenceSetting {
      */
     private static final GBC projSubPrefPanelGBC = GBC.std().fill(GBC.BOTH).weight(1.0, 1.0);
 
+    public ProjectionPreference() {
+        this.projectionCombo = new JosmComboBox<>(
+            projectionChoices.toArray(new ProjectionChoice[projectionChoices.size()]));
+        this.coordinatesCombo = new JosmComboBox<>(
+                CoordinateFormatManager.getCoordinateFormats().toArray(new ICoordinateFormat[0]));
+    }
+
     @Override
     public void addGui(PreferenceTabbedPane gui) {
         final ProjectionChoice pc = setupProjectionCombo();
 
         for (int i = 0; i < coordinatesCombo.getItemCount(); ++i) {
-            if (coordinatesCombo.getItemAt(i).name().equals(PROP_COORDINATES.get())) {
+            if (coordinatesCombo.getItemAt(i).getId().equals(PROP_COORDINATES.get())) {
                 coordinatesCombo.setSelectedIndex(i);
                 break;
             }
@@ -398,9 +420,9 @@ public class ProjectionPreference implements SubPreferenceSetting {
         projectionCode.setText(proj.toCode());
         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));
+        ICoordinateFormat cf = CoordinateFormatManager.getDefaultFormat();
+        bounds.setText(cf.lonToString(b.getMin()) + ", " + cf.latToString(b.getMin()) + " : " +
+                cf.lonToString(b.getMax()) + ", " + cf.latToString(b.getMax()));
         boolean showCode = true;
         boolean showName = false;
         if (pc instanceof SubPrefsOptions) {
@@ -424,8 +446,8 @@ public class ProjectionPreference implements SubPreferenceSetting {
 
         setProjection(id, prefs, false);
 
-        if (PROP_COORDINATES.put(((CoordinateFormat) coordinatesCombo.getSelectedItem()).name())) {
-            CoordinateFormat.setCoordinateFormat((CoordinateFormat) coordinatesCombo.getSelectedItem());
+        if (PROP_COORDINATES.put(((ICoordinateFormat) coordinatesCombo.getSelectedItem()).getId())) {
+            CoordinateFormatManager.setCoordinateFormat((ICoordinateFormat) coordinatesCombo.getSelectedItem());
         }
 
         int i = unitsCombo.getSelectedIndex();
@@ -460,10 +482,10 @@ public class ProjectionPreference implements SubPreferenceSetting {
             pc = mercator;
         }
         id = pc.getId();
-        Main.pref.putCollection("projection.sub."+id, pref);
+        Config.getPref().putList("projection.sub."+id, pref == null ? null : new ArrayList<>(pref));
         if (makeDefault) {
             PROP_PROJECTION_DEFAULT.put(id);
-            PROP_SUB_PROJECTION_DEFAULT.put(pref);
+            PROP_SUB_PROJECTION_DEFAULT.put(pref == null ? null : new ArrayList<>(pref));
         } else {
             projectionChoice = id;
         }
@@ -538,7 +560,7 @@ public class ProjectionPreference implements SubPreferenceSetting {
      * the last time; null if user has never selected the given projection choice
      */
     public static Collection<String> getSubprojectionPreference(String pcId) {
-        return Main.pref.getCollection("projection.sub."+pcId, null);
+        return Config.getPref().getList("projection.sub."+pcId, null);
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/gui/preferences/remotecontrol/RemoteControlPreference.java b/src/org/openstreetmap/josm/gui/preferences/remotecontrol/RemoteControlPreference.java
index a1f801c..0d2948c 100644
--- a/src/org/openstreetmap/josm/gui/preferences/remotecontrol/RemoteControlPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/remotecontrol/RemoteControlPreference.java
@@ -37,6 +37,7 @@ import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault;
 import org.openstreetmap.josm.io.remotecontrol.RemoteControl;
 import org.openstreetmap.josm.io.remotecontrol.RemoteControlHttpsServer;
 import org.openstreetmap.josm.io.remotecontrol.handler.RequestHandler;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.PlatformHookWindows;
@@ -92,8 +93,8 @@ public final class RemoteControlPreference extends DefaultTabPreferenceSetting {
         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>");
+                Config.getPref().get("remote.control.port", "8111"),
+                Config.getPref().get("remote.control.https.port", "8112")) + "</html>");
         portLabel.setFont(portLabel.getFont().deriveFont(Font.PLAIN));
         remote.add(portLabel, GBC.eol().insets(5, 5, 0, 10).fill(GBC.HORIZONTAL));
 
@@ -166,8 +167,10 @@ public final class RemoteControlPreference extends DefaultTabPreferenceSetting {
 
         remote.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.VERTICAL));
 
-        loadInNewLayer.setSelected(Main.pref.getBoolean(RequestHandler.loadInNewLayerKey, RequestHandler.loadInNewLayerDefault));
-        alwaysAskUserConfirm.setSelected(Main.pref.getBoolean(RequestHandler.globalConfirmationKey, RequestHandler.globalConfirmationDefault));
+        loadInNewLayer.setSelected(Config.getPref().getBoolean(
+                RequestHandler.loadInNewLayerKey, RequestHandler.loadInNewLayerDefault));
+        alwaysAskUserConfirm.setSelected(Config.getPref().getBoolean(
+                RequestHandler.globalConfirmationKey, RequestHandler.globalConfirmationDefault));
 
         ActionListener remoteControlEnabled = e -> {
             GuiHelper.setEnabledRec(wrapper, enableRemoteControl.isSelected());
@@ -195,10 +198,10 @@ public final class RemoteControlPreference extends DefaultTabPreferenceSetting {
         boolean httpsChanged = RemoteControl.PROP_REMOTECONTROL_HTTPS_ENABLED.put(httpsEnabled);
         if (enabled) {
             for (Entry<PermissionPrefWithDefault, JCheckBox> p : prefs.entrySet()) {
-                Main.pref.put(p.getKey().pref, p.getValue().isSelected());
+                Config.getPref().putBoolean(p.getKey().pref, p.getValue().isSelected());
             }
-            Main.pref.put(RequestHandler.loadInNewLayerKey, loadInNewLayer.isSelected());
-            Main.pref.put(RequestHandler.globalConfirmationKey, alwaysAskUserConfirm.isSelected());
+            Config.getPref().putBoolean(RequestHandler.loadInNewLayerKey, loadInNewLayer.isSelected());
+            Config.getPref().putBoolean(RequestHandler.globalConfirmationKey, alwaysAskUserConfirm.isSelected());
         }
         if (changed) {
             if (enabled) {
diff --git a/src/org/openstreetmap/josm/gui/preferences/server/AuthenticationPreferencesPanel.java b/src/org/openstreetmap/josm/gui/preferences/server/AuthenticationPreferencesPanel.java
index d8573b6..df04b92 100644
--- a/src/org/openstreetmap/josm/gui/preferences/server/AuthenticationPreferencesPanel.java
+++ b/src/org/openstreetmap/josm/gui/preferences/server/AuthenticationPreferencesPanel.java
@@ -23,6 +23,7 @@ import org.openstreetmap.josm.gui.help.HelpUtil;
 import org.openstreetmap.josm.gui.widgets.VerticallyScrollablePanel;
 import org.openstreetmap.josm.io.OsmApi;
 import org.openstreetmap.josm.io.auth.CredentialsManager;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 
 /**
@@ -142,7 +143,7 @@ public class AuthenticationPreferencesPanel extends VerticallyScrollablePanel im
         } else {
             authMethod = "oauth";
         }
-        Main.pref.put("osm-server.auth-method", authMethod);
+        Config.getPref().put("osm-server.auth-method", authMethod);
         if ("basic".equals(authMethod)) {
             // save username and password and clear the OAuth token
             pnlBasicAuthPreferences.saveToPreferences();
diff --git a/src/org/openstreetmap/josm/gui/preferences/server/OsmApiUrlInputPanel.java b/src/org/openstreetmap/josm/gui/preferences/server/OsmApiUrlInputPanel.java
index 4ce6f42..74ac9f0 100644
--- a/src/org/openstreetmap/josm/gui/preferences/server/OsmApiUrlInputPanel.java
+++ b/src/org/openstreetmap/josm/gui/preferences/server/OsmApiUrlInputPanel.java
@@ -26,8 +26,7 @@ import javax.swing.event.DocumentEvent;
 import javax.swing.event.DocumentListener;
 import javax.swing.text.JTextComponent;
 
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.preferences.CollectionProperty;
+import org.openstreetmap.josm.data.preferences.ListProperty;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.help.HelpUtil;
 import org.openstreetmap.josm.gui.widgets.AbstractTextComponentValidator;
@@ -36,6 +35,7 @@ import org.openstreetmap.josm.gui.widgets.SelectAllOnFocusGainedDecorator;
 import org.openstreetmap.josm.io.OsmApi;
 import org.openstreetmap.josm.io.OsmApiInitializationException;
 import org.openstreetmap.josm.io.OsmTransferCanceledException;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
@@ -57,7 +57,7 @@ public class OsmApiUrlInputPanel extends JPanel {
     private JButton btnTest;
     /** indicates whether to use the default OSM URL or not */
     private JCheckBox cbUseDefaultServerUrl;
-    private final transient CollectionProperty SERVER_URL_HISTORY = new CollectionProperty("osm-server.url-history", Arrays.asList(
+    private final transient ListProperty SERVER_URL_HISTORY = new ListProperty("osm-server.url-history", Arrays.asList(
             "http://api06.dev.openstreetmap.org/api", "http://master.apis.dev.openstreetmap.org/api"));
 
     private transient ApiUrlPropagator propagator;
@@ -144,9 +144,9 @@ public class OsmApiUrlInputPanel extends JPanel {
         String oldUrl = OsmApi.getOsmApi().getServerUrl();
         String hmiUrl = getStrippedApiUrl();
         if (cbUseDefaultServerUrl.isSelected() || OsmApi.DEFAULT_API_URL.equals(hmiUrl)) {
-            Main.pref.put("osm-server.url", null);
+            Config.getPref().put("osm-server.url", null);
         } else {
-            Main.pref.put("osm-server.url", hmiUrl);
+            Config.getPref().put("osm-server.url", hmiUrl);
             tfOsmServerUrl.addCurrentItemToHistory();
             SERVER_URL_HISTORY.put(tfOsmServerUrl.getHistory());
         }
diff --git a/src/org/openstreetmap/josm/gui/preferences/server/OverpassServerPreference.java b/src/org/openstreetmap/josm/gui/preferences/server/OverpassServerPreference.java
index 1230b02..72e3c33 100644
--- a/src/org/openstreetmap/josm/gui/preferences/server/OverpassServerPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/server/OverpassServerPreference.java
@@ -4,7 +4,6 @@ package org.openstreetmap.josm.gui.preferences.server;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.awt.GridBagLayout;
-import java.util.Arrays;
 
 import javax.swing.BorderFactory;
 import javax.swing.Box;
@@ -12,15 +11,13 @@ import javax.swing.JCheckBox;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
 
-import org.openstreetmap.josm.data.preferences.BooleanProperty;
-import org.openstreetmap.josm.data.preferences.CollectionProperty;
-import org.openstreetmap.josm.data.preferences.StringProperty;
 import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
 import org.openstreetmap.josm.gui.preferences.PreferenceSettingFactory;
 import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
 import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting;
 import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
 import org.openstreetmap.josm.gui.widgets.HistoryComboBox;
+import org.openstreetmap.josm.io.OverpassDownloadReader;
 import org.openstreetmap.josm.tools.GBC;
 
 /**
@@ -30,12 +27,6 @@ import org.openstreetmap.josm.tools.GBC;
  */
 public class OverpassServerPreference implements SubPreferenceSetting {
 
-    private static final StringProperty OVERPASS_SERVER = new StringProperty("download.overpass.server",
-            "https://overpass-api.de/api/");
-    private static final CollectionProperty OVERPASS_SERVER_HISTORY = new CollectionProperty("download.overpass.servers",
-            Arrays.asList("https://overpass-api.de/api/", "http://overpass.osm.rambler.ru/cgi/"));
-    private static final BooleanProperty FOR_MULTI_FETCH = new BooleanProperty("download.overpass.for-multi-fetch", false);
-
     private final HistoryComboBox overpassServer = new HistoryComboBox();
     private final JCheckBox forMultiFetch = new JCheckBox(tr("Use Overpass server for object downloads"));
 
@@ -61,11 +52,11 @@ public class OverpassServerPreference implements SubPreferenceSetting {
         panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
         panel.add(new JLabel(tr("Overpass server: ")), GBC.std().insets(5, 5, 5, 5));
         panel.add(overpassServer, GBC.eop().fill(GBC.HORIZONTAL));
-        overpassServer.setPossibleItems(OVERPASS_SERVER_HISTORY.get());
-        overpassServer.setText(OVERPASS_SERVER.get());
+        overpassServer.setPossibleItems(OverpassDownloadReader.OVERPASS_SERVER_HISTORY.get());
+        overpassServer.setText(OverpassDownloadReader.OVERPASS_SERVER.get());
 
         panel.add(forMultiFetch, GBC.eop());
-        forMultiFetch.setSelected(useForMultiFetch());
+        forMultiFetch.setSelected(OverpassDownloadReader.FOR_MULTI_FETCH.get());
 
         panel.add(Box.createVerticalGlue(), GBC.eol().fill());
 
@@ -74,9 +65,9 @@ public class OverpassServerPreference implements SubPreferenceSetting {
 
     @Override
     public boolean ok() {
-        OVERPASS_SERVER.put(overpassServer.getText());
-        OVERPASS_SERVER_HISTORY.put(overpassServer.getHistory());
-        FOR_MULTI_FETCH.put(forMultiFetch.isSelected());
+        OverpassDownloadReader.OVERPASS_SERVER.put(overpassServer.getText());
+        OverpassDownloadReader.OVERPASS_SERVER_HISTORY.put(overpassServer.getHistory());
+        OverpassDownloadReader.FOR_MULTI_FETCH.put(forMultiFetch.isSelected());
         return false;
     }
 
@@ -88,16 +79,20 @@ public class OverpassServerPreference implements SubPreferenceSetting {
     /**
      * Returns the URL of the currently selected Overpass server.
      * @return the URL of the currently selected Overpass server.
+     * @deprecated To be removed end of 2017. Use {@code OverpassDownloadReader.OVERPASS_SERVER.get()} instead
      */
+    @Deprecated
     public static String getOverpassServer() {
-        return OVERPASS_SERVER.get();
+        return OverpassDownloadReader.OVERPASS_SERVER.get();
     }
 
     /**
      * Returns true if objects should be fetched from an Overpass server instead of the OSM API.
      * @return true if objects should be fetched from an Overpass server instead of the OSM API.
+     * @deprecated To be removed end of 2017. Use {@code OverpassDownloadReader.FOR_MULTI_FETCH.get()} instead
      */
+    @Deprecated
     public static boolean useForMultiFetch() {
-        return FOR_MULTI_FETCH.get();
+        return OverpassDownloadReader.FOR_MULTI_FETCH.get();
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/preferences/server/ProxyPreferencesPanel.java b/src/org/openstreetmap/josm/gui/preferences/server/ProxyPreferencesPanel.java
index 306a2fd..d84c9bf 100644
--- a/src/org/openstreetmap/josm/gui/preferences/server/ProxyPreferencesPanel.java
+++ b/src/org/openstreetmap/josm/gui/preferences/server/ProxyPreferencesPanel.java
@@ -15,7 +15,6 @@ import java.net.Authenticator.RequestorType;
 import java.net.PasswordAuthentication;
 import java.net.ProxySelector;
 import java.util.EnumMap;
-import java.util.Locale;
 import java.util.Map;
 import java.util.Optional;
 
@@ -25,16 +24,17 @@ import javax.swing.JLabel;
 import javax.swing.JPanel;
 import javax.swing.JRadioButton;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.help.HelpUtil;
 import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
 import org.openstreetmap.josm.gui.widgets.JosmPasswordField;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
 import org.openstreetmap.josm.gui.widgets.VerticallyScrollablePanel;
 import org.openstreetmap.josm.io.DefaultProxySelector;
+import org.openstreetmap.josm.io.ProxyPolicy;
 import org.openstreetmap.josm.io.auth.CredentialsAgent;
 import org.openstreetmap.josm.io.auth.CredentialsAgentException;
 import org.openstreetmap.josm.io.auth.CredentialsManager;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.Logging;
 
@@ -54,66 +54,6 @@ public class ProxyPreferencesPanel extends VerticallyScrollablePanel {
         }
     }
 
-    /**
-     * The proxy policy is how JOSM will use proxy information.
-     */
-    public enum ProxyPolicy {
-        /** No proxy: JOSM will access Internet resources directly */
-        NO_PROXY("no-proxy"),
-        /** Use system settings: JOSM will use system proxy settings */
-        USE_SYSTEM_SETTINGS("use-system-settings"),
-        /** Use HTTP proxy: JOSM will use the given HTTP proxy, configured manually */
-        USE_HTTP_PROXY("use-http-proxy"),
-        /** Use HTTP proxy: JOSM will use the given SOCKS proxy */
-        USE_SOCKS_PROXY("use-socks-proxy");
-
-        private final String policyName;
-
-        ProxyPolicy(String policyName) {
-            this.policyName = policyName;
-        }
-
-        /**
-         * Replies the policy name, to be stored in proxy preferences.
-         * @return the policy unique name
-         */
-        public String getName() {
-            return policyName;
-        }
-
-        /**
-         * Retrieves a proxy policy from its name found in preferences.
-         * @param policyName The policy name
-         * @return The proxy policy matching the given name, or {@code null}
-         */
-        public static ProxyPolicy fromName(String policyName) {
-            if (policyName == null) return null;
-            policyName = policyName.trim().toLowerCase(Locale.ENGLISH);
-            for (ProxyPolicy pp: values()) {
-                if (pp.getName().equals(policyName))
-                    return pp;
-            }
-            return null;
-        }
-    }
-
-    /** Property key for proxy policy */
-    public static final String PROXY_POLICY = "proxy.policy";
-    /** Property key for HTTP proxy host */
-    public static final String PROXY_HTTP_HOST = "proxy.http.host";
-    /** Property key for HTTP proxy port */
-    public static final String PROXY_HTTP_PORT = "proxy.http.port";
-    /** Property key for SOCKS proxy host */
-    public static final String PROXY_SOCKS_HOST = "proxy.socks.host";
-    /** Property key for SOCKS proxy port */
-    public static final String PROXY_SOCKS_PORT = "proxy.socks.port";
-    /** Property key for proxy username */
-    public static final String PROXY_USER = "proxy.user";
-    /** Property key for proxy password */
-    public static final String PROXY_PASS = "proxy.pass";
-    /** Property key for proxy exceptions list */
-    public static final String PROXY_EXCEPTIONS = "proxy.exceptions";
-
     private transient Map<ProxyPolicy, JRadioButton> rbProxyPolicy;
     private final JosmTextField tfProxyHttpHost = new JosmTextField();
     private final JosmTextField tfProxyHttpPort = new JosmTextField(5);
@@ -323,26 +263,27 @@ public class ProxyPreferencesPanel extends VerticallyScrollablePanel {
      * Initializes the panel with the values from the preferences
      */
     public final void initFromPreferences() {
-        ProxyPolicy pp = Optional.ofNullable(ProxyPolicy.fromName(Main.pref.get(PROXY_POLICY, null))).orElse(ProxyPolicy.NO_PROXY);
+        ProxyPolicy pp = Optional.ofNullable(ProxyPolicy.fromName(Config.getPref().get(DefaultProxySelector.PROXY_POLICY, null)))
+                .orElse(ProxyPolicy.NO_PROXY);
         rbProxyPolicy.get(pp).setSelected(true);
-        String value = Main.pref.get("proxy.host", null);
+        String value = Config.getPref().get("proxy.host", null);
         if (value != null) {
             // legacy support
             tfProxyHttpHost.setText(value);
-            Main.pref.put("proxy.host", null);
+            Config.getPref().put("proxy.host", null);
         } else {
-            tfProxyHttpHost.setText(Main.pref.get(PROXY_HTTP_HOST, ""));
+            tfProxyHttpHost.setText(Config.getPref().get(DefaultProxySelector.PROXY_HTTP_HOST, ""));
         }
-        value = Main.pref.get("proxy.port", null);
+        value = Config.getPref().get("proxy.port", null);
         if (value != null) {
             // legacy support
             tfProxyHttpPort.setText(value);
-            Main.pref.put("proxy.port", null);
+            Config.getPref().put("proxy.port", null);
         } else {
-            tfProxyHttpPort.setText(Main.pref.get(PROXY_HTTP_PORT, ""));
+            tfProxyHttpPort.setText(Config.getPref().get(DefaultProxySelector.PROXY_HTTP_PORT, ""));
         }
-        tfProxySocksHost.setText(Main.pref.get(PROXY_SOCKS_HOST, ""));
-        tfProxySocksPort.setText(Main.pref.get(PROXY_SOCKS_PORT, ""));
+        tfProxySocksHost.setText(Config.getPref().get(DefaultProxySelector.PROXY_SOCKS_HOST, ""));
+        tfProxySocksPort.setText(Config.getPref().get(DefaultProxySelector.PROXY_SOCKS_PORT, ""));
 
         if (pp.equals(ProxyPolicy.USE_SYSTEM_SETTINGS) && !DefaultProxySelector.willJvmRetrieveSystemProxies()) {
             Logging.warn(tr("JOSM is configured to use proxies from the system setting, but the JVM is not configured to retrieve them. " +
@@ -416,11 +357,11 @@ public class ProxyPreferencesPanel extends VerticallyScrollablePanel {
                 break;
             }
         }
-        Main.pref.put(PROXY_POLICY, Optional.ofNullable(policy).orElse(ProxyPolicy.NO_PROXY).getName());
-        Main.pref.put(PROXY_HTTP_HOST, tfProxyHttpHost.getText());
-        Main.pref.put(PROXY_HTTP_PORT, tfProxyHttpPort.getText());
-        Main.pref.put(PROXY_SOCKS_HOST, tfProxySocksHost.getText());
-        Main.pref.put(PROXY_SOCKS_PORT, tfProxySocksPort.getText());
+        Config.getPref().put(DefaultProxySelector.PROXY_POLICY, Optional.ofNullable(policy).orElse(ProxyPolicy.NO_PROXY).getName());
+        Config.getPref().put(DefaultProxySelector.PROXY_HTTP_HOST, tfProxyHttpHost.getText());
+        Config.getPref().put(DefaultProxySelector.PROXY_HTTP_PORT, tfProxyHttpPort.getText());
+        Config.getPref().put(DefaultProxySelector.PROXY_SOCKS_HOST, tfProxySocksHost.getText());
+        Config.getPref().put(DefaultProxySelector.PROXY_SOCKS_PORT, tfProxySocksPort.getText());
 
         // update the proxy selector
         ProxySelector selector = ProxySelector.getDefault();
diff --git a/src/org/openstreetmap/josm/gui/preferences/validator/ValidatorTagCheckerRulesPreference.java b/src/org/openstreetmap/josm/gui/preferences/validator/ValidatorTagCheckerRulesPreference.java
index 4a91fb9..980a126 100644
--- a/src/org/openstreetmap/josm/gui/preferences/validator/ValidatorTagCheckerRulesPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/validator/ValidatorTagCheckerRulesPreference.java
@@ -11,10 +11,10 @@ import java.util.List;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.preferences.sources.ExtendedSourceEntry;
-import org.openstreetmap.josm.data.preferences.sources.ValidatorPrefHelper;
 import org.openstreetmap.josm.data.preferences.sources.SourceEntry;
 import org.openstreetmap.josm.data.preferences.sources.SourceProvider;
 import org.openstreetmap.josm.data.preferences.sources.SourceType;
+import org.openstreetmap.josm.data.preferences.sources.ValidatorPrefHelper;
 import org.openstreetmap.josm.data.validation.OsmValidator;
 import org.openstreetmap.josm.data.validation.tests.MapCSSTagChecker;
 import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
diff --git a/src/org/openstreetmap/josm/gui/preferences/validator/ValidatorTestsPreference.java b/src/org/openstreetmap/josm/gui/preferences/validator/ValidatorTestsPreference.java
index 67f115c..a280ae8 100644
--- a/src/org/openstreetmap/josm/gui/preferences/validator/ValidatorTestsPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/validator/ValidatorTestsPreference.java
@@ -15,7 +15,6 @@ import javax.swing.JCheckBox;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.preferences.sources.ValidatorPrefHelper;
 import org.openstreetmap.josm.data.validation.OsmValidator;
 import org.openstreetmap.josm.data.validation.Test;
@@ -27,6 +26,7 @@ import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting;
 import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.widgets.VerticallyScrollablePanel;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
 
 /**
@@ -96,8 +96,8 @@ public class ValidatorTestsPreference implements SubPreferenceSetting {
 
     @Override
     public boolean ok() {
-        Collection<String> tests = new LinkedList<>();
-        Collection<String> testsBeforeUpload = new LinkedList<>();
+        List<String> tests = new LinkedList<>();
+        List<String> testsBeforeUpload = new LinkedList<>();
 
         for (Test test : allTests) {
             test.ok();
@@ -115,8 +115,8 @@ public class ValidatorTestsPreference implements SubPreferenceSetting {
         testsToInitialize.remove(OsmValidator.getTest(MapCSSTagChecker.class));
         OsmValidator.initializeTests(testsToInitialize);
 
-        Main.pref.putCollection(ValidatorPrefHelper.PREF_SKIP_TESTS, tests);
-        Main.pref.putCollection(ValidatorPrefHelper.PREF_SKIP_TESTS_BEFORE_UPLOAD, testsBeforeUpload);
+        Config.getPref().putList(ValidatorPrefHelper.PREF_SKIP_TESTS, tests);
+        Config.getPref().putList(ValidatorPrefHelper.PREF_SKIP_TESTS_BEFORE_UPLOAD, testsBeforeUpload);
         ValidatorPrefHelper.PREF_USE_IGNORE.put(prefUseIgnore.isSelected());
         ValidatorPrefHelper.PREF_OTHER.put(prefOther.isSelected());
         ValidatorPrefHelper.PREF_OTHER_UPLOAD.put(prefOtherUpload.isSelected());
diff --git a/src/org/openstreetmap/josm/gui/tagging/TagEditorModel.java b/src/org/openstreetmap/josm/gui/tagging/TagEditorModel.java
index d04069d..1211fa4 100644
--- a/src/org/openstreetmap/josm/gui/tagging/TagEditorModel.java
+++ b/src/org/openstreetmap/josm/gui/tagging/TagEditorModel.java
@@ -537,14 +537,12 @@ public class TagEditorModel extends AbstractTableModel {
         for (OsmPrimitive prim : primitives) {
             for (String oldkey : prim.keySet()) {
                 if (!currentkeys.contains(oldkey)) {
-                    ChangePropertyCommand deleteCommand =
-                        new ChangePropertyCommand(prim, oldkey, null);
-                    commands.add(deleteCommand);
+                    commands.add(new ChangePropertyCommand(prim, oldkey, null));
                 }
             }
         }
 
-        return new SequenceCommand(
+        return commands.isEmpty() ? null : new SequenceCommand(
                 trn("Remove old keys from up to {0} object", "Remove old keys from up to {0} objects", primitives.size(), primitives.size()),
                 commands
         );
diff --git a/src/org/openstreetmap/josm/gui/tagging/TagEditorPanel.java b/src/org/openstreetmap/josm/gui/tagging/TagEditorPanel.java
index 0b57dc6..68c9e85 100644
--- a/src/org/openstreetmap/josm/gui/tagging/TagEditorPanel.java
+++ b/src/org/openstreetmap/josm/gui/tagging/TagEditorPanel.java
@@ -180,7 +180,7 @@ public class TagEditorPanel extends JPanel {
     public void initAutoCompletion(OsmDataLayer layer) {
         CheckParameterUtil.ensureParameterNotNull(layer, "layer");
 
-        AutoCompletionManager autocomplete = layer.data.getAutoCompletionManager();
+        AutoCompletionManager autocomplete = AutoCompletionManager.of(layer.data);
         AutoCompletionList acList = new AutoCompletionList();
 
         TagCellEditor editor = (TagCellEditor) tagTable.getColumnModel().getColumn(0).getCellEditor();
diff --git a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingComboBox.java b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingComboBox.java
index 11a3164..5fe8fad 100644
--- a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingComboBox.java
+++ b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingComboBox.java
@@ -9,6 +9,7 @@ import java.awt.event.FocusListener;
 import java.awt.im.InputContext;
 import java.util.Collection;
 import java.util.Locale;
+import java.util.stream.Collectors;
 
 import javax.swing.ComboBoxEditor;
 import javax.swing.ComboBoxModel;
@@ -22,11 +23,13 @@ import javax.swing.text.JTextComponent;
 import javax.swing.text.PlainDocument;
 import javax.swing.text.StyleConstants;
 
-import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.tagging.ac.AutoCompletionItem;
+import org.openstreetmap.josm.data.tagging.ac.AutoCompletionPriority;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.MapFrame;
 import org.openstreetmap.josm.gui.datatransfer.ClipboardUtils;
 import org.openstreetmap.josm.gui.widgets.JosmComboBox;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 
 /**
@@ -34,7 +37,7 @@ import org.openstreetmap.josm.tools.Logging;
  * @author guilhem.bonnefille at gmail.com
  * @since 272
  */
-public class AutoCompletingComboBox extends JosmComboBox<AutoCompletionListItem> {
+public class AutoCompletingComboBox extends JosmComboBox<AutoCompletionItem> {
 
     private boolean autocompleteEnabled = true;
 
@@ -84,14 +87,14 @@ 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 final JosmComboBox<AutoCompletionListItem> comboBox;
+        private final JosmComboBox<AutoCompletionItem> comboBox;
         private boolean selecting;
 
         /**
          * Constructs a new {@code AutoCompletingComboBoxDocument}.
          * @param comboBox the combobox
          */
-        AutoCompletingComboBoxDocument(final JosmComboBox<AutoCompletionListItem> comboBox) {
+        AutoCompletingComboBoxDocument(final JosmComboBox<AutoCompletionItem> comboBox) {
             this.comboBox = comboBox;
         }
 
@@ -139,7 +142,7 @@ public class AutoCompletingComboBox extends JosmComboBox<AutoCompletionListItem>
             // item for lookup and selection
             Object item;
             // if the text is a number we don't autocomplete
-            if (Main.pref.getBoolean("autocomplete.dont_complete_numbers", true)) {
+            if (Config.getPref().getBoolean("autocomplete.dont_complete_numbers", true)) {
                 try {
                     Long.parseLong(str);
                     if (!curText.isEmpty())
@@ -158,7 +161,7 @@ public class AutoCompletingComboBox extends JosmComboBox<AutoCompletionListItem>
                 start = 0;
             }
             if (item != null) {
-                String newText = ((AutoCompletionListItem) item).getValue();
+                String newText = ((AutoCompletionItem) item).getValue();
                 if (!newText.equals(curText)) {
                     selecting = true;
                     super.remove(0, size);
@@ -189,10 +192,10 @@ public class AutoCompletingComboBox extends JosmComboBox<AutoCompletionListItem>
         }
 
         private Object lookupItem(String pattern, boolean match) {
-            ComboBoxModel<AutoCompletionListItem> model = comboBox.getModel();
-            AutoCompletionListItem bestItem = null;
+            ComboBoxModel<AutoCompletionItem> model = comboBox.getModel();
+            AutoCompletionItem bestItem = null;
             for (int i = 0, n = model.getSize(); i < n; i++) {
-                AutoCompletionListItem currentItem = model.getElementAt(i);
+                AutoCompletionItem currentItem = model.getElementAt(i);
                 if (currentItem.getValue().equals(pattern))
                     return currentItem;
                 if (!match && currentItem.getValue().startsWith(pattern)
@@ -218,7 +221,7 @@ public class AutoCompletingComboBox extends JosmComboBox<AutoCompletionListItem>
      * @since 5520
      */
     public AutoCompletingComboBox(String prototype) {
-        super(new AutoCompletionListItem(prototype));
+        super(new AutoCompletionItem(prototype));
         setRenderer(new AutoCompleteListCellRenderer());
         final JTextComponent editorComponent = this.getEditorComponent();
         editorComponent.setDocument(new AutoCompletingComboBoxDocument(this));
@@ -240,38 +243,44 @@ public class AutoCompletingComboBox extends JosmComboBox<AutoCompletionListItem>
      * @param item      excepts AutoCompletionListItem, String and null
      */
     @Override
+    @SuppressWarnings("deprecation")
     public void configureEditor(ComboBoxEditor cbEditor, Object item) {
         if (item == null) {
             cbEditor.setItem(null);
         } else if (item instanceof String) {
             cbEditor.setItem(item);
+        } else if (item instanceof AutoCompletionItem) {
+            cbEditor.setItem(((AutoCompletionItem) item).getValue());
         } else if (item instanceof AutoCompletionListItem) {
-            cbEditor.setItem(((AutoCompletionListItem) item).getValue());
+            cbEditor.setItem(((AutoCompletionListItem) item).getItem().getValue());
         } else
             throw new IllegalArgumentException("Unsupported item: "+item);
     }
 
     /**
      * Selects a given item in the ComboBox model
-     * @param item      excepts AutoCompletionListItem, String and null
+     * @param item      excepts AutoCompletionItem, String and null
      */
     @Override
+    @SuppressWarnings("deprecation")
     public void setSelectedItem(Object item) {
         if (item == null) {
             super.setSelectedItem(null);
-        } else if (item instanceof AutoCompletionListItem) {
+        } else if (item instanceof AutoCompletionItem) {
             super.setSelectedItem(item);
+        } else if (item instanceof AutoCompletionListItem) {
+            super.setSelectedItem(((AutoCompletionListItem) item).getItem());
         } 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++) {
-                AutoCompletionListItem acItem = getModel().getElementAt(i);
+                AutoCompletionItem acItem = getModel().getElementAt(i);
                 if (s.equals(acItem.getValue())) {
                     super.setSelectedItem(acItem);
                     return;
                 }
             }
-            super.setSelectedItem(new AutoCompletionListItem(s, AutoCompletionItemPriority.UNKNOWN));
+            super.setSelectedItem(new AutoCompletionItem(s, AutoCompletionPriority.UNKNOWN));
         } else {
             throw new IllegalArgumentException("Unsupported item: "+item);
         }
@@ -282,11 +291,11 @@ public class AutoCompletingComboBox extends JosmComboBox<AutoCompletionListItem>
      * @param elems String items
      */
     public void setPossibleItems(Collection<String> elems) {
-        DefaultComboBoxModel<AutoCompletionListItem> model = (DefaultComboBoxModel<AutoCompletionListItem>) this.getModel();
+        DefaultComboBoxModel<AutoCompletionItem> model = (DefaultComboBoxModel<AutoCompletionItem>) this.getModel();
         Object oldValue = this.getEditor().getItem(); // Do not use getSelectedItem(); (fix #8013)
         model.removeAllElements();
         for (String elem : elems) {
-            model.addElement(new AutoCompletionListItem(elem, AutoCompletionItemPriority.UNKNOWN));
+            model.addElement(new AutoCompletionItem(elem, AutoCompletionPriority.UNKNOWN));
         }
         // disable autocomplete to prevent unnecessary actions in AutoCompletingComboBoxDocument#insertString
         autocompleteEnabled = false;
@@ -297,13 +306,24 @@ public class AutoCompletingComboBox extends JosmComboBox<AutoCompletionListItem>
     /**
      * Sets the items of the combobox to the given {@code AutoCompletionListItem}s.
      * @param elems AutoCompletionListItem items
+     * @deprecated to be removed end of 2017. Use {@link #setPossibleAcItems(Collection)} instead
      */
+    @Deprecated
     public void setPossibleACItems(Collection<AutoCompletionListItem> elems) {
-        DefaultComboBoxModel<AutoCompletionListItem> model = (DefaultComboBoxModel<AutoCompletionListItem>) this.getModel();
+        setPossibleAcItems(elems.stream().map(AutoCompletionListItem::getItem).collect(Collectors.toList()));
+    }
+
+    /**
+     * Sets the items of the combobox to the given {@code AutoCompletionItem}s.
+     * @param elems AutoCompletionItem items
+     * @since 12859
+     */
+    public void setPossibleAcItems(Collection<AutoCompletionItem> elems) {
+        DefaultComboBoxModel<AutoCompletionItem> model = (DefaultComboBoxModel<AutoCompletionItem>) this.getModel();
         Object oldValue = getSelectedItem();
         Object editorOldValue = this.getEditor().getItem();
         model.removeAllElements();
-        for (AutoCompletionListItem elem : elems) {
+        for (AutoCompletionItem elem : elems) {
             model.addElement(elem);
         }
         setSelectedItem(oldValue);
@@ -358,7 +378,7 @@ public class AutoCompletingComboBox extends JosmComboBox<AutoCompletionListItem>
      * ListCellRenderer for AutoCompletingComboBox
      * renders an AutoCompletionListItem by showing only the string value part
      */
-    public static class AutoCompleteListCellRenderer extends JLabel implements ListCellRenderer<AutoCompletionListItem> {
+    public static class AutoCompleteListCellRenderer extends JLabel implements ListCellRenderer<AutoCompletionItem> {
 
         /**
          * Constructs a new {@code AutoCompleteListCellRenderer}.
@@ -369,8 +389,8 @@ public class AutoCompletingComboBox extends JosmComboBox<AutoCompletionListItem>
 
         @Override
         public Component getListCellRendererComponent(
-                JList<? extends AutoCompletionListItem> list,
-                AutoCompletionListItem item,
+                JList<? extends AutoCompletionItem> list,
+                AutoCompletionItem item,
                 int index,
                 boolean isSelected,
                 boolean cellHasFocus) {
diff --git a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingTextField.java b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingTextField.java
index 44010ec..00a2bd7 100644
--- a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingTextField.java
+++ b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingTextField.java
@@ -19,9 +19,9 @@ import javax.swing.text.Document;
 import javax.swing.text.PlainDocument;
 import javax.swing.text.StyleConstants;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.util.CellEditorSupport;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 
 /**
@@ -78,7 +78,7 @@ public class AutoCompletingTextField extends JosmTextField implements ComboBoxEd
 
             String currentText = getText(0, getLength());
             // if the text starts with a number we don't autocomplete
-            if (Main.pref.getBoolean("autocomplete.dont_complete_numbers", true)) {
+            if (Config.getPref().getBoolean("autocomplete.dont_complete_numbers", true)) {
                 try {
                     Long.parseLong(str);
                     if (currentText.isEmpty()) {
@@ -98,7 +98,7 @@ public class AutoCompletingTextField extends JosmTextField implements ComboBoxEd
             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
-                String matchingString = autoCompletionList.getFilteredItem(0).getValue();
+                String matchingString = autoCompletionList.getFilteredItemAt(0).getValue();
                 remove(0, getLength());
                 super.insertString(0, matchingString, a);
 
diff --git a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionItemPriority.java b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionItemPriority.java
index 8575a76..425ccdd 100644
--- a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionItemPriority.java
+++ b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionItemPriority.java
@@ -1,13 +1,17 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.tagging.ac;
 
+import org.openstreetmap.josm.data.tagging.ac.AutoCompletionPriority;
+
 /**
  * Describes the priority of an item in an autocompletion list.
  * The selected flag is currently only used in plugins.
  *
  * Instances of this class are not modifiable.
  * @since 1762
+ * @deprecated to be removed end of 2017. Use {@link AutoCompletionPriority} instead
  */
+ at Deprecated
 public class AutoCompletionItemPriority implements Comparable<AutoCompletionItemPriority> {
 
     /**
@@ -15,34 +19,32 @@ public class AutoCompletionItemPriority implements Comparable<AutoCompletionItem
      * This has higher priority than some arbitrary standard value that is
      * usually not used by the user.
      */
-    public static final AutoCompletionItemPriority IS_IN_STANDARD_AND_IN_DATASET = new AutoCompletionItemPriority(true, true, false);
+    public static final AutoCompletionItemPriority IS_IN_STANDARD_AND_IN_DATASET = new AutoCompletionItemPriority(
+            AutoCompletionPriority.IS_IN_STANDARD_AND_IN_DATASET);
 
     /**
      * Indicates that this is an arbitrary value from the data set, i.e.
      * the value of a tag name=*.
      */
-    public static final AutoCompletionItemPriority IS_IN_DATASET = new AutoCompletionItemPriority(true, false, false);
+    public static final AutoCompletionItemPriority IS_IN_DATASET = new AutoCompletionItemPriority(AutoCompletionPriority.IS_IN_DATASET);
 
     /**
      * Indicates that this is a standard value, i.e. a standard tag name
      * or a standard value for a given tag name (from the presets).
      */
-    public static final AutoCompletionItemPriority IS_IN_STANDARD = new AutoCompletionItemPriority(false, true, false);
+    public static final AutoCompletionItemPriority IS_IN_STANDARD = new AutoCompletionItemPriority(AutoCompletionPriority.IS_IN_STANDARD);
 
     /**
      * Indicates that this is a value from a selected object.
      */
-    public static final AutoCompletionItemPriority IS_IN_SELECTION = new AutoCompletionItemPriority(false, false, true);
+    public static final AutoCompletionItemPriority IS_IN_SELECTION = new AutoCompletionItemPriority(AutoCompletionPriority.IS_IN_SELECTION);
 
     /** Unknown priority. This is the lowest priority. */
-    public static final AutoCompletionItemPriority UNKNOWN = new AutoCompletionItemPriority(false, false, false);
+    public static final AutoCompletionItemPriority UNKNOWN = new AutoCompletionItemPriority(AutoCompletionPriority.UNKNOWN);
 
     private static final int NO_USER_INPUT = Integer.MAX_VALUE;
 
-    private final int userInput;
-    private final boolean inDataSet;
-    private final boolean inStandard;
-    private final boolean selected;
+    private final AutoCompletionPriority priority;
 
     /**
      * Constructs a new {@code AutoCompletionItemPriority}.
@@ -55,10 +57,7 @@ public class AutoCompletionItemPriority implements Comparable<AutoCompletionItem
      * this happened more recently and beats a higher number in priority.
      */
     public AutoCompletionItemPriority(boolean inDataSet, boolean inStandard, boolean selected, Integer userInput) {
-        this.inDataSet = inDataSet;
-        this.inStandard = inStandard;
-        this.selected = selected;
-        this.userInput = userInput == null ? NO_USER_INPUT : userInput;
+        this(new AutoCompletionPriority(inDataSet, inStandard, selected, userInput));
     }
 
     /**
@@ -73,11 +72,20 @@ public class AutoCompletionItemPriority implements Comparable<AutoCompletionItem
     }
 
     /**
+     * Constructs a new {@code AutoCompletionItemPriority} from an existing {@link AutoCompletionPriority}.
+     * @param other {@code AutoCompletionPriority} to convert
+     * @since 12859
+     */
+    public AutoCompletionItemPriority(AutoCompletionPriority other) {
+        this.priority = other;
+    }
+
+    /**
      * Determines if the item is found in the currently active data layer.
      * @return {@code true} if the item is found in the currently active data layer
      */
     public boolean isInDataSet() {
-        return inDataSet;
+        return priority.isInDataSet();
     }
 
     /**
@@ -85,7 +93,7 @@ public class AutoCompletionItemPriority implements Comparable<AutoCompletionItem
      * @return {@code true} if the item is a standard tag, e.g. from the presets
      */
     public boolean isInStandard() {
-        return inStandard;
+        return priority.isInStandard();
     }
 
     /**
@@ -93,7 +101,7 @@ public class AutoCompletionItemPriority implements Comparable<AutoCompletionItem
      * @return {@code true} if it is found on an object that is currently selected
      */
     public boolean isSelected() {
-        return selected;
+        return priority.isSelected();
     }
 
     /**
@@ -103,7 +111,7 @@ public class AutoCompletionItemPriority implements Comparable<AutoCompletionItem
      *         {@code null}, if the user hasn't entered this tag so far.
      */
     public Integer getUserInput() {
-        return userInput == NO_USER_INPUT ? null : userInput;
+        return priority.getUserInput();
     }
 
     /**
@@ -112,23 +120,7 @@ public class AutoCompletionItemPriority implements Comparable<AutoCompletionItem
      */
     @Override
     public int compareTo(AutoCompletionItemPriority other) {
-        int ui = Integer.compare(other.userInput, userInput);
-        if (ui != 0)
-            return ui;
-
-        int sel = Boolean.compare(selected, other.selected);
-        if (sel != 0)
-            return sel;
-
-        int ds = Boolean.compare(inDataSet, other.inDataSet);
-        if (ds != 0)
-            return ds;
-
-        int std = Boolean.compare(inStandard, other.inStandard);
-        if (std != 0)
-            return std;
-
-        return 0;
+        return priority.compareTo(other.priority);
     }
 
     /**
@@ -138,16 +130,20 @@ public class AutoCompletionItemPriority implements Comparable<AutoCompletionItem
      * @return the merged priority
      */
     public AutoCompletionItemPriority mergeWith(AutoCompletionItemPriority other) {
-        return new AutoCompletionItemPriority(
-                inDataSet || other.inDataSet,
-                inStandard || other.inStandard,
-                selected || other.selected,
-                Math.min(userInput, other.userInput));
+        return new AutoCompletionItemPriority(priority.mergeWith(other.priority));
     }
 
     @Override
     public String toString() {
-        return String.format("<Priority; userInput: %s, inDataSet: %b, inStandard: %b, selected: %b>",
-                userInput == NO_USER_INPUT ? "no" : Integer.toString(userInput), inDataSet, inStandard, selected);
+        return priority.toString();
+    }
+
+    /**
+     * Returns the underlying priority.
+     * @return the underlying priority
+     * @since 12859
+     */
+    public AutoCompletionPriority getPriority() {
+        return priority;
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionList.java b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionList.java
index 4d73f4d..7121c26 100644
--- a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionList.java
+++ b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionList.java
@@ -4,22 +4,25 @@ package org.openstreetmap.josm.gui.tagging.ac;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 import javax.swing.JTable;
 import javax.swing.table.AbstractTableModel;
 
+import org.openstreetmap.josm.data.tagging.ac.AutoCompletionItem;
+import org.openstreetmap.josm.data.tagging.ac.AutoCompletionPriority;
+import org.openstreetmap.josm.data.tagging.ac.AutoCompletionSet;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 
 /**
- * AutoCompletionList manages a list of {@link AutoCompletionListItem}s.
+ * AutoCompletionList manages a graphical list of {@link AutoCompletionItem}s.
  *
  * The list is sorted, items with higher priority first, then according to lexicographic order
- * on the value of the {@link AutoCompletionListItem}.
+ * on the value of the {@link AutoCompletionItem}.
  *
- * AutoCompletionList maintains two views on the list of {@link AutoCompletionListItem}s.
+ * AutoCompletionList maintains two views on the list of {@link AutoCompletionItem}s.
  * <ol>
  *   <li>the bare, unfiltered view which includes all items</li>
  *   <li>a filtered view, which includes only items which match a current filter expression</li>
@@ -32,21 +35,18 @@ import org.openstreetmap.josm.tools.CheckParameterUtil;
 public class AutoCompletionList extends AbstractTableModel {
 
     /** the bare list of AutoCompletionItems */
-    private final transient List<AutoCompletionListItem> list;
+    private final transient AutoCompletionSet list;
     /**  the filtered list of AutoCompletionItems */
-    private final transient ArrayList<AutoCompletionListItem> filtered;
+    private final transient ArrayList<AutoCompletionItem> filtered;
     /** the filter expression */
     private String filter;
-    /** map from value to priority */
-    private final transient Map<String, AutoCompletionListItem> valutToItemMap;
 
     /**
      * constructor
      */
     public AutoCompletionList() {
-        list = new ArrayList<>();
+        list = new AutoCompletionSet();
         filtered = new ArrayList<>();
-        valutToItemMap = new HashMap<>();
     }
 
     /**
@@ -80,21 +80,34 @@ public class AutoCompletionList extends AbstractTableModel {
     }
 
     /**
-     * adds an AutoCompletionListItem to the list. Only adds the item if it
+     * adds an {@link AutoCompletionListItem} to the list. Only adds the item if it
      * is not null and if not in the list yet.
      *
      * @param item the item
+     * @deprecated To be removed end of 2017. Use {@link #add(AutoCompletionItem)} instead
      */
+    @Deprecated
     public void add(AutoCompletionListItem item) {
         if (item == null)
             return;
-        appendOrUpdatePriority(item);
-        sort();
-        filter();
+        add(item.getItem());
+    }
+
+    /**
+     * adds an {@link AutoCompletionItem} to the list. Only adds the item if it
+     * is not null and if not in the list yet.
+     *
+     * @param item the item
+     * @since 12859
+     */
+    public void add(AutoCompletionItem item) {
+        if (item != null && list.add(item)) {
+            filter();
+        }
     }
 
     /**
-     * adds another AutoCompletionList to this list. An item is only
+     * adds another {@link AutoCompletionList} to this list. An item is only
      * added it is not null and if it does not exist in the list yet.
      *
      * @param other another auto completion list; must not be null
@@ -102,27 +115,36 @@ public class AutoCompletionList extends AbstractTableModel {
      */
     public void add(AutoCompletionList other) {
         CheckParameterUtil.ensureParameterNotNull(other, "other");
-        for (AutoCompletionListItem item : other.list) {
-            appendOrUpdatePriority(item);
+        add(other.list);
+    }
+
+    /**
+     * adds a colleciton of {@link AutoCompletionItem} to this list. An item is only
+     * added it is not null and if it does not exist in the list yet.
+     *
+     * @param collection auto completion collection; must not be null
+     * @throws IllegalArgumentException if other is null
+     * @since 12859
+     */
+    public void add(Collection<AutoCompletionItem> collection) {
+        CheckParameterUtil.ensureParameterNotNull(collection, "collection");
+        if (list.addAll(collection)) {
+            filter();
         }
-        sort();
-        filter();
     }
 
     /**
-     * adds a list of AutoCompletionListItem to this list. Only items which
+     * adds a list of {@link AutoCompletionListItem} to this list. Only items which
      * are not null and which do not exist yet in the list are added.
      *
      * @param other a list of AutoCompletionListItem; must not be null
      * @throws IllegalArgumentException if other is null
+     * @deprecated to be removed end of 2017. Use {@link #add(Collection)} instead
      */
+    @Deprecated
     public void add(List<AutoCompletionListItem> other) {
         CheckParameterUtil.ensureParameterNotNull(other, "other");
-        for (AutoCompletionListItem toadd : other) {
-            appendOrUpdatePriority(toadd);
-        }
-        sort();
-        filter();
+        add(other.stream().map(AutoCompletionListItem::getItem).collect(Collectors.toList()));
     }
 
     /**
@@ -131,20 +153,25 @@ public class AutoCompletionList extends AbstractTableModel {
      *
      * @param values a list of strings to add
      * @param priority the priority to use
+     * @deprecated to be removed end of 2017. Use {@link #add(Collection, AutoCompletionPriority)} instead
      */
+    @Deprecated
     public void add(Collection<String> values, AutoCompletionItemPriority priority) {
-        if (values == null)
-            return;
-        for (String value : values) {
-            if (value == null) {
-                continue;
-            }
-            AutoCompletionListItem item = new AutoCompletionListItem(value, priority);
-            appendOrUpdatePriority(item);
+        add(values, priority.getPriority());
+    }
 
+    /**
+     * adds a list of strings to this list. Only strings which
+     * are not null and which do not exist yet in the list are added.
+     *
+     * @param values a list of strings to add
+     * @param priority the priority to use
+     * @since 12859
+     */
+    public void add(Collection<String> values, AutoCompletionPriority priority) {
+        if (values != null && list.addAll(values, priority)) {
+            filter();
         }
-        sort();
-        filter();
     }
 
     /**
@@ -152,27 +179,8 @@ public class AutoCompletionList extends AbstractTableModel {
      * @param values values that have been entered by the user
      */
     public void addUserInput(Collection<String> values) {
-        if (values == null)
-            return;
-        int i = 0;
-        for (String value : values) {
-            if (value != null) {
-                appendOrUpdatePriority(
-                        new AutoCompletionListItem(value, new AutoCompletionItemPriority(false, false, false, i++)));
-            }
-        }
-        sort();
-        filter();
-    }
-
-    protected void appendOrUpdatePriority(AutoCompletionListItem toAdd) {
-        AutoCompletionListItem item = valutToItemMap.get(toAdd.getValue());
-        if (item == null) {
-            // new item does not exist yet. Add it to the list
-            list.add(toAdd);
-            valutToItemMap.put(toAdd.getValue(), toAdd);
-        } else {
-            item.setPriority(item.getPriority().mergeWith(toAdd.getPriority()));
+        if (values != null && list.addUserInput(values)) {
+            filter();
         }
     }
 
@@ -182,10 +190,24 @@ public class AutoCompletionList extends AbstractTableModel {
      *
      * @param item the item to check
      * @return true, if item is in the list; false, otherwise
+     * @deprecated to be removed end of 2017. Use {@link #contains(AutoCompletionItem)} instead
      */
+    @Deprecated
     public boolean contains(AutoCompletionListItem item) {
         if (item == null)
             return false;
+        return contains(item.getItem());
+    }
+
+    /**
+     * checks whether a specific item is already in the list. Matches for the
+     * the value <strong>and</strong> the priority of the item
+     *
+     * @param item the item to check
+     * @return true, if item is in the list; false, otherwise
+     * @since 12859
+     */
+    public boolean contains(AutoCompletionItem item) {
         return list.contains(item);
     }
 
@@ -197,57 +219,32 @@ public class AutoCompletionList extends AbstractTableModel {
      * @return true, if value is in the list; false, otherwise
      */
     public boolean contains(String value) {
-        if (value == null)
-            return false;
-        for (AutoCompletionListItem item: list) {
-            if (item.getValue().equals(value))
-                return true;
-        }
-        return false;
+        return list.contains(value);
     }
 
     /**
      * removes the auto completion item with key <code>key</code>
-     * @param key  the key;
+     * @param key the key
      */
     public void remove(String key) {
-        if (key == null)
-            return;
-        for (int i = 0; i < list.size(); i++) {
-            AutoCompletionListItem item = list.get(i);
-            if (item.getValue().equals(key)) {
-                list.remove(i);
-                return;
-            }
+        if (key != null) {
+            list.remove(key);
         }
     }
 
-    /**
-     * sorts the list
-     */
-    protected void sort() {
-        Collections.sort(list);
-    }
-
     protected void filter() {
         filtered.clear();
         if (filter == null) {
             // Collections.copy throws an exception "Source does not fit in dest"
             filtered.ensureCapacity(list.size());
-            for (AutoCompletionListItem item: list) {
-                filtered.add(item);
-            }
+            filtered.addAll(list);
             return;
         }
 
         // apply the pattern to list of possible values. If it matches, add the
         // value to the list of filtered values
         //
-        for (AutoCompletionListItem item : list) {
-            if (item.getValue().startsWith(filter)) {
-                filtered.add(item);
-            }
-        }
+        list.stream().filter(e -> e.getValue().startsWith(filter)).forEach(filtered::add);
         fireTableDataChanged();
     }
 
@@ -257,7 +254,7 @@ public class AutoCompletionList extends AbstractTableModel {
      * @return the number of filtered items
      */
     public int getFilteredSize() {
-        return this.filtered.size();
+        return filtered.size();
     }
 
     /**
@@ -266,27 +263,37 @@ public class AutoCompletionList extends AbstractTableModel {
      * @return the item
      *
      * @throws IndexOutOfBoundsException if idx is out of bounds
+     * @deprecated to be removed end of 2017. Use {@link #getFilteredItemAt(int)} instead
      */
+    @Deprecated
     public AutoCompletionListItem getFilteredItem(int idx) {
-        if (idx < 0 || idx >= getFilteredSize())
-            throw new IndexOutOfBoundsException("idx out of bounds. idx=" + idx);
+        return new AutoCompletionListItem(getFilteredItemAt(idx));
+    }
+
+    /**
+     * replies the idx-th item from the list of filtered items
+     * @param idx the index; must be in the range 0 <= idx < {@link #getFilteredSize()}
+     * @return the item
+     *
+     * @throws IndexOutOfBoundsException if idx is out of bounds
+     * @since 12859
+     */
+    public AutoCompletionItem getFilteredItemAt(int idx) {
         return filtered.get(idx);
     }
 
-    List<AutoCompletionListItem> getList() {
+    AutoCompletionSet getSet() {
         return list;
     }
 
-    List<AutoCompletionListItem> getUnmodifiableList() {
-        return Collections.unmodifiableList(list);
+    Set<AutoCompletionItem> getUnmodifiableSet() {
+        return Collections.unmodifiableSet(list);
     }
 
     /**
      * removes all elements from the auto completion list
-     *
      */
     public void clear() {
-        valutToItemMap.clear();
         list.clear();
         fireTableDataChanged();
     }
@@ -298,12 +305,11 @@ public class AutoCompletionList extends AbstractTableModel {
 
     @Override
     public int getRowCount() {
-
         return list == null ? 0 : getFilteredSize();
     }
 
     @Override
     public Object getValueAt(int rowIndex, int columnIndex) {
-        return list == null ? null : getFilteredItem(rowIndex);
+        return list == null ? null : getFilteredItemAt(rowIndex);
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionListItem.java b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionListItem.java
index 0a83cb0..c84b0e2 100644
--- a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionListItem.java
+++ b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionListItem.java
@@ -1,7 +1,7 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.tagging.ac;
 
-import org.openstreetmap.josm.tools.CheckParameterUtil;
+import org.openstreetmap.josm.data.tagging.ac.AutoCompletionItem;
 
 /**
  * Represents an entry in the list of auto completion values.
@@ -14,14 +14,13 @@ import org.openstreetmap.josm.tools.CheckParameterUtil;
  *  {@link AutoCompletionItemPriority}.
  *
  * The value is a string which will be displayed in the auto completion list.
- *
+ * @deprecated To be removed end of 2017. Use {@link AutoCompletionItem} instead
  */
+ at Deprecated
 public class AutoCompletionListItem implements Comparable<AutoCompletionListItem> {
 
-    /** the pritority of this item */
-    private AutoCompletionItemPriority priority;
-    /** the value of this item */
-    private String value;
+    /** the item */
+    private final AutoCompletionItem item;
 
     /**
      * Constructs a new {@code AutoCompletionListItem} with the given value and priority.
@@ -29,8 +28,7 @@ public class AutoCompletionListItem implements Comparable<AutoCompletionListItem
      * @param priority The priority
      */
     public AutoCompletionListItem(String value, AutoCompletionItemPriority priority) {
-        this.value = value;
-        this.priority = priority;
+        this.item = new AutoCompletionItem(value, priority.getPriority());
     }
 
     /**
@@ -38,16 +36,23 @@ public class AutoCompletionListItem implements Comparable<AutoCompletionListItem
      * @param value The value
      */
     public AutoCompletionListItem(String value) {
-        this.value = value;
-        priority = AutoCompletionItemPriority.UNKNOWN;
+        this.item = new AutoCompletionItem(value);
     }
 
     /**
      * Constructs a new {@code AutoCompletionListItem}.
      */
     public AutoCompletionListItem() {
-        value = "";
-        priority = AutoCompletionItemPriority.UNKNOWN;
+        this.item = new AutoCompletionItem();
+    }
+
+    /**
+     * Constructs a new {@code AutoCompletionListItem} from an existing {@link AutoCompletionItem}.
+     * @param other {@code AutoCompletionItem} to convert
+     * @since 12859
+     */
+    public AutoCompletionListItem(AutoCompletionItem other) {
+        this.item = other;
     }
 
     /**
@@ -55,7 +60,7 @@ public class AutoCompletionListItem implements Comparable<AutoCompletionListItem
      * @return the priority
      */
     public AutoCompletionItemPriority getPriority() {
-        return priority;
+        return new AutoCompletionItemPriority(item.getPriority());
     }
 
     /**
@@ -63,7 +68,7 @@ public class AutoCompletionListItem implements Comparable<AutoCompletionListItem
      * @param priority  the priority
      */
     public void setPriority(AutoCompletionItemPriority priority) {
-        this.priority = priority;
+        item.setPriority(priority.getPriority());
     }
 
     /**
@@ -71,7 +76,7 @@ public class AutoCompletionListItem implements Comparable<AutoCompletionListItem
      * @return the value
      */
     public String getValue() {
-        return value;
+        return item.getValue();
     }
 
     /**
@@ -80,29 +85,17 @@ public class AutoCompletionListItem implements Comparable<AutoCompletionListItem
      * @throws IllegalArgumentException if value if null
      */
     public void setValue(String value) {
-        CheckParameterUtil.ensureParameterNotNull(value, "value");
-        this.value = value;
+        item.setValue(value);
     }
 
     @Override
     public String toString() {
-        StringBuilder sb = new StringBuilder();
-        sb.append("<val='")
-          .append(value)
-          .append("',")
-          .append(priority)
-          .append('>');
-        return sb.toString();
+        return item.toString();
     }
 
     @Override
     public int hashCode() {
-        final int prime = 31;
-        int result = 1;
-        result = prime * result
-                + ((priority == null) ? 0 : priority.hashCode());
-        result = prime * result + ((value == null) ? 0 : value.hashCode());
-        return result;
+        return item.hashCode();
     }
 
     @Override
@@ -112,29 +105,24 @@ public class AutoCompletionListItem implements Comparable<AutoCompletionListItem
         if (obj == null)
             return false;
         if (obj instanceof String)
-            return obj.equals(value);
+            return obj.equals(item.getValue());
         if (getClass() != obj.getClass())
             return false;
         final AutoCompletionListItem other = (AutoCompletionListItem) obj;
-        if (priority == null) {
-            if (other.priority != null)
-                return false;
-        } else if (!priority.equals(other.priority))
-            return false;
-        if (value == null) {
-            if (other.value != null)
-                return false;
-        } else if (!value.equals(other.value))
-            return false;
-        return true;
+        return item.equals(other.item);
     }
 
     @Override
     public int compareTo(AutoCompletionListItem other) {
-        int ret = other.priority.compareTo(priority); // higher priority items come first in the list
-        if (ret != 0)
-            return ret;
-        else
-            return this.value.compareTo(other.value);
+        return item.compareTo(other.item);
+    }
+
+    /**
+     * Returns the underlying item.
+     * @return the underlying item
+     * @since 12859
+     */
+    public AutoCompletionItem getItem() {
+        return item;
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionManager.java b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionManager.java
index 1f14351..2d20eee 100644
--- a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionManager.java
+++ b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionManager.java
@@ -5,6 +5,8 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedHashSet;
 import java.util.List;
@@ -13,6 +15,7 @@ import java.util.Map.Entry;
 import java.util.Objects;
 import java.util.Set;
 import java.util.function.Function;
+import java.util.stream.Collectors;
 
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -27,6 +30,15 @@ import org.openstreetmap.josm.data.osm.event.PrimitivesRemovedEvent;
 import org.openstreetmap.josm.data.osm.event.RelationMembersChangedEvent;
 import org.openstreetmap.josm.data.osm.event.TagsChangedEvent;
 import org.openstreetmap.josm.data.osm.event.WayNodesChangedEvent;
+import org.openstreetmap.josm.data.tagging.ac.AutoCompletionItem;
+import org.openstreetmap.josm.data.tagging.ac.AutoCompletionPriority;
+import org.openstreetmap.josm.data.tagging.ac.AutoCompletionSet;
+import org.openstreetmap.josm.gui.MainApplication;
+import org.openstreetmap.josm.gui.layer.LayerManager.LayerAddEvent;
+import org.openstreetmap.josm.gui.layer.LayerManager.LayerChangeListener;
+import org.openstreetmap.josm.gui.layer.LayerManager.LayerOrderChangeEvent;
+import org.openstreetmap.josm.gui.layer.LayerManager.LayerRemoveEvent;
+import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresets;
 import org.openstreetmap.josm.gui.tagging.presets.items.Roles.Role;
@@ -38,11 +50,10 @@ import org.openstreetmap.josm.tools.Utils;
  * AutoCompletionManager holds a cache of keys with a list of
  * possible auto completion values for each key.
  *
- * Each DataSet is assigned one AutoCompletionManager instance such that
+ * Each DataSet can be assigned one AutoCompletionManager instance such that
  * <ol>
  *   <li>any key used in a tag in the data set is part of the key list in the cache</li>
- *   <li>any value used in a tag for a specific key is part of the autocompletion list of
- *     this key</li>
+ *   <li>any value used in a tag for a specific key is part of the autocompletion list of this key</li>
  * </ol>
  *
  * Building up auto completion lists should not
@@ -128,6 +139,8 @@ public class AutoCompletionManager implements DataSetListener {
      */
     static final Set<String> PRESET_ROLE_CACHE = new HashSet<>();
 
+    private static final Map<DataSet, AutoCompletionManager> INSTANCES = new HashMap<>();
+
     /**
      * Constructs a new {@code AutoCompletionManager}.
      * @param ds data set
@@ -261,14 +274,13 @@ public class AutoCompletionManager implements DataSetListener {
     }
 
     /**
-     * Populates the {@link AutoCompletionList} with the currently cached
-     * member roles.
+     * Populates the {@link AutoCompletionList} with the currently cached member roles.
      *
      * @param list the list to populate
      */
     public void populateWithMemberRoles(AutoCompletionList list) {
-        list.add(TaggingPresets.getPresetRoles(), AutoCompletionItemPriority.IS_IN_STANDARD);
-        list.add(getRoleCache(), AutoCompletionItemPriority.IS_IN_DATASET);
+        list.add(TaggingPresets.getPresetRoles(), AutoCompletionPriority.IS_IN_STANDARD);
+        list.add(getRoleCache(), AutoCompletionPriority.IS_IN_DATASET);
     }
 
     /**
@@ -287,10 +299,10 @@ public class AutoCompletionManager implements DataSetListener {
         if (r != null && presets != null && !presets.isEmpty()) {
             for (TaggingPreset tp : presets) {
                 if (tp.roles != null) {
-                    list.add(Utils.transform(tp.roles.roles, (Function<Role, String>) x -> x.key), AutoCompletionItemPriority.IS_IN_STANDARD);
+                    list.add(Utils.transform(tp.roles.roles, (Function<Role, String>) x -> x.key), AutoCompletionPriority.IS_IN_STANDARD);
                 }
             }
-            list.add(r.getMemberRoles(), AutoCompletionItemPriority.IS_IN_DATASET);
+            list.add(r.getMemberRoles(), AutoCompletionPriority.IS_IN_DATASET);
         } else {
             populateWithMemberRoles(list);
         }
@@ -302,15 +314,14 @@ public class AutoCompletionManager implements DataSetListener {
      * @param list the list to populate
      */
     public void populateWithKeys(AutoCompletionList list) {
-        list.add(TaggingPresets.getPresetKeys(), AutoCompletionItemPriority.IS_IN_STANDARD);
-        list.add(new AutoCompletionListItem("source", AutoCompletionItemPriority.IS_IN_STANDARD));
-        list.add(getDataKeys(), AutoCompletionItemPriority.IS_IN_DATASET);
+        list.add(TaggingPresets.getPresetKeys(), AutoCompletionPriority.IS_IN_STANDARD);
+        list.add(new AutoCompletionItem("source", AutoCompletionPriority.IS_IN_STANDARD));
+        list.add(getDataKeys(), AutoCompletionPriority.IS_IN_DATASET);
         list.addUserInput(getUserInputKeys());
     }
 
     /**
-     * Populates the an {@link AutoCompletionList} with the currently cached
-     * values for a tag
+     * Populates the an {@link AutoCompletionList} with the currently cached values for a tag
      *
      * @param list the list to populate
      * @param key the tag key
@@ -320,16 +331,15 @@ public class AutoCompletionManager implements DataSetListener {
     }
 
     /**
-     * Populates the an {@link AutoCompletionList} with the currently cached
-     * values for some given tags
+     * Populates the an {@link AutoCompletionList} with the currently cached values for some given tags
      *
      * @param list the list to populate
      * @param keys the tag keys
      */
     public void populateWithTagValues(AutoCompletionList list, List<String> keys) {
         for (String key : keys) {
-            list.add(TaggingPresets.getPresetValues(key), AutoCompletionItemPriority.IS_IN_STANDARD);
-            list.add(getDataValues(key), AutoCompletionItemPriority.IS_IN_DATASET);
+            list.add(TaggingPresets.getPresetValues(key), AutoCompletionPriority.IS_IN_STANDARD);
+            list.add(getDataValues(key), AutoCompletionPriority.IS_IN_DATASET);
             list.addUserInput(getUserInputValues(key));
         }
     }
@@ -337,37 +347,110 @@ public class AutoCompletionManager implements DataSetListener {
     /**
      * Returns the currently cached tag keys.
      * @return a list of tag keys
+     * @deprecated to be removed end of 2017. Use {@link #getTagKeys()} instead
      */
+    @Deprecated
     public List<AutoCompletionListItem> getKeys() {
-        AutoCompletionList list = new AutoCompletionList();
-        populateWithKeys(list);
-        return list.getList();
+        return getTagKeys().stream().map(AutoCompletionListItem::new).collect(Collectors.toList());
     }
 
     /**
      * Returns the currently cached tag values for a given tag key.
      * @param key the tag key
      * @return a list of tag values
+     * @deprecated to be removed end of 2017. Use {@link #getTagValues(String)} instead
      */
+    @Deprecated
     public List<AutoCompletionListItem> getValues(String key) {
-        return getValues(Arrays.asList(key));
+        return getTagValues(key).stream().map(AutoCompletionListItem::new).collect(Collectors.toList());
     }
 
     /**
      * Returns the currently cached tag values for a given list of tag keys.
      * @param keys the tag keys
      * @return a list of tag values
+     * @deprecated to be removed end of 2017. Use {@link #getTagValues(List)} instead
      */
+    @Deprecated
     public List<AutoCompletionListItem> getValues(List<String> keys) {
+        return getTagValues(keys).stream().map(AutoCompletionListItem::new).collect(Collectors.toList());
+    }
+
+    private static List<AutoCompletionItem> setToList(AutoCompletionSet set, Comparator<AutoCompletionItem> comparator) {
+        List<AutoCompletionItem> list = set.stream().collect(Collectors.toList());
+        list.sort(comparator);
+        return list;
+    }
+
+    /**
+     * Returns the currently cached tag keys.
+     * @return a set of tag keys
+     * @since 12859
+     */
+    public AutoCompletionSet getTagKeys() {
+        AutoCompletionList list = new AutoCompletionList();
+        populateWithKeys(list);
+        return list.getSet();
+    }
+
+    /**
+     * Returns the currently cached tag keys.
+     * @param comparator the custom comparator used to sort the list
+     * @return a list of tag keys
+     * @since 12859
+     */
+    public List<AutoCompletionItem> getTagKeys(Comparator<AutoCompletionItem> comparator) {
+        return setToList(getTagKeys(), comparator);
+    }
+
+    /**
+     * Returns the currently cached tag values for a given tag key.
+     * @param key the tag key
+     * @return a set of tag values
+     * @since 12859
+     */
+    public AutoCompletionSet getTagValues(String key) {
+        return getTagValues(Arrays.asList(key));
+    }
+
+    /**
+     * Returns the currently cached tag values for a given tag key.
+     * @param key the tag key
+     * @param comparator the custom comparator used to sort the list
+     * @return a list of tag values
+     * @since 12859
+     */
+    public List<AutoCompletionItem> getTagValues(String key, Comparator<AutoCompletionItem> comparator) {
+        return setToList(getTagValues(key), comparator);
+    }
+
+    /**
+     * Returns the currently cached tag values for a given list of tag keys.
+     * @param keys the tag keys
+     * @return a set of tag values
+     * @since 12859
+     */
+    public AutoCompletionSet getTagValues(List<String> keys) {
         AutoCompletionList list = new AutoCompletionList();
         populateWithTagValues(list, keys);
-        return list.getList();
+        return list.getSet();
+    }
+
+    /**
+     * Returns the currently cached tag values for a given list of tag keys.
+     * @param keys the tag keys
+     * @param comparator the custom comparator used to sort the list
+     * @return a set of tag values
+     * @since 12859
+     */
+    public List<AutoCompletionItem> getTagValues(List<String> keys, Comparator<AutoCompletionItem> comparator) {
+        return setToList(getTagValues(keys), comparator);
     }
 
-    /*********************************************************
+    /*
      * Implementation of the DataSetListener interface
      *
-     **/
+     */
 
     @Override
     public void primitivesAdded(PrimitivesAddedEvent event) {
@@ -421,4 +504,40 @@ public class AutoCompletionManager implements DataSetListener {
     public void dataChanged(DataChangedEvent event) {
         dirty = true;
     }
+
+    private AutoCompletionManager registerListeners() {
+        ds.addDataSetListener(this);
+        MainApplication.getLayerManager().addLayerChangeListener(new LayerChangeListener() {
+            @Override
+            public void layerRemoving(LayerRemoveEvent e) {
+                if (e.getRemovedLayer() instanceof OsmDataLayer
+                        && ((OsmDataLayer) e.getRemovedLayer()).data == ds) {
+                    INSTANCES.remove(ds);
+                    ds.removeDataSetListener(AutoCompletionManager.this);
+                    MainApplication.getLayerManager().removeLayerChangeListener(this);
+                }
+            }
+
+            @Override
+            public void layerOrderChanged(LayerOrderChangeEvent e) {
+                // Do nothing
+            }
+
+            @Override
+            public void layerAdded(LayerAddEvent e) {
+                // Do nothing
+            }
+        });
+        return this;
+    }
+
+    /**
+     * Returns the {@code AutoCompletionManager} for the given data set.
+     * @param dataSet the data set
+     * @return the {@code AutoCompletionManager} for the given data set
+     * @since 12758
+     */
+    public static AutoCompletionManager of(DataSet dataSet) {
+        return INSTANCES.computeIfAbsent(dataSet, ds -> new AutoCompletionManager(ds).registerListeners());
+    }
 }
diff --git a/src/org/openstreetmap/josm/gui/tagging/ac/package-info.java b/src/org/openstreetmap/josm/gui/tagging/ac/package-info.java
index 610e44e..8ad9ba4 100644
--- a/src/org/openstreetmap/josm/gui/tagging/ac/package-info.java
+++ b/src/org/openstreetmap/josm/gui/tagging/ac/package-info.java
@@ -1,6 +1,6 @@
 // License: GPL. For details, see LICENSE file.
 
 /**
- * Provides classes for handling autocompletion of tags.
+ * Provides GUI classes for handling autocompletion of tags.
  */
 package org.openstreetmap.josm.gui.tagging.ac;
diff --git a/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java b/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java
index f412846..74d16a2 100644
--- a/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java
+++ b/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java
@@ -59,6 +59,7 @@ import org.openstreetmap.josm.gui.tagging.presets.items.Roles;
 import org.openstreetmap.josm.gui.tagging.presets.items.Roles.Role;
 import org.openstreetmap.josm.gui.tagging.presets.items.Space;
 import org.openstreetmap.josm.gui.util.GuiHelper;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Logging;
@@ -209,7 +210,7 @@ public class TaggingPreset extends AbstractAction implements ActiveLayerChangeLi
             return;
         }
         File arch = TaggingPresetReader.getZipIcons();
-        final Collection<String> s = Main.pref.getCollection("taggingpreset.icon.sources", null);
+        final Collection<String> s = Config.getPref().getList("taggingpreset.icon.sources", null);
         ImageProvider imgProv = new ImageProvider(iconName);
         imgProv.setDirs(s);
         imgProv.setId("presets");
diff --git a/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetItem.java b/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetItem.java
index 97e808c..03b9e6e 100644
--- a/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetItem.java
+++ b/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetItem.java
@@ -17,12 +17,13 @@ import javax.swing.ImageIcon;
 import javax.swing.JPanel;
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Tag;
-import org.openstreetmap.josm.gui.MainApplication;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletingTextField;
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionList;
+import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionManager;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Logging;
 import org.xml.sax.SAXException;
@@ -42,12 +43,12 @@ public abstract class TaggingPresetItem {
 
     protected void initAutoCompletionField(AutoCompletingTextField field, List<String> keys) {
         if (Main.main == null) return;
-        OsmDataLayer layer = MainApplication.getLayerManager().getEditLayer();
-        if (layer == null) {
+        DataSet data = Main.main.getEditDataSet();
+        if (data == null) {
             return;
         }
         AutoCompletionList list = new AutoCompletionList();
-        layer.data.getAutoCompletionManager().populateWithTagValues(list, keys);
+        AutoCompletionManager.of(data).populateWithTagValues(list, keys);
         field.setAutoCompletionList(list);
     }
 
@@ -126,7 +127,7 @@ public abstract class TaggingPresetItem {
     }
 
     protected static ImageIcon loadImageIcon(String iconName, File zipIcons, Integer maxSize) {
-        final Collection<String> s = Main.pref.getCollection("taggingpreset.icon.sources", null);
+        final Collection<String> s = Config.getPref().getList("taggingpreset.icon.sources", null);
         ImageProvider imgProv = new ImageProvider(iconName).setDirs(s).setId("presets").setArchive(zipIcons).setOptional(true);
         if (maxSize != null) {
             imgProv.setMaxSize(maxSize);
diff --git a/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresets.java b/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresets.java
index 8f5a9a0..0fcb3e8 100644
--- a/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresets.java
+++ b/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresets.java
@@ -13,7 +13,6 @@ import javax.swing.JMenu;
 import javax.swing.JMenuItem;
 import javax.swing.JSeparator;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.MenuScroller;
@@ -21,6 +20,7 @@ import org.openstreetmap.josm.gui.tagging.presets.items.CheckGroup;
 import org.openstreetmap.josm.gui.tagging.presets.items.KeyedItem;
 import org.openstreetmap.josm.gui.tagging.presets.items.Roles;
 import org.openstreetmap.josm.gui.tagging.presets.items.Roles.Role;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.MultiMap;
 import org.openstreetmap.josm.tools.SubclassFilteredCollection;
@@ -90,12 +90,12 @@ public final class TaggingPresets {
                 }
             }
             for (JMenu submenu : submenus.values()) {
-                if (submenu.getItemCount() >= Main.pref.getInteger("taggingpreset.min-elements-for-scroller", 15)) {
+                if (submenu.getItemCount() >= Config.getPref().getInt("taggingpreset.min-elements-for-scroller", 15)) {
                     MenuScroller.setScrollerFor(submenu);
                 }
             }
         }
-        if (Main.pref.getBoolean("taggingpreset.sortmenu")) {
+        if (Config.getPref().getBoolean("taggingpreset.sortmenu")) {
             TaggingPresetMenu.sortMenu(MainApplication.getMenu().presetsMenu);
         }
     }
diff --git a/src/org/openstreetmap/josm/gui/tagging/presets/items/Check.java b/src/org/openstreetmap/josm/gui/tagging/presets/items/Check.java
index 9b9618a..b755b8e 100644
--- a/src/org/openstreetmap/josm/gui/tagging/presets/items/Check.java
+++ b/src/org/openstreetmap/josm/gui/tagging/presets/items/Check.java
@@ -84,7 +84,7 @@ public class Check extends KeyedItem {
         check.setPropertyText(key);
         check.setState(check.getState()); // to update the tooltip text
 
-        p.add(check, GBC.eol().fill(GBC.HORIZONTAL));
+        p.add(check, GBC.eol()); // Do not fill, see #15104
         return true;
     }
 
diff --git a/src/org/openstreetmap/josm/gui/tagging/presets/items/Combo.java b/src/org/openstreetmap/josm/gui/tagging/presets/items/Combo.java
index 83d23ad..9616949 100644
--- a/src/org/openstreetmap/josm/gui/tagging/presets/items/Combo.java
+++ b/src/org/openstreetmap/josm/gui/tagging/presets/items/Combo.java
@@ -3,11 +3,11 @@ package org.openstreetmap.josm.gui.tagging.presets.items;
 
 import javax.swing.JPanel;
 
-import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.tagging.ac.AutoCompletionPriority;
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletingTextField;
-import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionItemPriority;
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionList;
 import org.openstreetmap.josm.gui.widgets.JosmComboBox;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
 
 /**
@@ -55,7 +55,7 @@ public class Combo extends ComboMultiSelect {
         combobox.reinitialize(lhm.values());
         AutoCompletingTextField tf = new AutoCompletingTextField();
         initAutoCompletionField(tf, key);
-        if (Main.pref.getBoolean("taggingpreset.display-keys-as-hint", true)) {
+        if (Config.getPref().getBoolean("taggingpreset.display-keys-as-hint", true)) {
             tf.setHint(key);
         }
         if (length != null && !length.isEmpty()) {
@@ -63,7 +63,7 @@ public class Combo extends ComboMultiSelect {
         }
         AutoCompletionList acList = tf.getAutoCompletionList();
         if (acList != null) {
-            acList.add(getDisplayValues(), AutoCompletionItemPriority.IS_IN_STANDARD);
+            acList.add(getDisplayValues(), AutoCompletionPriority.IS_IN_STANDARD);
         }
         combobox.setEditor(tf);
 
diff --git a/src/org/openstreetmap/josm/gui/tagging/presets/items/ComboMultiSelect.java b/src/org/openstreetmap/josm/gui/tagging/presets/items/ComboMultiSelect.java
index bb23e46..70af65c 100644
--- a/src/org/openstreetmap/josm/gui/tagging/presets/items/ComboMultiSelect.java
+++ b/src/org/openstreetmap/josm/gui/tagging/presets/items/ComboMultiSelect.java
@@ -30,11 +30,11 @@ import javax.swing.JPanel;
 import javax.swing.ListCellRenderer;
 import javax.swing.ListModel;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Tag;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetReader;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetSelector;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.AlphanumComparator;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.Logging;
@@ -492,7 +492,7 @@ public abstract class ComboMultiSelect extends KeyedItem {
             entries.add(e);
         }
 
-        if (values_sort && Main.pref.getBoolean("taggingpreset.sortvalues", true)) {
+        if (values_sort && Config.getPref().getBoolean("taggingpreset.sortvalues", true)) {
             Collections.sort(entries);
         }
 
diff --git a/src/org/openstreetmap/josm/gui/tagging/presets/items/Roles.java b/src/org/openstreetmap/josm/gui/tagging/presets/items/Roles.java
index 3f5e60c..34da588 100644
--- a/src/org/openstreetmap/josm/gui/tagging/presets/items/Roles.java
+++ b/src/org/openstreetmap/josm/gui/tagging/presets/items/Roles.java
@@ -14,9 +14,9 @@ import javax.swing.JPanel;
 
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Tag;
+import org.openstreetmap.josm.data.osm.search.SearchCompiler;
 import org.openstreetmap.josm.data.osm.search.SearchParseError;
 import org.openstreetmap.josm.data.osm.search.SearchSetting;
-import org.openstreetmap.josm.data.osm.search.SearchCompiler;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetItem;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetType;
 import org.openstreetmap.josm.tools.GBC;
diff --git a/src/org/openstreetmap/josm/gui/tagging/presets/items/Text.java b/src/org/openstreetmap/josm/gui/tagging/presets/items/Text.java
index 8145da1..962cc9e 100644
--- a/src/org/openstreetmap/josm/gui/tagging/presets/items/Text.java
+++ b/src/org/openstreetmap/josm/gui/tagging/presets/items/Text.java
@@ -21,13 +21,13 @@ import javax.swing.JLabel;
 import javax.swing.JPanel;
 import javax.swing.JToggleButton;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Tag;
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletingTextField;
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionManager;
 import org.openstreetmap.josm.gui.widgets.JosmComboBox;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.Logging;
 
@@ -71,7 +71,7 @@ public class Text extends KeyedItem {
         } else {
             initAutoCompletionField(textField, key);
         }
-        if (Main.pref.getBoolean("taggingpreset.display-keys-as-hint", true)) {
+        if (Config.getPref().getBoolean("taggingpreset.display-keys-as-hint", true)) {
             textField.setHint(key);
         }
         if (length != null && !length.isEmpty()) {
diff --git a/src/org/openstreetmap/josm/gui/util/GuiHelper.java b/src/org/openstreetmap/josm/gui/util/GuiHelper.java
index fff61c9..038df7a 100644
--- a/src/org/openstreetmap/josm/gui/util/GuiHelper.java
+++ b/src/org/openstreetmap/josm/gui/util/GuiHelper.java
@@ -65,6 +65,7 @@ import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.ImageProvider.ImageSizes;
 import org.openstreetmap.josm.tools.LanguageInfo;
 import org.openstreetmap.josm.tools.Logging;
+import org.openstreetmap.josm.tools.PlatformHook;
 import org.openstreetmap.josm.tools.bugreport.BugReport;
 import org.openstreetmap.josm.tools.bugreport.ReportedException;
 
@@ -469,7 +470,9 @@ public final class GuiHelper {
      * </ul>
      * @return extended modifier key used as the appropriate accelerator key for menu shortcuts
      * @since 7539
+     * @deprecated to be removed end of 2017. Use {@link PlatformHook#getMenuShortcutKeyMaskEx()} instead
      */
+    @Deprecated
     public static int getMenuShortcutKeyMaskEx() {
         return Main.isPlatformOsx() ? KeyEvent.META_DOWN_MASK : KeyEvent.CTRL_DOWN_MASK;
     }
diff --git a/src/org/openstreetmap/josm/tools/MultiLineFlowLayout.java b/src/org/openstreetmap/josm/gui/util/MultiLineFlowLayout.java
similarity index 98%
rename from src/org/openstreetmap/josm/tools/MultiLineFlowLayout.java
rename to src/org/openstreetmap/josm/gui/util/MultiLineFlowLayout.java
index 723dfe7..c4541f9 100644
--- a/src/org/openstreetmap/josm/tools/MultiLineFlowLayout.java
+++ b/src/org/openstreetmap/josm/gui/util/MultiLineFlowLayout.java
@@ -1,5 +1,5 @@
 // License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.tools;
+package org.openstreetmap.josm.gui.util;
 
 import java.awt.Component;
 import java.awt.Container;
diff --git a/src/org/openstreetmap/josm/tools/MultikeyActionsHandler.java b/src/org/openstreetmap/josm/gui/util/MultikeyActionsHandler.java
similarity index 95%
rename from src/org/openstreetmap/josm/tools/MultikeyActionsHandler.java
rename to src/org/openstreetmap/josm/gui/util/MultikeyActionsHandler.java
index b24206c..8f823de 100644
--- a/src/org/openstreetmap/josm/tools/MultikeyActionsHandler.java
+++ b/src/org/openstreetmap/josm/gui/util/MultikeyActionsHandler.java
@@ -1,5 +1,5 @@
 // License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.tools;
+package org.openstreetmap.josm.gui.util;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
 
@@ -24,8 +24,14 @@ import javax.swing.event.PopupMenuListener;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.MainApplication;
-import org.openstreetmap.josm.tools.MultikeyShortcutAction.MultikeyInfo;
-
+import org.openstreetmap.josm.gui.util.MultikeyShortcutAction.MultikeyInfo;
+import org.openstreetmap.josm.tools.Shortcut;
+
+/**
+ * Handles the different multikey actions.
+ * The possible actions can be selected through a popup menu.
+ * @since 4595
+ */
 public final class MultikeyActionsHandler {
 
     private static final long DIALOG_DELAY = 1000;
@@ -147,7 +153,8 @@ public final class MultikeyActionsHandler {
             lastTimestamp = e.getWhen();
             lastAction = this;
             timer.schedule(new MyTimerTask(lastTimestamp, lastAction), DIALOG_DELAY);
-            MainApplication.getMap().statusLine.setHelpText(STATUS_BAR_ID, tr("{0}... [please type its number]", (String) action.getValue(SHORT_DESCRIPTION)));
+            MainApplication.getMap().statusLine.setHelpText(STATUS_BAR_ID,
+                    tr("{0}... [please type its number]", (String) action.getValue(SHORT_DESCRIPTION)));
         }
 
         @Override
diff --git a/src/org/openstreetmap/josm/tools/MultikeyShortcutAction.java b/src/org/openstreetmap/josm/gui/util/MultikeyShortcutAction.java
similarity index 82%
rename from src/org/openstreetmap/josm/tools/MultikeyShortcutAction.java
rename to src/org/openstreetmap/josm/gui/util/MultikeyShortcutAction.java
index 751e272..bc65ef1 100644
--- a/src/org/openstreetmap/josm/tools/MultikeyShortcutAction.java
+++ b/src/org/openstreetmap/josm/gui/util/MultikeyShortcutAction.java
@@ -1,10 +1,16 @@
 // License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.tools;
+package org.openstreetmap.josm.gui.util;
 
 import java.util.List;
 
 import javax.swing.Action;
 
+import org.openstreetmap.josm.tools.Shortcut;
+
+/**
+ * Action implementing a multikey shortcut - shorcuts like Ctrl+Alt+S,n will toggle n-th layer visibility.
+ * @since 4595
+ */
 public interface MultikeyShortcutAction extends Action {
 
     class MultikeyInfo {
diff --git a/src/org/openstreetmap/josm/gui/util/WindowGeometry.java b/src/org/openstreetmap/josm/gui/util/WindowGeometry.java
index 6d44715..00374ee 100644
--- a/src/org/openstreetmap/josm/gui/util/WindowGeometry.java
+++ b/src/org/openstreetmap/josm/gui/util/WindowGeometry.java
@@ -19,6 +19,7 @@ import java.util.regex.Pattern;
 import javax.swing.JComponent;
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.JosmRuntimeException;
 import org.openstreetmap.josm.tools.Logging;
@@ -205,7 +206,7 @@ public class WindowGeometry {
     }
 
     protected final void initFromPreferences(String preferenceKey) throws WindowGeometryException {
-        String value = Main.pref.get(preferenceKey);
+        String value = Config.getPref().get(preferenceKey);
         if (value.isEmpty())
             throw new WindowGeometryException(
                     tr("Preference with key ''{0}'' does not exist. Cannot restore window geometry from preferences.", preferenceKey));
@@ -274,7 +275,7 @@ public class WindowGeometry {
         StringBuilder value = new StringBuilder(32);
         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());
+        Config.getPref().put(preferenceKey, value.toString());
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/gui/widgets/BoundingBoxSelectionPanel.java b/src/org/openstreetmap/josm/gui/widgets/BoundingBoxSelectionPanel.java
index 112e8e0..5951ae1 100644
--- a/src/org/openstreetmap/josm/gui/widgets/BoundingBoxSelectionPanel.java
+++ b/src/org/openstreetmap/josm/gui/widgets/BoundingBoxSelectionPanel.java
@@ -16,8 +16,8 @@ import javax.swing.event.DocumentListener;
 import javax.swing.text.JTextComponent;
 
 import org.openstreetmap.josm.data.Bounds;
-import org.openstreetmap.josm.data.coor.CoordinateFormat;
 import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.coor.conversion.DecimalDegreesCoordinateFormat;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.OsmUrlToBounds;
 
@@ -124,10 +124,10 @@ public class BoundingBoxSelectionPanel extends JPanel {
 
     private void updateBboxFields(Bounds area) {
         if (area == null) return;
-        tfLatLon[0].setText(area.getMin().latToString(CoordinateFormat.DECIMAL_DEGREES));
-        tfLatLon[1].setText(area.getMin().lonToString(CoordinateFormat.DECIMAL_DEGREES));
-        tfLatLon[2].setText(area.getMax().latToString(CoordinateFormat.DECIMAL_DEGREES));
-        tfLatLon[3].setText(area.getMax().lonToString(CoordinateFormat.DECIMAL_DEGREES));
+        tfLatLon[0].setText(DecimalDegreesCoordinateFormat.INSTANCE.latToString(area.getMin()));
+        tfLatLon[1].setText(DecimalDegreesCoordinateFormat.INSTANCE.lonToString(area.getMin()));
+        tfLatLon[2].setText(DecimalDegreesCoordinateFormat.INSTANCE.latToString(area.getMax()));
+        tfLatLon[3].setText(DecimalDegreesCoordinateFormat.INSTANCE.lonToString(area.getMax()));
     }
 
     private static class LatitudeValidator extends AbstractTextComponentValidator {
diff --git a/src/org/openstreetmap/josm/gui/widgets/ButtonColumn.java b/src/org/openstreetmap/josm/gui/widgets/ButtonColumn.java
index 3157541..47ee462 100644
--- a/src/org/openstreetmap/josm/gui/widgets/ButtonColumn.java
+++ b/src/org/openstreetmap/josm/gui/widgets/ButtonColumn.java
@@ -85,7 +85,6 @@ public class ButtonColumn extends AbstractCellEditor implements TableCellRendere
             editButton.setText(value.toString());
             editButton.setIcon(null);
         }
-        this.editorValue = value;
         return editButton;
     }
 
diff --git a/src/org/openstreetmap/josm/gui/widgets/ComboBoxHistory.java b/src/org/openstreetmap/josm/gui/widgets/ComboBoxHistory.java
index 4ed3dbc..e123801 100644
--- a/src/org/openstreetmap/josm/gui/widgets/ComboBoxHistory.java
+++ b/src/org/openstreetmap/josm/gui/widgets/ComboBoxHistory.java
@@ -8,12 +8,12 @@ import java.util.NoSuchElementException;
 
 import javax.swing.DefaultComboBoxModel;
 
-import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionListItem;
+import org.openstreetmap.josm.data.tagging.ac.AutoCompletionItem;
 
 /**
  * A data model for {@link HistoryComboBox}
  */
-class ComboBoxHistory extends DefaultComboBoxModel<AutoCompletionListItem> implements Iterable<AutoCompletionListItem> {
+class ComboBoxHistory extends DefaultComboBoxModel<AutoCompletionItem> implements Iterable<AutoCompletionItem> {
 
     private final int maxSize;
 
@@ -30,7 +30,7 @@ class ComboBoxHistory extends DefaultComboBoxModel<AutoCompletionListItem> imple
      * @param s the element to add
      */
     public void addElement(String s) {
-        addElement(new AutoCompletionListItem(s));
+        addElement(new AutoCompletionItem(s));
     }
 
     /**
@@ -38,7 +38,7 @@ class ComboBoxHistory extends DefaultComboBoxModel<AutoCompletionListItem> imple
      * @param o the element to add
      */
     @Override
-    public void addElement(AutoCompletionListItem o) {
+    public void addElement(AutoCompletionItem o) {
         String newEntry = o.getValue();
 
         // if history contains this object already, delete it,
@@ -63,8 +63,8 @@ class ComboBoxHistory extends DefaultComboBoxModel<AutoCompletionListItem> imple
     }
 
     @Override
-    public Iterator<AutoCompletionListItem> iterator() {
-        return new Iterator<AutoCompletionListItem>() {
+    public Iterator<AutoCompletionItem> iterator() {
+        return new Iterator<AutoCompletionItem>() {
 
             private int position = -1;
 
@@ -79,7 +79,7 @@ class ComboBoxHistory extends DefaultComboBoxModel<AutoCompletionListItem> imple
             }
 
             @Override
-            public AutoCompletionListItem next() {
+            public AutoCompletionItem next() {
                 if (!hasNext())
                     throw new NoSuchElementException();
                 position++;
@@ -101,12 +101,12 @@ class ComboBoxHistory extends DefaultComboBoxModel<AutoCompletionListItem> imple
     }
 
     /**
-     * Returns the {@link AutoCompletionListItem} items as strings
+     * Returns the {@link AutoCompletionItem} items as strings
      * @return a list of strings
      */
     public List<String> asStringList() {
         List<String> list = new ArrayList<>(maxSize);
-        for (AutoCompletionListItem item : this) {
+        for (AutoCompletionItem item : this) {
             list.add(item.getValue());
         }
         return list;
diff --git a/src/org/openstreetmap/josm/gui/widgets/CompileSearchTextDecorator.java b/src/org/openstreetmap/josm/gui/widgets/CompileSearchTextDecorator.java
index a1d9f92..c255077 100644
--- a/src/org/openstreetmap/josm/gui/widgets/CompileSearchTextDecorator.java
+++ b/src/org/openstreetmap/josm/gui/widgets/CompileSearchTextDecorator.java
@@ -8,8 +8,8 @@ import javax.swing.event.DocumentEvent;
 import javax.swing.event.DocumentListener;
 import javax.swing.text.JTextComponent;
 
-import org.openstreetmap.josm.data.osm.search.SearchParseError;
 import org.openstreetmap.josm.data.osm.search.SearchCompiler;
+import org.openstreetmap.josm.data.osm.search.SearchParseError;
 import org.openstreetmap.josm.tools.Logging;
 
 /**
diff --git a/src/org/openstreetmap/josm/gui/widgets/FileChooserManager.java b/src/org/openstreetmap/josm/gui/widgets/FileChooserManager.java
index c4d29df..8212cf4 100644
--- a/src/org/openstreetmap/josm/gui/widgets/FileChooserManager.java
+++ b/src/org/openstreetmap/josm/gui/widgets/FileChooserManager.java
@@ -14,6 +14,7 @@ import org.openstreetmap.josm.actions.DiskAccessAction;
 import org.openstreetmap.josm.actions.ExtensionFileFilter;
 import org.openstreetmap.josm.actions.SaveActionBase;
 import org.openstreetmap.josm.data.preferences.BooleanProperty;
+import org.openstreetmap.josm.spi.preferences.Config;
 
 /**
  * A chained utility class used to create and open {@link AbstractFileChooser} dialogs.<br>
@@ -89,9 +90,9 @@ public class FileChooserManager {
     public FileChooserManager(boolean open, String lastDirProperty, String defaultDir) {
         this.open = open;
         this.lastDirProperty = lastDirProperty == null || lastDirProperty.isEmpty() ? "lastDirectory" : lastDirProperty;
-        this.curDir = Main.pref.get(this.lastDirProperty).isEmpty() ?
+        this.curDir = Config.getPref().get(this.lastDirProperty).isEmpty() ?
                 defaultDir == null || defaultDir.isEmpty() ? "." : defaultDir
-                : Main.pref.get(this.lastDirProperty);
+                : Config.getPref().get(this.lastDirProperty);
     }
 
     // CHECKSTYLE.ON: LineLength
@@ -344,7 +345,7 @@ public class FileChooserManager {
         }
 
         if (!fc.getCurrentDirectory().getAbsolutePath().equals(curDir)) {
-            Main.pref.put(lastDirProperty, fc.getCurrentDirectory().getAbsolutePath());
+            Config.getPref().put(lastDirProperty, fc.getCurrentDirectory().getAbsolutePath());
         }
 
         if (!open && !FileChooserManager.PROP_USE_NATIVE_FILE_DIALOG.get() &&
diff --git a/src/org/openstreetmap/josm/gui/widgets/HistoryComboBox.java b/src/org/openstreetmap/josm/gui/widgets/HistoryComboBox.java
index 54cdc7e..3b03f7f 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.Main;
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletingComboBox;
+import org.openstreetmap.josm.spi.preferences.Config;
 
 /**
  * An {@link AutoCompletingComboBox} which keeps a history
@@ -23,7 +23,7 @@ public class HistoryComboBox extends AutoCompletingComboBox {
      * Constructs a new {@code HistoryComboBox}.
      */
     public HistoryComboBox() {
-        int maxsize = Main.pref.getInteger("search.history-size", DEFAULT_SEARCH_HISTORY_SIZE);
+        int maxsize = Config.getPref().getInt("search.history-size", DEFAULT_SEARCH_HISTORY_SIZE);
         model = new ComboBoxHistory(maxsize);
         setModel(model);
         setEditable(true);
diff --git a/src/org/openstreetmap/josm/gui/widgets/MultiSplitLayout.java b/src/org/openstreetmap/josm/gui/widgets/MultiSplitLayout.java
index 4e7a7c3..6c451c4 100644
--- a/src/org/openstreetmap/josm/gui/widgets/MultiSplitLayout.java
+++ b/src/org/openstreetmap/josm/gui/widgets/MultiSplitLayout.java
@@ -620,8 +620,13 @@ public class MultiSplitLayout implements LayoutManager {
                 double x = bounds.getX();
                 while (splitChildren.hasNext()) {
                     Node splitChild = splitChildren.next();
-                    Divider dividerChild =
-                        splitChildren.hasNext() ? (Divider) (splitChildren.next()) : null;
+                    Divider dividerChild = null;
+                    if (splitChildren.hasNext()) {
+                        Node next = splitChildren.next();
+                        if (next instanceof Divider) {
+                            dividerChild = (Divider) next;
+                        }
+                    }
 
                     double childWidth;
                     if (getFloatingDividers()) {
diff --git a/src/org/openstreetmap/josm/gui/widgets/QuadStateCheckBox.java b/src/org/openstreetmap/josm/gui/widgets/QuadStateCheckBox.java
index bea3809..72a6545 100644
--- a/src/org/openstreetmap/josm/gui/widgets/QuadStateCheckBox.java
+++ b/src/org/openstreetmap/josm/gui/widgets/QuadStateCheckBox.java
@@ -128,7 +128,14 @@ public class QuadStateCheckBox extends JCheckBox {
         }
     }
 
-    private final class QuadStateDecorator implements ButtonModel {
+    /**
+     * Button model for the {@code QuadStateCheckBox}.
+     * It previously only implemented (and still could) the {@code ButtonModel} interface.
+     * But because of JDK-8182577 (Java 9 regression) it now extends {@code ToggleButtonModel} as a workaround.
+     * The previous implementation can be restored after Java 10 migration.
+     * See also https://bugs.openjdk.java.net/browse/JDK-8182695
+     */
+    private final class QuadStateDecorator extends ToggleButtonModel {
         private final ButtonModel other;
         private String propertyText;
 
@@ -230,7 +237,9 @@ public class QuadStateCheckBox extends JCheckBox {
         @Override
         public void setEnabled(boolean b) {
             setFocusable(b);
-            other.setEnabled(b);
+            if (other != null) {
+                other.setEnabled(b);
+            }
         }
 
         // -------------------------------------------------------------------------------
diff --git a/src/org/openstreetmap/josm/gui/widgets/TextContextualPopupMenu.java b/src/org/openstreetmap/josm/gui/widgets/TextContextualPopupMenu.java
index 3046e22..0155c2b 100644
--- a/src/org/openstreetmap/josm/gui/widgets/TextContextualPopupMenu.java
+++ b/src/org/openstreetmap/josm/gui/widgets/TextContextualPopupMenu.java
@@ -22,7 +22,7 @@ import javax.swing.undo.CannotRedoException;
 import javax.swing.undo.CannotUndoException;
 import javax.swing.undo.UndoManager;
 
-import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Logging;
 
@@ -171,7 +171,7 @@ public class TextContextualPopupMenu extends JPopupMenu {
         if (action != null) {
             JMenuItem mi = new JMenuItem(action);
             mi.setText(label);
-            if (iconName != null && Main.pref.getBoolean("text.popupmenu.useicons", true)) {
+            if (iconName != null && Config.getPref().getBoolean("text.popupmenu.useicons", true)) {
                 ImageIcon icon = ImageProvider.get(iconName, ImageProvider.ImageSizes.SMALLICON);
                 if (icon != null) {
                     mi.setIcon(icon);
diff --git a/src/org/openstreetmap/josm/io/CacheCustomContent.java b/src/org/openstreetmap/josm/io/CacheCustomContent.java
index 4dbb870..507e981 100644
--- a/src/org/openstreetmap/josm/io/CacheCustomContent.java
+++ b/src/org/openstreetmap/josm/io/CacheCustomContent.java
@@ -10,7 +10,7 @@ import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 import java.util.concurrent.TimeUnit;
 
-import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -75,7 +75,7 @@ public abstract class CacheCustomContent<T extends Throwable> {
     public CacheCustomContent(String ident, int updateInterval) {
         this.ident = ident;
         this.updateInterval = updateInterval;
-        this.path = new File(Main.pref.getCacheDirectory(), ident);
+        this.path = new File(Config.getDirs().getCacheDirectory(true), ident);
     }
 
     /**
@@ -90,7 +90,7 @@ public abstract class CacheCustomContent<T extends Throwable> {
         if (isOffline()) {
             return false;
         }
-        return Main.pref.getInteger("cache." + ident, 0) + updateInterval < TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis())
+        return Config.getPref().getInt("cache." + ident, 0) + updateInterval < TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis())
                 || !isCacheValid();
     }
 
@@ -140,7 +140,7 @@ public abstract class CacheCustomContent<T extends Throwable> {
     private byte[] updateForce() throws T {
         this.data = updateData();
         saveToDisk();
-        Main.pref.putInteger("cache." + ident, (int) (TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis())));
+        Config.getPref().putInt("cache." + ident, (int) (TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis())));
         return data;
     }
 
diff --git a/src/org/openstreetmap/josm/io/CachedFile.java b/src/org/openstreetmap/josm/io/CachedFile.java
index 3c927d2..2f20322 100644
--- a/src/org/openstreetmap/josm/io/CachedFile.java
+++ b/src/org/openstreetmap/josm/io/CachedFile.java
@@ -27,6 +27,7 @@ import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.HttpClient;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Pair;
@@ -275,7 +276,7 @@ public class CachedFile implements Closeable {
             if (name == null || name.startsWith("resource://")) {
                 return null;
             } else if (name.startsWith("josmdir://")) {
-                cacheFile = new File(Main.pref.getUserDataDirectory(), name.substring("josmdir://".length()));
+                cacheFile = new File(Config.getDirs().getUserDataDirectory(false), name.substring("josmdir://".length()));
             } else if (name.startsWith("josmplugindir://")) {
                 cacheFile = new File(Main.pref.getPluginsDirectory(), name.substring("josmplugindir://".length()));
             } else {
@@ -380,14 +381,14 @@ public class CachedFile implements Closeable {
             url = new URL(name);
             if (!"file".equals(url.getProtocol())) {
                 String prefKey = getPrefKey(url, destDir);
-                List<String> localPath = new ArrayList<>(Main.pref.getCollection(prefKey));
+                List<String> localPath = new ArrayList<>(Config.getPref().getList(prefKey));
                 if (localPath.size() == 2) {
                     File lfile = new File(localPath.get(1));
                     if (lfile.exists()) {
                         Utils.deleteFile(lfile);
                     }
                 }
-                Main.pref.putCollection(prefKey, null);
+                Config.getPref().putList(prefKey, null);
             }
         } catch (MalformedURLException e) {
             Logging.warn(e);
@@ -418,7 +419,7 @@ public class CachedFile implements Closeable {
         long maxAgeMillis = maxAge;
         Long ifModifiedSince = null;
         File localFile = null;
-        List<String> localPathEntry = new ArrayList<>(Main.pref.getCollection(prefKey));
+        List<String> localPathEntry = new ArrayList<>(Config.getPref().getList(prefKey));
         boolean offline = false;
         try {
             checkOfflineAccess(urlStr);
@@ -434,7 +435,7 @@ public class CachedFile implements Closeable {
                 if (maxAge == DEFAULT_MAXTIME
                         || maxAge <= 0 // arbitrary value <= 0 is deprecated
                 ) {
-                    maxAgeMillis = TimeUnit.SECONDS.toMillis(Main.pref.getLong("mirror.maxtime", TimeUnit.DAYS.toSeconds(7)));
+                    maxAgeMillis = TimeUnit.SECONDS.toMillis(Config.getPref().getLong("mirror.maxtime", TimeUnit.DAYS.toSeconds(7)));
                 }
                 age = System.currentTimeMillis() - Long.parseLong(localPathEntry.get(0));
                 if (offline || age < maxAgeMillis) {
@@ -446,7 +447,7 @@ public class CachedFile implements Closeable {
             }
         }
         if (destDir == null) {
-            destDir = Main.pref.getCacheDirectory().getPath();
+            destDir = Config.getDirs().getCacheDirectory(true).getPath();
         }
 
         File destDirFile = new File(destDir);
@@ -475,7 +476,7 @@ public class CachedFile implements Closeable {
                 Logging.debug("304 Not Modified ({0})", urlStr);
                 if (localFile == null)
                     throw new AssertionError();
-                Main.pref.putCollection(prefKey,
+                Config.getPref().putList(prefKey,
                         Arrays.asList(Long.toString(System.currentTimeMillis()), localPathEntry.get(1)));
                 return localFile;
             } else if (con.getResponseCode() == HttpURLConnection.HTTP_NOT_FOUND) {
@@ -487,7 +488,7 @@ public class CachedFile implements Closeable {
             activeConnection = null;
             localFile = new File(destDir, localPath);
             if (Main.platform.rename(destDirFile, localFile)) {
-                Main.pref.putCollection(prefKey,
+                Config.getPref().putList(prefKey,
                         Arrays.asList(Long.toString(System.currentTimeMillis()), localFile.toString()));
             } else {
                 Logging.warn(tr("Failed to rename file {0} to {1}.",
diff --git a/src/org/openstreetmap/josm/io/CertificateAmendment.java b/src/org/openstreetmap/josm/io/CertificateAmendment.java
index 1a10a08..dbc2dd1 100644
--- a/src/org/openstreetmap/josm/io/CertificateAmendment.java
+++ b/src/org/openstreetmap/josm/io/CertificateAmendment.java
@@ -28,6 +28,7 @@ import javax.net.ssl.SSLContext;
 import javax.net.ssl.TrustManagerFactory;
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -118,7 +119,7 @@ public final class CertificateAmendment {
      * @throws GeneralSecurityException if a security error occurs
      */
     public static void addMissingCertificates() throws IOException, GeneralSecurityException {
-        if (!Main.pref.getBoolean("tls.add-missing-certificates", true))
+        if (!Config.getPref().getBoolean("tls.add-missing-certificates", true))
             return;
         KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
         Path cacertsPath = Paths.get(System.getProperty("java.home"), "lib", "security", "cacerts");
diff --git a/src/org/openstreetmap/josm/io/ChangesetQuery.java b/src/org/openstreetmap/josm/io/ChangesetQuery.java
index 732537e..f511605 100644
--- a/src/org/openstreetmap/josm/io/ChangesetQuery.java
+++ b/src/org/openstreetmap/josm/io/ChangesetQuery.java
@@ -16,8 +16,8 @@ import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.UserIdentityManager;
 import org.openstreetmap.josm.data.coor.LatLon;
-import org.openstreetmap.josm.gui.JosmUserIdentityManager;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
@@ -70,7 +70,7 @@ public class ChangesetQuery {
      * @since 12495
      */
     public static ChangesetQuery forCurrentUser() {
-        JosmUserIdentityManager im = JosmUserIdentityManager.getInstance();
+        UserIdentityManager im = UserIdentityManager.getInstance();
         if (im.isAnonymous()) {
             throw new IllegalStateException("anonymous user");
         }
diff --git a/src/org/openstreetmap/josm/io/Compression.java b/src/org/openstreetmap/josm/io/Compression.java
index d0d6277..5d10bdd 100644
--- a/src/org/openstreetmap/josm/io/Compression.java
+++ b/src/org/openstreetmap/josm/io/Compression.java
@@ -8,10 +8,15 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.nio.charset.StandardCharsets;
+import java.util.zip.GZIPInputStream;
 import java.util.zip.GZIPOutputStream;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
 import java.util.zip.ZipOutputStream;
 
+import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream;
 import org.apache.commons.compress.compressors.bzip2.BZip2CompressorOutputStream;
+import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -78,11 +83,11 @@ public enum Compression {
     public InputStream getUncompressedInputStream(InputStream in) throws IOException {
         switch (this) {
             case BZIP2:
-                return Utils.getBZip2InputStream(in);
+                return getBZip2InputStream(in);
             case GZIP:
-                return Utils.getGZipInputStream(in);
+                return getGZipInputStream(in);
             case ZIP:
-                return Utils.getZipInputStream(in);
+                return getZipInputStream(in);
             case NONE:
             default:
                 return in;
@@ -90,6 +95,54 @@ public enum Compression {
     }
 
     /**
+     * Returns a Bzip2 input stream wrapping given input stream.
+     * @param in The raw input stream
+     * @return a Bzip2 input stream wrapping given input stream, or {@code null} if {@code in} is {@code null}
+     * @throws IOException if the given input stream does not contain valid BZ2 header
+     * @since 12772 (moved from {@link Utils}, there since 7867)
+     */
+    public static BZip2CompressorInputStream getBZip2InputStream(InputStream in) throws IOException {
+        if (in == null) {
+            return null;
+        }
+        return new BZip2CompressorInputStream(in, /* see #9537 */ true);
+    }
+
+    /**
+     * Returns a Gzip input stream wrapping given input stream.
+     * @param in The raw input stream
+     * @return a Gzip input stream wrapping given input stream, or {@code null} if {@code in} is {@code null}
+     * @throws IOException if an I/O error has occurred
+     * @since 12772 (moved from {@link Utils}, there since 7119)
+     */
+    public static GZIPInputStream getGZipInputStream(InputStream in) throws IOException {
+        if (in == null) {
+            return null;
+        }
+        return new GZIPInputStream(in);
+    }
+
+    /**
+     * Returns a Zip input stream wrapping given input stream.
+     * @param in The raw input stream
+     * @return a Zip input stream wrapping given input stream, or {@code null} if {@code in} is {@code null}
+     * @throws IOException if an I/O error has occurred
+     * @since 12772 (moved from {@link Utils}, there since 7119)
+     */
+    public static ZipInputStream getZipInputStream(InputStream in) throws IOException {
+        if (in == null) {
+            return null;
+        }
+        ZipInputStream zis = new ZipInputStream(in, StandardCharsets.UTF_8);
+        // Positions the stream at the beginning of first entry
+        ZipEntry ze = zis.getNextEntry();
+        if (ze != null && Logging.isDebugEnabled()) {
+            Logging.debug("Zip entry: {0}", ze.getName());
+        }
+        return zis;
+    }
+
+    /**
      * Returns an un-compressing {@link InputStream} for the {@link File} {@code file}.
      * @param file file
      * @return un-compressing input stream
diff --git a/src/org/openstreetmap/josm/io/DefaultProxySelector.java b/src/org/openstreetmap/josm/io/DefaultProxySelector.java
index 7131a29..55a5be7 100644
--- a/src/org/openstreetmap/josm/io/DefaultProxySelector.java
+++ b/src/org/openstreetmap/josm/io/DefaultProxySelector.java
@@ -17,17 +17,32 @@ import java.util.List;
 import java.util.Set;
 import java.util.TreeSet;
 
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.gui.preferences.server.ProxyPreferencesPanel;
-import org.openstreetmap.josm.gui.preferences.server.ProxyPreferencesPanel.ProxyPolicy;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 
 /**
  * This is the default proxy selector used in JOSM.
- *
+ * @since 2641
  */
 public class DefaultProxySelector extends ProxySelector {
 
+    /** Property key for proxy policy */
+    public static final String PROXY_POLICY = "proxy.policy";
+    /** Property key for HTTP proxy host */
+    public static final String PROXY_HTTP_HOST = "proxy.http.host";
+    /** Property key for HTTP proxy port */
+    public static final String PROXY_HTTP_PORT = "proxy.http.port";
+    /** Property key for SOCKS proxy host */
+    public static final String PROXY_SOCKS_HOST = "proxy.socks.host";
+    /** Property key for SOCKS proxy port */
+    public static final String PROXY_SOCKS_PORT = "proxy.socks.port";
+    /** Property key for proxy username */
+    public static final String PROXY_USER = "proxy.user";
+    /** Property key for proxy password */
+    public static final String PROXY_PASS = "proxy.pass";
+    /** Property key for proxy exceptions list */
+    public static final String PROXY_EXCEPTIONS = "proxy.exceptions";
+
     private static final List<Proxy> NO_PROXY_LIST = Collections.singletonList(Proxy.NO_PROXY);
 
     private static final String IPV4_LOOPBACK = "127.0.0.1";
@@ -110,19 +125,19 @@ public class DefaultProxySelector extends ProxySelector {
      *
      */
     public final void initFromPreferences() {
-        String value = Main.pref.get(ProxyPreferencesPanel.PROXY_POLICY);
+        String value = Config.getPref().get(PROXY_POLICY);
         if (value.isEmpty()) {
             proxyPolicy = ProxyPolicy.NO_PROXY;
         } else {
             proxyPolicy = ProxyPolicy.fromName(value);
             if (proxyPolicy == null) {
                 Logging.warn(tr("Unexpected value for preference ''{0}'' found. Got ''{1}''. Will use no proxy.",
-                        ProxyPreferencesPanel.PROXY_POLICY, value));
+                        PROXY_POLICY, value));
                 proxyPolicy = ProxyPolicy.NO_PROXY;
             }
         }
-        String host = Main.pref.get(ProxyPreferencesPanel.PROXY_HTTP_HOST, null);
-        int port = parseProxyPortValue(ProxyPreferencesPanel.PROXY_HTTP_PORT, Main.pref.get(ProxyPreferencesPanel.PROXY_HTTP_PORT, null));
+        String host = Config.getPref().get(PROXY_HTTP_HOST, null);
+        int port = parseProxyPortValue(PROXY_HTTP_PORT, Config.getPref().get(PROXY_HTTP_PORT, null));
         httpProxySocketAddress = null;
         if (proxyPolicy.equals(ProxyPolicy.USE_HTTP_PROXY)) {
             if (host != null && !host.trim().isEmpty() && port > 0) {
@@ -133,8 +148,8 @@ public class DefaultProxySelector extends ProxySelector {
             }
         }
 
-        host = Main.pref.get(ProxyPreferencesPanel.PROXY_SOCKS_HOST, null);
-        port = parseProxyPortValue(ProxyPreferencesPanel.PROXY_SOCKS_PORT, Main.pref.get(ProxyPreferencesPanel.PROXY_SOCKS_PORT, null));
+        host = Config.getPref().get(PROXY_SOCKS_HOST, null);
+        port = parseProxyPortValue(PROXY_SOCKS_PORT, Config.getPref().get(PROXY_SOCKS_PORT, null));
         socksProxySocketAddress = null;
         if (proxyPolicy.equals(ProxyPolicy.USE_SOCKS_PROXY)) {
             if (host != null && !host.trim().isEmpty() && port > 0) {
@@ -145,7 +160,7 @@ public class DefaultProxySelector extends ProxySelector {
             }
         }
         proxyExceptions = new HashSet<>(
-            Main.pref.getCollection(ProxyPreferencesPanel.PROXY_EXCEPTIONS,
+            Config.getPref().getList(PROXY_EXCEPTIONS,
                     Arrays.asList("localhost", IPV4_LOOPBACK, IPV6_LOOPBACK))
         );
     }
diff --git a/src/org/openstreetmap/josm/io/FileWatcher.java b/src/org/openstreetmap/josm/io/FileWatcher.java
index 0b0f6f8..432bb41 100644
--- a/src/org/openstreetmap/josm/io/FileWatcher.java
+++ b/src/org/openstreetmap/josm/io/FileWatcher.java
@@ -4,26 +4,24 @@ package org.openstreetmap.josm.io;
 import java.io.File;
 import java.io.IOException;
 import java.nio.file.FileSystems;
+import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.StandardWatchEventKinds;
 import java.nio.file.WatchEvent;
 import java.nio.file.WatchEvent.Kind;
 import java.nio.file.WatchKey;
 import java.nio.file.WatchService;
-import java.util.Collections;
+import java.util.EnumMap;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.concurrent.Executors;
+import java.util.Objects;
+import java.util.function.Consumer;
 
 import org.openstreetmap.josm.data.preferences.sources.SourceEntry;
-import org.openstreetmap.josm.data.validation.OsmValidator;
-import org.openstreetmap.josm.data.validation.tests.MapCSSTagChecker;
+import org.openstreetmap.josm.data.preferences.sources.SourceType;
 import org.openstreetmap.josm.gui.mappaint.StyleSource;
-import org.openstreetmap.josm.gui.mappaint.loader.MapPaintStyleLoader;
-import org.openstreetmap.josm.gui.mappaint.mapcss.parsergen.ParseException;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.Logging;
-import org.openstreetmap.josm.tools.Utils;
 
 /**
  * Background thread that monitors certain files and perform relevant actions when they change.
@@ -34,8 +32,8 @@ public class FileWatcher {
     private WatchService watcher;
     private Thread thread;
 
-    private final Map<Path, StyleSource> styleMap = new HashMap<>();
-    private final Map<Path, SourceEntry> ruleMap = new HashMap<>();
+    private static final Map<SourceType, Consumer<SourceEntry>> loaderMap = new EnumMap<>(SourceType.class);
+    private final Map<Path, SourceEntry> sourceMap = new HashMap<>();
 
     /**
      * Constructs a new {@code FileWatcher}.
@@ -64,9 +62,11 @@ public class FileWatcher {
      * @throws IllegalArgumentException if {@code style} is null or if it does not provide a local file
      * @throws IllegalStateException if the watcher service failed to start
      * @throws IOException if an I/O error occurs
+     * @deprecated To be removed end of 2017. Use {@link #registerSource} instead
      */
+    @Deprecated
     public void registerStyleSource(StyleSource style) throws IOException {
-        register(style, styleMap);
+        registerSource(style);
     }
 
     /**
@@ -76,32 +76,53 @@ public class FileWatcher {
      * @throws IllegalStateException if the watcher service failed to start
      * @throws IOException if an I/O error occurs
      * @since 7276
+     * @deprecated To be removed end of 2017. Use {@link #registerSource} instead
      */
+    @Deprecated
     public void registerValidatorRule(SourceEntry rule) throws IOException {
-        register(rule, ruleMap);
+        registerSource(rule);
     }
 
-    private <T extends SourceEntry> void register(T obj, Map<Path, T> map) throws IOException {
-        CheckParameterUtil.ensureParameterNotNull(obj, "obj");
+    /**
+     * Registers a source for local file changes, allowing dynamic reloading.
+     * @param src The source to watch
+     * @throws IllegalArgumentException if {@code rule} is null or if it does not provide a local file
+     * @throws IllegalStateException if the watcher service failed to start
+     * @throws IOException if an I/O error occurs
+     * @since 12825
+     */
+    public void registerSource(SourceEntry src) throws IOException {
+        CheckParameterUtil.ensureParameterNotNull(src, "src");
         if (watcher == null) {
             throw new IllegalStateException("File watcher is not available");
         }
         // Get local file, as this method is only called for local style sources
-        File file = new File(obj.url);
+        File file = new File(src.url);
         // Get parent directory as WatchService allows only to monitor directories, not single files
         File dir = file.getParentFile();
         if (dir == null) {
-            throw new IllegalArgumentException("Resource "+obj+" does not have a parent directory");
+            throw new IllegalArgumentException("Resource "+src+" does not have a parent directory");
         }
         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);
-            map.put(file.toPath(), obj);
+            sourceMap.put(file.toPath(), src);
         }
     }
 
     /**
+     * Registers a source loader, allowing dynamic reloading when an entry changes.
+     * @param type the source type for which the loader operates
+     * @param loader the loader in charge of reloading any source of given type when it changes
+     * @return the previous loader registered for this source type, if any
+     * @since 12825
+     */
+    public static Consumer<SourceEntry> registerLoader(SourceType type, Consumer<SourceEntry> loader) {
+        return loaderMap.put(Objects.requireNonNull(type, "type"), Objects.requireNonNull(loader, "loader"));
+    }
+
+    /**
      * Process all events for the key queued to the watcher.
      */
     private void processEvents() {
@@ -135,22 +156,25 @@ public class FileWatcher {
                 // Only way to get full path (http://stackoverflow.com/a/7802029/2257172)
                 Path fullPath = ((Path) key.watchable()).resolve(filename);
 
+                try {
+                    // Some filesystems fire two events when a file is modified. Skip first event (file is empty)
+                    if (Files.size(fullPath) == 0) {
+                        continue;
+                    }
+                } catch (IOException ex) {
+                    Logging.trace(ex);
+                    continue;
+                }
+
                 synchronized (this) {
-                    StyleSource style = styleMap.get(fullPath);
-                    SourceEntry rule = ruleMap.get(fullPath);
-                    if (style != null) {
-                        Logging.info("Map style "+style.getDisplayString()+" has been modified. Reloading style...");
-                        Executors.newSingleThreadExecutor(Utils.newThreadFactory("mapstyle-reload-%d", Thread.NORM_PRIORITY)).submit(
-                                new MapPaintStyleLoader(Collections.singleton(style)));
-                    } else if (rule != null) {
-                        Logging.info("Validator rule "+rule.getDisplayString()+" has been modified. Reloading rule...");
-                        MapCSSTagChecker tagChecker = OsmValidator.getTest(MapCSSTagChecker.class);
-                        if (tagChecker != null) {
-                            try {
-                                tagChecker.addMapCSS(rule.url);
-                            } catch (IOException | ParseException e) {
-                                Logging.warn(e);
-                            }
+                    SourceEntry source = sourceMap.get(fullPath);
+                    if (source != null) {
+                        Consumer<SourceEntry> loader = loaderMap.get(source.type);
+                        if (loader != null) {
+                            Logging.info("Source "+source.getDisplayString()+" has been modified. Reloading it...");
+                            loader.accept(source);
+                        } else {
+                            Logging.warn("Received {0} event for unregistered source type: {1}", kind.name(), source.type);
                         }
                     } else if (Logging.isDebugEnabled()) {
                         Logging.debug("Received {0} event for unregistered file: {1}", kind.name(), fullPath);
diff --git a/src/org/openstreetmap/josm/io/GeoJSONWriter.java b/src/org/openstreetmap/josm/io/GeoJSONWriter.java
index 4306099..67f57df 100644
--- a/src/org/openstreetmap/josm/io/GeoJSONWriter.java
+++ b/src/org/openstreetmap/josm/io/GeoJSONWriter.java
@@ -27,11 +27,11 @@ import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.Way;
-import org.openstreetmap.josm.data.osm.visitor.AbstractVisitor;
+import org.openstreetmap.josm.data.osm.visitor.OsmPrimitiveVisitor;
 import org.openstreetmap.josm.data.projection.Projection;
+import org.openstreetmap.josm.data.projection.Projections;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.mappaint.ElemStyles;
-import org.openstreetmap.josm.gui.preferences.projection.ProjectionPreference;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Pair;
 
@@ -42,7 +42,7 @@ import org.openstreetmap.josm.tools.Pair;
  */
 public class GeoJSONWriter {
 
-    private final OsmDataLayer layer;
+    private final DataSet data;
     private final Projection projection;
     private static final boolean SKIP_EMPTY_NODES = true;
 
@@ -50,10 +50,21 @@ public class GeoJSONWriter {
      * Constructs a new {@code GeoJSONWriter}.
      * @param layer The OSM data layer to save
      * @since 10852
+     * @deprecated To be removed end of 2017. Use {@link #GeoJSONWriter(DataSet)} instead
      */
+    @Deprecated
     public GeoJSONWriter(OsmDataLayer layer) {
-        this.layer = layer;
-        this.projection = ProjectionPreference.wgs84.getProjection();
+        this(layer.data);
+    }
+
+    /**
+     * Constructs a new {@code GeoJSONWriter}.
+     * @param ds The OSM data set to save
+     * @since 12806
+     */
+    public GeoJSONWriter(DataSet ds) {
+        this.data = ds;
+        this.projection = Projections.getProjectionByCode("EPSG:4326"); // WGS 84
     }
 
     /**
@@ -78,14 +89,14 @@ public class GeoJSONWriter {
             JsonObjectBuilder object = Json.createObjectBuilder()
                     .add("type", "FeatureCollection")
                     .add("generator", "JOSM");
-            appendLayerBounds(layer.data, object);
-            appendLayerFeatures(layer.data, object);
+            appendLayerBounds(data, object);
+            appendLayerFeatures(data, object);
             writer.writeObject(object.build());
             return stringWriter.toString();
         }
     }
 
-    private class GeometryPrimitiveVisitor extends AbstractVisitor {
+    private class GeometryPrimitiveVisitor implements OsmPrimitiveVisitor {
 
         private final JsonObjectBuilder geomObj;
 
diff --git a/src/org/openstreetmap/josm/io/MessageNotifier.java b/src/org/openstreetmap/josm/io/MessageNotifier.java
index d492958..5836ca8 100644
--- a/src/org/openstreetmap/josm/io/MessageNotifier.java
+++ b/src/org/openstreetmap/josm/io/MessageNotifier.java
@@ -2,33 +2,24 @@
 package org.openstreetmap.josm.io;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
-import static org.openstreetmap.josm.tools.I18n.trn;
 
-import java.awt.GridBagLayout;
 import java.net.Authenticator.RequestorType;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
 
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.UserIdentityManager;
 import org.openstreetmap.josm.data.osm.UserInfo;
 import org.openstreetmap.josm.data.preferences.BooleanProperty;
 import org.openstreetmap.josm.data.preferences.IntegerProperty;
-import org.openstreetmap.josm.gui.JosmUserIdentityManager;
-import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
-import org.openstreetmap.josm.gui.util.GuiHelper;
-import org.openstreetmap.josm.gui.widgets.UrlLabel;
 import org.openstreetmap.josm.io.auth.CredentialsAgentException;
 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.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -42,6 +33,29 @@ public final class MessageNotifier {
         // Hide default constructor for utils classes
     }
 
+    /**
+     * Called when new new messages are detected.
+     * @since 12766
+     */
+    @FunctionalInterface
+    public interface NotifierCallback {
+        /**
+         * Perform the actual notification of new messages.
+         * @param userInfo the new user information, that includes the number of unread messages
+         */
+        void notifyNewMessages(UserInfo userInfo);
+    }
+
+    private static volatile NotifierCallback callback;
+
+    /**
+     * Sets the {@link NotifierCallback} responsible of notifying the user when new messages are received.
+     * @param notifierCallback the new {@code NotifierCallback}
+     */
+    public static void setNotifierCallback(NotifierCallback notifierCallback) {
+        callback = notifierCallback;
+    }
+
     /** Property defining if this task is enabled or not */
     public static final BooleanProperty PROP_NOTIFIER_ENABLED = new BooleanProperty("message.notifier.enabled", true);
     /** Property defining the update interval in minutes */
@@ -70,18 +84,7 @@ public final class MessageNotifier {
                             tr("get number of unread messages"));
                     final int unread = userInfo.getUnreadMessages();
                     if (unread > 0 && unread != lastUnreadCount) {
-                        GuiHelper.runInEDT(() -> {
-                            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.setOpaque(false);
-                            new Notification().setContent(panel)
-                                .setIcon(JOptionPane.INFORMATION_MESSAGE)
-                                .setDuration(Notification.TIME_LONG)
-                                .show();
-                        });
+                        callback.notifyNewMessages(userInfo);
                         lastUnreadCount = unread;
                     }
                 }
@@ -129,7 +132,7 @@ public final class MessageNotifier {
      * @return {@code true} if user chose an OAuth token or supplied both its username and password, {@code false otherwise}
      */
     public static boolean isUserEnoughIdentified() {
-        JosmUserIdentityManager identManager = JosmUserIdentityManager.getInstance();
+        UserIdentityManager identManager = UserIdentityManager.getInstance();
         if (identManager.isFullyIdentified()) {
             return true;
         } else {
@@ -139,8 +142,8 @@ public final class MessageNotifier {
                     if (OsmApi.isUsingOAuth()) {
                         return credManager.lookupOAuthAccessToken() != null;
                     } else {
-                        String username = Main.pref.get("osm-server.username", null);
-                        String password = Main.pref.get("osm-server.password", null);
+                        String username = Config.getPref().get("osm-server.username", null);
+                        String password = Config.getPref().get("osm-server.password", null);
                         return username != null && !username.isEmpty() && password != null && !password.isEmpty();
                     }
                 } else {
diff --git a/src/org/openstreetmap/josm/io/MultiFetchOverpassObjectReader.java b/src/org/openstreetmap/josm/io/MultiFetchOverpassObjectReader.java
index 385f0f7..7908308 100644
--- a/src/org/openstreetmap/josm/io/MultiFetchOverpassObjectReader.java
+++ b/src/org/openstreetmap/josm/io/MultiFetchOverpassObjectReader.java
@@ -5,7 +5,6 @@ import java.util.Set;
 import java.util.function.Function;
 
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
-import org.openstreetmap.josm.gui.preferences.server.OverpassServerPreference;
 import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -24,7 +23,7 @@ class MultiFetchOverpassObjectReader extends MultiFetchServerObjectReader {
 
     @Override
     protected String getBaseUrl() {
-        return OverpassServerPreference.getOverpassServer();
+        return OverpassDownloadReader.OVERPASS_SERVER.get();
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java b/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java
index 0414f2d..29c78c7 100644
--- a/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java
+++ b/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java
@@ -23,7 +23,6 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.DataSetMerger;
 import org.openstreetmap.josm.data.osm.Node;
@@ -34,9 +33,9 @@ import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.data.osm.SimplePrimitiveId;
 import org.openstreetmap.josm.data.osm.Way;
-import org.openstreetmap.josm.gui.preferences.server.OverpassServerPreference;
 import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -86,13 +85,13 @@ public class MultiFetchServerObjectReader extends OsmServerReader {
 
     /**
      * Creates a new instance of {@link MultiFetchServerObjectReader} or {@link MultiFetchOverpassObjectReader}
-     * depending on the {@link OverpassServerPreference#useForMultiFetch preference}.
+     * depending on the {@link OverpassDownloadReader#FOR_MULTI_FETCH preference}.
      *
      * @return a new instance
      * @since 9241
      */
     public static MultiFetchServerObjectReader create() {
-        return create(OverpassServerPreference.useForMultiFetch());
+        return create(OverpassDownloadReader.FOR_MULTI_FETCH.get());
     }
 
     /**
@@ -321,7 +320,7 @@ public class MultiFetchServerObjectReader extends OsmServerReader {
         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);
+        int threadsNumber = Config.getPref().getInt("osm.download.threads", OsmApi.MAX_DOWNLOAD_THREADS);
         threadsNumber = Utils.clamp(threadsNumber, 1, OsmApi.MAX_DOWNLOAD_THREADS);
         final ExecutorService exec = Executors.newFixedThreadPool(
                 threadsNumber, Utils.newThreadFactory(getClass() + "-%d", Thread.NORM_PRIORITY));
diff --git a/src/org/openstreetmap/josm/io/OsmApi.java b/src/org/openstreetmap/josm/io/OsmApi.java
index 2e70e54..e4f1b1f 100644
--- a/src/org/openstreetmap/josm/io/OsmApi.java
+++ b/src/org/openstreetmap/josm/io/OsmApi.java
@@ -29,14 +29,13 @@ import org.openstreetmap.josm.data.osm.Changeset;
 import org.openstreetmap.josm.data.osm.IPrimitive;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
-import org.openstreetmap.josm.gui.MainApplication;
-import org.openstreetmap.josm.gui.layer.ImageryLayer;
-import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.io.Capabilities.CapabilitiesParser;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.HttpClient;
+import org.openstreetmap.josm.tools.ListenerList;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.XmlParsingException;
@@ -51,7 +50,7 @@ import org.xml.sax.SAXParseException;
  *
  * It is conceivable to extract this into an interface later and create various
  * classes implementing the interface, to be able to talk to various kinds of servers.
- *
+ * @since 1523
  */
 public class OsmApi extends OsmConnection {
 
@@ -75,11 +74,43 @@ public class OsmApi extends OsmConnection {
     public static final String DEFAULT_API_URL = "https://api.openstreetmap.org/api";
 
     // The collection of instantiated OSM APIs
-    private static Map<String, OsmApi> instances = new HashMap<>();
+    private static final Map<String, OsmApi> instances = new HashMap<>();
+
+    private static final ListenerList<OsmApiInitializationListener> listeners = ListenerList.create();
 
     private URL url;
 
     /**
+     * OSM API initialization listener.
+     * @since 12804
+     */
+    public interface OsmApiInitializationListener {
+        /**
+         * Called when an OSM API instance has been successfully initialized.
+         * @param instance the initialized OSM API instance
+         */
+        void apiInitialized(OsmApi instance);
+    }
+
+    /**
+     * Adds a new OSM API initialization listener.
+     * @param listener OSM API initialization listener to add
+     * @since 12804
+     */
+    public static void addOsmApiInitializationListener(OsmApiInitializationListener listener) {
+        listeners.addListener(listener);
+    }
+
+    /**
+     * Removes an OSM API initialization listener.
+     * @param listener OSM API initialization listener to remove
+     * @since 12804
+     */
+    public static void removeOsmApiInitializationListener(OsmApiInitializationListener listener) {
+        listeners.removeListener(listener);
+    }
+
+    /**
      * Replies the {@link OsmApi} for a given server URL
      *
      * @param serverUrl  the server URL
@@ -101,7 +132,7 @@ public class OsmApi extends OsmConnection {
     }
 
     private static String getServerUrlFromPref() {
-        return Main.pref.get("osm-server.url", DEFAULT_API_URL);
+        return Config.getPref().get("osm-server.url", DEFAULT_API_URL);
     }
 
     /**
@@ -235,21 +266,7 @@ public class OsmApi extends OsmConnection {
                 initialized = true;
             }
 
-            /* This checks if there are any layers currently displayed that
-             * are now on the blacklist, and removes them. This is a rare
-             * situation - probably only occurs if the user changes the API URL
-             * in the preferences menu. Otherwise they would not have been able
-             * to load the layers in the first place because they would have
-             * been disabled! */
-            if (MainApplication.isDisplayingMapView()) {
-                for (Layer l : MainApplication.getLayerManager().getLayersOfType(ImageryLayer.class)) {
-                    if (((ImageryLayer) l).getInfo().isBlacklisted()) {
-                        Logging.info(tr("Removed layer {0} because it is not allowed by the configured API.", l.getName()));
-                        MainApplication.getLayerManager().removeLayer(l);
-                    }
-                }
-            }
-
+            listeners.fireEvent(l -> l.apiInitialized(this));
         } catch (OsmTransferCanceledException e) {
             throw e;
         } catch (OsmTransferException e) {
@@ -576,7 +593,7 @@ public class OsmApi extends OsmConnection {
      * @return the max number of retries
      */
     protected int getMaxRetries() {
-        int ret = Main.pref.getInteger("osm-server.max-num-retries", DEFAULT_MAX_NUM_RETRIES);
+        int ret = Config.getPref().getInt("osm-server.max-num-retries", DEFAULT_MAX_NUM_RETRIES);
         return Math.max(ret, 0);
     }
 
@@ -594,7 +611,7 @@ public class OsmApi extends OsmConnection {
      * @return the authentication method
      */
     public static String getAuthMethod() {
-        return Main.pref.get("osm-server.auth-method", "oauth");
+        return Config.getPref().get("osm-server.auth-method", "oauth");
     }
 
     protected final String sendRequest(String requestMethod, String urlSuffix, String requestBody, ProgressMonitor monitor)
diff --git a/src/org/openstreetmap/josm/io/OsmConnection.java b/src/org/openstreetmap/josm/io/OsmConnection.java
index f045f9f..205dce5 100644
--- a/src/org/openstreetmap/josm/io/OsmConnection.java
+++ b/src/org/openstreetmap/josm/io/OsmConnection.java
@@ -10,20 +10,16 @@ import java.net.URL;
 import java.nio.charset.StandardCharsets;
 import java.util.Base64;
 import java.util.Objects;
-import java.util.concurrent.FutureTask;
-
-import javax.swing.SwingUtilities;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.oauth.OAuthAccessTokenHolder;
 import org.openstreetmap.josm.data.oauth.OAuthParameters;
-import org.openstreetmap.josm.gui.oauth.OAuthAuthorizationWizard;
 import org.openstreetmap.josm.io.auth.CredentialsAgentException;
 import org.openstreetmap.josm.io.auth.CredentialsAgentResponse;
 import org.openstreetmap.josm.io.auth.CredentialsManager;
 import org.openstreetmap.josm.tools.HttpClient;
+import org.openstreetmap.josm.tools.JosmRuntimeException;
 import org.openstreetmap.josm.tools.Logging;
-import org.openstreetmap.josm.tools.Utils;
 
 import oauth.signpost.OAuthConsumer;
 import oauth.signpost.exception.OAuthException;
@@ -40,6 +36,33 @@ public class OsmConnection {
     protected OAuthParameters oauthParameters;
 
     /**
+     * Retrieves OAuth access token.
+     * @since 12803
+     */
+    public interface OAuthAccessTokenFetcher {
+        /**
+         * Obtains an OAuth access token for the connection. Afterwards, the token is accessible via {@link OAuthAccessTokenHolder}.
+         * @param serverUrl the URL to OSM server
+         * @throws InterruptedException if we're interrupted while waiting for the event dispatching thread to finish OAuth authorization task
+         * @throws InvocationTargetException if an exception is thrown while running OAuth authorization task
+         */
+        void obtainAccessToken(URL serverUrl) throws InvocationTargetException, InterruptedException;
+    }
+
+    static volatile OAuthAccessTokenFetcher fetcher = u -> {
+        throw new JosmRuntimeException("OsmConnection.setOAuthAccessTokenFetcher() has not been called");
+    };
+
+    /**
+     * Sets the OAuth access token fetcher.
+     * @param tokenFetcher new OAuth access token fetcher. Cannot be null
+     * @since 12803
+     */
+    public static void setOAuthAccessTokenFetcher(OAuthAccessTokenFetcher tokenFetcher) {
+        fetcher = Objects.requireNonNull(tokenFetcher, "tokenFetcher");
+    }
+
+    /**
      * Cancels the connection.
      */
     public void cancel() {
@@ -109,9 +132,10 @@ public class OsmConnection {
     }
 
     /**
-     * Obtains an OAuth access token for the connection. Afterwards, the token is accessible via {@link OAuthAccessTokenHolder}.
+     * Obtains an OAuth access token for the connection.
+     * Afterwards, the token is accessible via {@link OAuthAccessTokenHolder} / {@link CredentialsManager}.
      * @param connection connection for which the access token should be obtained
-     * @throws MissingOAuthAccessTokenException if the process cannot be completec successfully
+     * @throws MissingOAuthAccessTokenException if the process cannot be completed successfully
      */
     protected void obtainAccessToken(final HttpClient connection) throws MissingOAuthAccessTokenException {
         try {
@@ -119,22 +143,9 @@ public class OsmConnection {
             if (!Objects.equals(apiUrl.getHost(), connection.getURL().getHost())) {
                 throw new MissingOAuthAccessTokenException();
             }
-            final Runnable authTask = new FutureTask<>(() -> {
-                // Concerning Utils.newDirectExecutor: Main worker cannot be used since this connection is already
-                // executed via main worker. The OAuth connections would block otherwise.
-                final OAuthAuthorizationWizard wizard = new OAuthAuthorizationWizard(
-                        Main.parent, apiUrl.toExternalForm(), Utils.newDirectExecutor());
-                wizard.showDialog();
-                OAuthAccessTokenHolder.getInstance().setSaveToPreferences(true);
-                OAuthAccessTokenHolder.getInstance().save(Main.pref, CredentialsManager.getInstance());
-                return wizard;
-            });
-            // exception handling differs from implementation at GuiHelper.runInEDTAndWait()
-            if (SwingUtilities.isEventDispatchThread()) {
-                authTask.run();
-            } else {
-                SwingUtilities.invokeAndWait(authTask);
-            }
+            fetcher.obtainAccessToken(apiUrl);
+            OAuthAccessTokenHolder.getInstance().setSaveToPreferences(true);
+            OAuthAccessTokenHolder.getInstance().save(Main.pref, CredentialsManager.getInstance());
         } catch (MalformedURLException | InterruptedException | InvocationTargetException e) {
             throw new MissingOAuthAccessTokenException(e);
         }
diff --git a/src/org/openstreetmap/josm/io/OsmServerBackreferenceReader.java b/src/org/openstreetmap/josm/io/OsmServerBackreferenceReader.java
index 434bf26..315e3e2 100644
--- a/src/org/openstreetmap/josm/io/OsmServerBackreferenceReader.java
+++ b/src/org/openstreetmap/josm/io/OsmServerBackreferenceReader.java
@@ -51,7 +51,7 @@ public class OsmServerBackreferenceReader extends OsmServerReader {
      * @throws IllegalArgumentException if primitive.id <= 0
      */
     public OsmServerBackreferenceReader(OsmPrimitive primitive) {
-        CheckParameterUtil.ensureValidPrimitiveId(primitive, "primitive");
+        CheckParameterUtil.ensure(primitive, "primitive", "id > 0", prim -> prim.getUniqueId() > 0);
         this.id = primitive.getId();
         this.primitiveType = OsmPrimitiveType.from(primitive);
         this.readFull = false;
diff --git a/src/org/openstreetmap/josm/io/OsmServerObjectReader.java b/src/org/openstreetmap/josm/io/OsmServerObjectReader.java
index bad26f6..1181338 100644
--- a/src/org/openstreetmap/josm/io/OsmServerObjectReader.java
+++ b/src/org/openstreetmap/josm/io/OsmServerObjectReader.java
@@ -95,7 +95,7 @@ public class OsmServerObjectReader extends OsmServerReader {
     }
 
     protected OsmServerObjectReader(PrimitiveId id, boolean full, int version) {
-        CheckParameterUtil.ensureValidPrimitiveId(id, "id");
+        CheckParameterUtil.ensure(id, "id", "id > 0", pid -> pid.getUniqueId() > 0);
         this.id = id;
         this.full = full;
         this.version = version;
diff --git a/src/org/openstreetmap/josm/io/OsmServerWriter.java b/src/org/openstreetmap/josm/io/OsmServerWriter.java
index 1451974..b8d1a7a 100644
--- a/src/org/openstreetmap/josm/io/OsmServerWriter.java
+++ b/src/org/openstreetmap/josm/io/OsmServerWriter.java
@@ -12,10 +12,10 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 
+import org.openstreetmap.josm.data.UserIdentityManager;
 import org.openstreetmap.josm.data.osm.Changeset;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
-import org.openstreetmap.josm.gui.JosmUserIdentityManager;
 import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
@@ -201,7 +201,7 @@ public class OsmServerWriter {
             if (changeset.getId() == 0) {
                 api.openChangeset(changeset, monitor.createSubTaskMonitor(0, false));
                 // update the user information
-                changeset.setUser(JosmUserIdentityManager.getInstance().asUser());
+                changeset.setUser(UserIdentityManager.getInstance().asUser());
             } else {
                 api.updateChangeset(changeset, monitor.createSubTaskMonitor(0, false));
             }
diff --git a/src/org/openstreetmap/josm/io/OsmWriter.java b/src/org/openstreetmap/josm/io/OsmWriter.java
index 8903e24..c633bee 100644
--- a/src/org/openstreetmap/josm/io/OsmWriter.java
+++ b/src/org/openstreetmap/josm/io/OsmWriter.java
@@ -12,8 +12,8 @@ import java.util.List;
 import java.util.Map.Entry;
 
 import org.openstreetmap.josm.data.DataSource;
-import org.openstreetmap.josm.data.coor.CoordinateFormat;
 import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.coor.conversion.DecimalDegreesCoordinateFormat;
 import org.openstreetmap.josm.data.osm.AbstractPrimitive;
 import org.openstreetmap.josm.data.osm.Changeset;
 import org.openstreetmap.josm.data.osm.DataSet;
@@ -129,10 +129,25 @@ public class OsmWriter extends XmlWriter implements PrimitiveVisitor {
         return result;
     }
 
+    /**
+     * Writes the full OSM file for the given layer (header, data sources, osm data, footer).
+     * @param layer OSM data layer
+     * @deprecated To be removed end of 2017. Use {@link #write(DataSet)} instead
+     */
+    @Deprecated
     public void writeLayer(OsmDataLayer layer) {
-        header(layer.data.getUploadPolicy());
-        writeDataSources(layer.data);
-        writeContent(layer.data);
+        write(layer.data);
+    }
+
+    /**
+     * Writes the full OSM file for the given data set (header, data sources, osm data, footer).
+     * @param data OSM data set
+     * @since 12800
+     */
+    public void write(DataSet data) {
+        header(data.getUploadPolicy());
+        writeDataSources(data);
+        writeContent(data);
         footer();
     }
 
@@ -193,13 +208,13 @@ public class OsmWriter extends XmlWriter implements PrimitiveVisitor {
     public void writeDataSources(DataSet ds) {
         for (DataSource s : ds.getDataSources()) {
             out.println("  <bounds minlat='"
-                    + s.bounds.getMin().latToString(CoordinateFormat.DECIMAL_DEGREES)
+                    + DecimalDegreesCoordinateFormat.INSTANCE.latToString(s.bounds.getMin())
                     +"' minlon='"
-                    + s.bounds.getMin().lonToString(CoordinateFormat.DECIMAL_DEGREES)
+                    + DecimalDegreesCoordinateFormat.INSTANCE.lonToString(s.bounds.getMin())
                     +"' maxlat='"
-                    + s.bounds.getMax().latToString(CoordinateFormat.DECIMAL_DEGREES)
+                    + DecimalDegreesCoordinateFormat.INSTANCE.latToString(s.bounds.getMax())
                     +"' maxlon='"
-                    + s.bounds.getMax().lonToString(CoordinateFormat.DECIMAL_DEGREES)
+                    + DecimalDegreesCoordinateFormat.INSTANCE.lonToString(s.bounds.getMax())
                     +"' origin='"+XmlWriter.encode(s.origin)+"' />");
         }
     }
@@ -272,12 +287,12 @@ public class OsmWriter extends XmlWriter implements PrimitiveVisitor {
         }
         out.print(" open='"+ (cs.isOpen() ? "true" : "false") +'\'');
         if (cs.getMin() != null) {
-            out.print(" min_lon='"+ cs.getMin().lonToString(CoordinateFormat.DECIMAL_DEGREES) +'\'');
-            out.print(" min_lat='"+ cs.getMin().latToString(CoordinateFormat.DECIMAL_DEGREES) +'\'');
+            out.print(" min_lon='"+ DecimalDegreesCoordinateFormat.INSTANCE.lonToString(cs.getMin()) +'\'');
+            out.print(" min_lat='"+ DecimalDegreesCoordinateFormat.INSTANCE.latToString(cs.getMin()) +'\'');
         }
         if (cs.getMax() != null) {
-            out.print(" max_lon='"+ cs.getMin().lonToString(CoordinateFormat.DECIMAL_DEGREES) +'\'');
-            out.print(" max_lat='"+ cs.getMin().latToString(CoordinateFormat.DECIMAL_DEGREES) +'\'');
+            out.print(" max_lon='"+ DecimalDegreesCoordinateFormat.INSTANCE.lonToString(cs.getMin()) +'\'');
+            out.print(" max_lat='"+ DecimalDegreesCoordinateFormat.INSTANCE.latToString(cs.getMin()) +'\'');
         }
         out.println(">");
         addTags(cs, "changeset", false); // also writes closing </changeset>
diff --git a/src/org/openstreetmap/josm/io/OverpassDownloadReader.java b/src/org/openstreetmap/josm/io/OverpassDownloadReader.java
index b338389..2d3010f 100644
--- a/src/org/openstreetmap/josm/io/OverpassDownloadReader.java
+++ b/src/org/openstreetmap/josm/io/OverpassDownloadReader.java
@@ -6,7 +6,13 @@ import static org.openstreetmap.josm.tools.I18n.tr;
 import java.io.IOException;
 import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
+import java.time.Duration;
+import java.time.LocalDateTime;
+import java.time.Period;
+import java.time.ZoneOffset;
+import java.util.Arrays;
 import java.util.EnumMap;
+import java.util.Locale;
 import java.util.Map;
 import java.util.NoSuchElementException;
 import java.util.Objects;
@@ -20,10 +26,16 @@ import javax.xml.stream.XMLStreamException;
 
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.DataSource;
+import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.osm.BBox;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
 import org.openstreetmap.josm.data.osm.PrimitiveId;
+import org.openstreetmap.josm.data.preferences.BooleanProperty;
+import org.openstreetmap.josm.data.preferences.ListProperty;
+import org.openstreetmap.josm.data.preferences.StringProperty;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
+import org.openstreetmap.josm.io.NameFinder.SearchResult;
 import org.openstreetmap.josm.tools.HttpClient;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.UncheckedParseException;
@@ -36,6 +48,24 @@ import org.openstreetmap.josm.tools.Utils;
  */
 public class OverpassDownloadReader extends BoundingBoxDownloader {
 
+    /**
+     * Property for current Overpass server.
+     * @since 12816
+     */
+    public static final StringProperty OVERPASS_SERVER = new StringProperty("download.overpass.server",
+            "https://overpass-api.de/api/");
+    /**
+     * Property for list of known Overpass servers.
+     * @since 12816
+     */
+    public static final ListProperty OVERPASS_SERVER_HISTORY = new ListProperty("download.overpass.servers",
+            Arrays.asList("https://overpass-api.de/api/", "http://overpass.osm.rambler.ru/cgi/"));
+    /**
+     * Property to determine if Overpass API should be used for multi-fetch download.
+     * @since 12816
+     */
+    public static final BooleanProperty FOR_MULTI_FETCH = new BooleanProperty("download.overpass.for-multi-fetch", false);
+
     private static final String DATA_PREFIX = "?data=";
 
     static final class OverpassOsmReader extends OsmReader {
@@ -145,7 +175,9 @@ public class OverpassDownloadReader extends BoundingBoxDownloader {
         if (overpassQuery.isEmpty())
             return super.getRequestForBbox(lon1, lat1, lon2, lat2);
         else {
-            final String query = this.overpassQuery.replace("{{bbox}}", lat1 + "," + lon1 + "," + lat2 + "," + lon2);
+            final String query = this.overpassQuery
+                    .replace("{{bbox}}", bbox(lon1, lat1, lon2, lat2))
+                    .replace("{{center}}", center(lon1, lat1, lon2, lat2));
             final String expandedOverpassQuery = expandExtendedQueries(query);
             return "interpreter" + DATA_PREFIX + Utils.encodeUrl(expandedOverpassQuery);
         }
@@ -159,17 +191,29 @@ public class OverpassDownloadReader extends BoundingBoxDownloader {
      */
     static String expandExtendedQueries(String query) {
         final StringBuffer sb = new StringBuffer();
-        final Matcher matcher = Pattern.compile("\\{\\{(geocodeArea):([^}]+)\\}\\}").matcher(query);
+        final Matcher matcher = Pattern.compile("\\{\\{(date|geocodeArea|geocodeBbox|geocodeCoords|geocodeId):([^}]+)\\}\\}").matcher(query);
         while (matcher.find()) {
             try {
                 switch (matcher.group(1)) {
+                    case "date":
+                        matcher.appendReplacement(sb, date(matcher.group(2), LocalDateTime.now()));
+                        break;
                     case "geocodeArea":
                         matcher.appendReplacement(sb, geocodeArea(matcher.group(2)));
                         break;
+                    case "geocodeBbox":
+                        matcher.appendReplacement(sb, geocodeBbox(matcher.group(2)));
+                        break;
+                    case "geocodeCoords":
+                        matcher.appendReplacement(sb, geocodeCoords(matcher.group(2)));
+                        break;
+                    case "geocodeId":
+                        matcher.appendReplacement(sb, geocodeId(matcher.group(2)));
+                        break;
                     default:
                         Logging.warn("Unsupported syntax: " + matcher.group(1));
                 }
-            } catch (UncheckedParseException ex) {
+            } catch (UncheckedParseException | IOException | NoSuchElementException | IndexOutOfBoundsException ex) {
                 final String msg = tr("Failed to evaluate {0}", matcher.group());
                 Logging.log(Logging.LEVEL_WARN, msg, ex);
                 matcher.appendReplacement(sb, "// " + msg + "\n");
@@ -179,19 +223,90 @@ public class OverpassDownloadReader extends BoundingBoxDownloader {
         return sb.toString();
     }
 
-    private static String geocodeArea(String area) {
+    static String bbox(double lon1, double lat1, double lon2, double lat2) {
+        return lat1 + "," + lon1 + "," + lat2 + "," + lon2;
+    }
+
+    static String center(double lon1, double lat1, double lon2, double lat2) {
+        LatLon c = new BBox(lon1, lat1, lon2, lat2).getCenter();
+        return c.lat()+ "," + c.lon();
+    }
+
+    static String date(String humanDuration, LocalDateTime from) {
+        // Convert to ISO 8601. Replace months by X temporarily to avoid conflict with minutes
+        String duration = humanDuration.toLowerCase(Locale.ENGLISH).replace(" ", "")
+                .replaceAll("years?", "Y").replaceAll("months?", "X").replaceAll("weeks?", "W")
+                .replaceAll("days?", "D").replaceAll("hours?", "H").replaceAll("minutes?", "M").replaceAll("seconds?", "S");
+        Matcher matcher = Pattern.compile(
+                "((?:[0-9]+Y)?(?:[0-9]+X)?(?:[0-9]+W)?)"+
+                "((?:[0-9]+D)?)" +
+                "((?:[0-9]+H)?(?:[0-9]+M)?(?:[0-9]+(?:[.,][0-9]{0,9})?S)?)?").matcher(duration);
+        boolean javaPer = false;
+        boolean javaDur = false;
+        if (matcher.matches()) {
+            javaPer = matcher.group(1) != null && !matcher.group(1).isEmpty();
+            javaDur = matcher.group(3) != null && !matcher.group(3).isEmpty();
+            duration = 'P' + matcher.group(1).replace('X', 'M') + matcher.group(2);
+            if (javaDur) {
+                duration += 'T' + matcher.group(3);
+            }
+        }
+
+        // Duration is now a full ISO 8601 duration string. Unfortunately Java does not allow to parse it entirely.
+        // We must split the "period" (years, months, weeks, days) from the "duration" (days, hours, minutes, seconds).
+        Period p = null;
+        Duration d = null;
+        int idx = duration.indexOf('T');
+        if (javaPer) {
+            p = Period.parse(javaDur ? duration.substring(0, idx) : duration);
+        }
+        if (javaDur) {
+            d = Duration.parse(javaPer ? 'P' + duration.substring(idx, duration.length()) : duration);
+        } else if (!javaPer) {
+            d = Duration.parse(duration);
+        }
+
+        // Now that period and duration are known, compute the correct date/time
+        LocalDateTime dt = from;
+        if (p != null) {
+            dt = dt.minus(p);
+        }
+        if (d != null) {
+            dt = dt.minus(d);
+        }
+
+        // Returns the date/time formatted in ISO 8601
+        return dt.toInstant(ZoneOffset.UTC).toString();
+    }
+
+    private static SearchResult searchName(String area) throws IOException {
+        return NameFinder.queryNominatim(area).stream().filter(
+                x -> !OsmPrimitiveType.NODE.equals(x.getOsmId().getType())).iterator().next();
+    }
+
+    static String geocodeArea(String area) throws IOException {
         // Offsets defined in https://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_QL#By_element_id
         final EnumMap<OsmPrimitiveType, Long> idOffset = new EnumMap<>(OsmPrimitiveType.class);
         idOffset.put(OsmPrimitiveType.NODE, 0L);
         idOffset.put(OsmPrimitiveType.WAY, 2_400_000_000L);
         idOffset.put(OsmPrimitiveType.RELATION, 3_600_000_000L);
-        try {
-            final PrimitiveId osmId = NameFinder.queryNominatim(area).stream().filter(
-                    x -> !OsmPrimitiveType.NODE.equals(x.getOsmId().getType())).iterator().next().getOsmId();
-            return String.format("area(%d)", osmId.getUniqueId() + idOffset.get(osmId.getType()));
-        } catch (IOException | NoSuchElementException | IndexOutOfBoundsException ex) {
-            throw new UncheckedParseException(ex);
-        }
+        final PrimitiveId osmId = searchName(area).getOsmId();
+        return String.format("area(%d)", osmId.getUniqueId() + idOffset.get(osmId.getType()));
+    }
+
+    static String geocodeBbox(String area) throws IOException {
+        Bounds bounds = searchName(area).getBounds();
+        return bounds.getMinLat() + "," + bounds.getMinLon() + "," + bounds.getMaxLat() + "," + bounds.getMaxLon();
+    }
+
+    static String geocodeCoords(String area) throws IOException {
+        SearchResult result = searchName(area);
+        return result.getLat() + "," + result.getLon();
+    }
+
+    static String geocodeId(String area) throws IOException {
+        PrimitiveId osmId = searchName(area).getOsmId();
+        return String.format("%s(%d)", osmId.getType().getAPIName(), osmId.getUniqueId());
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/io/ProxyPolicy.java b/src/org/openstreetmap/josm/io/ProxyPolicy.java
new file mode 100644
index 0000000..174c805
--- /dev/null
+++ b/src/org/openstreetmap/josm/io/ProxyPolicy.java
@@ -0,0 +1,48 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.io;
+
+import java.util.Locale;
+
+/**
+ * The proxy policy is how JOSM will use proxy information.
+ * @since 12805 (extracted from {@code ProxyPreferencesPanel})
+ */
+public enum ProxyPolicy {
+    /** No proxy: JOSM will access Internet resources directly */
+    NO_PROXY("no-proxy"),
+    /** Use system settings: JOSM will use system proxy settings */
+    USE_SYSTEM_SETTINGS("use-system-settings"),
+    /** Use HTTP proxy: JOSM will use the given HTTP proxy, configured manually */
+    USE_HTTP_PROXY("use-http-proxy"),
+    /** Use HTTP proxy: JOSM will use the given SOCKS proxy */
+    USE_SOCKS_PROXY("use-socks-proxy");
+
+    private final String policyName;
+
+    ProxyPolicy(String policyName) {
+        this.policyName = policyName;
+    }
+
+    /**
+     * Replies the policy name, to be stored in proxy preferences.
+     * @return the policy unique name
+     */
+    public String getName() {
+        return policyName;
+    }
+
+    /**
+     * Retrieves a proxy policy from its name found in preferences.
+     * @param policyName The policy name
+     * @return The proxy policy matching the given name, or {@code null}
+     */
+    public static ProxyPolicy fromName(String policyName) {
+        if (policyName == null) return null;
+        policyName = policyName.trim().toLowerCase(Locale.ENGLISH);
+        for (ProxyPolicy pp: values()) {
+            if (pp.getName().equals(policyName))
+                return pp;
+        }
+        return null;
+    }
+}
diff --git a/src/org/openstreetmap/josm/io/UploadStrategy.java b/src/org/openstreetmap/josm/io/UploadStrategy.java
index 138dd5e..c516d06 100644
--- a/src/org/openstreetmap/josm/io/UploadStrategy.java
+++ b/src/org/openstreetmap/josm/io/UploadStrategy.java
@@ -5,7 +5,8 @@ import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.util.Locale;
 
-import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.PreferencesUtils;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 
 /**
@@ -75,15 +76,15 @@ public enum UploadStrategy {
      * @return the upload strategy currently configured in the preferences.
      */
     public static UploadStrategy getFromPreferences() {
-        String v = Main.pref.get("osm-server.upload-strategy", null);
+        String v = Config.getPref().get("osm-server.upload-strategy", null);
         if (v == null) {
             // legacy support. Until 12/2009 we had osm-server.atomic-upload only.
             // If we still find "osm-server.atomic-upload" we use it and remove it.
             // When the preferences are saved the next time, "osm-server.upload-strategy"
             // will be inserted.
-            v = Main.pref.get("osm-server.atomic-upload", null);
+            v = Config.getPref().get("osm-server.atomic-upload", null);
             if (v != null) {
-                Main.pref.removeFromCollection("osm-server.atomic-upload", v);
+                PreferencesUtils.removeFromList(Config.getPref(), "osm-server.atomic-upload", v);
             } else {
                 v = "";
             }
@@ -109,6 +110,6 @@ public enum UploadStrategy {
      * @param strategy the strategy to save
      */
     public static void saveToPreferences(UploadStrategy strategy) {
-        Main.pref.put("osm-server.upload-strategy", strategy.getPreferenceValue());
+        Config.getPref().put("osm-server.upload-strategy", strategy.getPreferenceValue());
     }
 }
diff --git a/src/org/openstreetmap/josm/io/audio/AudioPlayer.java b/src/org/openstreetmap/josm/io/audio/AudioPlayer.java
index 697b95f..3ee817d 100644
--- a/src/org/openstreetmap/josm/io/audio/AudioPlayer.java
+++ b/src/org/openstreetmap/josm/io/audio/AudioPlayer.java
@@ -4,7 +4,7 @@ package org.openstreetmap.josm.io.audio;
 import java.io.IOException;
 import java.net.URL;
 
-import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.JosmRuntimeException;
 import org.openstreetmap.josm.tools.Logging;
 
@@ -233,13 +233,18 @@ public final class AudioPlayer extends Thread implements AudioListener {
         state = State.INITIALIZING;
         command = new Execute();
         playingUrl = null;
-        double leadIn = Main.pref.getDouble("audio.leadin", 1.0 /* default, seconds */);
-        double calibration = Main.pref.getDouble("audio.calibration", 1.0 /* default, ratio */);
+        double leadIn = Config.getPref().getDouble("audio.leadin", 1.0 /* default, seconds */);
+        double calibration = Config.getPref().getDouble("audio.calibration", 1.0 /* default, ratio */);
         try {
-            soundPlayer = new JavaFxMediaPlayer();
-        } catch (NoClassDefFoundError | InterruptedException e) {
+            soundPlayer = (SoundPlayer) Class.forName("org.openstreetmap.josm.io.audio.JavaFxMediaPlayer").getConstructor().newInstance();
+        } catch (ReflectiveOperationException | IllegalArgumentException | SecurityException e) {
+            Logging.debug(e);
+            Logging.warn("JOSM compiled without Java FX support. Falling back to Java Sound API");
+        } catch (NoClassDefFoundError | JosmRuntimeException e) {
             Logging.debug(e);
             Logging.warn("Java FX is unavailable. Falling back to Java Sound API");
+        }
+        if (soundPlayer == null) {
             soundPlayer = new JavaSoundPlayer(leadIn, calibration);
         }
         soundPlayer.addAudioListener(this);
diff --git a/src/org/openstreetmap/josm/io/audio/AudioUtil.java b/src/org/openstreetmap/josm/io/audio/AudioUtil.java
index ff03b03..1699618 100644
--- a/src/org/openstreetmap/josm/io/audio/AudioUtil.java
+++ b/src/org/openstreetmap/josm/io/audio/AudioUtil.java
@@ -15,6 +15,7 @@ import javax.sound.sampled.UnsupportedAudioFileException;
 import javax.swing.JOptionPane;
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 
 /**
@@ -43,7 +44,7 @@ public final class AudioUtil {
             double bytesPerSecond = audioFormat.getFrameRate() /* frames per second */
                 * audioFormat.getFrameSize() /* bytes per frame */;
             double naturalLength = filesize / bytesPerSecond;
-            double calibration = Main.pref.getDouble("audio.calibration", 1.0 /* default, ratio */);
+            double calibration = Config.getPref().getDouble("audio.calibration", 1.0 /* default, ratio */);
             return naturalLength / calibration;
         } catch (UnsupportedAudioFileException | IOException e) {
             Logging.debug(e);
diff --git a/src/org/openstreetmap/josm/io/audio/JavaFxMediaPlayer.java b/src/org/openstreetmap/josm/io/audio/JavaFxMediaPlayer.java
index 013fea2..cf557f7 100644
--- a/src/org/openstreetmap/josm/io/audio/JavaFxMediaPlayer.java
+++ b/src/org/openstreetmap/josm/io/audio/JavaFxMediaPlayer.java
@@ -10,6 +10,7 @@ import java.util.concurrent.CountDownLatch;
 
 import org.openstreetmap.josm.io.audio.AudioPlayer.Execute;
 import org.openstreetmap.josm.io.audio.AudioPlayer.State;
+import org.openstreetmap.josm.tools.JosmRuntimeException;
 import org.openstreetmap.josm.tools.ListenerList;
 
 import com.sun.javafx.application.PlatformImpl;
@@ -36,8 +37,12 @@ class JavaFxMediaPlayer implements SoundPlayer {
 
     private MediaPlayer mediaPlayer;
 
-    JavaFxMediaPlayer() throws InterruptedException {
-        initFxPlatform();
+    JavaFxMediaPlayer() throws JosmRuntimeException {
+        try {
+            initFxPlatform();
+        } catch (InterruptedException e) {
+            throw new JosmRuntimeException(e);
+        }
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/io/auth/AbstractCredentialsAgent.java b/src/org/openstreetmap/josm/io/auth/AbstractCredentialsAgent.java
index a8e5a32..3e40993 100644
--- a/src/org/openstreetmap/josm/io/auth/AbstractCredentialsAgent.java
+++ b/src/org/openstreetmap/josm/io/auth/AbstractCredentialsAgent.java
@@ -1,23 +1,52 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.io.auth;
 
-import java.awt.GraphicsEnvironment;
 import java.net.Authenticator.RequestorType;
 import java.net.PasswordAuthentication;
 import java.util.EnumMap;
 import java.util.Map;
+import java.util.Objects;
 
-import org.openstreetmap.josm.gui.io.CredentialDialog;
-import org.openstreetmap.josm.gui.util.GuiHelper;
+import org.openstreetmap.josm.tools.Logging;
 
 /**
  * Partial implementation of the {@link CredentialsAgent} interface.
  * <p>
- * Provides a memory cache for the credentials and means to query the information 
- * from the user.
+ * Provides a memory cache for the credentials and means to query the information from the user.
+ * @since 4246
  */
 public abstract class AbstractCredentialsAgent implements CredentialsAgent {
 
+    /**
+     * Synchronous credentials provider. Called if no credentials are cached. Can be used for user login prompt.
+     * @since 12821
+     */
+    @FunctionalInterface
+    public interface CredentialsProvider {
+        /**
+         * Fills the given response with appropriate user credentials.
+         * @param requestorType type of the entity requesting authentication
+         * @param agent the credentials agent requesting credentials
+         * @param response authentication response to fill
+         * @param username the known username, if any. Likely to be empty
+         * @param password the known password, if any. Likely to be empty
+         * @param host the host against authentication will be performed
+         */
+        void provideCredentials(RequestorType requestorType, AbstractCredentialsAgent agent, CredentialsAgentResponse response,
+                String username, String password, String host);
+    }
+
+    private static volatile CredentialsProvider credentialsProvider =
+            (a, b, c, d, e, f) -> Logging.error("Credentials provider has not been set");
+
+    /**
+     * Sets the global credentials provider.
+     * @param provider credentials provider. Called if no credentials are cached. Can be used for user login prompt
+     */
+    public static void setCredentialsProvider(CredentialsProvider provider) {
+        credentialsProvider = Objects.requireNonNull(provider, "provider");
+    }
+
     protected Map<RequestorType, PasswordAuthentication> memoryCredentialsCache = new EnumMap<>(RequestorType.class);
 
     @Override
@@ -50,24 +79,7 @@ public abstract class AbstractCredentialsAgent implements CredentialsAgent {
          * (noSuccessWithLastResponse == true).
          */
         } else if (noSuccessWithLastResponse || username.isEmpty() || password.isEmpty()) {
-            if (!GraphicsEnvironment.isHeadless()) {
-                GuiHelper.runInEDTAndWait(() -> {
-                    CredentialDialog dialog;
-                    if (requestorType.equals(RequestorType.PROXY))
-                        dialog = CredentialDialog.getHttpProxyCredentialDialog(
-                                username, password, host, getSaveUsernameAndPasswordCheckboxText());
-                    else
-                        dialog = CredentialDialog.getOsmApiCredentialDialog(
-                                username, password, host, getSaveUsernameAndPasswordCheckboxText());
-                    dialog.setVisible(true);
-                    response.setCanceled(dialog.isCanceled());
-                    if (dialog.isCanceled())
-                        return;
-                    response.setUsername(dialog.getUsername());
-                    response.setPassword(dialog.getPassword());
-                    response.setSaveCredentials(dialog.isSaveCredentials());
-                });
-            }
+            credentialsProvider.provideCredentials(requestorType, this, response, username, password, host);
             if (response.isCanceled() || response.getUsername() == null || response.getPassword() == null) {
                 return response;
             }
diff --git a/src/org/openstreetmap/josm/io/auth/CredentialsManager.java b/src/org/openstreetmap/josm/io/auth/CredentialsManager.java
index 0c93610..19edc63 100644
--- a/src/org/openstreetmap/josm/io/auth/CredentialsManager.java
+++ b/src/org/openstreetmap/josm/io/auth/CredentialsManager.java
@@ -6,8 +6,8 @@ import java.net.Authenticator.RequestorType;
 import java.net.PasswordAuthentication;
 import java.util.Objects;
 
+import org.openstreetmap.josm.data.UserIdentityManager;
 import org.openstreetmap.josm.data.oauth.OAuthToken;
-import org.openstreetmap.josm.gui.JosmUserIdentityManager;
 import org.openstreetmap.josm.io.OsmApi;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.Logging;
@@ -121,7 +121,7 @@ public class CredentialsManager implements CredentialsAgent {
         if (requestorType == RequestorType.SERVER && Objects.equals(OsmApi.getOsmApi().getHost(), host)) {
             String username = credentials.getUserName();
             if (username != null && !username.trim().isEmpty()) {
-                JosmUserIdentityManager.getInstance().setPartiallyIdentified(username);
+                UserIdentityManager.getInstance().setPartiallyIdentified(username);
             }
         }
         delegate.store(requestorType, host, credentials);
diff --git a/src/org/openstreetmap/josm/io/auth/JosmPreferencesCredentialAgent.java b/src/org/openstreetmap/josm/io/auth/JosmPreferencesCredentialAgent.java
index f53aa16..fc7ac05 100644
--- a/src/org/openstreetmap/josm/io/auth/JosmPreferencesCredentialAgent.java
+++ b/src/org/openstreetmap/josm/io/auth/JosmPreferencesCredentialAgent.java
@@ -10,16 +10,16 @@ import java.util.Objects;
 
 import javax.swing.text.html.HTMLEditorKit;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.oauth.OAuthToken;
-import org.openstreetmap.josm.gui.preferences.server.ProxyPreferencesPanel;
 import org.openstreetmap.josm.gui.widgets.HtmlPanel;
+import org.openstreetmap.josm.io.DefaultProxySelector;
 import org.openstreetmap.josm.io.OsmApi;
+import org.openstreetmap.josm.spi.preferences.Config;
 
 /**
  * This is the default credentials agent in JOSM. It keeps username and password for both
  * the OSM API and an optional HTTP proxy in the JOSM preferences file.
- *
+ * @since 2641
  */
 public class JosmPreferencesCredentialAgent extends AbstractCredentialsAgent {
 
@@ -35,11 +35,11 @@ public class JosmPreferencesCredentialAgent extends AbstractCredentialsAgent {
         switch(requestorType) {
         case SERVER:
             if (Objects.equals(OsmApi.getOsmApi().getHost(), host)) {
-                user = Main.pref.get("osm-server.username", null);
-                password = Main.pref.get("osm-server.password", null);
+                user = Config.getPref().get("osm-server.username", null);
+                password = Config.getPref().get("osm-server.password", null);
             } else if (host != null) {
-                user = Main.pref.get("server.username."+host, null);
-                password = Main.pref.get("server.password."+host, null);
+                user = Config.getPref().get("server.username."+host, null);
+                password = Config.getPref().get("server.password."+host, null);
             } else {
                 user = null;
                 password = null;
@@ -48,8 +48,8 @@ public class JosmPreferencesCredentialAgent extends AbstractCredentialsAgent {
                 return null;
             return new PasswordAuthentication(user, password == null ? new char[0] : password.toCharArray());
         case PROXY:
-            user = Main.pref.get(ProxyPreferencesPanel.PROXY_USER, null);
-            password = Main.pref.get(ProxyPreferencesPanel.PROXY_PASS, null);
+            user = Config.getPref().get(DefaultProxySelector.PROXY_USER, null);
+            password = Config.getPref().get(DefaultProxySelector.PROXY_PASS, null);
             if (user == null)
                 return null;
             return new PasswordAuthentication(user, password == null ? new char[0] : password.toCharArray());
@@ -67,27 +67,27 @@ public class JosmPreferencesCredentialAgent extends AbstractCredentialsAgent {
         switch(requestorType) {
         case SERVER:
             if (Objects.equals(OsmApi.getOsmApi().getHost(), host)) {
-                Main.pref.put("osm-server.username", credentials.getUserName());
+                Config.getPref().put("osm-server.username", credentials.getUserName());
                 if (credentials.getPassword() == null) {
-                    Main.pref.put("osm-server.password", null);
+                    Config.getPref().put("osm-server.password", null);
                 } else {
-                    Main.pref.put("osm-server.password", String.valueOf(credentials.getPassword()));
+                    Config.getPref().put("osm-server.password", String.valueOf(credentials.getPassword()));
                 }
             } else if (host != null) {
-                Main.pref.put("server.username."+host, credentials.getUserName());
+                Config.getPref().put("server.username."+host, credentials.getUserName());
                 if (credentials.getPassword() == null) {
-                    Main.pref.put("server.password."+host, null);
+                    Config.getPref().put("server.password."+host, null);
                 } else {
-                    Main.pref.put("server.password."+host, String.valueOf(credentials.getPassword()));
+                    Config.getPref().put("server.password."+host, String.valueOf(credentials.getPassword()));
                 }
             }
             break;
         case PROXY:
-            Main.pref.put(ProxyPreferencesPanel.PROXY_USER, credentials.getUserName());
+            Config.getPref().put(DefaultProxySelector.PROXY_USER, credentials.getUserName());
             if (credentials.getPassword() == null) {
-                Main.pref.put(ProxyPreferencesPanel.PROXY_PASS, null);
+                Config.getPref().put(DefaultProxySelector.PROXY_PASS, null);
             } else {
-                Main.pref.put(ProxyPreferencesPanel.PROXY_PASS, String.valueOf(credentials.getPassword()));
+                Config.getPref().put(DefaultProxySelector.PROXY_PASS, String.valueOf(credentials.getPassword()));
             }
             break;
         }
@@ -102,8 +102,8 @@ public class JosmPreferencesCredentialAgent extends AbstractCredentialsAgent {
      */
     @Override
     public OAuthToken lookupOAuthAccessToken() throws CredentialsAgentException {
-        String accessTokenKey = Main.pref.get("oauth.access-token.key", null);
-        String accessTokenSecret = Main.pref.get("oauth.access-token.secret", null);
+        String accessTokenKey = Config.getPref().get("oauth.access-token.key", null);
+        String accessTokenSecret = Config.getPref().get("oauth.access-token.secret", null);
         if (accessTokenKey == null && accessTokenSecret == null)
             return null;
         return new OAuthToken(accessTokenKey, accessTokenSecret);
@@ -118,11 +118,11 @@ public class JosmPreferencesCredentialAgent extends AbstractCredentialsAgent {
     @Override
     public void storeOAuthAccessToken(OAuthToken accessToken) throws CredentialsAgentException {
         if (accessToken == null) {
-            Main.pref.put("oauth.access-token.key", null);
-            Main.pref.put("oauth.access-token.secret", null);
+            Config.getPref().put("oauth.access-token.key", null);
+            Config.getPref().put("oauth.access-token.secret", null);
         } else {
-            Main.pref.put("oauth.access-token.key", accessToken.getKey());
-            Main.pref.put("oauth.access-token.secret", accessToken.getSecret());
+            Config.getPref().put("oauth.access-token.key", accessToken.getKey());
+            Config.getPref().put("oauth.access-token.secret", accessToken.getSecret());
         }
     }
 
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/PermissionPrefWithDefault.java b/src/org/openstreetmap/josm/io/remotecontrol/PermissionPrefWithDefault.java
index ee549f3..13d881a 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/PermissionPrefWithDefault.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/PermissionPrefWithDefault.java
@@ -6,7 +6,7 @@ import static org.openstreetmap.josm.tools.I18n.tr;
 import java.util.Arrays;
 import java.util.List;
 
-import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.spi.preferences.Config;
 
 /**
  * Contains a preference name to control permission for the operation
@@ -53,7 +53,7 @@ public class PermissionPrefWithDefault {
     }
 
     public boolean isAllowed() {
-        return Main.pref.getBoolean(pref, defaultVal);
+        return Config.getPref().getBoolean(pref, defaultVal);
     }
 
     public static List<PermissionPrefWithDefault> getPermissionPrefs() {
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/RemoteControl.java b/src/org/openstreetmap/josm/io/remotecontrol/RemoteControl.java
index 3373873..7c9e556 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/RemoteControl.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/RemoteControl.java
@@ -7,9 +7,9 @@ import java.net.Inet6Address;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.preferences.BooleanProperty;
 import org.openstreetmap.josm.io.remotecontrol.handler.RequestHandler;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 
 /**
@@ -94,7 +94,7 @@ public class RemoteControl {
      * @since 7335
      */
     public static String getRemoteControlDir() {
-        return new File(Main.pref.getUserDataDirectory(), "remotecontrol").getAbsolutePath();
+        return new File(Config.getDirs().getUserDataDirectory(true), "remotecontrol").getAbsolutePath();
     }
 
     /**
@@ -104,7 +104,7 @@ public class RemoteControl {
      * @since 8337
      */
     public static InetAddress getInet6Address() throws UnknownHostException {
-        for (InetAddress a : InetAddress.getAllByName(Main.pref.get("remote.control.host.ipv6", "::1"))) {
+        for (InetAddress a : InetAddress.getAllByName(Config.getPref().get("remote.control.host.ipv6", "::1"))) {
             if (a instanceof Inet6Address) {
                 return a;
             }
@@ -120,7 +120,7 @@ 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"))) {
+        for (InetAddress a : InetAddress.getAllByName(Config.getPref().get("remote.control.host.ipv4", "127.0.0.1"))) {
             if (a instanceof Inet4Address) {
                 return a;
             }
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/RemoteControlHttpServer.java b/src/org/openstreetmap/josm/io/remotecontrol/RemoteControlHttpServer.java
index b4d85cf..e412092 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/RemoteControlHttpServer.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/RemoteControlHttpServer.java
@@ -8,7 +8,7 @@ import java.net.ServerSocket;
 import java.net.Socket;
 import java.net.SocketException;
 
-import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 
 /**
@@ -32,7 +32,7 @@ public class RemoteControlHttpServer extends Thread {
      */
     public static void restartRemoteControlHttpServer() {
         stopRemoteControlHttpServer();
-        int port = Main.pref.getInteger("remote.control.port", 8111);
+        int port = Config.getPref().getInt("remote.control.port", 8111);
         try {
             instance4 = new RemoteControlHttpServer(port, false);
             instance4.start();
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/RemoteControlHttpsServer.java b/src/org/openstreetmap/josm/io/remotecontrol/RemoteControlHttpsServer.java
index 7eabc16..c016771 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/RemoteControlHttpsServer.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/RemoteControlHttpsServer.java
@@ -40,6 +40,7 @@ import javax.net.ssl.TrustManagerFactory;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.preferences.StringProperty;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 
 import sun.security.util.ObjectIdentifier;
@@ -311,7 +312,7 @@ public class RemoteControlHttpsServer extends Thread {
     public static void restartRemoteControlHttpsServer() {
         stopRemoteControlHttpsServer();
         if (RemoteControl.PROP_REMOTECONTROL_HTTPS_ENABLED.get()) {
-            int port = Main.pref.getInteger("remote.control.https.port", HTTPS_PORT);
+            int port = Config.getPref().getInt("remote.control.https.port", HTTPS_PORT);
             try {
                 instance4 = new RemoteControlHttpsServer(port, false);
                 instance4.start();
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/handler/AddNodeHandler.java b/src/org/openstreetmap/josm/io/remotecontrol/handler/AddNodeHandler.java
index 5a77a0f..defe951 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/handler/AddNodeHandler.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/handler/AddNodeHandler.java
@@ -7,10 +7,10 @@ import java.awt.Point;
 import java.util.Collections;
 import java.util.Map;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.AutoScaleAction;
 import org.openstreetmap.josm.command.AddCommand;
 import org.openstreetmap.josm.data.coor.LatLon;
+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.gui.MainApplication;
@@ -18,6 +18,7 @@ import org.openstreetmap.josm.gui.MapView;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.io.remotecontrol.AddTagsDialog;
 import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 
 /**
@@ -90,18 +91,19 @@ public class AddNodeHandler extends RequestHandler {
             MapView mapView = MainApplication.getMap().mapView;
             Point p = mapView.getPoint(ll);
             node = mapView.getNearestNode(p, OsmPrimitive::isUsable);
-            if (node != null && node.getCoor().greatCircleDistance(ll) > Main.pref.getDouble("remotecontrol.tolerance", 0.1)) {
+            if (node != null && node.getCoor().greatCircleDistance(ll) > Config.getPref().getDouble("remotecontrol.tolerance", 0.1)) {
                 node = null; // node is too far
             }
         }
 
+        DataSet ds = MainApplication.getLayerManager().getEditDataSet();
         if (node == null) {
             node = new Node(ll);
             // Now execute the commands to add this node.
-            MainApplication.undoRedo.add(new AddCommand(node));
+            MainApplication.undoRedo.add(new AddCommand(ds, node));
         }
 
-        MainApplication.getLayerManager().getEditDataSet().setSelected(node);
+        ds.setSelected(node);
         if (PermissionPrefWithDefault.CHANGE_VIEWPORT.isAllowed()) {
             AutoScaleAction.autoScale("selection");
         } else {
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java b/src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java
index 9f4c790..8f33a9d 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java
@@ -18,6 +18,7 @@ import org.openstreetmap.josm.command.AddCommand;
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.SequenceCommand;
 import org.openstreetmap.josm.data.coor.LatLon;
+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;
@@ -26,6 +27,7 @@ import org.openstreetmap.josm.gui.MapView;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.io.remotecontrol.AddTagsDialog;
 import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault;
+import org.openstreetmap.josm.spi.preferences.Config;
 
 /**
  * Adds a way to the current dataset. For instance, {@code /add_way?way=lat1,lon2;lat2,lon2}.
@@ -128,7 +130,7 @@ public class AddWayHandler extends RequestHandler {
         if (MainApplication.isDisplayingMapView()) {
             MapView mapView = MainApplication.getMap().mapView;
             nd = mapView.getNearestNode(mapView.getPoint(ll), OsmPrimitive::isUsable);
-            if (nd != null && nd.getCoor().greatCircleDistance(ll) > Main.pref.getDouble("remote.tolerance", 0.1)) {
+            if (nd != null && nd.getCoor().greatCircleDistance(ll) > Config.getPref().getDouble("remote.tolerance", 0.1)) {
                 nd = null; // node is too far
             }
         }
@@ -136,7 +138,7 @@ public class AddWayHandler extends RequestHandler {
         Node prev = null;
         for (Entry<LatLon, Node> entry : addedNodes.entrySet()) {
             LatLon lOld = entry.getKey();
-            if (lOld.greatCircleDistance(ll) < Main.pref.getDouble("remotecontrol.tolerance", 0.1)) {
+            if (lOld.greatCircleDistance(ll) < Config.getPref().getDouble("remotecontrol.tolerance", 0.1)) {
                 prev = entry.getValue();
                 break;
             }
@@ -147,7 +149,7 @@ public class AddWayHandler extends RequestHandler {
         } else if (nd == null) {
             nd = new Node(ll);
             // Now execute the commands to add this node.
-            commands.add(new AddCommand(nd));
+            commands.add(new AddCommand(Main.main.getEditDataSet(), nd));
             addedNodes.put(ll, nd);
         }
         return nd;
@@ -165,9 +167,10 @@ public class AddWayHandler extends RequestHandler {
             way.addNode(node);
         }
         allCoordinates.clear();
-        commands.add(new AddCommand(way));
+        DataSet ds = MainApplication.getLayerManager().getEditDataSet();
+        commands.add(new AddCommand(ds, way));
         MainApplication.undoRedo.add(new SequenceCommand(tr("Add way"), commands));
-        MainApplication.getLayerManager().getEditDataSet().setSelected(way);
+        ds.setSelected(way);
         if (PermissionPrefWithDefault.CHANGE_VIEWPORT.isAllowed()) {
             AutoScaleAction.autoScale("selection");
         } else {
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/handler/ImportHandler.java b/src/org/openstreetmap/josm/io/remotecontrol/handler/ImportHandler.java
index 31a7623..f23405d 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/handler/ImportHandler.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/handler/ImportHandler.java
@@ -14,6 +14,7 @@ import org.openstreetmap.josm.actions.downloadtasks.DownloadOsmTask;
 import org.openstreetmap.josm.actions.downloadtasks.DownloadTask;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -39,7 +40,7 @@ public class ImportHandler extends RequestHandler.RawURLParseRequestHandler {
                 // As of 2015-04, Overpass Turbo requires this branch of code ...
                 Logging.debug("Remote control, /import: defaulting to DownloadOsmTask");
                 new DownloadOsmTask().loadUrl(isLoadInNewLayer(), url.toExternalForm(), null);
-            } else if (Main.pref.getBoolean("remotecontrol.import.interactive", true)) {
+            } else if (Config.getPref().getBoolean("remotecontrol.import.interactive", true)) {
                 // OpenLocationAction queries the user if more than one task is suitable
                 MainApplication.getMenu().openLocation.openUrl(isLoadInNewLayer(), url.toExternalForm());
             } else {
@@ -100,7 +101,7 @@ public class ImportHandler extends RequestHandler.RawURLParseRequestHandler {
     @Override
     protected void validateRequest() throws RequestHandlerBadRequestException {
         String urlString = args != null ? args.get("url") : null;
-        if (Main.pref.getBoolean("remotecontrol.importhandler.fix_url_query", true)) {
+        if (Config.getPref().getBoolean("remotecontrol.importhandler.fix_url_query", true)) {
             urlString = Utils.fixURLQuery(urlString);
         }
         try {
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java b/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java
index fa9f2dd..0d059f0 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java
@@ -22,8 +22,8 @@ import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.SimplePrimitiveId;
-import org.openstreetmap.josm.data.osm.search.SearchParseError;
 import org.openstreetmap.josm.data.osm.search.SearchCompiler;
+import org.openstreetmap.josm.data.osm.search.SearchParseError;
 import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.MapFrame;
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/handler/RequestHandler.java b/src/org/openstreetmap/josm/io/remotecontrol/handler/RequestHandler.java
index 86f9bf5..6849dd2 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/handler/RequestHandler.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/handler/RequestHandler.java
@@ -19,6 +19,7 @@ import javax.swing.JOptionPane;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -146,7 +147,8 @@ public abstract class RequestHandler {
          * older versions of WMSPlugin.
          */
         PermissionPrefWithDefault permissionPref = getPermissionPref();
-        if (permissionPref != null && permissionPref.pref != null && !Main.pref.getBoolean(permissionPref.pref, permissionPref.defaultVal)) {
+        if (permissionPref != null && permissionPref.pref != null &&
+                !Config.getPref().getBoolean(permissionPref.pref, permissionPref.defaultVal)) {
             String err = MessageFormat.format("RemoteControl: ''{0}'' forbidden by preferences", myCommand);
             Logging.info(err);
             throw new RequestHandlerForbiddenException(err);
@@ -155,7 +157,7 @@ public abstract class RequestHandler {
         /* Does the user want to confirm everything?
          * If yes, display specific confirmation message.
          */
-        if (Main.pref.getBoolean(globalConfirmationKey, globalConfirmationDefault)) {
+        if (Config.getPref().getBoolean(globalConfirmationKey, globalConfirmationDefault)) {
             // Ensure dialog box does not exceed main window size
             Integer maxWidth = (int) Math.max(200, Main.parent.getWidth()*0.6);
             String message = "<html><div>" + getPermissionMessage() +
@@ -275,7 +277,7 @@ public abstract class RequestHandler {
     protected boolean isLoadInNewLayer() {
         return args.get("new_layer") != null && !args.get("new_layer").isEmpty()
                 ? Boolean.parseBoolean(args.get("new_layer"))
-                : Main.pref.getBoolean(loadInNewLayerKey, loadInNewLayerDefault);
+                : Config.getPref().getBoolean(loadInNewLayerKey, loadInNewLayerDefault);
     }
 
     public void setSender(String sender) {
diff --git a/src/org/openstreetmap/josm/io/session/ImagerySessionExporter.java b/src/org/openstreetmap/josm/io/session/ImagerySessionExporter.java
index e887ebb..903b55d 100644
--- a/src/org/openstreetmap/josm/io/session/ImagerySessionExporter.java
+++ b/src/org/openstreetmap/josm/io/session/ImagerySessionExporter.java
@@ -12,7 +12,7 @@ import javax.swing.JLabel;
 import javax.swing.JPanel;
 import javax.swing.SwingConstants;
 
-import org.openstreetmap.josm.data.Preferences;
+import org.openstreetmap.josm.data.StructUtils;
 import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryPreferenceEntry;
 import org.openstreetmap.josm.data.imagery.OffsetBookmark;
 import org.openstreetmap.josm.gui.layer.AbstractTileSourceLayer;
@@ -83,7 +83,7 @@ public class ImagerySessionExporter extends AbstractSessionExporter<ImageryLayer
         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));
+        Map<String, String> data = new LinkedHashMap<>(StructUtils.serializeStruct(e, ImageryPreferenceEntry.class));
         Utils.instanceOfThen(layer, AbstractTileSourceLayer.class, tsLayer -> {
             data.putAll(tsLayer.getDisplaySettings().toPropertiesMap());
             if (!tsLayer.getDisplaySettings().isAutoZoom()) {
diff --git a/src/org/openstreetmap/josm/io/session/ImagerySessionImporter.java b/src/org/openstreetmap/josm/io/session/ImagerySessionImporter.java
index fa550b7..dc81004 100644
--- a/src/org/openstreetmap/josm/io/session/ImagerySessionImporter.java
+++ b/src/org/openstreetmap/josm/io/session/ImagerySessionImporter.java
@@ -7,7 +7,7 @@ import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.openstreetmap.josm.data.Preferences;
+import org.openstreetmap.josm.data.StructUtils;
 import org.openstreetmap.josm.data.imagery.ImageryInfo;
 import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryPreferenceEntry;
 import org.openstreetmap.josm.data.imagery.OffsetBookmark;
@@ -41,7 +41,7 @@ public class ImagerySessionImporter implements SessionLayerImporter {
         }
         Map<String, String> attributes = readProperties(elem);
 
-        ImageryPreferenceEntry prefEntry = Preferences.deserializeStruct(attributes, ImageryPreferenceEntry.class);
+        ImageryPreferenceEntry prefEntry = StructUtils.deserializeStruct(attributes, ImageryPreferenceEntry.class);
         ImageryInfo info = new ImageryInfo(prefEntry);
         ImageryLayer layer = ImageryLayer.create(info);
         Utils.instanceOfThen(layer, AbstractTileSourceLayer.class, tsLayer -> {
diff --git a/src/org/openstreetmap/josm/io/session/OsmDataSessionExporter.java b/src/org/openstreetmap/josm/io/session/OsmDataSessionExporter.java
index bedd1df..393577b 100644
--- a/src/org/openstreetmap/josm/io/session/OsmDataSessionExporter.java
+++ b/src/org/openstreetmap/josm/io/session/OsmDataSessionExporter.java
@@ -31,7 +31,7 @@ public class OsmDataSessionExporter extends GenericSessionExporter<OsmDataLayer>
         OsmWriter w = OsmWriterFactory.createOsmWriter(new PrintWriter(writer), false, layer.data.getVersion());
         layer.data.getReadLock().lock();
         try {
-            w.writeLayer(layer);
+            w.write(layer.data);
             w.flush();
         } finally {
             layer.data.getReadLock().unlock();
diff --git a/src/org/openstreetmap/josm/io/session/SessionWriter.java b/src/org/openstreetmap/josm/io/session/SessionWriter.java
index ecfbb5c..afb4c30 100644
--- a/src/org/openstreetmap/josm/io/session/SessionWriter.java
+++ b/src/org/openstreetmap/josm/io/session/SessionWriter.java
@@ -30,7 +30,6 @@ import javax.xml.transform.stream.StreamResult;
 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.Projections;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.MapView;
 import org.openstreetmap.josm.gui.layer.GpxLayer;
@@ -265,7 +264,7 @@ public class SessionWriter {
         viewportEl.appendChild(centerEl);
         MapView mapView = MainApplication.getMap().mapView;
         EastNorth center = mapView.getCenter();
-        LatLon centerLL = Projections.inverseProject(center);
+        LatLon centerLL = Main.getProjection().eastNorth2latlon(center);
         centerEl.setAttribute("lat", Double.toString(centerLL.lat()));
         centerEl.setAttribute("lon", Double.toString(centerLL.lon()));
         Element scale = doc.createElement("scale");
diff --git a/src/org/openstreetmap/josm/plugins/PluginClassLoader.java b/src/org/openstreetmap/josm/plugins/PluginClassLoader.java
index 345a4b6..bd58ea2 100644
--- a/src/org/openstreetmap/josm/plugins/PluginClassLoader.java
+++ b/src/org/openstreetmap/josm/plugins/PluginClassLoader.java
@@ -4,7 +4,9 @@ package org.openstreetmap.josm.plugins;
 import java.net.URL;
 import java.net.URLClassLoader;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
+import java.util.Objects;
 
 import org.openstreetmap.josm.tools.Logging;
 
@@ -12,12 +14,12 @@ import org.openstreetmap.josm.tools.Logging;
  * Class loader for JOSM plugins.
  * <p>
  * In addition to the classes in the plugin jar file, it loads classes of required
- * plugins. The JOSM core classes should be provided by the the parent class loader.
+ * plugins. The JOSM core classes should be provided by the parent class loader.
  * @since 12322
  */
 public class PluginClassLoader extends URLClassLoader {
 
-    Collection<PluginClassLoader> dependencies;
+    private final Collection<PluginClassLoader> dependencies;
 
     static {
         ClassLoader.registerAsParallelCapable();
@@ -38,28 +40,47 @@ public class PluginClassLoader extends URLClassLoader {
      * Add class loader of a required plugin.
      * This plugin will have access to the classes of the dependent plugin
      * @param dependency the class loader of the required plugin
+     * @return {@code true} if the collection of dependencies changed as a result of the call
+     * @since 12867
      */
-    public void addDependency(PluginClassLoader dependency) {
-        dependencies.add(dependency);
+    public boolean addDependency(PluginClassLoader dependency) {
+        // Add dependency only if not already present (directly or transitively through another one)
+        boolean result = !dependencies.contains(Objects.requireNonNull(dependency, "dependency"))
+                && !dependencies.stream().anyMatch(pcl -> pcl.dependencies.contains(dependency))
+                && dependencies.add(dependency);
+        if (result) {
+            // Now, remove top-level single dependencies, which would be children of the added one
+            dependencies.removeIf(pcl -> pcl.dependencies.isEmpty() && dependency.dependencies.contains(pcl));
+        }
+        return result;
     }
 
     @Override
     protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
-        for (PluginClassLoader dep : dependencies) {
-            try {
-                Class<?> result = dep.loadClass(name, resolve);
-                if (result != null) {
-                    return result;
+        Class<?> result = findLoadedClass(name);
+        if (result == null) {
+            for (PluginClassLoader dep : dependencies) {
+                try {
+                    result = dep.loadClass(name, resolve);
+                    if (result != null) {
+                        return result;
+                    }
+                } catch (ClassNotFoundException e) {
+                    // do nothing
+                    Logging.trace("Plugin class not found in {0}: {1}", dep, e.getMessage());
                 }
-            } catch (ClassNotFoundException e) {
-                // do nothing
-                Logging.trace("Plugin class not found in {0}: {1}", dep, e.getMessage());
             }
+            result = super.loadClass(name, resolve);
         }
-        Class<?> result = super.loadClass(name, resolve);
         if (result != null) {
             return result;
         }
         throw new ClassNotFoundException(name);
     }
+
+    @Override
+    public String toString() {
+        return "PluginClassLoader [urls=" + Arrays.toString(getURLs()) +
+                (dependencies.isEmpty() ? "" : ", dependencies=" + dependencies) + ']';
+    }
 }
diff --git a/src/org/openstreetmap/josm/plugins/PluginDownloadTask.java b/src/org/openstreetmap/josm/plugins/PluginDownloadTask.java
index 40231cb..fcb5858 100644
--- a/src/org/openstreetmap/josm/plugins/PluginDownloadTask.java
+++ b/src/org/openstreetmap/josm/plugins/PluginDownloadTask.java
@@ -121,12 +121,20 @@ public class PluginDownloadTask extends PleaseWaitRunnable {
                 throw new PluginDownloadException(msg);
             }
             URL url = new URL(pi.downloadlink);
-            synchronized (this) {
-                downloadConnection = HttpClient.create(url).setAccept(PLUGIN_MIME_TYPES);
-                downloadConnection.connect();
-            }
-            try (InputStream in = downloadConnection.getResponse().getContent()) {
-                Files.copy(in, file.toPath(), StandardCopyOption.REPLACE_EXISTING);
+            Logging.debug("Download plugin {0} from {1}...", pi.name, url);
+            if ("https".equals(url.getProtocol()) || "http".equals(url.getProtocol())) {
+                synchronized (this) {
+                    downloadConnection = HttpClient.create(url).setAccept(PLUGIN_MIME_TYPES);
+                    downloadConnection.connect();
+                }
+                try (InputStream in = downloadConnection.getResponse().getContent()) {
+                    Files.copy(in, file.toPath(), StandardCopyOption.REPLACE_EXISTING);
+                }
+            } else {
+                // this is an alternative for e.g. file:// URLs where HttpClient doesn't work
+                try (InputStream in = url.openConnection().getInputStream()) {
+                    Files.copy(in, file.toPath(), StandardCopyOption.REPLACE_EXISTING);
+                }
             }
         } catch (MalformedURLException e) {
             String msg = tr("Cannot download plugin ''{0}''. Its download link ''{1}'' is not a valid URL. Skipping download.",
diff --git a/src/org/openstreetmap/josm/plugins/PluginHandler.java b/src/org/openstreetmap/josm/plugins/PluginHandler.java
index 222dc50..55c8131 100644
--- a/src/org/openstreetmap/josm/plugins/PluginHandler.java
+++ b/src/org/openstreetmap/josm/plugins/PluginHandler.java
@@ -53,6 +53,7 @@ import javax.swing.UIManager;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.RestartAction;
+import org.openstreetmap.josm.data.PreferencesUtils;
 import org.openstreetmap.josm.data.Version;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane.ButtonSpec;
@@ -66,6 +67,7 @@ import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
 import org.openstreetmap.josm.gui.widgets.JosmTextArea;
 import org.openstreetmap.josm.io.OfflineAccessException;
 import org.openstreetmap.josm.io.OnlineResource;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.I18n;
 import org.openstreetmap.josm.tools.ImageProvider;
@@ -137,7 +139,10 @@ public final class PluginHandler {
             new DeprecatedPlugin("josm-geojson", tr("replaced by new {0} plugin", "geojson")),
             new DeprecatedPlugin("proj4j", inCore),
             new DeprecatedPlugin("OpenStreetView", tr("replaced by new {0} plugin", "OpenStreetCam")),
-            new DeprecatedPlugin("imageryadjust", inCore)
+            new DeprecatedPlugin("imageryadjust", inCore),
+            new DeprecatedPlugin("walkingpapers", tr("replaced by new {0} plugin", "fieldpapers")),
+            new DeprecatedPlugin("czechaddress", tr("no longer required")),
+            new DeprecatedPlugin("kendzi3d_Improved_by_Andrei", tr("no longer required"))
         );
     }
 
@@ -303,7 +308,7 @@ public final class PluginHandler {
     static {
         try {
             sources.add(ClassLoader.getSystemClassLoader());
-            sources.add(org.openstreetmap.josm.gui.MainApplication.class.getClassLoader());
+            sources.add(PluginHandler.class.getClassLoader());
         } catch (SecurityException ex) {
             Logging.debug(ex);
             sources.add(ImageProvider.class.getClassLoader());
@@ -343,7 +348,7 @@ public final class PluginHandler {
         for (DeprecatedPlugin depr : DEPRECATED_PLUGINS) {
             if (plugins.contains(depr.name)) {
                 plugins.remove(depr.name);
-                Main.pref.removeFromCollection("plugins", depr.name);
+                PreferencesUtils.removeFromList(Config.getPref(), "plugins", depr.name);
                 removedPlugins.add(depr);
             }
         }
@@ -397,7 +402,7 @@ public final class PluginHandler {
                     +"<br>It should be disabled.<br>Delete from preferences?</html>",
                     Utils.escapeReservedCharactersHTML(unmaintained));
             if (confirmDisablePlugin(parent, msg, unmaintained)) {
-                Main.pref.removeFromCollection("plugins", unmaintained);
+                PreferencesUtils.removeFromList(Config.getPref(), "plugins", unmaintained);
                 plugins.remove(unmaintained);
             }
         }
@@ -421,7 +426,7 @@ public final class PluginHandler {
         String message = null;
         String togglePreferenceKey = null;
         int v = Version.getInstance().getVersion();
-        if (Main.pref.getInteger("pluginmanager.version", 0) < v) {
+        if (Config.getPref().getInt("pluginmanager.version", 0) < v) {
             message =
                 "<html>"
                 + tr("You updated your JOSM software.<br>"
@@ -432,11 +437,11 @@ public final class PluginHandler {
             togglePreferenceKey = "pluginmanager.version-based-update.policy";
         } else {
             long tim = System.currentTimeMillis();
-            long last = Main.pref.getLong("pluginmanager.lastupdate", 0);
-            Integer maxTime = Main.pref.getInteger("pluginmanager.time-based-update.interval", DEFAULT_TIME_BASED_UPDATE_INTERVAL);
+            long last = Config.getPref().getLong("pluginmanager.lastupdate", 0);
+            Integer maxTime = Config.getPref().getInt("pluginmanager.time-based-update.interval", DEFAULT_TIME_BASED_UPDATE_INTERVAL);
             long d = TimeUnit.MILLISECONDS.toDays(tim - last);
             if ((last <= 0) || (maxTime <= 0)) {
-                Main.pref.put("pluginmanager.lastupdate", Long.toString(tim));
+                Config.getPref().put("pluginmanager.lastupdate", Long.toString(tim));
             } else if (d > maxTime) {
                 message =
                     "<html>"
@@ -453,7 +458,7 @@ public final class PluginHandler {
 
         // check whether automatic update at startup was disabled
         //
-        String policy = Main.pref.get(togglePreferenceKey, "ask").trim().toLowerCase(Locale.ENGLISH);
+        String policy = Config.getPref().get(togglePreferenceKey, "ask").trim().toLowerCase(Locale.ENGLISH);
         switch(policy) {
         case "never":
             if ("pluginmanager.version-based-update.policy".equals(togglePreferenceKey)) {
@@ -507,16 +512,16 @@ public final class PluginHandler {
         if (pnlMessage.isRememberDecision()) {
             switch(ret) {
             case 0:
-                Main.pref.put(togglePreferenceKey, "always");
+                Config.getPref().put(togglePreferenceKey, "always");
                 break;
             case JOptionPane.CLOSED_OPTION:
             case 1:
-                Main.pref.put(togglePreferenceKey, "never");
+                Config.getPref().put(togglePreferenceKey, "never");
                 break;
             default: // Do nothing
             }
         } else {
-            Main.pref.put(togglePreferenceKey, "ask");
+            Config.getPref().put(togglePreferenceKey, "ask");
         }
         return ret == 0;
     }
@@ -606,11 +611,11 @@ public final class PluginHandler {
                     // 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"));
+                        Set<String> plugins = new HashSet<>(Config.getPref().getList("plugins"));
                         for (PluginInformation plugin : task.getDownloadedPlugins()) {
                             plugins.add(plugin.name);
                         }
-                        Main.pref.putCollection("plugins", plugins);
+                        Config.getPref().putList("plugins", new ArrayList<>(plugins));
                         // restart
                         try {
                             RestartAction.restartJOSM();
@@ -795,7 +800,7 @@ public final class PluginHandler {
             Logging.error(e);
         }
         if (msg != null && confirmDisablePlugin(parent, msg, plugin.name)) {
-            Main.pref.removeFromCollection("plugins", plugin.name);
+            PreferencesUtils.removeFromList(Config.getPref(), "plugins", plugin.name);
         }
     }
 
@@ -840,7 +845,7 @@ public final class PluginHandler {
             for (PluginInformation info : toLoad) {
                 PluginClassLoader cl = classLoaders.get(info);
                 DEPENDENCIES:
-                for (String depName : info.getRequiredPlugins()) {
+                for (String depName : info.getLocalRequiredPlugins()) {
                     for (PluginInformation depInfo : toLoad) {
                         if (depInfo.getName().equals(depName)) {
                             cl.addDependency(classLoaders.get(depInfo));
@@ -853,11 +858,12 @@ public final class PluginHandler {
                             continue DEPENDENCIES;
                         }
                     }
-                    throw new AssertionError("unable to find dependency " + depName + " for plugin " + info.getName());
+                    Logging.error("unable to find dependency " + depName + " for plugin " + info.getName());
                 }
             }
 
             extendJoinedPluginResourceCL(toLoad);
+            ImageProvider.addAdditionalClassLoaders(getResourceClassLoaders());
             monitor.setTicksCount(toLoad.size());
             for (PluginInformation info : toLoad) {
                 monitor.setExtraText(tr("Loading plugin ''{0}''...", info.name));
@@ -968,7 +974,7 @@ public final class PluginHandler {
         }
         try {
             monitor.beginTask(tr("Determining plugins to load..."));
-            Set<String> plugins = new HashSet<>(Main.pref.getCollection("plugins", new LinkedList<String>()));
+            Set<String> plugins = new HashSet<>(Config.getPref().getList("plugins", new LinkedList<String>()));
             Logging.debug("Plugins list initialized to {0}", plugins);
             String systemProp = System.getProperty("josm.plugins");
             if (systemProp != null) {
@@ -1156,8 +1162,8 @@ public final class PluginHandler {
         }
         if (pluginsWanted == null) {
             // if all plugins updated, remember the update because it was successful
-            Main.pref.putInteger("pluginmanager.version", Version.getInstance().getVersion());
-            Main.pref.put("pluginmanager.lastupdate", Long.toString(System.currentTimeMillis()));
+            Config.getPref().putInt("pluginmanager.version", Version.getInstance().getVersion());
+            Config.getPref().put("pluginmanager.lastupdate", Long.toString(System.currentTimeMillis()));
         }
         return plugins;
     }
@@ -1449,9 +1455,7 @@ public final class PluginHandler {
             // don't know what plugin threw the exception
             return null;
 
-        Set<String> plugins = new HashSet<>(
-                Main.pref.getCollection("plugins", Collections.<String>emptySet())
-        );
+        Set<String> plugins = new HashSet<>(Config.getPref().getList("plugins"));
         final PluginInformation pluginInfo = plugin.getPluginInformation();
         if (!plugins.contains(pluginInfo.name))
             // plugin not activated ? strange in this context but anyway, don't bother
@@ -1466,7 +1470,7 @@ public final class PluginHandler {
         case 1:
             // deactivate the plugin
             plugins.remove(plugin.getPluginInformation().name);
-            Main.pref.putCollection("plugins", plugins);
+            Config.getPref().putList("plugins", new ArrayList<>(plugins));
             GuiHelper.runInEDTAndWait(() -> JOptionPane.showMessageDialog(
                     Main.parent,
                     tr("The plugin has been removed from the configuration. Please restart JOSM to unload the plugin."),
@@ -1485,7 +1489,7 @@ public final class PluginHandler {
      * @return The list of loaded plugins
      */
     public static Collection<String> getBugReportInformation() {
-        final Collection<String> pl = new TreeSet<>(Main.pref.getCollection("plugins", new LinkedList<>()));
+        final Collection<String> pl = new TreeSet<>(Config.getPref().getList("plugins", new LinkedList<>()));
         for (final PluginProxy pp : pluginList) {
             PluginInformation pi = pp.getPluginInformation();
             pl.remove(pi.name);
@@ -1570,7 +1574,7 @@ public final class PluginHandler {
         }
 
         public void initDontShowAgain(String preferencesKey) {
-            String policy = Main.pref.get(preferencesKey, "ask");
+            String policy = Config.getPref().get(preferencesKey, "ask");
             policy = policy.trim().toLowerCase(Locale.ENGLISH);
             cbDontShowAgain.setSelected(!"ask".equals(policy));
         }
diff --git a/src/org/openstreetmap/josm/plugins/ReadRemotePluginInformationTask.java b/src/org/openstreetmap/josm/plugins/ReadRemotePluginInformationTask.java
index 324a331..3a9211a 100644
--- a/src/org/openstreetmap/josm/plugins/ReadRemotePluginInformationTask.java
+++ b/src/org/openstreetmap/josm/plugins/ReadRemotePluginInformationTask.java
@@ -10,6 +10,7 @@ import java.io.File;
 import java.io.FilenameFilter;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.InputStreamReader;
 import java.io.PrintWriter;
 import java.net.MalformedURLException;
 import java.net.URL;
@@ -36,6 +37,7 @@ import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.widgets.JosmTextArea;
 import org.openstreetmap.josm.io.OsmTransferException;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.HttpClient;
 import org.openstreetmap.josm.tools.Logging;
@@ -141,7 +143,7 @@ public class ReadRemotePluginInformationTask extends PleaseWaitRunnable {
      */
     protected String downloadPluginList(String site, final ProgressMonitor monitor) {
         /* replace %<x> with empty string or x=plugins (separated with comma) */
-        String pl = Utils.join(",", Main.pref.getCollection("plugins"));
+        String pl = Utils.join(",", Config.getPref().getList("plugins"));
         String printsite = site.replaceAll("%<(.*)>", "");
         if (pl != null && !pl.isEmpty()) {
             site = site.replaceAll("%<(.*)>", "$1"+pl);
@@ -154,14 +156,31 @@ public class ReadRemotePluginInformationTask extends PleaseWaitRunnable {
             monitor.beginTask("");
             monitor.indeterminateSubTask(tr("Downloading plugin list from ''{0}''", printsite));
 
-            URL url = new URL(site);
-            connection = HttpClient.create(url).useCache(false);
-            final HttpClient.Response response = connection.connect();
-            content = response.fetchContent();
-            if (response.getResponseCode() != 200) {
-                throw new IOException(tr("Unsuccessful HTTP request"));
+            final URL url = new URL(site);
+            if ("https".equals(url.getProtocol()) || "http".equals(url.getProtocol())) {
+                connection = HttpClient.create(url).useCache(false);
+                final HttpClient.Response response = connection.connect();
+                content = response.fetchContent();
+                if (response.getResponseCode() != 200) {
+                    throw new IOException(tr("Unsuccessful HTTP request"));
+                }
+                return content;
+            } else {
+                // e.g. when downloading from a file:// URL, we can't use HttpClient
+                try (InputStreamReader in = new InputStreamReader(url.openConnection().getInputStream(), StandardCharsets.UTF_8)) {
+                    final StringBuilder sb = new StringBuilder();
+                    final char[] buffer = new char[8192];
+                    int numChars;
+                    while ((numChars = in.read(buffer)) >= 0) {
+                        sb.append(buffer, 0, numChars);
+                        if (canceled) {
+                            return null;
+                        }
+                    }
+                    return sb.toString();
+                }
             }
-            return content;
+
         } catch (MalformedURLException e) {
             if (canceled) return null;
             Logging.error(e);
diff --git a/src/org/openstreetmap/josm/spi/package-info.java b/src/org/openstreetmap/josm/spi/package-info.java
new file mode 100644
index 0000000..a000304
--- /dev/null
+++ b/src/org/openstreetmap/josm/spi/package-info.java
@@ -0,0 +1,18 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * This package contains services.
+ * <ul>
+ * <li>Abstract service interfaces and
+ * <li>manager classes to install a service provider and give access to the
+ * functionality of the service.
+ * </ul>
+ * Client code will only depend on the classes from the spi package, but not on
+ * implementations of the service interface (service providers) which are found
+ * elsewhere.
+ * <p>
+ * The concept is similar to Java Service Provider Interfaces (hence the name),
+ * except the service providers are registered directly with a method call instead
+ * of using {@link java.util.ServiceLoader} to discover the providers on classpath.
+ */
+package org.openstreetmap.josm.spi;
diff --git a/src/org/openstreetmap/josm/spi/preferences/AbstractPreferences.java b/src/org/openstreetmap/josm/spi/preferences/AbstractPreferences.java
new file mode 100644
index 0000000..8ee6093
--- /dev/null
+++ b/src/org/openstreetmap/josm/spi/preferences/AbstractPreferences.java
@@ -0,0 +1,144 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.spi.preferences;
+
+import java.util.List;
+import java.util.Map;
+
+import org.openstreetmap.josm.tools.Logging;
+
+/**
+ * Abstract implementation of the {@link IPreferences} interface.
+ * @since 12847
+ */
+public abstract class AbstractPreferences implements IPreferences {
+
+    @Override
+    public synchronized String get(final String key, final String def) {
+        return getSetting(key, new StringSetting(def), StringSetting.class).getValue();
+    }
+
+    @Override
+    public boolean put(final String key, String value) {
+        return putSetting(key, value == null || value.isEmpty() ? null : new StringSetting(value));
+    }
+
+    @Override
+    public boolean getBoolean(final String key, final boolean def) {
+        return Boolean.parseBoolean(get(key, Boolean.toString(def)));
+    }
+
+    @Override
+    public boolean putBoolean(final String key, final boolean value) {
+        return put(key, Boolean.toString(value));
+    }
+
+    @Override
+    public synchronized int getInt(String key, int def) {
+        String v = get(key, Integer.toString(def));
+        if (v.isEmpty())
+            return def;
+
+        try {
+            return Integer.parseInt(v);
+        } catch (NumberFormatException e) {
+            // fall out
+            Logging.trace(e);
+        }
+        return def;
+    }
+
+    @Override
+    public boolean putInt(String key, int value) {
+        return put(key, Integer.toString(value));
+    }
+
+    @Override
+    public long getLong(String key, long def) {
+        String v = get(key, Long.toString(def));
+        if (null == v)
+            return def;
+
+        try {
+            return Long.parseLong(v);
+        } catch (NumberFormatException e) {
+            // fall out
+            Logging.trace(e);
+        }
+        return def;
+    }
+
+    @Override
+    public boolean putLong(final String key, final long value) {
+        return put(key, Long.toString(value));
+    }
+
+    @Override
+    public synchronized double getDouble(String key, double def) {
+        String v = get(key, Double.toString(def));
+        if (null == v)
+            return def;
+
+        try {
+            return Double.parseDouble(v);
+        } catch (NumberFormatException e) {
+            // fall out
+            Logging.trace(e);
+        }
+        return def;
+    }
+
+    @Override
+    public boolean putDouble(final String key, final double value) {
+        return put(key, Double.toString(value));
+    }
+
+    @Override
+    public List<String> getList(String key, List<String> def) {
+        return getSetting(key, new ListSetting(def), ListSetting.class).getValue();
+    }
+
+    @Override
+    public boolean putList(String key, List<String> value) {
+        return putSetting(key, value == null ? null : new ListSetting(value));
+    }
+
+    @Override
+    public List<List<String>> getListOfLists(String key, List<List<String>> def) {
+        return getSetting(key, new ListListSetting(def), ListListSetting.class).getValue();
+    }
+
+    @Override
+    public boolean putListOfLists(String key, List<List<String>> value) {
+        return putSetting(key, value == null ? null : new ListListSetting(value));
+    }
+
+    @Override
+    public List<Map<String, String>> getListOfMaps(String key, List<Map<String, String>> def) {
+        return getSetting(key, new MapListSetting(def), MapListSetting.class).getValue();
+    }
+
+    @Override
+    public boolean putListOfMaps(String key, List<Map<String, String>> value) {
+        return putSetting(key, value == null ? null : new MapListSetting(value));
+    }
+
+    /**
+     * Set a value for a certain setting. The changed setting is saved to the preference file immediately.
+     * Due to caching mechanisms on modern operating systems and hardware, this shouldn't be a performance problem.
+     * @param key the unique identifier for the setting
+     * @param setting the value of the setting. In case it is null, the key-value entry will be removed.
+     * @return {@code true}, if something has changed (i.e. value is different than before)
+     */
+    public abstract boolean putSetting(String key, Setting<?> setting);
+
+    /**
+     * Get settings value for a certain key and provide default a value.
+     * @param <T> the setting type
+     * @param key the identifier for the setting
+     * @param def the default value. For each call of getSetting() with a given key, the default value must be the same.
+     * <code>def</code> must not be null, but the value of <code>def</code> can be null.
+     * @param klass the setting type (same as T)
+     * @return the corresponding value if the property has been set before, {@code def} otherwise
+     */
+    public abstract <T extends Setting<?>> T getSetting(String key, T def, Class<T> klass);
+}
diff --git a/src/org/openstreetmap/josm/data/preferences/AbstractSetting.java b/src/org/openstreetmap/josm/spi/preferences/AbstractSetting.java
similarity index 91%
rename from src/org/openstreetmap/josm/data/preferences/AbstractSetting.java
rename to src/org/openstreetmap/josm/spi/preferences/AbstractSetting.java
index 27147a8..9a94418 100644
--- a/src/org/openstreetmap/josm/data/preferences/AbstractSetting.java
+++ b/src/org/openstreetmap/josm/spi/preferences/AbstractSetting.java
@@ -1,5 +1,5 @@
 // License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.data.preferences;
+package org.openstreetmap.josm.spi.preferences;
 
 import java.util.Objects;
 
@@ -7,7 +7,7 @@ import java.util.Objects;
  * Base abstract class of all settings, holding the setting value.
  *
  * @param <T> The setting type
- * @since 9759
+ * @since 12881 (moved from package {@code org.openstreetmap.josm.data.preferences})
  */
 public abstract class AbstractSetting<T> implements Setting<T> {
     protected final T value;
diff --git a/src/org/openstreetmap/josm/spi/preferences/Config.java b/src/org/openstreetmap/josm/spi/preferences/Config.java
new file mode 100644
index 0000000..3805e42
--- /dev/null
+++ b/src/org/openstreetmap/josm/spi/preferences/Config.java
@@ -0,0 +1,55 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.spi.preferences;
+
+import java.util.Objects;
+
+/**
+ * Class to hold the global preferences object and the provider of base directories.
+ * @since 12847
+ */
+public final class Config {
+
+    private static IPreferences preferences;
+    private static IBaseDirectories baseDirectories;
+
+    private Config() {
+        // hide constructor
+    }
+
+    /**
+     * Get the preferences.
+     * @return the preferences
+     * @since 12847
+     */
+    public static IPreferences getPref() {
+        return preferences;
+    }
+
+    /**
+     * Get class that provides the location of certain base directories
+     * @return the global {@link IBaseDirectories} instance
+     * @since 12855
+     */
+    public static IBaseDirectories getDirs() {
+        return baseDirectories;
+    }
+
+    /**
+     * Install the global preference instance.
+     * @param preferences the global preference instance to set (must not be null)
+     * @since 12847
+     */
+    public static void setPreferencesInstance(IPreferences preferences) {
+        Config.preferences = Objects.requireNonNull(preferences, "preferences");
+    }
+
+    /**
+     * Install the global base directories provider.
+     * @param baseDirectories the global base directories provider instance to set
+     * (must not be null)
+     * @since 12855
+     */
+    public static void setBaseDirectoriesProvider(IBaseDirectories baseDirectories) {
+        Config.baseDirectories = Objects.requireNonNull(baseDirectories, "baseDirectories");
+    }
+}
diff --git a/src/org/openstreetmap/josm/spi/preferences/DefaultPreferenceChangeEvent.java b/src/org/openstreetmap/josm/spi/preferences/DefaultPreferenceChangeEvent.java
new file mode 100644
index 0000000..ecf47cf
--- /dev/null
+++ b/src/org/openstreetmap/josm/spi/preferences/DefaultPreferenceChangeEvent.java
@@ -0,0 +1,35 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.spi.preferences;
+
+/**
+ * Default implementation of the {@link PreferenceChangeEvent} interface.
+ * @since 12881
+ */
+public class DefaultPreferenceChangeEvent implements PreferenceChangeEvent {
+    
+    private final String key;
+    private final Setting<?> oldValue;
+    private final Setting<?> newValue;
+
+    public DefaultPreferenceChangeEvent(String key, Setting<?> oldValue, Setting<?> newValue) {
+        this.key = key;
+        this.oldValue = oldValue;
+        this.newValue = newValue;
+    }
+
+    @Override
+    public String getKey() {
+        return key;
+    }
+
+    @Override
+    public Setting<?> getOldValue() {
+        return oldValue;
+    }
+
+    @Override
+    public Setting<?> getNewValue() {
+        return newValue;
+    }
+    
+}
diff --git a/src/org/openstreetmap/josm/spi/preferences/IBaseDirectories.java b/src/org/openstreetmap/josm/spi/preferences/IBaseDirectories.java
new file mode 100644
index 0000000..ec1d8b7
--- /dev/null
+++ b/src/org/openstreetmap/josm/spi/preferences/IBaseDirectories.java
@@ -0,0 +1,42 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.spi.preferences;
+
+import java.io.File;
+
+/**
+ * Interface for a provider of certain base directory locations.
+ * <p>
+ * Depending on the OS and preferred layout, some directories may coincide.
+ * @since 12855
+ */
+public interface IBaseDirectories {
+
+    /**
+     * Get the directory where user-specific configuration and preferences
+     * should be stored.
+     * @param createIfMissing if true, automatically creates this directory,
+     * in case it is missing
+     * @return the preferences directory
+     * @since 12856
+     */
+    File getPreferencesDirectory(boolean createIfMissing);
+
+    /**
+     * Get the directory where user-specific data files should be stored.
+     * @param createIfMissing if true, automatically creates this directory,
+     * in case it is missing
+     * @return the user data directory
+     * @since 12856
+     */
+    File getUserDataDirectory(boolean createIfMissing);
+
+    /**
+     * Get the directory where user-specific cached content (non-essential data)
+     * should be stored.
+     * @param createIfMissing if true, automatically creates this directory,
+     * in case it is missing
+     * @return the cache directory
+     * @since 12856
+     */
+    File getCacheDirectory(boolean createIfMissing);
+}
diff --git a/src/org/openstreetmap/josm/spi/preferences/IPreferences.java b/src/org/openstreetmap/josm/spi/preferences/IPreferences.java
new file mode 100644
index 0000000..4f96adb
--- /dev/null
+++ b/src/org/openstreetmap/josm/spi/preferences/IPreferences.java
@@ -0,0 +1,236 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.spi.preferences;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Interface for preference handling.
+ *
+ * Allows to save and retrieve user defined settings. The backend storage depends
+ * on the implementation.
+ * @since 12847
+ */
+public interface IPreferences {
+
+    /**
+     * Adds a new preferences listener.
+     * @param listener The listener to add
+     */
+    void addPreferenceChangeListener(PreferenceChangedListener listener);
+
+    /**
+     * Removes a preferences listener.
+     * @param listener The listener to remove
+     */
+    void removePreferenceChangeListener(PreferenceChangedListener listener);
+
+    /**
+     * Adds a listener that only listens to changes in one preference
+     * @param key The preference key to listen to
+     * @param listener The listener to add.
+     */
+    void addKeyPreferenceChangeListener(String key, PreferenceChangedListener listener);
+
+    /**
+     * Removes a listener that only listens to changes in one preference
+     * @param key The preference key to listen to
+     * @param listener The listener to add.
+     */
+    void removeKeyPreferenceChangeListener(String key, PreferenceChangedListener listener);
+
+    /**
+     * Get settings value for a certain key and provide a default value.
+     * @param key the identifier for the setting
+     * @param def the default value. For each call of get() with a given key, the
+     * default value must be the same. {@code def} may be null.
+     * @return the corresponding value if the property has been set before, {@code def} otherwise
+     */
+    String get(String key, String def);
+
+    /**
+     * Get settings value for a certain key.
+     * @param key the identifier for the setting
+     * @return "" if there is nothing set for the preference key, the corresponding value otherwise. The result is not null.
+     */
+    default String get(final String key) {
+        return get(key, "");
+    }
+
+    /**
+     * Set a value for a certain setting.
+     * @param key the unique identifier for the setting
+     * @param value the value of the setting. Can be null or "" which both removes the key-value entry.
+     * @return {@code true}, if something has changed (i.e. value is different than before)
+     */
+    boolean put(String key, String value);
+
+    /**
+     * Gets a boolean preference
+     * @param key The preference key
+     * @param def The default value to use
+     * @return The boolean, <code>false</code> if it could not be parsed, the default value if it is unset
+     */
+    boolean getBoolean(String key, boolean def);
+
+    /**
+     * Gets a boolean preference
+     * @param key The preference key
+     * @return The boolean or <code>false</code> if it could not be parsed
+     */
+    default boolean getBoolean(String key) {
+        return getBoolean(key, false);
+    }
+
+    /**
+     * Set a boolean value for a certain setting.
+     * @param key the unique identifier for the setting
+     * @param value The new value
+     * @return {@code true}, if something has changed (i.e. value is different than before)
+     * @since 12840
+     */
+    boolean putBoolean(String key, boolean value);
+
+    /**
+     * Gets an integer preference
+     * @param key The preference key
+     * @param def The default value to use
+     * @return The integer
+     * @since 12840
+     */
+    int getInt(String key, int def);
+
+    /**
+     * Set an integer value for a certain setting.
+     * @param key the unique identifier for the setting
+     * @param value The new value
+     * @return {@code true}, if something has changed (i.e. value is different than before)
+     * @since 12840
+     */
+    boolean putInt(String key, int value);
+
+    /**
+     * Gets a long preference
+     * @param key The preference key
+     * @param def The default value to use
+     * @return The long value or the default value if it could not be parsed
+     */
+    long getLong(String key, long def);
+
+    /**
+     * Set a long value for a certain setting.
+     * @param key the unique identifier for the setting
+     * @param value The new value
+     * @return {@code true}, if something has changed (i.e. value is different than before)
+     */
+    boolean putLong(String key, long value);
+
+    /**
+     * Gets a double preference
+     * @param key The preference key
+     * @param def The default value to use
+     * @return The double value or the default value if it could not be parsed
+     */
+    double getDouble(String key, double def);
+
+    /**
+     * Set a boolean value for a certain setting.
+     * @param key the unique identifier for the setting
+     * @param value The new value
+     * @return {@code true}, if something has changed (i.e. value is different than before)
+     * @since 12840
+     */
+    boolean putDouble(String key, double value);
+
+    /**
+     * Get a list of values for a certain key
+     * @param key the identifier for the setting
+     * @param def the default value.
+     * @return the corresponding value if the property has been set before, {@code def} otherwise
+     * @since 12840
+     */
+    List<String> getList(String key, List<String> def);
+
+    /**
+     * Get a list of values for a certain key
+     * @param key the identifier for the setting
+     * @return the corresponding value if the property has been set before, an
+     * empty list otherwise.
+     * @since 12840
+     */
+    default List<String> getList(String key) {
+        List<String> val = getList(key, null);
+        return val == null ? Collections.emptyList() : val;
+    }
+
+    /**
+     * Set a list of values for a certain key.
+     * @param key the identifier for the setting
+     * @param value The new value
+     * @return {@code true}, if something has changed (i.e. value is different than before)
+     * @since 12840
+     */
+    boolean putList(String key, List<String> value);
+
+    /**
+     * Get an array of values (list of lists) for a certain key
+     * @param key the identifier for the setting
+     * @param def the default value.
+     * @return the corresponding value if the property has been set before, {@code def} otherwise
+     * @since 12840
+     */
+    List<List<String>> getListOfLists(String key, List<List<String>> def);
+
+    /**
+     * Get an array of values (list of lists) for a certain key
+     * @param key the identifier for the setting
+     * @return the corresponding value if the property has been set before, an
+     * empty list otherwise
+     * @since 12840
+     */
+    default List<List<String>> getListOfLists(String key) {
+        List<List<String>> val = getListOfLists(key, null);
+        return val == null ? Collections.emptyList() : val;
+    }
+
+    /**
+     * Set an array of values (list of lists) for a certain key.
+     * @param key the identifier for the setting
+     * @param value the new value
+     * @return {@code true}, if something has changed (i.e. value is different than before)
+     * @since 12840
+     */
+    boolean putListOfLists(String key, List<List<String>> value);
+
+    /**
+     * Gets a list of key/value maps.
+     * @param key the key to search at
+     * @param def the default value to use
+     * @return the corresponding value if the property has been set before, {@code def} otherwise
+     * @since 12840
+     */
+    List<Map<String, String>> getListOfMaps(String key, List<Map<String, String>> def);
+
+    /**
+     * Gets a list of key/value maps.
+     * @param key the key to search at
+     * @return the corresponding value if the property has been set before, an
+     * empty list otherwise
+     * @since 12840
+     */
+    default List<Map<String, String>> getListOfMaps(String key) {
+        List<Map<String, String>> val = getListOfMaps(key, null);
+        return val == null ? Collections.emptyList() : val;
+    }
+
+    /**
+     * Set an a list of key/value maps.
+     * @param key the key to store the list in
+     * @param value a list of key/value maps
+     * @return <code>true</code> if the value was changed
+     * @since 12840
+     */
+    boolean putListOfMaps(String key, List<Map<String, String>> value);
+
+}
diff --git a/src/org/openstreetmap/josm/data/preferences/ListListSetting.java b/src/org/openstreetmap/josm/spi/preferences/ListListSetting.java
similarity index 94%
rename from src/org/openstreetmap/josm/data/preferences/ListListSetting.java
rename to src/org/openstreetmap/josm/spi/preferences/ListListSetting.java
index c4edd75..57266dd 100644
--- a/src/org/openstreetmap/josm/data/preferences/ListListSetting.java
+++ b/src/org/openstreetmap/josm/spi/preferences/ListListSetting.java
@@ -1,5 +1,5 @@
 // License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.data.preferences;
+package org.openstreetmap.josm.spi.preferences;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -8,7 +8,7 @@ import java.util.List;
 
 /**
  * Setting containing a {@link List} of {@code List}s of {@link String} values.
- * @since 9759
+ * @since 12881 (moved from package {@code org.openstreetmap.josm.data.preferences})
  */
 public class ListListSetting extends AbstractSetting<List<List<String>>> {
 
diff --git a/src/org/openstreetmap/josm/data/preferences/ListSetting.java b/src/org/openstreetmap/josm/spi/preferences/ListSetting.java
similarity index 90%
rename from src/org/openstreetmap/josm/data/preferences/ListSetting.java
rename to src/org/openstreetmap/josm/spi/preferences/ListSetting.java
index 7e66803..0d655b8 100644
--- a/src/org/openstreetmap/josm/data/preferences/ListSetting.java
+++ b/src/org/openstreetmap/josm/spi/preferences/ListSetting.java
@@ -1,5 +1,5 @@
 // License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.data.preferences;
+package org.openstreetmap.josm.spi.preferences;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -8,7 +8,7 @@ import java.util.List;
 
 /**
  * Setting containing a {@link List} of {@link String} values.
- * @since 9759
+ * @since 12881 (moved from package {@code org.openstreetmap.josm.data.preferences})
  */
 public class ListSetting extends AbstractSetting<List<String>> {
     /**
diff --git a/src/org/openstreetmap/josm/data/preferences/MapListSetting.java b/src/org/openstreetmap/josm/spi/preferences/MapListSetting.java
similarity index 93%
rename from src/org/openstreetmap/josm/data/preferences/MapListSetting.java
rename to src/org/openstreetmap/josm/spi/preferences/MapListSetting.java
index e3a1972..72c608c 100644
--- a/src/org/openstreetmap/josm/data/preferences/MapListSetting.java
+++ b/src/org/openstreetmap/josm/spi/preferences/MapListSetting.java
@@ -1,5 +1,5 @@
 // License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.data.preferences;
+package org.openstreetmap.josm.spi.preferences;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -9,7 +9,7 @@ import java.util.Map;
 
 /**
  * Setting containing a {@link List} of {@link Map}s of {@link String} values.
- * @since 9759
+ * @since 12881 (moved from package {@code org.openstreetmap.josm.data.preferences})
  */
 public class MapListSetting extends AbstractSetting<List<Map<String, String>>> {
 
diff --git a/src/org/openstreetmap/josm/spi/preferences/MemoryPreferences.java b/src/org/openstreetmap/josm/spi/preferences/MemoryPreferences.java
new file mode 100644
index 0000000..cee4d37
--- /dev/null
+++ b/src/org/openstreetmap/josm/spi/preferences/MemoryPreferences.java
@@ -0,0 +1,62 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.spi.preferences;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * Preferences implementation that keeps all settings in memory.
+ *
+ * Holds saved preferences for the current session, but does not retain any data when the
+ * program terminates.
+ *
+ * @since 12906
+ */
+public class MemoryPreferences extends AbstractPreferences {
+
+    private final Map<String, Setting<?>> settings = new HashMap<>();
+
+    @Override
+    public boolean putSetting(String key, Setting<?> setting) {
+        Setting current = settings.get(key);
+        if (setting == null) {
+            settings.remove(key);
+        } else {
+            settings.put(key, setting);
+        }
+        return Objects.equals(setting, current);
+    }
+
+    @Override
+    public <T extends Setting<?>> T getSetting(String key, T def, Class<T> klass) {
+        Setting current = settings.get(key);
+        if (current != null && klass.isInstance(current)) {
+            @SuppressWarnings("unchecked")
+            T result = (T) current;
+            return result;
+        }
+        return def;
+    }
+
+    @Override
+    public void addPreferenceChangeListener(PreferenceChangedListener listener) {
+        // do nothing
+    }
+
+    @Override
+    public void removePreferenceChangeListener(PreferenceChangedListener listener) {
+        // do nothing
+    }
+
+    @Override
+    public void addKeyPreferenceChangeListener(String key, PreferenceChangedListener listener) {
+        // do nothing
+    }
+
+    @Override
+    public void removeKeyPreferenceChangeListener(String key, PreferenceChangedListener listener) {
+        // do nothing
+    }
+
+}
diff --git a/src/org/openstreetmap/josm/spi/preferences/PreferenceChangeEvent.java b/src/org/openstreetmap/josm/spi/preferences/PreferenceChangeEvent.java
new file mode 100644
index 0000000..a10f9be
--- /dev/null
+++ b/src/org/openstreetmap/josm/spi/preferences/PreferenceChangeEvent.java
@@ -0,0 +1,28 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.spi.preferences;
+
+/**
+ * Event triggered when a preference entry value changes.
+ * @since 12881
+ */
+public interface PreferenceChangeEvent {
+
+    /**
+     * Returns the preference key.
+     * @return the preference key
+     */
+    String getKey();
+
+    /**
+     * Returns the old preference value.
+     * @return the old preference value
+     */
+    Setting<?> getOldValue();
+
+    /**
+     * Returns the new preference value.
+     * @return the new preference value
+     */
+    Setting<?> getNewValue();
+    
+}
diff --git a/src/org/openstreetmap/josm/spi/preferences/PreferenceChangedListener.java b/src/org/openstreetmap/josm/spi/preferences/PreferenceChangedListener.java
new file mode 100644
index 0000000..730dc7d
--- /dev/null
+++ b/src/org/openstreetmap/josm/spi/preferences/PreferenceChangedListener.java
@@ -0,0 +1,17 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.spi.preferences;
+
+/**
+ * Listener to preference change events.
+ * @since 12881
+ */
+ at FunctionalInterface
+public interface PreferenceChangedListener {
+
+    /**
+     * Triggered when a preference entry value changes.
+     * @param e the preference change event
+     */
+    void preferenceChanged(PreferenceChangeEvent e);
+    
+}
diff --git a/src/org/openstreetmap/josm/data/preferences/Setting.java b/src/org/openstreetmap/josm/spi/preferences/Setting.java
similarity index 91%
rename from src/org/openstreetmap/josm/data/preferences/Setting.java
rename to src/org/openstreetmap/josm/spi/preferences/Setting.java
index 24a632f..ebd3e0a 100644
--- a/src/org/openstreetmap/josm/data/preferences/Setting.java
+++ b/src/org/openstreetmap/josm/spi/preferences/Setting.java
@@ -1,7 +1,5 @@
 // License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.data.preferences;
-
-import org.openstreetmap.josm.data.Preferences;
+package org.openstreetmap.josm.spi.preferences;
 
 /**
  * Interface for a preference value.
@@ -9,7 +7,7 @@ import org.openstreetmap.josm.data.Preferences;
  * Implementations must provide a proper <code>equals</code> method.
  *
  * @param <T> the data type for the value
- * @since 9759
+ * @since 12881 (moved from package {@code org.openstreetmap.josm.data.preferences})
  */
 public interface Setting<T> {
     /**
@@ -71,7 +69,7 @@ public interface Setting<T> {
      *
      * For default preferences. A setting is marked as new, if it has been seen
      * in the current session.
-     * Methods like {@link Preferences#get(java.lang.String, java.lang.String)},
+     * Methods like {@link IPreferences#get(java.lang.String, java.lang.String)},
      * can be called from different parts of the code with the same key. In this case,
      * the supplied default value must match. However, this is only an error if the mismatching
      * default value has been seen in the same session (and not loaded from cache).
diff --git a/src/org/openstreetmap/josm/data/preferences/SettingVisitor.java b/src/org/openstreetmap/josm/spi/preferences/SettingVisitor.java
similarity index 84%
rename from src/org/openstreetmap/josm/data/preferences/SettingVisitor.java
rename to src/org/openstreetmap/josm/spi/preferences/SettingVisitor.java
index 53655a3..36681c8 100644
--- a/src/org/openstreetmap/josm/data/preferences/SettingVisitor.java
+++ b/src/org/openstreetmap/josm/spi/preferences/SettingVisitor.java
@@ -1,9 +1,9 @@
 // License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.data.preferences;
+package org.openstreetmap.josm.spi.preferences;
 
 /**
  * Visitor interface for {@link Setting} implementations.
- * @since 9759
+ * @since 12881 (moved from package {@code org.openstreetmap.josm.data.preferences})
  */
 public interface SettingVisitor {
     /**
diff --git a/src/org/openstreetmap/josm/data/preferences/StringSetting.java b/src/org/openstreetmap/josm/spi/preferences/StringSetting.java
similarity index 83%
rename from src/org/openstreetmap/josm/data/preferences/StringSetting.java
rename to src/org/openstreetmap/josm/spi/preferences/StringSetting.java
index ad71f13..dfc0959 100644
--- a/src/org/openstreetmap/josm/data/preferences/StringSetting.java
+++ b/src/org/openstreetmap/josm/spi/preferences/StringSetting.java
@@ -1,9 +1,9 @@
 // License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.data.preferences;
+package org.openstreetmap.josm.spi.preferences;
 
 /**
  * Setting containing a {@link String} value.
- * @since 9759
+ * @since 12881 (moved from package {@code org.openstreetmap.josm.data.preferences})
  */
 public class StringSetting extends AbstractSetting<String> {
     /**
diff --git a/src/org/openstreetmap/josm/spi/preferences/package-info.java b/src/org/openstreetmap/josm/spi/preferences/package-info.java
new file mode 100644
index 0000000..00369a9
--- /dev/null
+++ b/src/org/openstreetmap/josm/spi/preferences/package-info.java
@@ -0,0 +1,6 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Service for preferences and base directory lookup.
+ */
+package org.openstreetmap.josm.spi.preferences;
diff --git a/src/org/openstreetmap/josm/tools/AlphanumComparator.java b/src/org/openstreetmap/josm/tools/AlphanumComparator.java
index f4c38f5..11f580b 100644
--- a/src/org/openstreetmap/josm/tools/AlphanumComparator.java
+++ b/src/org/openstreetmap/josm/tools/AlphanumComparator.java
@@ -8,20 +8,27 @@ package org.openstreetmap.josm.tools;
  *
  * The Alphanum Algorithm is discussed at http://www.DaveKoelle.com
  *
+ * Released under the MIT License - https://opensource.org/licenses/MIT
  *
- * This library is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2.1 of the License, or any later version.
+ * Copyright 2007-2017 David Koelle
  *
- * This library is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
- * details.
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
  *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this library; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
  *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+ * USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
 import java.io.Serializable;
 import java.text.Collator;
@@ -36,7 +43,7 @@ import java.util.Locale;
  * The Alphanum Algorithm is discussed at http://www.DaveKoelle.com
  *
  * This is an updated version with enhancements made by Daniel Migowski, Andre
- * Bogus, and David Koelle and others.
+ * Bogus, David Koelle and others.
  *
  */
 public final class AlphanumComparator implements Comparator<String>, Serializable {
diff --git a/src/org/openstreetmap/josm/tools/CheckParameterUtil.java b/src/org/openstreetmap/josm/tools/CheckParameterUtil.java
index 923c1ce..8e3fe5e 100644
--- a/src/org/openstreetmap/josm/tools/CheckParameterUtil.java
+++ b/src/org/openstreetmap/josm/tools/CheckParameterUtil.java
@@ -2,6 +2,8 @@
 package org.openstreetmap.josm.tools;
 
 import java.text.MessageFormat;
+import java.util.function.Predicate;
+import java.util.function.Supplier;
 
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.coor.LatLon;
@@ -20,11 +22,55 @@ public final class CheckParameterUtil {
     }
 
     /**
+     * Ensures that a parameter is not null and that a certain condition holds.
+     * @param <T> parameter type
+     * @param obj parameter value
+     * @param parameterName parameter name
+     * @param conditionMsg string, stating the condition
+     * @param condition the condition to check
+     * @throws IllegalArgumentException in case the object is null or the condition
+     * is violated
+     * @since 12713
+     */
+    public static <T> void ensure(T obj, String parameterName, String conditionMsg, Predicate<T> condition) {
+        ensureParameterNotNull(obj, parameterName);
+        if (!condition.test(obj))
+            throw new IllegalArgumentException(
+                    MessageFormat.format("Parameter value ''{0}'' of type {1} is invalid, violated condition: ''{2}'', got ''{3}''",
+                            parameterName,
+                            obj.getClass().getCanonicalName(),
+                            conditionMsg,
+                            obj));
+    }
+
+    /**
+     * Ensures that a parameter is not null and that a certain condition holds.
+     * @param <T> parameter type
+     * @param obj parameter value
+     * @param parameterName parameter name
+     * @param condition the condition to check
+     * @throws IllegalArgumentException in case the object is null or the condition
+     * is violated
+     * @since 12713
+     */
+    public static <T> void ensure(T obj, String parameterName, Predicate<T> condition) {
+        ensureParameterNotNull(obj, parameterName);
+        if (!condition.test(obj))
+            throw new IllegalArgumentException(
+                    MessageFormat.format("Parameter value ''{0}'' of type {1} is invalid, got ''{2}''",
+                            parameterName,
+                            obj.getClass().getCanonicalName(),
+                            obj));
+    }
+
+    /**
      * Ensures an OSM primitive ID is valid
      * @param id The id to check
      * @param parameterName The parameter name
      * @throws IllegalArgumentException if the primitive ID is not valid (negative or zero)
+     * @deprecated use {@link #ensure(Object, String, String, Predicate)}
      */
+    @Deprecated
     public static void ensureValidPrimitiveId(PrimitiveId id, String parameterName) {
         ensureParameterNotNull(id, parameterName);
         if (id.getUniqueId() <= 0)
@@ -38,7 +84,9 @@ public final class CheckParameterUtil {
      * @param parameterName The parameter name
      * @throws IllegalArgumentException if the lat/lon are {@code null} or not valid
      * @since 5980
+     * @deprecated use {@link #ensure(Object, String, Predicate)}
      */
+    @Deprecated
     public static void ensureValidCoordinates(LatLon latlon, String parameterName) {
         ensureParameterNotNull(latlon, parameterName);
         if (!latlon.isValid())
@@ -52,7 +100,9 @@ public final class CheckParameterUtil {
      * @param parameterName The parameter name
      * @throws IllegalArgumentException if the east/north are {@code null} or not valid
      * @since 5980
+     * @deprecated use {@link #ensure(Object, String, Predicate)}
      */
+    @Deprecated
     public static void ensureValidCoordinates(EastNorth eastnorth, String parameterName) {
         ensureParameterNotNull(eastnorth, parameterName);
         if (!eastnorth.isValid())
@@ -65,7 +115,9 @@ public final class CheckParameterUtil {
      * @param version The version to check
      * @param parameterName The parameter name
      * @throws IllegalArgumentException if the version is not valid (negative)
+     * @deprecated use {@link #ensure(Object, String, String, Predicate)}
      */
+    @Deprecated
     public static void ensureValidVersion(long version, String parameterName) {
         if (version < 0)
             throw new IllegalArgumentException(
@@ -99,6 +151,7 @@ public final class CheckParameterUtil {
      * @param condition The condition to check
      * @param message error message
      * @throws IllegalArgumentException if the condition does not hold
+     * @see #ensureThat(boolean, Supplier)
      */
     public static void ensureThat(boolean condition, String message) {
         if (!condition)
@@ -106,13 +159,31 @@ public final class CheckParameterUtil {
     }
 
     /**
+     * Ensures that the condition {@code condition} holds.
+     *
+     * This method can be used when the message is not a plain string literal,
+     * but somehow constructed. Using a {@link Supplier} improves the performance,
+     * as the string construction is skipped when the condition holds.
+     * @param condition The condition to check
+     * @param messageSupplier supplier of the error message
+     * @throws IllegalArgumentException if the condition does not hold
+     * @since 12822
+     */
+    public static void ensureThat(boolean condition, Supplier<String> messageSupplier) {
+        if (!condition)
+            throw new IllegalArgumentException(messageSupplier.get());
+    }
+
+    /**
      * Ensures that <code>id</code> is non-null primitive id of type {@link OsmPrimitiveType#NODE}
      *
      * @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
+     * @deprecated use {@link #ensure(Object, String, String, Predicate)}
      */
+    @Deprecated
     public static void ensureValidNodeId(PrimitiveId id, String parameterName) {
         ensureParameterNotNull(id, parameterName);
         if (!id.getType().equals(OsmPrimitiveType.NODE))
diff --git a/src/org/openstreetmap/josm/tools/Diff.java b/src/org/openstreetmap/josm/tools/Diff.java
index d0f857e..da5bc5e 100644
--- a/src/org/openstreetmap/josm/tools/Diff.java
+++ b/src/org/openstreetmap/josm/tools/Diff.java
@@ -569,7 +569,7 @@ public class Diff {
          * @return 0=nondiscardable, 1=discardable or 2=provisionally discardable for each line
          * @see #equivCount()
          */
-        private byte[] discardable(final int ... counts) {
+        private byte[] discardable(final int... counts) {
             final int end = bufferedLines;
             final byte[] discards = new byte[end];
             final int[] equivs = this.equivs;
diff --git a/src/org/openstreetmap/josm/tools/Geometry.java b/src/org/openstreetmap/josm/tools/Geometry.java
index 9148fdb..379192e 100644
--- a/src/org/openstreetmap/josm/tools/Geometry.java
+++ b/src/org/openstreetmap/josm/tools/Geometry.java
@@ -34,9 +34,6 @@ import org.openstreetmap.josm.data.osm.visitor.paint.relations.Multipolygon;
 import org.openstreetmap.josm.data.osm.visitor.paint.relations.MultipolygonCache;
 import org.openstreetmap.josm.data.projection.Projection;
 import org.openstreetmap.josm.data.projection.Projections;
-import org.openstreetmap.josm.gui.MainApplication;
-import org.openstreetmap.josm.gui.MapFrame;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 
 /**
  * Some tools for geometry related tasks.
@@ -102,7 +99,6 @@ public final class Geometry {
             changedWays[pos] = false;
         }
 
-        OsmDataLayer layer = MainApplication.getLayerManager().getEditLayer();
         DataSet dataset = ways.get(0).getDataSet();
 
         //iterate over all way pairs and introduce the intersections
@@ -209,7 +205,7 @@ public final class Geometry {
                                 intersectionNodes.add(intNode);
 
                                 if (intNode == newNode) {
-                                    cmds.add(layer != null ? new AddCommand(layer, intNode) : new AddCommand(dataset, intNode));
+                                    cmds.add(new AddCommand(dataset, intNode));
                                 }
                             }
                         } else if (test && !intersectionNodes.isEmpty())
@@ -229,7 +225,7 @@ public final class Geometry {
             Way newWay = new Way(way);
             newWay.setNodes(newNodes[pos]);
 
-            cmds.add(new ChangeCommand(way, newWay));
+            cmds.add(new ChangeCommand(dataset, way, newWay));
         }
 
         return intersectionNodes;
@@ -291,10 +287,10 @@ public final class Geometry {
      */
     public static EastNorth getSegmentSegmentIntersection(EastNorth p1, EastNorth p2, EastNorth p3, EastNorth p4) {
 
-        CheckParameterUtil.ensureValidCoordinates(p1, "p1");
-        CheckParameterUtil.ensureValidCoordinates(p2, "p2");
-        CheckParameterUtil.ensureValidCoordinates(p3, "p3");
-        CheckParameterUtil.ensureValidCoordinates(p4, "p4");
+        CheckParameterUtil.ensure(p1, "p1", EastNorth::isValid);
+        CheckParameterUtil.ensure(p2, "p2", EastNorth::isValid);
+        CheckParameterUtil.ensure(p3, "p3", EastNorth::isValid);
+        CheckParameterUtil.ensure(p4, "p4", EastNorth::isValid);
 
         double x1 = p1.getX();
         double y1 = p1.getY();
@@ -356,10 +352,10 @@ public final class Geometry {
      */
     public static EastNorth getLineLineIntersection(EastNorth p1, EastNorth p2, EastNorth p3, EastNorth p4) {
 
-        CheckParameterUtil.ensureValidCoordinates(p1, "p1");
-        CheckParameterUtil.ensureValidCoordinates(p2, "p2");
-        CheckParameterUtil.ensureValidCoordinates(p3, "p3");
-        CheckParameterUtil.ensureValidCoordinates(p4, "p4");
+        CheckParameterUtil.ensure(p1, "p1", EastNorth::isValid);
+        CheckParameterUtil.ensure(p2, "p2", EastNorth::isValid);
+        CheckParameterUtil.ensure(p3, "p3", EastNorth::isValid);
+        CheckParameterUtil.ensure(p4, "p4", EastNorth::isValid);
 
         // Basically, the formula from wikipedia is used:
         //  https://en.wikipedia.org/wiki/Line%E2%80%93line_intersection
@@ -399,10 +395,10 @@ public final class Geometry {
      */
     public static boolean segmentsParallel(EastNorth p1, EastNorth p2, EastNorth p3, EastNorth p4) {
 
-        CheckParameterUtil.ensureValidCoordinates(p1, "p1");
-        CheckParameterUtil.ensureValidCoordinates(p2, "p2");
-        CheckParameterUtil.ensureValidCoordinates(p3, "p3");
-        CheckParameterUtil.ensureValidCoordinates(p4, "p4");
+        CheckParameterUtil.ensure(p1, "p1", EastNorth::isValid);
+        CheckParameterUtil.ensure(p2, "p2", EastNorth::isValid);
+        CheckParameterUtil.ensure(p3, "p3", EastNorth::isValid);
+        CheckParameterUtil.ensure(p4, "p4", EastNorth::isValid);
 
         // Convert line from (point, point) form to ax+by=c
         double a1 = p2.getY() - p1.getY();
@@ -485,9 +481,9 @@ public final class Geometry {
      */
     public static boolean angleIsClockwise(EastNorth commonNode, EastNorth firstNode, EastNorth secondNode) {
 
-        CheckParameterUtil.ensureValidCoordinates(commonNode, "commonNode");
-        CheckParameterUtil.ensureValidCoordinates(firstNode, "firstNode");
-        CheckParameterUtil.ensureValidCoordinates(secondNode, "secondNode");
+        CheckParameterUtil.ensure(commonNode, "commonNode", EastNorth::isValid);
+        CheckParameterUtil.ensure(firstNode, "firstNode", EastNorth::isValid);
+        CheckParameterUtil.ensure(secondNode, "secondNode", EastNorth::isValid);
 
         double dy1 = firstNode.getY() - commonNode.getY();
         double dy2 = secondNode.getY() - commonNode.getY();
@@ -554,10 +550,7 @@ public final class Geometry {
      * @return Area for the multipolygon (LatLon coordinates)
      */
     public static Area getAreaLatLon(Relation multipolygon) {
-        MapFrame map = MainApplication.getMap();
-        final Multipolygon mp = map == null || map.mapView == null
-                ? new Multipolygon(multipolygon)
-                : MultipolygonCache.getInstance().get(multipolygon);
+        final Multipolygon mp = MultipolygonCache.getInstance().get(multipolygon);
         Path2D path = new Path2D.Double();
         path.setWindingRule(Path2D.WIND_EVEN_ODD);
         for (Multipolygon.PolyData pd : mp.getCombinedPolygons()) {
@@ -695,10 +688,7 @@ public final class Geometry {
      */
     public static double multipolygonArea(Relation multipolygon) {
         double area = 0.0;
-        MapFrame map = MainApplication.getMap();
-        final Multipolygon mp = map == null || map.mapView == null
-                ? new Multipolygon(multipolygon)
-                : MultipolygonCache.getInstance().get(multipolygon);
+        final Multipolygon mp = MultipolygonCache.getInstance().get(multipolygon);
         for (Multipolygon.PolyData pd : mp.getCombinedPolygons()) {
             area += pd.getAreaAndPerimeter(Projections.getProjectionByCode("EPSG:54008")).getArea();
         }
@@ -770,8 +760,8 @@ public final class Geometry {
      */
     public static double getSegmentAngle(EastNorth p1, EastNorth p2) {
 
-        CheckParameterUtil.ensureValidCoordinates(p1, "p1");
-        CheckParameterUtil.ensureValidCoordinates(p2, "p2");
+        CheckParameterUtil.ensure(p1, "p1", EastNorth::isValid);
+        CheckParameterUtil.ensure(p2, "p2", EastNorth::isValid);
 
         return Math.atan2(p2.north() - p1.north(), p2.east() - p1.east());
     }
@@ -786,9 +776,9 @@ public final class Geometry {
      */
     public static double getCornerAngle(EastNorth p1, EastNorth p2, EastNorth p3) {
 
-        CheckParameterUtil.ensureValidCoordinates(p1, "p1");
-        CheckParameterUtil.ensureValidCoordinates(p2, "p2");
-        CheckParameterUtil.ensureValidCoordinates(p3, "p3");
+        CheckParameterUtil.ensure(p1, "p1", EastNorth::isValid);
+        CheckParameterUtil.ensure(p2, "p2", EastNorth::isValid);
+        CheckParameterUtil.ensure(p3, "p3", EastNorth::isValid);
 
         Double result = getSegmentAngle(p2, p1) - getSegmentAngle(p2, p3);
         if (result <= -Math.PI) {
diff --git a/src/org/openstreetmap/josm/tools/GuiSizesHelper.java b/src/org/openstreetmap/josm/tools/GuiSizesHelper.java
index 3c3f2c9..2e4d386 100644
--- a/src/org/openstreetmap/josm/tools/GuiSizesHelper.java
+++ b/src/org/openstreetmap/josm/tools/GuiSizesHelper.java
@@ -5,7 +5,7 @@ import java.awt.Dimension;
 import java.awt.GraphicsEnvironment;
 import java.awt.Toolkit;
 
-import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.spi.preferences.Config;
 
 /**
  * Support class to handle size information of Gui elements
@@ -31,7 +31,7 @@ public final class GuiSizesHelper {
         if (screenDPI == -1) {
             synchronized (GuiSizesHelper.class) {
                 if (screenDPI == -1) {
-                    float scalePref = (float) Main.pref.getDouble("gui.scale", 1.0);
+                    float scalePref = (float) Config.getPref().getDouble("gui.scale", 1.0);
                     if (scalePref != 0) {
                         screenDPI = 96f * scalePref;
                     } else {
diff --git a/src/org/openstreetmap/josm/tools/HiDPISupport.java b/src/org/openstreetmap/josm/tools/HiDPISupport.java
new file mode 100644
index 0000000..53567dd
--- /dev/null
+++ b/src/org/openstreetmap/josm/tools/HiDPISupport.java
@@ -0,0 +1,266 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.tools;
+
+import java.awt.Dimension;
+import java.awt.GraphicsConfiguration;
+import java.awt.GraphicsEnvironment;
+import java.awt.Image;
+import java.awt.geom.AffineTransform;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+
+import javax.swing.ImageIcon;
+
+/**
+ * Helper class for HiDPI support.
+ *
+ * Gives access to the class <code>BaseMultiResolutionImage</code> via reflection,
+ * in case it is on classpath. This is to be expected for Java 9, but not for Java 8 runtime.
+ *
+ * @since 12722
+ */
+public final class HiDPISupport {
+
+    private static volatile Optional<Class<? extends Image>> baseMultiResolutionImageClass;
+    private static volatile Optional<Constructor<? extends Image>> baseMultiResolutionImageConstructor;
+    private static volatile Optional<Method> resolutionVariantsMethod;
+
+    private HiDPISupport() {
+        // Hide default constructor
+    }
+
+    /**
+     * Create a multi-resolution image from a base image and an {@link ImageResource}.
+     * <p>
+     * Will only return multi-resolution image, if HiDPI-mode is detected. Then
+     * the image stack will consist of the base image and one that fits the
+     * HiDPI scale of the main display.
+     * @param base the base image
+     * @param ir a corresponding image resource
+     * @return multi-resolution image if necessary and possible, the base image otherwise
+     */
+    public static Image getMultiResolutionImage(Image base, ImageResource ir) {
+        double uiScale = getHiDPIScale();
+        if (uiScale != 1.0 && getBaseMultiResolutionImageConstructor().isPresent()) {
+            ImageIcon zoomed = ir.getImageIcon(new Dimension(
+                    (int) Math.round(base.getWidth(null) * uiScale),
+                    (int) Math.round(base.getHeight(null) * uiScale)), false);
+            Image mrImg = getMultiResolutionImage(Arrays.asList(base, zoomed.getImage()));
+            if (mrImg != null) return mrImg;
+        }
+        return base;
+    }
+
+    /**
+     * Create a multi-resolution image from a list of images.
+     * @param imgs the images, supposedly the same image at different resolutions,
+     * must not be empty
+     * @return corresponding multi-resolution image, if possible, the first image
+     * in the list otherwise
+     */
+    public static Image getMultiResolutionImage(List<Image> imgs) {
+        CheckParameterUtil.ensure(imgs, "imgs", "not empty", ls -> !ls.isEmpty());
+        Optional<Constructor<? extends Image>> baseMrImageConstructor = getBaseMultiResolutionImageConstructor();
+        if (baseMrImageConstructor.isPresent()) {
+            try {
+                return baseMrImageConstructor.get().newInstance((Object) imgs.toArray(new Image[0]));
+            } catch (InstantiationException | IllegalAccessException | InvocationTargetException ex) {
+                Logging.error("Unexpected error while instantiating object of class BaseMultiResolutionImage: " + ex);
+            }
+        }
+        return imgs.get(0);
+    }
+
+    /**
+     * Wrapper for the method <code>java.awt.image.BaseMultiResolutionImage#getBaseImage()</code>.
+     * <p>
+     * Will return the argument <code>img</code> unchanged, if it is not a multi-resolution image.
+     * @param img the image
+     * @return if <code>img</code> is a <code>java.awt.image.BaseMultiResolutionImage</code>,
+     * then the base image, otherwise the image itself
+     */
+    public static Image getBaseImage(Image img) {
+        Optional<Class<? extends Image>> baseMrImageClass = getBaseMultiResolutionImageClass();
+        Optional<Method> resVariantsMethod = getResolutionVariantsMethod();
+        if (!baseMrImageClass.isPresent() || !resVariantsMethod.isPresent()) {
+            return img;
+        }
+        if (baseMrImageClass.get().isInstance(img)) {
+            try {
+                @SuppressWarnings("unchecked")
+                List<Image> imgVars = (List<Image>) resVariantsMethod.get().invoke(img);
+                if (!imgVars.isEmpty()) {
+                    return imgVars.get(0);
+                }
+            } catch (IllegalAccessException | InvocationTargetException ex) {
+                Logging.error("Unexpected error while calling method: " + ex);
+            }
+        }
+        return img;
+    }
+
+    /**
+     * Wrapper for the method <code>java.awt.image.MultiResolutionImage#getResolutionVariants()</code>.
+     * <p>
+     * Will return the argument as a singleton list, in case it is not a multi-resolution image.
+     * @param img the image
+     * @return if <code>img</code> is a <code>java.awt.image.BaseMultiResolutionImage</code>,
+     * then the result of the method <code>#getResolutionVariants()</code>, otherwise the image
+     * itself as a singleton list
+     */
+    public static List<Image> getResolutionVariants(Image img) {
+        Optional<Class<? extends Image>> baseMrImageClass = getBaseMultiResolutionImageClass();
+        Optional<Method> resVariantsMethod = getResolutionVariantsMethod();
+        if (!baseMrImageClass.isPresent() || !resVariantsMethod.isPresent()) {
+            return Collections.singletonList(img);
+        }
+        if (baseMrImageClass.get().isInstance(img)) {
+            try {
+                @SuppressWarnings("unchecked")
+                List<Image> imgVars = (List<Image>) resVariantsMethod.get().invoke(img);
+                if (!imgVars.isEmpty()) {
+                    return imgVars;
+                }
+            } catch (IllegalAccessException | InvocationTargetException ex) {
+                Logging.error("Unexpected error while calling method: " + ex);
+            }
+        }
+        return Collections.singletonList(img);
+    }
+
+    /**
+     * Detect the GUI scale for HiDPI mode.
+     * <p>
+     * This method may not work as expected for a multi-monitor setup. It will
+     * only take the default screen device into account.
+     * @return the GUI scale for HiDPI mode, a value of 1.0 means standard mode.
+     */
+    private static double getHiDPIScale() {
+        if (GraphicsEnvironment.isHeadless())
+            return 1.0;
+        GraphicsConfiguration gc = GraphicsEnvironment
+                .getLocalGraphicsEnvironment()
+                .getDefaultScreenDevice().
+                getDefaultConfiguration();
+        AffineTransform transform = gc.getDefaultTransform();
+        if (!Utils.equalsEpsilon(transform.getScaleX(), transform.getScaleY())) {
+            Logging.warn("Unexpected ui transform: " + transform);
+        }
+        return transform.getScaleX();
+    }
+
+    /**
+     * Perform an operation on multi-resolution images.
+     *
+     * When input image is not multi-resolution, it will simply apply the processor once.
+     * Otherwise, the processor will be called for each resolution variant and the
+     * resulting images assembled to become the output multi-resolution image.
+     * @param img input image, possibly multi-resolution
+     * @param processor processor taking a plain image as input and returning a single
+     * plain image as output
+     * @return multi-resolution image assembled from the output of calls to <code>processor</code>
+     * for each resolution variant
+     */
+    public static Image processMRImage(Image img, Function<Image, Image> processor) {
+        return processMRImages(Collections.singletonList(img), imgs -> processor.apply(imgs.get(0)));
+    }
+
+    /**
+     * Perform an operation on multi-resolution images.
+     *
+     * When input images are not multi-resolution, it will simply apply the processor once.
+     * Otherwise, the processor will be called for each resolution variant and the
+     * resulting images assembled to become the output multi-resolution image.
+     * @param imgs input images, possibly multi-resolution
+     * @param processor processor taking a list of plain images as input and returning
+     * a single plain image as output
+     * @return multi-resolution image assembled from the output of calls to <code>processor</code>
+     * for each resolution variant
+     */
+    public static Image processMRImages(List<Image> imgs, Function<List<Image>, Image> processor) {
+        CheckParameterUtil.ensureThat(imgs.size() >= 1, "at least on element expected");
+        if (!getBaseMultiResolutionImageClass().isPresent()) {
+            return processor.apply(imgs);
+        }
+        List<List<Image>> allVars = imgs.stream().map(HiDPISupport::getResolutionVariants).collect(Collectors.toList());
+        int maxVariants = allVars.stream().mapToInt(lst -> lst.size()).max().getAsInt();
+        if (maxVariants == 1)
+            return processor.apply(imgs);
+        List<Image> imgsProcessed = IntStream.range(0, maxVariants)
+                .mapToObj(
+                        k -> processor.apply(
+                                allVars.stream().map(vars -> vars.get(k)).collect(Collectors.toList())
+                        )
+                ).collect(Collectors.toList());
+        return getMultiResolutionImage(imgsProcessed);
+    }
+
+    private static Optional<Class<? extends Image>> getBaseMultiResolutionImageClass() {
+        if (baseMultiResolutionImageClass == null) {
+            synchronized (HiDPISupport.class) {
+                if (baseMultiResolutionImageClass == null) {
+                    try {
+                        @SuppressWarnings("unchecked")
+                        Class<? extends Image> c = (Class<? extends Image>) Class.forName("java.awt.image.BaseMultiResolutionImage");
+                        baseMultiResolutionImageClass = Optional.ofNullable(c);
+                    } catch (ClassNotFoundException ex) {
+                        // class is not present in Java 8
+                        baseMultiResolutionImageClass = Optional.empty();
+                        Logging.trace(ex);
+                    }
+                }
+            }
+        }
+        return baseMultiResolutionImageClass;
+    }
+
+    private static Optional<Constructor<? extends Image>> getBaseMultiResolutionImageConstructor() {
+        if (baseMultiResolutionImageConstructor == null) {
+            synchronized (HiDPISupport.class) {
+                if (baseMultiResolutionImageConstructor == null) {
+                    getBaseMultiResolutionImageClass().ifPresent(klass -> {
+                        try {
+                            Constructor<? extends Image> constr = klass.getConstructor(Image[].class);
+                            baseMultiResolutionImageConstructor = Optional.ofNullable(constr);
+                        } catch (NoSuchMethodException ex) {
+                            Logging.error("Cannot find expected constructor: " + ex);
+                        }
+                    });
+                    if (baseMultiResolutionImageConstructor == null) {
+                        baseMultiResolutionImageConstructor = Optional.empty();
+                    }
+                }
+            }
+        }
+        return baseMultiResolutionImageConstructor;
+    }
+
+    private static Optional<Method> getResolutionVariantsMethod() {
+        if (resolutionVariantsMethod == null) {
+            synchronized (HiDPISupport.class) {
+                if (resolutionVariantsMethod == null) {
+                    getBaseMultiResolutionImageClass().ifPresent(klass -> {
+                        try {
+                            Method m = klass.getMethod("getResolutionVariants");
+                            resolutionVariantsMethod = Optional.ofNullable(m);
+                        } catch (NoSuchMethodException ex) {
+                            Logging.error("Cannot find expected method: "+ex);
+                        }
+                    });
+                    if (resolutionVariantsMethod == null) {
+                        resolutionVariantsMethod = Optional.empty();
+                    }
+                }
+            }
+        }
+        return resolutionVariantsMethod;
+    }
+}
diff --git a/src/org/openstreetmap/josm/tools/HttpClient.java b/src/org/openstreetmap/josm/tools/HttpClient.java
index acf6413..1c29e6c 100644
--- a/src/org/openstreetmap/josm/tools/HttpClient.java
+++ b/src/org/openstreetmap/josm/tools/HttpClient.java
@@ -35,6 +35,7 @@ import org.openstreetmap.josm.io.ProgressInputStream;
 import org.openstreetmap.josm.io.ProgressOutputStream;
 import org.openstreetmap.josm.io.UTFInputStreamReader;
 import org.openstreetmap.josm.io.auth.DefaultAuthenticator;
+import org.openstreetmap.josm.spi.preferences.Config;
 
 /**
  * Provides a uniform access for a HTTP/HTTPS server. This class should be used in favour of {@link HttpURLConnection}.
@@ -44,12 +45,12 @@ public final class HttpClient {
 
     private URL url;
     private final String requestMethod;
-    private int connectTimeout = (int) TimeUnit.SECONDS.toMillis(Main.pref.getInteger("socket.timeout.connect", 15));
-    private int readTimeout = (int) TimeUnit.SECONDS.toMillis(Main.pref.getInteger("socket.timeout.read", 30));
+    private int connectTimeout = (int) TimeUnit.SECONDS.toMillis(Config.getPref().getInt("socket.timeout.connect", 15));
+    private int readTimeout = (int) TimeUnit.SECONDS.toMillis(Config.getPref().getInt("socket.timeout.read", 30));
     private byte[] requestBody;
     private long ifModifiedSince;
     private final Map<String, String> headers = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
-    private int maxRedirects = Main.pref.getInteger("socket.maxredirects", 5);
+    private int maxRedirects = Config.getPref().getInt("socket.maxredirects", 5);
     private boolean useCache;
     private String reasonForRequest;
     private String outputMessage = tr("Uploading data ...");
diff --git a/src/org/openstreetmap/josm/tools/ImageOverlay.java b/src/org/openstreetmap/josm/tools/ImageOverlay.java
index 6aafe9f..0bb61c6 100644
--- a/src/org/openstreetmap/josm/tools/ImageOverlay.java
+++ b/src/org/openstreetmap/josm/tools/ImageOverlay.java
@@ -6,8 +6,6 @@ import java.awt.image.BufferedImage;
 
 import javax.swing.ImageIcon;
 
-import org.openstreetmap.josm.gui.layer.ImageProcessor;
-
 /** class to describe how image overlay
  * @since 8095
  */
@@ -80,9 +78,7 @@ public class ImageOverlay implements ImageProcessor {
             height = (int) (h*(offsetBottom-offsetTop));
         }
         ImageIcon overlay;
-        if (width != -1 || height != -1) {
-            image = new ImageProvider(image).resetMaxSize(new Dimension(width, height));
-        }
+        image = new ImageProvider(image).setMaxSize(new Dimension(width, height));
         overlay = image.get();
         int x, y;
         if (width == -1 && offsetLeft < 0) {
diff --git a/src/org/openstreetmap/josm/gui/layer/ImageProcessor.java b/src/org/openstreetmap/josm/tools/ImageProcessor.java
similarity index 75%
rename from src/org/openstreetmap/josm/gui/layer/ImageProcessor.java
rename to src/org/openstreetmap/josm/tools/ImageProcessor.java
index 3ee6ad9..1869234 100644
--- a/src/org/openstreetmap/josm/gui/layer/ImageProcessor.java
+++ b/src/org/openstreetmap/josm/tools/ImageProcessor.java
@@ -1,23 +1,24 @@
 // License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui.layer;
+package org.openstreetmap.josm.tools;
 
 import java.awt.image.BufferedImage;
 
 /**
  * Processor that modifies images (sharpen, brightness, etc.).
- * This interface is used by {@link ImageryLayer}s to filter the
+ * This interface is used by imagery layers to filter the
  * displayed images (implemented in plugins).
  *
  * @author Nipel-Crumple
  * @since  8625 (creation)
  * @since 10600 (functional interface)
+ * @since 12782 (moved from {@code gui.layer} package)
  */
 @FunctionalInterface
 public interface ImageProcessor {
 
     /**
      * This method should process given image according to image processors
-     * which is contained in the {@link Layer}
+     * which is contained in the layer
      *
      * @param image that should be processed
      *
diff --git a/src/org/openstreetmap/josm/tools/ImageProvider.java b/src/org/openstreetmap/josm/tools/ImageProvider.java
index 6c0d150..6cc4243 100644
--- a/src/org/openstreetmap/josm/tools/ImageProvider.java
+++ b/src/org/openstreetmap/josm/tools/ImageProvider.java
@@ -29,16 +29,17 @@ import java.io.StringReader;
 import java.net.URI;
 import java.net.URL;
 import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Base64;
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Hashtable;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.TreeSet;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutorService;
@@ -70,7 +71,7 @@ import org.openstreetmap.josm.gui.mappaint.styleelement.StyleElement;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresets;
 import org.openstreetmap.josm.io.CachedFile;
-import org.openstreetmap.josm.plugins.PluginHandler;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
@@ -121,15 +122,15 @@ public class ImageProvider {
      */
     public enum ImageSizes {
         /** SMALL_ICON value of an Action */
-        SMALLICON(Main.pref.getInteger("iconsize.smallicon", 16)),
+        SMALLICON(Config.getPref().getInt("iconsize.smallicon", 16)),
         /** LARGE_ICON_KEY value of an Action */
-        LARGEICON(Main.pref.getInteger("iconsize.largeicon", 24)),
+        LARGEICON(Config.getPref().getInt("iconsize.largeicon", 24)),
         /** map icon */
-        MAP(Main.pref.getInteger("iconsize.map", 16)),
+        MAP(Config.getPref().getInt("iconsize.map", 16)),
         /** map icon maximum size */
-        MAPMAX(Main.pref.getInteger("iconsize.mapmax", 48)),
+        MAPMAX(Config.getPref().getInt("iconsize.mapmax", 48)),
         /** cursor icon size */
-        CURSOR(Main.pref.getInteger("iconsize.cursor", 32)),
+        CURSOR(Config.getPref().getInt("iconsize.cursor", 32)),
         /** cursor overlay icon size */
         CURSOROVERLAY(CURSOR),
         /** menu icon size */
@@ -141,7 +142,7 @@ public class ImageProvider {
         /** Layer list icon size
          * @since 8323
          */
-        LAYER(Main.pref.getInteger("iconsize.layer", 16)),
+        LAYER(Config.getPref().getInt("iconsize.layer", 16)),
         /** Toolbar button icon size
          * @since 9253
          */
@@ -149,16 +150,16 @@ public class ImageProvider {
         /** Side button maximum height
          * @since 9253
          */
-        SIDEBUTTON(Main.pref.getInteger("iconsize.sidebutton", 20)),
+        SIDEBUTTON(Config.getPref().getInt("iconsize.sidebutton", 20)),
         /** Settings tab icon size
          * @since 9253
          */
-        SETTINGS_TAB(Main.pref.getInteger("iconsize.settingstab", 48)),
+        SETTINGS_TAB(Config.getPref().getInt("iconsize.settingstab", 48)),
         /**
          * The default image size
          * @since 9705
          */
-        DEFAULT(Main.pref.getInteger("iconsize.default", 24)),
+        DEFAULT(Config.getPref().getInt("iconsize.default", 24)),
         /**
          * Splash dialog logo size
          * @since 10358
@@ -246,6 +247,10 @@ public class ImageProvider {
      */
     public static final String PROP_TRANSPARENCY_COLOR = "josm.transparency.color";
 
+    /** set of class loaders to take images from */
+    protected static final Set<ClassLoader> classLoaders = new HashSet<>(Arrays.asList(
+            ClassLoader.getSystemClassLoader(), ImageProvider.class.getClassLoader()));
+
     /** directories in which images are searched */
     protected Collection<String> dirs;
     /** caching identifier */
@@ -270,12 +275,12 @@ public class ImageProvider {
     protected boolean optional;
     /** <code>true</code> if warnings should be suppressed */
     protected boolean suppressWarnings;
-    /** list of class loaders to take images from */
-    protected Collection<ClassLoader> additionalClassLoaders;
     /** ordered list of overlay images */
     protected List<ImageOverlay> overlayInfo;
     /** <code>true</code> if icon must be grayed out */
     protected boolean isDisabled;
+    /** <code>true</code> if multi-resolution image is requested */
+    protected boolean multiResolution = true;
 
     private static SVGUniverse svgUniverse;
 
@@ -287,7 +292,7 @@ public class ImageProvider {
     /**
      * Caches the image data for rotated versions of the same image.
      */
-    private static final Map<Image, Map<Long, ImageResource>> ROTATE_CACHE = new HashMap<>();
+    private static final Map<Image, Map<Long, Image>> ROTATE_CACHE = new HashMap<>();
 
     private static final ExecutorService IMAGE_FETCHER =
             Executors.newSingleThreadExecutor(Utils.newThreadFactory("image-fetcher-%d", Thread.NORM_PRIORITY));
@@ -330,9 +335,9 @@ public class ImageProvider {
         this.virtualMaxHeight = image.virtualMaxHeight;
         this.optional = image.optional;
         this.suppressWarnings = image.suppressWarnings;
-        this.additionalClassLoaders = image.additionalClassLoaders;
         this.overlayInfo = image.overlayInfo;
         this.isDisabled = image.isDisabled;
+        this.multiResolution = image.multiResolution;
     }
 
     /**
@@ -573,13 +578,23 @@ public class ImageProvider {
     }
 
     /**
+     * Add an additional class loader to search image for.
+     * @param additionalClassLoader class loader to add to the internal set
+     * @return {@code true} if the set changed as a result of the call
+     * @since 12870
+     */
+    public static boolean addAdditionalClassLoader(ClassLoader additionalClassLoader) {
+        return classLoaders.add(additionalClassLoader);
+    }
+
+    /**
      * Add a collection of additional class loaders to search image for.
-     * @param additionalClassLoaders class loaders to add to the internal list
-     * @return the current object, for convenience
+     * @param additionalClassLoaders class loaders to add to the internal set
+     * @return {@code true} if the set changed as a result of the call
+     * @since 12870
      */
-    public ImageProvider setAdditionalClassLoaders(Collection<ClassLoader> additionalClassLoaders) {
-        this.additionalClassLoaders = additionalClassLoaders;
-        return this;
+    public static boolean addAdditionalClassLoaders(Collection<ClassLoader> additionalClassLoaders) {
+        return classLoaders.addAll(additionalClassLoaders);
     }
 
     /**
@@ -595,6 +610,28 @@ public class ImageProvider {
     }
 
     /**
+     * Decide, if multi-resolution image is requested (default <code>true</code>).
+     * <p>
+     * A <code>java.awt.image.MultiResolutionImage</code> is a Java 9 {@link Image}
+     * implementation, which adds support for HiDPI displays. The effect will be
+     * that in HiDPI mode, when GUI elements are scaled by a factor 1.5, 2.0, etc.,
+     * the images are not just up-scaled, but a higher resolution version of the
+     * image is rendered instead.
+     * <p>
+     * Use {@link HiDPISupport#getBaseImage(java.awt.Image)} to extract the original
+     * image from a multi-resolution image.
+     * <p>
+     * See {@link HiDPISupport#processMRImage} for how to process the image without
+     * removing the multi-resolution magic.
+     * @param multiResolution true, if multi-resolution image is requested
+     * @return the current object, for convenience
+     */
+    public ImageProvider setMultiResolution(boolean multiResolution) {
+        this.multiResolution = multiResolution;
+        return this;
+    }
+
+    /**
      * Execute the image request and scale result.
      * @return the requested image or null if the request failed
      */
@@ -605,9 +642,9 @@ public class ImageProvider {
             return null;
         }
         if (virtualMaxWidth != -1 || virtualMaxHeight != -1)
-            return ir.getImageIconBounded(new Dimension(virtualMaxWidth, virtualMaxHeight));
+            return ir.getImageIconBounded(new Dimension(virtualMaxWidth, virtualMaxHeight), multiResolution);
         else
-            return ir.getImageIcon(new Dimension(virtualWidth, virtualHeight));
+            return ir.getImageIcon(new Dimension(virtualWidth, virtualHeight), multiResolution);
     }
 
     /**
@@ -631,7 +668,7 @@ public class ImageProvider {
      * @since 7693
      */
     public ImageResource getResource() {
-        ImageResource ir = getIfAvailableImpl(additionalClassLoaders);
+        ImageResource ir = getIfAvailableImpl();
         if (ir == null) {
             if (!optional) {
                 String ext = name.indexOf('.') != -1 ? "" : ".???";
@@ -776,10 +813,9 @@ public class ImageProvider {
     /**
      * Internal implementation of the image request.
      *
-     * @param additionalClassLoaders the list of class loaders to use
      * @return the requested image or null if the request failed
      */
-    private ImageResource getIfAvailableImpl(Collection<ClassLoader> additionalClassLoaders) {
+    private ImageResource getIfAvailableImpl() {
         synchronized (cache) {
             // This method is called from different thread and modifying HashMap concurrently can result
             // for example in loops in map entries (ie freeze when such entry is retrieved)
@@ -875,7 +911,7 @@ public class ImageProvider {
                         // index the cache by the name of the icon we're looking for
                         // and don't bother to create a URL unless we're actually
                         // creating the image.
-                        URL path = getImageUrl(fullName, dirs, additionalClassLoaders);
+                        URL path = getImageUrl(fullName);
                         if (path == null) {
                             continue;
                         }
@@ -900,7 +936,8 @@ public class ImageProvider {
      * @return the requested image or null if the request failed
      */
     private static ImageResource getIfAvailableHttp(String url, ImageType type) {
-        try (CachedFile cf = new CachedFile(url).setDestDir(new File(Main.pref.getCacheDirectory(), "images").getPath());
+        try (CachedFile cf = new CachedFile(url).setDestDir(
+                new File(Config.getDirs().getCacheDirectory(true), "images").getPath());
              InputStream is = cf.getInputStream()) {
             switch (type) {
             case SVG:
@@ -987,12 +1024,12 @@ public class ImageProvider {
      * @return the requested image or null if the request failed
      */
     private static ImageResource getIfAvailableWiki(String name, ImageType type) {
-        final Collection<String> defaultBaseUrls = Arrays.asList(
+        final List<String> defaultBaseUrls = Arrays.asList(
                 "https://wiki.openstreetmap.org/w/images/",
                 "https://upload.wikimedia.org/wikipedia/commons/",
                 "https://wiki.openstreetmap.org/wiki/File:"
                 );
-        final Collection<String> baseUrls = Main.pref.getCollection("image-provider.wiki.urls", defaultBaseUrls);
+        final Collection<String> baseUrls = Config.getPref().getList("image-provider.wiki.urls", defaultBaseUrls);
 
         final String fn = name.substring(name.lastIndexOf('/') + 1);
 
@@ -1106,13 +1143,9 @@ public class ImageProvider {
         }
     }
 
-    private static URL getImageUrl(String path, String name, Collection<ClassLoader> additionalClassLoaders) {
+    private URL getImageUrl(String path, String name) {
         if (path != null && path.startsWith("resource://")) {
             String p = path.substring("resource://".length());
-            Collection<ClassLoader> classLoaders = new ArrayList<>(PluginHandler.getResourceClassLoaders());
-            if (additionalClassLoaders != null) {
-                classLoaders.addAll(additionalClassLoaders);
-            }
             for (ClassLoader source : classLoaders) {
                 URL res;
                 if ((res = source.getResource(p + name)) != null)
@@ -1126,14 +1159,14 @@ public class ImageProvider {
         return null;
     }
 
-    private static URL getImageUrl(String imageName, Collection<String> dirs, Collection<ClassLoader> additionalClassLoaders) {
+    private URL getImageUrl(String imageName) {
         URL u;
 
         // Try passed directories first
         if (dirs != null) {
             for (String name : dirs) {
                 try {
-                    u = getImageUrl(name, imageName, additionalClassLoaders);
+                    u = getImageUrl(name, imageName);
                     if (u != null)
                         return u;
                 } catch (SecurityException e) {
@@ -1145,10 +1178,10 @@ public class ImageProvider {
             }
         }
         // Try user-data directory
-        if (Main.pref != null) {
-            String dir = new File(Main.pref.getUserDataDirectory(), "images").getAbsolutePath();
+        if (Config.getDirs() != null) {
+            String dir = new File(Config.getDirs().getUserDataDirectory(false), "images").getAbsolutePath();
             try {
-                u = getImageUrl(dir, imageName, additionalClassLoaders);
+                u = getImageUrl(dir, imageName);
                 if (u != null)
                     return u;
             } catch (SecurityException e) {
@@ -1159,22 +1192,22 @@ public class ImageProvider {
         }
 
         // Absolute path?
-        u = getImageUrl(null, imageName, additionalClassLoaders);
+        u = getImageUrl(null, imageName);
         if (u != null)
             return u;
 
         // Try plugins and josm classloader
-        u = getImageUrl("resource://images/", imageName, additionalClassLoaders);
+        u = getImageUrl("resource://images/", imageName);
         if (u != null)
             return u;
 
         // Try all other resource directories
         if (Main.pref != null) {
             for (String location : Main.pref.getAllPossiblePreferenceDirs()) {
-                u = getImageUrl(location + "images", imageName, additionalClassLoaders);
+                u = getImageUrl(location + "images", imageName);
                 if (u != null)
                     return u;
-                u = getImageUrl(location, imageName, additionalClassLoaders);
+                u = getImageUrl(location, imageName);
                 if (u != null)
                     return u;
             }
@@ -1219,7 +1252,8 @@ public class ImageProvider {
 
             parser.setEntityResolver((publicId, systemId) -> new InputSource(new ByteArrayInputStream(new byte[0])));
 
-            try (CachedFile cf = new CachedFile(base + fn).setDestDir(new File(Main.pref.getUserDataDirectory(), "images").getPath());
+            try (CachedFile cf = new CachedFile(base + fn).setDestDir(
+                        new File(Config.getDirs().getUserDataDirectory(true), "images").getPath());
                  InputStream is = cf.getInputStream()) {
                 parser.parse(new InputSource(is));
             }
@@ -1275,14 +1309,13 @@ public class ImageProvider {
     }
 
     /**
-     * Creates a rotated version of the input image, scaled to the given dimension.
+     * Creates a rotated version of the input image.
      *
      * @param img the image to be rotated.
      * @param rotatedAngle the rotated angle, in degree, clockwise. It could be any double but we
      * will mod it with 360 before using it. More over for caching performance, it will be rounded to
      * an entire value between 0 and 360.
-     * @param dimension The requested dimensions. Use (-1,-1) for the original size
-     * and (width, -1) to set the width, but otherwise scale the image proportionally.
+     * @param dimension ignored
      * @return the image after rotating and scaling.
      * @since 6172
      */
@@ -1290,67 +1323,59 @@ public class ImageProvider {
         CheckParameterUtil.ensureParameterNotNull(img, "img");
 
         // convert rotatedAngle to an integer value from 0 to 360
-        Long originalAngle = Math.round(rotatedAngle % 360);
-        if (rotatedAngle != 0 && originalAngle == 0) {
-            originalAngle = 360L;
-        }
-
-        ImageResource imageResource;
+        Long angleLong = Math.round(rotatedAngle % 360);
+        Long originalAngle = rotatedAngle != 0 && angleLong == 0 ? Long.valueOf(360L) : angleLong;
 
         synchronized (ROTATE_CACHE) {
-            Map<Long, ImageResource> cacheByAngle = ROTATE_CACHE.get(img);
-            if (cacheByAngle == null) {
-                cacheByAngle = new HashMap<>();
-                ROTATE_CACHE.put(img, cacheByAngle);
-            }
+            Map<Long, Image> cacheByAngle = ROTATE_CACHE.computeIfAbsent(img, k -> new HashMap<>());
+            Image rotatedImg = cacheByAngle.get(originalAngle);
 
-            imageResource = cacheByAngle.get(originalAngle);
-
-            if (imageResource == null) {
+            if (rotatedImg == null) {
                 // convert originalAngle to a value from 0 to 90
                 double angle = originalAngle % 90;
                 if (originalAngle != 0 && angle == 0) {
                     angle = 90.0;
                 }
-
                 double radian = Utils.toRadians(angle);
 
-                new ImageIcon(img); // load completely
-                int iw = img.getWidth(null);
-                int ih = img.getHeight(null);
-                int w;
-                int h;
-
-                if ((originalAngle >= 0 && originalAngle <= 90) || (originalAngle > 180 && originalAngle <= 270)) {
-                    w = (int) (iw * Math.sin(DEGREE_90 - radian) + ih * Math.sin(radian));
-                    h = (int) (iw * Math.sin(radian) + ih * Math.sin(DEGREE_90 - radian));
-                } else {
-                    w = (int) (ih * Math.sin(DEGREE_90 - radian) + iw * Math.sin(radian));
-                    h = (int) (ih * Math.sin(radian) + iw * Math.sin(DEGREE_90 - radian));
-                }
-                Image image = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
-                imageResource = new ImageResource(image);
-                cacheByAngle.put(originalAngle, imageResource);
-                Graphics g = image.getGraphics();
-                Graphics2D g2d = (Graphics2D) g.create();
+                rotatedImg = HiDPISupport.processMRImage(img, img0 -> {
+                    new ImageIcon(img0); // load completely
+                    int iw = img0.getWidth(null);
+                    int ih = img0.getHeight(null);
+                    int w;
+                    int h;
+
+                    if ((originalAngle >= 0 && originalAngle <= 90) || (originalAngle > 180 && originalAngle <= 270)) {
+                        w = (int) (iw * Math.sin(DEGREE_90 - radian) + ih * Math.sin(radian));
+                        h = (int) (iw * Math.sin(radian) + ih * Math.sin(DEGREE_90 - radian));
+                    } else {
+                        w = (int) (ih * Math.sin(DEGREE_90 - radian) + iw * Math.sin(radian));
+                        h = (int) (ih * Math.sin(radian) + iw * Math.sin(DEGREE_90 - radian));
+                    }
+                    Image image = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
+                    Graphics g = image.getGraphics();
+                    Graphics2D g2d = (Graphics2D) g.create();
 
-                // calculate the center of the icon.
-                int cx = iw / 2;
-                int cy = ih / 2;
+                    // calculate the center of the icon.
+                    int cx = iw / 2;
+                    int cy = ih / 2;
 
-                // move the graphics center point to the center of the icon.
-                g2d.translate(w / 2, h / 2);
+                    // move the graphics center point to the center of the icon.
+                    g2d.translate(w / 2, h / 2);
 
-                // rotate the graphics about the center point of the icon
-                g2d.rotate(Utils.toRadians(originalAngle));
+                    // rotate the graphics about the center point of the icon
+                    g2d.rotate(Utils.toRadians(originalAngle));
 
-                g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
-                g2d.drawImage(img, -cx, -cy, null);
+                    g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
+                    g2d.drawImage(img0, -cx, -cy, null);
 
-                g2d.dispose();
-                new ImageIcon(image); // load completely
+                    g2d.dispose();
+                    new ImageIcon(image); // load completely
+                    return image;
+                });
+                cacheByAngle.put(originalAngle, rotatedImg);
             }
-            return imageResource.getImageIcon(dimension).getImage();
+            return rotatedImg;
         }
     }
 
@@ -1411,7 +1436,7 @@ public class ImageProvider {
                                 BufferedImage.TYPE_INT_ARGB);
                         double scaleFactor = Math.min(backgroundRealWidth / (double) iconRealWidth, backgroundRealHeight
                                 / (double) iconRealHeight);
-                        BufferedImage iconImage = icon.getImage(false);
+                        Image iconImage = icon.getImage(false);
                         Image scaledIcon;
                         final int scaledWidth;
                         final int scaledHeight;
diff --git a/src/org/openstreetmap/josm/tools/ImageResource.java b/src/org/openstreetmap/josm/tools/ImageResource.java
index 8e92a80..1dc38db 100644
--- a/src/org/openstreetmap/josm/tools/ImageResource.java
+++ b/src/org/openstreetmap/josm/tools/ImageResource.java
@@ -30,7 +30,7 @@ public class ImageResource {
     /**
      * Caches the image data for resized versions of the same image.
      */
-    private final Map<Dimension, Image> imgCache = new HashMap<>();
+    private final Map<Dimension, BufferedImage> imgCache = new HashMap<>();
     /**
      * SVG diagram information in case of SVG vector image.
      */
@@ -58,26 +58,7 @@ public class ImageResource {
      */
     public ImageResource(Image img) {
         CheckParameterUtil.ensureParameterNotNull(img);
-        baseImage = scaleBaseImageIfNeeded(img);
-    }
-
-    /** Scale image according to screen DPI if needed.
-     *
-     * @param img an image loaded from file (it's width and height are virtual pixels)
-     * @return original img if virtual size is the same as real size or new image resized to real pixels
-     */
-    private static Image scaleBaseImageIfNeeded(Image img) {
-        int imgWidth = img.getWidth(null);
-        int imgHeight = img.getHeight(null);
-        int realWidth = GuiSizesHelper.getSizeDpiAdjusted(imgWidth);
-        int realHeight = GuiSizesHelper.getSizeDpiAdjusted(imgHeight);
-        if (realWidth != -1 && realHeight != -1 && imgWidth != realWidth && imgHeight != realHeight) {
-            Image realImage = img.getScaledInstance(realWidth, realHeight, Image.SCALE_SMOOTH);
-            BufferedImage bimg = new BufferedImage(realWidth, realHeight, BufferedImage.TYPE_INT_ARGB);
-            bimg.getGraphics().drawImage(realImage, 0, 0, null);
-            return bimg;
-        }
-        return img;
+        baseImage = img;
     }
 
     /**
@@ -150,72 +131,117 @@ public class ImageResource {
     }
 
     /**
-     * Get an ImageIcon object for the image of this resource
+     * Get an ImageIcon object for the image of this resource.
+     * <p>
+     * Will return a multi-resolution image by default (if possible).
      * @param  dim The requested dimensions. Use (-1,-1) for the original size and (width, -1)
      *         to set the width, but otherwise scale the image proportionally.
      * @return ImageIcon object for the image of this resource, scaled according to dim
+     * @see #getImageIconBounded(java.awt.Dimension, boolean)
      */
     public ImageIcon getImageIcon(Dimension dim) {
+        return getImageIcon(dim, true);
+    }
+
+    /**
+     * Get an ImageIcon object for the image of this resource.
+     * @param  dim The requested dimensions. Use (-1,-1) for the original size and (width, -1)
+     *         to set the width, but otherwise scale the image proportionally.
+     * @param  multiResolution If true, return a multi-resolution image
+     * (java.awt.image.MultiResolutionImage in Java 9), otherwise a plain {@link BufferedImage}.
+     * When running Java 8, this flag has no effect and a plain image will be returned in any case.
+     * @return ImageIcon object for the image of this resource, scaled according to dim
+     * @since 12722
+     */
+    public ImageIcon getImageIcon(Dimension dim, boolean multiResolution) {
         if (dim.width < -1 || dim.width == 0 || dim.height < -1 || dim.height == 0)
             throw new IllegalArgumentException(dim+" is invalid");
-        Image img = imgCache.get(dim);
-        if (img != null) {
-            return new ImageIcon(img);
-        }
-        BufferedImage bimg;
-        if (svg != null) {
-            Dimension realDim = GuiSizesHelper.getDimensionDpiAdjusted(dim);
-            bimg = ImageProvider.createImageFromSvg(svg, realDim);
-            if (bimg == null) {
-                return null;
-            }
-        } else {
-            if (baseImage == null) throw new AssertionError();
+        BufferedImage img = imgCache.get(dim);
+        if (img == null) {
+            if (svg != null) {
+                Dimension realDim = GuiSizesHelper.getDimensionDpiAdjusted(dim);
+                img = ImageProvider.createImageFromSvg(svg, realDim);
+                if (img == null) {
+                    return null;
+                }
+            } else {
+                if (baseImage == null) throw new AssertionError();
 
-            int realWidth = GuiSizesHelper.getSizeDpiAdjusted(dim.width);
-            int realHeight = GuiSizesHelper.getSizeDpiAdjusted(dim.height);
-            ImageIcon icon = new ImageIcon(baseImage);
-            if (realWidth == -1 && realHeight == -1) {
-                realWidth = GuiSizesHelper.getSizeDpiAdjusted(icon.getIconWidth());
-                realHeight = GuiSizesHelper.getSizeDpiAdjusted(icon.getIconHeight());
-            } else if (realWidth == -1) {
-                realWidth = Math.max(1, icon.getIconWidth() * realHeight / icon.getIconHeight());
-            } else if (realHeight == -1) {
-                realHeight = Math.max(1, icon.getIconHeight() * realWidth / icon.getIconWidth());
+                int realWidth = GuiSizesHelper.getSizeDpiAdjusted(dim.width);
+                int realHeight = GuiSizesHelper.getSizeDpiAdjusted(dim.height);
+                ImageIcon icon = new ImageIcon(baseImage);
+                if (realWidth == -1 && realHeight == -1) {
+                    realWidth = GuiSizesHelper.getSizeDpiAdjusted(icon.getIconWidth());
+                    realHeight = GuiSizesHelper.getSizeDpiAdjusted(icon.getIconHeight());
+                } else if (realWidth == -1) {
+                    realWidth = Math.max(1, icon.getIconWidth() * realHeight / icon.getIconHeight());
+                } else if (realHeight == -1) {
+                    realHeight = Math.max(1, icon.getIconHeight() * realWidth / icon.getIconWidth());
+                }
+                Image i = icon.getImage().getScaledInstance(realWidth, realHeight, Image.SCALE_SMOOTH);
+                img = new BufferedImage(realWidth, realHeight, BufferedImage.TYPE_INT_ARGB);
+                img.getGraphics().drawImage(i, 0, 0, null);
             }
-            Image i = icon.getImage().getScaledInstance(realWidth, realHeight, Image.SCALE_SMOOTH);
-            bimg = new BufferedImage(realWidth, realHeight, BufferedImage.TYPE_INT_ARGB);
-            bimg.getGraphics().drawImage(i, 0, 0, null);
-        }
-        if (overlayInfo != null) {
-            for (ImageOverlay o : overlayInfo) {
-                o.process(bimg);
+            if (overlayInfo != null) {
+                for (ImageOverlay o : overlayInfo) {
+                    o.process(img);
+                }
             }
-        }
-        if (isDisabled) {
-            //Use default Swing functionality to make icon look disabled by applying grayscaling filter.
-            Icon disabledIcon = UIManager.getLookAndFeel().getDisabledIcon(null, new ImageIcon(bimg));
-            if (disabledIcon == null) {
-                return null;
+            if (isDisabled) {
+                //Use default Swing functionality to make icon look disabled by applying grayscaling filter.
+                Icon disabledIcon = UIManager.getLookAndFeel().getDisabledIcon(null, new ImageIcon(img));
+                if (disabledIcon == null) {
+                    return null;
+                }
+
+                //Convert Icon to ImageIcon with BufferedImage inside
+                img = new BufferedImage(img.getWidth(), img.getHeight(), BufferedImage.TYPE_4BYTE_ABGR);
+                disabledIcon.paintIcon(new JPanel(), img.getGraphics(), 0, 0);
             }
+            imgCache.put(dim, img);
+        }
 
-            //Convert Icon to ImageIcon with BufferedImage inside
-            bimg = new BufferedImage(bimg.getWidth(), bimg.getHeight(), BufferedImage.TYPE_4BYTE_ABGR);
-            disabledIcon.paintIcon(new JPanel(), bimg.getGraphics(), 0, 0);
+        if (!multiResolution)
+            return new ImageIcon(img);
+        else {
+            try {
+                Image mrImg = HiDPISupport.getMultiResolutionImage(img, this);
+                return new ImageIcon(mrImg);
+            } catch (NoClassDefFoundError e) {
+                Logging.trace(e);
+                return new ImageIcon(img);
+            }
         }
-        imgCache.put(dim, bimg);
-        return new ImageIcon(bimg);
     }
 
     /**
      * Get image icon with a certain maximum size. The image is scaled down
      * to fit maximum dimensions. (Keeps aspect ratio)
+     * <p>
+     * Will return a multi-resolution image by default (if possible).
      *
      * @param maxSize The maximum size. One of the dimensions (width or height) can be -1,
      * which means it is not bounded.
      * @return ImageIcon object for the image of this resource, scaled down if needed, according to maxSize
+     * @see #getImageIconBounded(java.awt.Dimension, boolean)
      */
     public ImageIcon getImageIconBounded(Dimension maxSize) {
+        return getImageIconBounded(maxSize, true);
+    }
+
+    /**
+     * Get image icon with a certain maximum size. The image is scaled down
+     * to fit maximum dimensions. (Keeps aspect ratio)
+     *
+     * @param maxSize The maximum size. One of the dimensions (width or height) can be -1,
+     * which means it is not bounded.
+     * @param  multiResolution If true, return a multi-resolution image
+     * (java.awt.image.MultiResolutionImage in Java 9), otherwise a plain {@link BufferedImage}.
+     * When running Java 8, this flag has no effect and a plain image will be returned in any case.
+     * @return ImageIcon object for the image of this resource, scaled down if needed, according to maxSize
+     * @since 12722
+     */
+    public ImageIcon getImageIconBounded(Dimension maxSize, boolean multiResolution) {
         if (maxSize.width < -1 || maxSize.width == 0 || maxSize.height < -1 || maxSize.height == 0)
             throw new IllegalArgumentException(maxSize+" is invalid");
         float sourceWidth;
@@ -239,14 +265,14 @@ public class ImageResource {
         }
 
         if (maxWidth == -1 && maxHeight == -1)
-            return getImageIcon(DEFAULT_DIMENSION);
+            return getImageIcon(DEFAULT_DIMENSION, multiResolution);
         else if (maxWidth == -1)
-            return getImageIcon(new Dimension(-1, maxHeight));
+            return getImageIcon(new Dimension(-1, maxHeight), multiResolution);
         else if (maxHeight == -1)
-            return getImageIcon(new Dimension(maxWidth, -1));
+            return getImageIcon(new Dimension(maxWidth, -1), multiResolution);
         else if (sourceWidth / maxWidth > sourceHeight / maxHeight)
-            return getImageIcon(new Dimension(maxWidth, -1));
+            return getImageIcon(new Dimension(maxWidth, -1), multiResolution);
         else
-            return getImageIcon(new Dimension(-1, maxHeight));
+            return getImageIcon(new Dimension(-1, maxHeight), multiResolution);
    }
 }
diff --git a/src/org/openstreetmap/josm/tools/ImageWarp.java b/src/org/openstreetmap/josm/tools/ImageWarp.java
index 5544329..ad4e4dd 100644
--- a/src/org/openstreetmap/josm/tools/ImageWarp.java
+++ b/src/org/openstreetmap/josm/tools/ImageWarp.java
@@ -16,7 +16,11 @@ import java.util.Set;
  * Deforms an image geometrically according to a given transformation formula.
  * @since 11858
  */
-public class ImageWarp {
+public final class ImageWarp {
+
+    private ImageWarp() {
+        // Hide default constructor
+    }
 
     /**
      * Transformation that translates the pixel coordinates.
@@ -86,13 +90,7 @@ public class ImageWarp {
         }
 
         private Point2D getValue(int xIdx, int yIdx) {
-            Map<Integer, Point2D> row = getRow(yIdx);
-            Point2D val = row.get(xIdx);
-            if (val == null) {
-                val = trfm.transform(new Point2D.Double(xIdx * stride, yIdx * stride));
-                row.put(xIdx, val);
-            }
-            return val;
+            return getRow(yIdx).computeIfAbsent(xIdx, k -> trfm.transform(new Point2D.Double(xIdx * stride, yIdx * stride)));
         }
 
         private Map<Integer, Point2D> getRow(int yIdx) {
diff --git a/src/org/openstreetmap/josm/tools/ListenableWeakReference.java b/src/org/openstreetmap/josm/tools/ListenableWeakReference.java
index 21fffe4..5ae9414 100644
--- a/src/org/openstreetmap/josm/tools/ListenableWeakReference.java
+++ b/src/org/openstreetmap/josm/tools/ListenableWeakReference.java
@@ -12,9 +12,8 @@ import org.openstreetmap.josm.tools.bugreport.BugReport;
  *
  * A special dereferenced-thread is used for this, so make sure your code is thread-safe.
  * @author Michael Zangl
- * @since 12181
- *
  * @param <T> The weak reference
+ * @since 12181
  */
 public class ListenableWeakReference<T> extends WeakReference<T> {
     private static final ReferenceQueue<Object> GLOBAL_QUEUE = new ReferenceQueue<>();
diff --git a/src/org/openstreetmap/josm/tools/ListenerList.java b/src/org/openstreetmap/josm/tools/ListenerList.java
index bdb715c..bb309d9 100644
--- a/src/org/openstreetmap/josm/tools/ListenerList.java
+++ b/src/org/openstreetmap/josm/tools/ListenerList.java
@@ -209,7 +209,7 @@ public class ListenerList<T> {
             super.failRemove(listener);
         }
 
-        private static void dumpStack(StackTraceElement ... stackTraceElements) {
+        private static void dumpStack(StackTraceElement... stackTraceElements) {
             if (stackTraceElements == null) {
                 Logging.trace("  - (no trace recorded)");
             } else {
diff --git a/src/org/openstreetmap/josm/tools/Logging.java b/src/org/openstreetmap/josm/tools/Logging.java
index 6a30cf1..00a53f0 100644
--- a/src/org/openstreetmap/josm/tools/Logging.java
+++ b/src/org/openstreetmap/josm/tools/Logging.java
@@ -270,6 +270,18 @@ public final class Logging {
         logPrivate(level, () -> getErrorLogWithStack(message, t));
     }
 
+    /**
+     * Logs a throwable that happened. Adds the stack trace to the log.
+     * @param level The level.
+     * @param t The throwable that should be logged.
+     * @param pattern The formatted message to print.
+     * @param args The objects to insert into format string
+     * @see #logWithStackTrace(Level, Throwable)
+     */
+    public static void logWithStackTrace(Level level, Throwable t, String pattern, Object... args) {
+        logPrivate(level, () -> getErrorLogWithStack(MessageFormat.format(pattern, args), t));
+    }
+
     private static void logPrivate(Level level, String pattern, Object... args) {
         logPrivate(level, () -> MessageFormat.format(pattern, args));
     }
diff --git a/src/org/openstreetmap/josm/tools/MultiMap.java b/src/org/openstreetmap/josm/tools/MultiMap.java
index 1eb3baf..11c8cec 100644
--- a/src/org/openstreetmap/josm/tools/MultiMap.java
+++ b/src/org/openstreetmap/josm/tools/MultiMap.java
@@ -65,12 +65,7 @@ public class MultiMap<A, B> {
      * @param value value to be associated with the specified key
      */
     public void put(A key, B value) {
-        Set<B> vals = map.get(key);
-        if (vals == null) {
-            vals = new LinkedHashSet<>();
-            map.put(key, vals);
-        }
-        vals.add(value);
+        map.computeIfAbsent(key, k -> new LinkedHashSet<>()).add(value);
     }
 
     /**
@@ -94,12 +89,7 @@ public class MultiMap<A, B> {
      * @param values values to be associated with the specified key
      */
     public void putAll(A key, Collection<B> values) {
-        Set<B> vals = map.get(key);
-        if (vals == null) {
-            vals = new LinkedHashSet<>(values);
-            map.put(key, vals);
-        }
-        vals.addAll(values);
+        map.computeIfAbsent(key, k -> new LinkedHashSet<>(values)).addAll(values);
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/tools/OsmUrlToBounds.java b/src/org/openstreetmap/josm/tools/OsmUrlToBounds.java
index ddf3a65..26bf7af 100644
--- a/src/org/openstreetmap/josm/tools/OsmUrlToBounds.java
+++ b/src/org/openstreetmap/josm/tools/OsmUrlToBounds.java
@@ -6,6 +6,8 @@ import static org.openstreetmap.josm.tools.I18n.tr;
 import java.awt.Dimension;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Objects;
+import java.util.function.Supplier;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Bounds;
@@ -14,9 +16,6 @@ import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.projection.Ellipsoid;
 import org.openstreetmap.josm.data.projection.Projection;
 import org.openstreetmap.josm.data.projection.Projections;
-import org.openstreetmap.josm.gui.MainApplication;
-import org.openstreetmap.josm.gui.MapView;
-import org.openstreetmap.josm.gui.util.GuiHelper;
 
 /**
  * Parses various URL used in OpenStreetMap projects into {@link Bounds}.
@@ -24,6 +23,8 @@ import org.openstreetmap.josm.gui.util.GuiHelper;
 public final class OsmUrlToBounds {
     private static final String SHORTLINK_PREFIX = "http://osm.org/go/";
 
+    private static volatile Supplier<Dimension> mapSize = () -> new Dimension(800, 600);
+
     private OsmUrlToBounds() {
         // Hide default constructor for utils classes
     }
@@ -204,13 +205,13 @@ public final class OsmUrlToBounds {
                 zoom - 8 - (zoomOffset % 3) - 2);
     }
 
-    private static Dimension getScreenSize() {
-        if (MainApplication.isDisplayingMapView()) {
-            MapView mapView = MainApplication.getMap().mapView;
-            return new Dimension(mapView.getWidth(), mapView.getHeight());
-        } else {
-            return GuiHelper.getScreenSize();
-        }
+    /**
+     * Sets the map size supplier.
+     * @param mapSizeSupplier returns the map size in pixels
+     * @since 12796
+     */
+    public static void setMapSizeSupplier(Supplier<Dimension> mapSizeSupplier) {
+        mapSize = Objects.requireNonNull(mapSizeSupplier, "mapSizeSupplier");
     }
 
     private static final int TILE_SIZE_IN_PIXELS = 256;
@@ -223,7 +224,7 @@ public final class OsmUrlToBounds {
      * @return The bounds the OSM server would display
      */
     public static Bounds positionToBounds(final double lat, final double lon, final int zoom) {
-        final Dimension screenSize = getScreenSize();
+        final Dimension screenSize = mapSize.get();
         double scale = (1 << zoom) * TILE_SIZE_IN_PIXELS / (2 * Math.PI * Ellipsoid.WGS84.a);
         double deltaX = screenSize.getWidth() / 2.0 / scale;
         double deltaY = screenSize.getHeight() / 2.0 / scale;
@@ -245,7 +246,7 @@ public final class OsmUrlToBounds {
         final EastNorth min = mercator.latlon2eastNorth(b.getMin());
         final EastNorth max = mercator.latlon2eastNorth(b.getMax());
         final double deltaX = max.getX() - min.getX();
-        final double scale = getScreenSize().getWidth() / deltaX;
+        final double scale = mapSize.get().getWidth() / deltaX;
         final double x = scale * (2 * Math.PI * Ellipsoid.WGS84.a) / TILE_SIZE_IN_PIXELS;
         return (int) Math.round(Math.log(x) / Math.log(2));
     }
diff --git a/src/org/openstreetmap/josm/tools/Platform.java b/src/org/openstreetmap/josm/tools/Platform.java
new file mode 100644
index 0000000..cda4af1
--- /dev/null
+++ b/src/org/openstreetmap/josm/tools/Platform.java
@@ -0,0 +1,76 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.tools;
+
+import java.util.Locale;
+
+/**
+ * Enum listing the supported platforms (operating system families).
+ * @since 12776
+ */
+public enum Platform {
+
+    /**
+     * Unik-like platform. This is the default when the platform cannot be identified.
+     */
+    UNIXOID {
+        @Override
+        public <T> T accept(PlatformVisitor<T> visitor) {
+            return visitor.visitUnixoid();
+        }
+    },
+    /**
+     * Windows platform.
+     */
+    WINDOWS {
+        @Override
+        public <T> T accept(PlatformVisitor<T> visitor) {
+            return visitor.visitWindows();
+        }
+    },
+    /**
+     * macOS (previously OS X) platform.
+     */
+    OSX {
+        @Override
+        public <T> T accept(PlatformVisitor<T> visitor) {
+            return visitor.visitOsx();
+        }
+    };
+
+    private static volatile Platform platform;
+
+    /**
+     * Support for the visitor pattern.
+     * @param <T> type that will be the result of the visiting operation
+     * @param visitor the visitor
+     * @return result of the operation
+     */
+    public abstract <T> T accept(PlatformVisitor<T> visitor);
+
+    /**
+     * Identifies the current operating system family.
+     * @return the the current operating system family
+     */
+    public static Platform determinePlatform() {
+        if (platform == null) {
+            String os = System.getProperty("os.name");
+            if (os == null) {
+                Logging.warn("Your operating system has no name, so I'm guessing its some kind of *nix.");
+                platform = Platform.UNIXOID;
+            } else if (os.toLowerCase(Locale.ENGLISH).startsWith("windows")) {
+                platform = Platform.WINDOWS;
+            } else if ("Linux".equals(os) || "Solaris".equals(os) ||
+                    "SunOS".equals(os) || "AIX".equals(os) ||
+                    "FreeBSD".equals(os) || "NetBSD".equals(os) || "OpenBSD".equals(os)) {
+                platform = Platform.UNIXOID;
+            } else if (os.toLowerCase(Locale.ENGLISH).startsWith("mac os x")) {
+                platform = Platform.OSX;
+            } else {
+                Logging.warn("I don't know your operating system '"+os+"', so I'm guessing its some kind of *nix.");
+                platform = Platform.UNIXOID;
+            }
+        }
+        return platform;
+    }
+
+}
diff --git a/src/org/openstreetmap/josm/tools/PlatformHook.java b/src/org/openstreetmap/josm/tools/PlatformHook.java
index 2fa55d0..a6e436c 100644
--- a/src/org/openstreetmap/josm/tools/PlatformHook.java
+++ b/src/org/openstreetmap/josm/tools/PlatformHook.java
@@ -2,6 +2,8 @@
 package org.openstreetmap.josm.tools;
 
 import java.awt.GraphicsEnvironment;
+import java.awt.Toolkit;
+import java.awt.event.KeyEvent;
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.IOException;
@@ -16,8 +18,9 @@ import java.text.DateFormat;
 import java.util.Date;
 import java.util.List;
 
-import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.projection.datum.NTV2Proj4DirGridShiftFileSource;
 import org.openstreetmap.josm.io.CertificateAmendment.CertAmend;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.date.DateUtils;
 
 /**
@@ -28,6 +31,32 @@ import org.openstreetmap.josm.tools.date.DateUtils;
 public interface PlatformHook {
 
     /**
+     * Visitor to construct a PlatformHook from a given {@link Platform} object.
+     */
+    PlatformVisitor<PlatformHook> CONSTRUCT_FROM_PLATFORM = new PlatformVisitor<PlatformHook>() {
+        @Override
+        public PlatformHook visitUnixoid() {
+            return new PlatformHookUnixoid();
+        }
+
+        @Override
+        public PlatformHook visitWindows() {
+            return new PlatformHookWindows();
+        }
+
+        @Override
+        public PlatformHook visitOsx() {
+            return new PlatformHookUnixoid();
+        }
+    };
+
+    /**
+     * Get the platform corresponding to this platform hook.
+     * @return the platform corresponding to this platform hook
+     */
+    Platform getPlatform();
+
+    /**
       * The preStartupHook will be called extremly early. It is
       * guaranteed to be called before the GUI setup has started.
       *
@@ -228,7 +257,9 @@ public interface PlatformHook {
      * @return the list of platform-dependent default datum shifting directories for the PROJ.4 library
      * @since 11642
      */
-    List<File> getDefaultProj4NadshiftDirectories();
+    default List<File> getDefaultProj4NadshiftDirectories() {
+        return getPlatform().accept(NTV2Proj4DirGridShiftFileSource.getInstance());
+    }
 
     /**
      * Determines if the JVM is OpenJDK-based.
@@ -241,6 +272,21 @@ public interface PlatformHook {
     }
 
     /**
+     * Returns extended modifier key used as the appropriate accelerator key for menu shortcuts.
+     * It is advised everywhere to use {@link Toolkit#getMenuShortcutKeyMask()} to get the cross-platform modifier, but:
+     * <ul>
+     * <li>it returns KeyEvent.CTRL_MASK instead of KeyEvent.CTRL_DOWN_MASK. We used the extended
+     *    modifier for years, and Oracle recommends to use it instead, so it's best to keep it</li>
+     * <li>the method throws a HeadlessException ! So we would need to handle it for unit tests anyway</li>
+     * </ul>
+     * @return extended modifier key used as the appropriate accelerator key for menu shortcuts
+     * @since 12748 (as a replacement to {@code GuiHelper.getMenuShortcutKeyMaskEx()})
+     */
+    default int getMenuShortcutKeyMaskEx() {
+        return KeyEvent.CTRL_DOWN_MASK;
+    }
+
+    /**
      * Called when an outdated version of Java is detected at startup.
      * @since 12270
      */
@@ -267,7 +313,7 @@ public interface PlatformHook {
         if (expiration != null && expiration.before(new Date())) {
             String version = Utils.getJavaLatestVersion();
             callback.askUpdateJava(version != null ? version : "latest",
-                    Main.pref.get("java.update.url", "https://www.java.com/download"),
+                    Config.getPref().get("java.update.url", "https://www.java.com/download"),
                     DateUtils.getDateFormat(DateFormat.MEDIUM).format(expiration), false);
         }
     }
diff --git a/src/org/openstreetmap/josm/tools/PlatformHookOsx.java b/src/org/openstreetmap/josm/tools/PlatformHookOsx.java
index 42c6d6e..117a956 100644
--- a/src/org/openstreetmap/josm/tools/PlatformHookOsx.java
+++ b/src/org/openstreetmap/josm/tools/PlatformHookOsx.java
@@ -14,7 +14,6 @@ import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.lang.reflect.Proxy;
 import java.util.Arrays;
-import java.util.Collections;
 import java.util.List;
 import java.util.Objects;
 
@@ -33,6 +32,11 @@ public class PlatformHookOsx implements PlatformHook, InvocationHandler {
     private NativeOsCallback osCallback;
 
     @Override
+    public Platform getPlatform() {
+        return Platform.OSX;
+    }
+
+    @Override
     public void preStartupHook() {
         // This will merge our MenuBar into the system menu.
         // MUST be set before Swing is initialized!
@@ -77,6 +81,11 @@ public class PlatformHookOsx implements PlatformHook, InvocationHandler {
         checkExpiredJava(callback);
     }
 
+    @Override
+    public int getMenuShortcutKeyMaskEx() {
+        return KeyEvent.META_DOWN_MASK;
+    }
+
     /**
      * Registers Apple handlers.
      * @param appClass application class
@@ -417,9 +426,4 @@ public class PlatformHookOsx implements PlatformHook, InvocationHandler {
         return new File(System.getProperty("user.home")+"/Library",
                 Main.pref.getJOSMDirectoryBaseName());
     }
-
-    @Override
-    public List<File> getDefaultProj4NadshiftDirectories() {
-        return Collections.emptyList();
-    }
 }
diff --git a/src/org/openstreetmap/josm/tools/PlatformHookUnixoid.java b/src/org/openstreetmap/josm/tools/PlatformHookUnixoid.java
index 4c671fa..966c58d 100644
--- a/src/org/openstreetmap/josm/tools/PlatformHookUnixoid.java
+++ b/src/org/openstreetmap/josm/tools/PlatformHookUnixoid.java
@@ -21,11 +21,12 @@ import java.security.cert.CertificateException;
 import java.security.cert.CertificateFactory;
 import java.security.cert.X509Certificate;
 import java.util.Arrays;
-import java.util.List;
 import java.util.Locale;
+import java.util.concurrent.ExecutionException;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.io.CertificateAmendment.CertAmend;
+import org.openstreetmap.josm.spi.preferences.Config;
 
 /**
  * {@code PlatformHook} implementation for Unix systems.
@@ -35,36 +36,10 @@ public class PlatformHookUnixoid implements PlatformHook {
 
     private String osDescription;
 
-    // rpm returns translated string "package %s is not installed\n", can't find a way to force english output
-    // translations from https://github.com/rpm-software-management/rpm
-    private static final String[] NOT_INSTALLED = {
-            "not installed",          // en
-            "no s'ha instal·lat",     // ca
-            "尚未安裝",                // cmn
-            "není nainstalován",      // cs
-            "ikke installeret",       // da
-            "nicht installiert",      // de
-            "ne estas instalita",     // eo
-            "no está instalado",      // es
-            "ole asennettu",          // fi
-            "pas installé",           // fr
-            "non è stato installato", // it
-            "はインストールされていません。",   // ja
-            "패키지가 설치되어 있지 않습니다", // ko
-            "ikke installert",        // nb
-            "nie jest zainstalowany", // pl
-            "não está instalado",     // pt
-            "не установлен",          // ru
-            "ni nameščen",            // sl
-            "nie je nainštalovaný",   // sk
-            "није инсталиран",        // sr
-            "inte installerat",       // sv
-            "kurulu değil",           // tr
-            "не встановлено",         // uk
-            "chưa cài đặt gói",       // vi
-            "未安装软件包",             // zh_CN
-            "尚未安裝"                // zh_TW
-    };
+    @Override
+    public Platform getPlatform() {
+        return Platform.UNIXOID;
+    }
 
     @Override
     public void preStartupHook() {
@@ -76,7 +51,7 @@ public class PlatformHookUnixoid implements PlatformHook {
 
     @Override
     public void openUrl(String url) throws IOException {
-        for (String program : Main.pref.getCollection("browser.unix",
+        for (String program : Config.getPref().getList("browser.unix",
                 Arrays.asList("xdg-open", "#DESKTOP#", "$BROWSER", "gnome-open", "kfmclient openURL", "firefox"))) {
             try {
                 if ("#DESKTOP#".equals(program)) {
@@ -122,7 +97,7 @@ public class PlatformHookUnixoid implements PlatformHook {
         try {
             String dist = Utils.execOutput(Arrays.asList("lsb_release", "-i", "-s"));
             return "Debian".equalsIgnoreCase(dist) || "Ubuntu".equalsIgnoreCase(dist) || "Mint".equalsIgnoreCase(dist);
-        } catch (IOException e) {
+        } catch (IOException | ExecutionException | InterruptedException e) {
             // lsb_release is not available on all Linux systems, so don't log at warning level
             Logging.debug(e);
             return false;
@@ -152,17 +127,18 @@ public class PlatformHookUnixoid implements PlatformHook {
                     } else {
                         args = new String[] {"rpm", "-q", "--qf", "%{arch}-%{version}", packageName};
                     }
-                    String version = Utils.execOutput(Arrays.asList(args));
-                    if (version != null) {
-                        for (String notInstalled : NOT_INSTALLED) {
-                            if (version.contains(notInstalled))
-                                break;
+                    try {
+                        String version = Utils.execOutput(Arrays.asList(args));
+                        if (version != null && !version.isEmpty()) {
+                            return packageName + ':' + version;
                         }
-                        return packageName + ':' + version;
+                    } catch (ExecutionException e) {
+                        // Package does not exist, continue
+                        Logging.trace(e);
                     }
                 }
             }
-        } catch (IOException e) {
+        } catch (IOException | InterruptedException e) {
             Logging.warn(e);
         }
         return null;
@@ -181,7 +157,7 @@ public class PlatformHookUnixoid implements PlatformHook {
         if (home.contains("java-8-openjdk") || home.contains("java-1.8.0-openjdk")) {
             return getPackageDetails("openjdk-8-jre", "java-1_8_0-openjdk", "java-1.8.0-openjdk");
         } else if (home.contains("java-9-openjdk") || home.contains("java-1.9.0-openjdk")) {
-            return getPackageDetails("openjdk-9-jre", "java-1_9_0-openjdk", "java-1.9.0-openjdk");
+            return getPackageDetails("openjdk-9-jre", "java-1_9_0-openjdk", "java-1.9.0-openjdk", "java-9-openjdk");
         } else if (home.contains("icedtea")) {
             return getPackageDetails("icedtea-bin");
         } else if (home.contains("oracle")) {
@@ -421,11 +397,6 @@ public class PlatformHookUnixoid implements PlatformHook {
     }
 
     @Override
-    public List<File> getDefaultProj4NadshiftDirectories() {
-        return Arrays.asList(new File("/usr/local/share/proj"), new File("/usr/share/proj"));
-    }
-
-    @Override
     public X509Certificate getX509Certificate(CertAmend certAmend)
             throws KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException {
         File f = new File("/usr/share/ca-certificates/mozilla", certAmend.getFilename());
diff --git a/src/org/openstreetmap/josm/tools/PlatformHookWindows.java b/src/org/openstreetmap/josm/tools/PlatformHookWindows.java
index fd31a22..c9b7163 100644
--- a/src/org/openstreetmap/josm/tools/PlatformHookWindows.java
+++ b/src/org/openstreetmap/josm/tools/PlatformHookWindows.java
@@ -57,7 +57,6 @@ import java.security.cert.X509Certificate;
 import java.security.spec.InvalidKeySpecException;
 import java.security.spec.X509EncodedKeySpec;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.Enumeration;
 import java.util.List;
@@ -65,12 +64,13 @@ import java.util.Locale;
 import java.util.Properties;
 
 import javax.swing.JOptionPane;
-import javax.swing.UIManager;
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.Preferences;
-import org.openstreetmap.josm.gui.preferences.display.LafPreference;
+import org.openstreetmap.josm.data.StructUtils;
+import org.openstreetmap.josm.data.StructUtils.StructEntry;
+import org.openstreetmap.josm.data.StructUtils.WriteExplicitly;
 import org.openstreetmap.josm.io.CertificateAmendment.CertAmend;
+import org.openstreetmap.josm.spi.preferences.Config;
 
 /**
  * {@code PlatformHook} implementation for Microsoft Windows systems.
@@ -87,21 +87,21 @@ public class PlatformHookWindows implements PlatformHook {
         /**
          * The character subset. Basically a free identifier, but should be unique.
          */
-        @Preferences.pref
+        @StructEntry
         public String charset;
 
         /**
          * Platform font name.
          */
-        @Preferences.pref
-        @Preferences.writeExplicitly
+        @StructEntry
+        @WriteExplicitly
         public String name = "";
 
         /**
          * File name.
          */
-        @Preferences.pref
-        @Preferences.writeExplicitly
+        @StructEntry
+        @WriteExplicitly
         public String file = "";
 
         /**
@@ -158,27 +158,13 @@ public class PlatformHookWindows implements PlatformHook {
     private String oSBuildNumber;
 
     @Override
+    public Platform getPlatform() {
+        return Platform.WINDOWS;
+    }
+
+    @Override
     public void afterPrefStartupHook() {
         extendFontconfig("fontconfig.properties.src");
-        // Workaround for JDK-8180379: crash on Windows 10 1703 with Windows L&F and java < 8u152 / 9+171
-        // To remove during Java 9 migration
-        if (System.getProperty("os.name").toLowerCase(Locale.ENGLISH).contains("windows 10") &&
-                getDefaultStyle().equals(LafPreference.LAF.get())) {
-            try {
-                final int currentBuild = Integer.parseInt(getCurrentBuild());
-                final int javaVersion = Utils.getJavaVersion();
-                final int javaUpdate = Utils.getJavaUpdate();
-                final int javaBuild = Utils.getJavaBuild();
-                // See https://technet.microsoft.com/en-us/windows/release-info.aspx
-                if (currentBuild >= 15_063 && ((javaVersion == 8 && javaUpdate < 141)
-                        || (javaVersion == 9 && javaUpdate == 0 && javaBuild < 173))) {
-                    // Workaround from https://bugs.openjdk.java.net/browse/JDK-8179014
-                    UIManager.put("FileChooser.useSystemExtensionHiding", Boolean.FALSE);
-                }
-            } catch (NumberFormatException | ReflectiveOperationException e) {
-                Logging.error(e);
-            }
-        }
     }
 
     @Override
@@ -281,15 +267,36 @@ public class PlatformHookWindows implements PlatformHook {
                 ((System.getenv("ProgramFiles(x86)") == null) ? "32" : "64") + "-Bit";
     }
 
-    private static String getProductName() throws IllegalAccessException, InvocationTargetException {
+    /**
+     * Returns the Windows product name from registry (example: "Windows 10 Pro")
+     * @return the Windows product name from registry
+     * @throws IllegalAccessException if Java language access control is enforced and the underlying method is inaccessible
+     * @throws InvocationTargetException if the underlying method throws an exception
+     * @since 12744
+     */
+    public static String getProductName() throws IllegalAccessException, InvocationTargetException {
         return WinRegistry.readString(HKEY_LOCAL_MACHINE, CURRENT_VERSION, "ProductName");
     }
 
-    private static String getReleaseId() throws IllegalAccessException, InvocationTargetException {
+    /**
+     * Returns the Windows release identifier from registry (example: "1703")
+     * @return the Windows release identifier from registry
+     * @throws IllegalAccessException if Java language access control is enforced and the underlying method is inaccessible
+     * @throws InvocationTargetException if the underlying method throws an exception
+     * @since 12744
+     */
+    public static String getReleaseId() throws IllegalAccessException, InvocationTargetException {
         return WinRegistry.readString(HKEY_LOCAL_MACHINE, CURRENT_VERSION, "ReleaseId");
     }
 
-    private static String getCurrentBuild() throws IllegalAccessException, InvocationTargetException {
+    /**
+     * Returns the Windows current build number from registry (example: "15063")
+     * @return the Windows current build number from registry
+     * @throws IllegalAccessException if Java language access control is enforced and the underlying method is inaccessible
+     * @throws InvocationTargetException if the underlying method throws an exception
+     * @since 12744
+     */
+    public static String getCurrentBuild() throws IllegalAccessException, InvocationTargetException {
         return WinRegistry.readString(HKEY_LOCAL_MACHINE, CURRENT_VERSION, "CurrentBuild");
     }
 
@@ -302,7 +309,7 @@ public class PlatformHookWindows implements PlatformHook {
                 sb.append(' ').append(releaseId);
             }
             sb.append(" (").append(getCurrentBuild()).append(')');
-        } catch (ReflectiveOperationException e) {
+        } catch (ReflectiveOperationException | JosmRuntimeException e) {
             Logging.error(e);
         }
         return sb.toString();
@@ -469,7 +476,7 @@ public class PlatformHookWindows implements PlatformHook {
     @Override
     public File getDefaultUserDataDirectory() {
         // Use preferences directory by default
-        return Main.pref.getPreferencesDirectory();
+        return Config.getDirs().getPreferencesDirectory(false);
     }
 
     /**
@@ -496,12 +503,12 @@ public class PlatformHookWindows implements PlatformHook {
      * @param templateFileName file name of the fontconfig.properties template file
      */
     protected void extendFontconfig(String templateFileName) {
-        String customFontconfigFile = Main.pref.get("fontconfig.properties", null);
+        String customFontconfigFile = Config.getPref().get("fontconfig.properties", null);
         if (customFontconfigFile != null) {
             Utils.updateSystemProperty("sun.awt.fontconfig", customFontconfigFile);
             return;
         }
-        if (!Main.pref.getBoolean("font.extended-unicode", true))
+        if (!Config.getPref().getBoolean("font.extended-unicode", true))
             return;
 
         String javaLibPath = System.getProperty("java.home") + File.separator + "lib";
@@ -514,12 +521,12 @@ public class PlatformHookWindows implements PlatformHook {
             Properties props = new Properties();
             props.load(fis);
             byte[] content = Files.readAllBytes(templateFile);
-            File cachePath = Main.pref.getCacheDirectory();
+            File cachePath = Config.getDirs().getCacheDirectory(true);
             Path fontconfigFile = cachePath.toPath().resolve("fontconfig.properties");
             OutputStream os = Files.newOutputStream(fontconfigFile);
             os.write(content);
             try (Writer w = new BufferedWriter(new OutputStreamWriter(os, StandardCharsets.UTF_8))) {
-                Collection<FontEntry> extrasPref = Main.pref.getListOfStructs(
+                Collection<FontEntry> extrasPref = StructUtils.getListOfStructs(Config.getPref(),
                         "font.extended-unicode.extra-items", getAdditionalFonts(), FontEntry.class);
                 Collection<FontEntry> extras = new ArrayList<>();
                 w.append("\n\n# Added by JOSM to extend unicode coverage of Java font support:\n\n");
@@ -672,9 +679,4 @@ public class PlatformHookWindows implements PlatformHook {
 
         return def;
     }
-
-    @Override
-    public List<File> getDefaultProj4NadshiftDirectories() {
-        return Arrays.asList(new File("C:\\PROJ\\NAD"));
-    }
 }
diff --git a/src/org/openstreetmap/josm/tools/PlatformVisitor.java b/src/org/openstreetmap/josm/tools/PlatformVisitor.java
new file mode 100644
index 0000000..7fcb771
--- /dev/null
+++ b/src/org/openstreetmap/josm/tools/PlatformVisitor.java
@@ -0,0 +1,27 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.tools;
+
+/**
+ * Visitor, to be used with {@link Platform}.
+ * @param <T> type that will be the result of the visiting operation
+ * @since 12776
+ */
+public interface PlatformVisitor<T> {
+    /**
+     * Visit {@link Platform#UNIXOID}
+     * @return result of the operation
+     */
+    T visitUnixoid();
+
+    /**
+     * Visit {@link Platform#WINDOWS}
+     * @return result of the operation
+     */
+    T visitWindows();
+
+    /**
+     * Visit {@link Platform#OSX}
+     * @return result of the operation
+     */
+    T visitOsx();
+}
diff --git a/src/org/openstreetmap/josm/tools/RightAndLefthandTraffic.java b/src/org/openstreetmap/josm/tools/RightAndLefthandTraffic.java
index 2aee5a8..e017860 100644
--- a/src/org/openstreetmap/josm/tools/RightAndLefthandTraffic.java
+++ b/src/org/openstreetmap/josm/tools/RightAndLefthandTraffic.java
@@ -16,7 +16,6 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Set;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.JoinAreasAction;
 import org.openstreetmap.josm.actions.JoinAreasAction.JoinAreasResult;
 import org.openstreetmap.josm.actions.JoinAreasAction.Multipolygon;
@@ -31,6 +30,7 @@ import org.openstreetmap.josm.io.IllegalDataException;
 import org.openstreetmap.josm.io.OsmReader;
 import org.openstreetmap.josm.io.OsmWriter;
 import org.openstreetmap.josm.io.OsmWriterFactory;
+import org.openstreetmap.josm.spi.preferences.Config;
 
 /**
  * Look up, if there is right- or left-hand traffic at a certain place.
@@ -103,7 +103,7 @@ public final class RightAndLefthandTraffic {
             w.removeAll();
         }
         // Purge all other ways and relations so dataset only contains lefthand traffic data
-        PurgeCommand.build(null, toPurge, null).executeCommand();
+        PurgeCommand.build(toPurge, null).executeCommand();
         // Combine adjacent countries into a single polygon
         Collection<Way> optimizedWays = new ArrayList<>();
         List<Multipolygon> areas = JoinAreasAction.collectMultipolygons(ways);
@@ -152,7 +152,7 @@ public final class RightAndLefthandTraffic {
 
     private static void saveOptimizedBoundaries(Collection<Way> optimizedWays) {
         DataSet ds = optimizedWays.iterator().next().getDataSet();
-        File file = new File(Main.pref.getCacheDirectory(), "left-right-hand-traffic.osm");
+        File file = new File(Config.getDirs().getCacheDirectory(true), "left-right-hand-traffic.osm");
         try (Writer writer = new OutputStreamWriter(new FileOutputStream(file), StandardCharsets.UTF_8);
              OsmWriter w = OsmWriterFactory.createOsmWriter(new PrintWriter(writer), false, ds.getVersion())
             ) {
@@ -165,7 +165,8 @@ public final class RightAndLefthandTraffic {
     }
 
     private static Collection<Way> loadOptimizedBoundaries() {
-        try (InputStream is = new FileInputStream(new File(Main.pref.getCacheDirectory(), "left-right-hand-traffic.osm"))) {
+        try (InputStream is = new FileInputStream(new File(
+                Config.getDirs().getCacheDirectory(false), "left-right-hand-traffic.osm"))) {
            return OsmReader.parseDataSet(is, null).getWays();
         } catch (IllegalDataException | IOException ex) {
             Logging.trace(ex);
diff --git a/src/org/openstreetmap/josm/gui/util/RotationAngle.java b/src/org/openstreetmap/josm/tools/RotationAngle.java
similarity index 96%
rename from src/org/openstreetmap/josm/gui/util/RotationAngle.java
rename to src/org/openstreetmap/josm/tools/RotationAngle.java
index 501059a..138c892 100644
--- a/src/org/openstreetmap/josm/gui/util/RotationAngle.java
+++ b/src/org/openstreetmap/josm/tools/RotationAngle.java
@@ -1,19 +1,17 @@
 // License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui.util;
+package org.openstreetmap.josm.tools;
 
 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;
-import org.openstreetmap.josm.tools.Geometry;
-import org.openstreetmap.josm.tools.SubclassFilteredCollection;
-import org.openstreetmap.josm.tools.Utils;
 
 /**
  * Determines how an icon is to be rotated depending on the primitive to be displayed.
  * @since  8199 (creation)
  * @since 10599 (functional interface)
+ * @since 12756 (moved from {@code gui.util} package)
  */
 @FunctionalInterface
 public interface RotationAngle {
diff --git a/src/org/openstreetmap/josm/tools/Shortcut.java b/src/org/openstreetmap/josm/tools/Shortcut.java
index 58486f3..58f07bc 100644
--- a/src/org/openstreetmap/josm/tools/Shortcut.java
+++ b/src/org/openstreetmap/josm/tools/Shortcut.java
@@ -22,7 +22,7 @@ import javax.swing.KeyStroke;
 import javax.swing.text.JTextComponent;
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.gui.util.GuiHelper;
+import org.openstreetmap.josm.spi.preferences.Config;
 
 /**
  * Global shortcut class.
@@ -170,7 +170,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<>(Config.getPref().getList(prefString));
         this.shortText = prefString.substring(15);
         this.longText = s.get(0);
         this.requestedKey = Integer.parseInt(s.get(1));
@@ -182,7 +182,7 @@ public final class Shortcut {
     }
 
     private void saveDefault() {
-        Main.pref.getCollection("shortcut.entry."+shortText, Arrays.asList(longText,
+        Config.getPref().getList("shortcut.entry."+shortText, Arrays.asList(longText,
             String.valueOf(requestedKey), String.valueOf(requestedGroup), String.valueOf(requestedKey),
             String.valueOf(getGroupModifier(requestedGroup)), String.valueOf(true), String.valueOf(false)));
     }
@@ -190,9 +190,9 @@ public final class Shortcut {
     // get a string that can be put into the preferences
     private boolean save() {
         if (isAutomatic() || isReset() || !isAssignedUser()) {
-            return Main.pref.putCollection("shortcut.entry."+shortText, null);
+            return Config.getPref().putList("shortcut.entry."+shortText, null);
         } else {
-            return Main.pref.putCollection("shortcut.entry."+shortText, Arrays.asList(longText,
+            return Config.getPref().putList("shortcut.entry."+shortText, Arrays.asList(longText,
                 String.valueOf(requestedKey), String.valueOf(requestedGroup), String.valueOf(assignedKey),
                 String.valueOf(assignedModifier), String.valueOf(assignedDefault), String.valueOf(assignedUser)));
         }
@@ -369,7 +369,7 @@ public final class Shortcut {
     private static void doInit() {
         if (initdone) return;
         initdone = true;
-        int commandDownMask = GuiHelper.getMenuShortcutKeyMaskEx();
+        int commandDownMask = Main.platform.getMenuShortcutKeyMaskEx();
         groups.put(NONE, -1);
         groups.put(MNEMONIC, KeyEvent.ALT_DOWN_MASK);
         groups.put(DIRECT, 0);
diff --git a/src/org/openstreetmap/josm/tools/TextTagParser.java b/src/org/openstreetmap/josm/tools/TextTagParser.java
index 0dccfc2..5cee0e4 100644
--- a/src/org/openstreetmap/josm/tools/TextTagParser.java
+++ b/src/org/openstreetmap/josm/tools/TextTagParser.java
@@ -11,7 +11,7 @@ import java.util.Map.Entry;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.spi.preferences.Config;
 
 /**
  * Class that helps to parse tags from arbitrary text
@@ -19,9 +19,9 @@ import org.openstreetmap.josm.Main;
 public final class TextTagParser {
 
     // properties need JOSM restart to apply, modified rarely enough
-    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_KEY_LENGTH = Config.getPref().getInt("tags.paste.max-key-length", 50);
+    private static final int MAX_KEY_COUNT = Config.getPref().getInt("tags.paste.max-key-count", 30);
+    private static final String KEY_PATTERN = Config.getPref().get("tags.paste.tag-pattern", "[0-9a-zA-Z:_]*");
     private static final int MAX_VALUE_LENGTH = 255;
 
     private TextTagParser() {
diff --git a/src/org/openstreetmap/josm/tools/Utils.java b/src/org/openstreetmap/josm/tools/Utils.java
index 2aacc56..44732d4 100644
--- a/src/org/openstreetmap/josm/tools/Utils.java
+++ b/src/org/openstreetmap/josm/tools/Utils.java
@@ -44,6 +44,7 @@ import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Locale;
+import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Executor;
 import java.util.concurrent.ForkJoinPool;
 import java.util.concurrent.ForkJoinWorkerThread;
@@ -57,7 +58,6 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Stream;
 import java.util.zip.GZIPInputStream;
-import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
 import java.util.zip.ZipInputStream;
 
@@ -69,7 +69,8 @@ import javax.xml.parsers.SAXParser;
 import javax.xml.parsers.SAXParserFactory;
 
 import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream;
-import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.io.Compression;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.w3c.dom.Document;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
@@ -344,7 +345,7 @@ public final class Utils {
      * @return A copy of the original array, or {@code null} if {@code array} is null
      * @since 6222
      */
-    public static char[] copyArray(char ... array) {
+    public static char[] copyArray(char... array) {
         if (array != null) {
             return Arrays.copyOf(array, array.length);
         }
@@ -726,12 +727,11 @@ public final class Utils {
      * @return a Bzip2 input stream wrapping given input stream, or {@code null} if {@code in} is {@code null}
      * @throws IOException if the given input stream does not contain valid BZ2 header
      * @since 7867
+     * @deprecated use {@link Compression#getBZip2InputStream(java.io.InputStream)}
      */
+    @Deprecated
     public static BZip2CompressorInputStream getBZip2InputStream(InputStream in) throws IOException {
-        if (in == null) {
-            return null;
-        }
-        return new BZip2CompressorInputStream(in, /* see #9537 */ true);
+        return Compression.getBZip2InputStream(in);
     }
 
     /**
@@ -740,12 +740,11 @@ public final class Utils {
      * @return a Gzip input stream wrapping given input stream, or {@code null} if {@code in} is {@code null}
      * @throws IOException if an I/O error has occurred
      * @since 7119
+     * @deprecated use {@link Compression#getGZipInputStream(java.io.InputStream)}
      */
+    @Deprecated
     public static GZIPInputStream getGZipInputStream(InputStream in) throws IOException {
-        if (in == null) {
-            return null;
-        }
-        return new GZIPInputStream(in);
+        return Compression.getGZipInputStream(in);
     }
 
     /**
@@ -754,18 +753,11 @@ public final class Utils {
      * @return a Zip input stream wrapping given input stream, or {@code null} if {@code in} is {@code null}
      * @throws IOException if an I/O error has occurred
      * @since 7119
+     * @deprecated use {@link Compression#getZipInputStream(java.io.InputStream)}
      */
+    @Deprecated
     public static ZipInputStream getZipInputStream(InputStream in) throws IOException {
-        if (in == null) {
-            return null;
-        }
-        ZipInputStream zis = new ZipInputStream(in, StandardCharsets.UTF_8);
-        // Positions the stream at the beginning of first entry
-        ZipEntry ze = zis.getNextEntry();
-        if (ze != null && Logging.isDebugEnabled()) {
-            Logging.debug("Zip entry: {0}", ze.getName());
-        }
-        return zis;
+        return Compression.getZipInputStream(in);
     }
 
     /**
@@ -820,7 +812,7 @@ public final class Utils {
         return strip(str, stripChars(skipChars));
     }
 
-    private static String strip(final String str, final char ... skipChars) {
+    private static String strip(final String str, final char... skipChars) {
 
         int start = 0;
         int end = str.length();
@@ -842,7 +834,7 @@ public final class Utils {
         return str.substring(start, end);
     }
 
-    private static boolean isStrippedChar(char c, final char ... skipChars) {
+    private static boolean isStrippedChar(char c, final char... skipChars) {
         return Character.isWhitespace(c) || Character.isSpaceChar(c) || stripChar(skipChars, c);
     }
 
@@ -875,8 +867,10 @@ public final class Utils {
      * @param command the command with arguments
      * @return the output
      * @throws IOException when there was an error, e.g. command does not exist
+     * @throws ExecutionException when the return code is != 0. The output is can be retrieved in the exception message
+     * @throws InterruptedException if the current thread is {@linkplain Thread#interrupt() interrupted} by another thread while waiting
      */
-    public static String execOutput(List<String> command) throws IOException {
+    public static String execOutput(List<String> command) throws IOException, ExecutionException, InterruptedException {
         if (Logging.isDebugEnabled()) {
             Logging.debug(join(" ", command));
         }
@@ -892,7 +886,11 @@ public final class Utils {
                     all.append(line);
                 }
             }
-            return all != null ? all.toString() : null;
+            String msg = all != null ? all.toString() : null;
+            if (p.waitFor() != 0) {
+                throw new ExecutionException(msg, null);
+            }
+            return msg;
         }
     }
 
@@ -1247,7 +1245,7 @@ public final class Utils {
      * @return a {@link ForkJoinPool}
      */
     public static ForkJoinPool newForkJoinPool(String pref, final String nameFormat, final int threadPriority) {
-        int noThreads = Main.pref.getInteger(pref, Runtime.getRuntime().availableProcessors());
+        int noThreads = Config.getPref().getInt(pref, Runtime.getRuntime().availableProcessors());
         return new ForkJoinPool(noThreads, new ForkJoinPool.ForkJoinWorkerThreadFactory() {
             final AtomicLong count = new AtomicLong(0);
             @Override
@@ -1504,7 +1502,7 @@ public final class Utils {
      * @see AccessibleObject#setAccessible
      * @since 10223
      */
-    public static void setObjectsAccessible(final AccessibleObject ... objects) {
+    public static void setObjectsAccessible(final AccessibleObject... objects) {
         if (objects != null && objects.length > 0) {
             AccessController.doPrivileged((PrivilegedAction<Object>) () -> {
                 for (AccessibleObject o : objects) {
@@ -1634,7 +1632,7 @@ public final class Utils {
         if (firstDotPos == lastDotPos) {
             return 0;
         }
-        return firstDotPos > - 1 ? Integer.parseInt(version.substring(firstDotPos + 1,
+        return firstDotPos > -1 ? Integer.parseInt(version.substring(firstDotPos + 1,
                 lastDotPos > -1 ? lastDotPos : version.length())) : 0;
     }
 
@@ -1688,7 +1686,9 @@ public final class Utils {
     public static String getJavaLatestVersion() {
         try {
             return HttpClient.create(
-                    new URL(Main.pref.get("java.baseline.version.url", "http://javadl-esd-secure.oracle.com/update/baseline.version")))
+                    new URL(Config.getPref().get(
+                            "java.baseline.version.url",
+                            "http://javadl-esd-secure.oracle.com/update/baseline.version")))
                     .connect().fetchContent().split("\n")[0];
         } catch (IOException e) {
             Logging.error(e);
diff --git a/src/org/openstreetmap/josm/tools/WikiReader.java b/src/org/openstreetmap/josm/tools/WikiReader.java
index 97d7c7e..ed456d9 100644
--- a/src/org/openstreetmap/josm/tools/WikiReader.java
+++ b/src/org/openstreetmap/josm/tools/WikiReader.java
@@ -6,6 +6,7 @@ import java.io.IOException;
 import java.net.URL;
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.LanguageInfo.LocaleType;
 
 /**
@@ -29,7 +30,7 @@ public class WikiReader {
      * Constructs a new {@code WikiReader}.
      */
     public WikiReader() {
-        this(Main.pref.get("help.baseurl", Main.getJOSMWebsite()));
+        this(Config.getPref().get("help.baseurl", Main.getJOSMWebsite()));
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/tools/WinRegistry.java b/src/org/openstreetmap/josm/tools/WinRegistry.java
index bbbd167..e45bcb0 100644
--- a/src/org/openstreetmap/josm/tools/WinRegistry.java
+++ b/src/org/openstreetmap/josm/tools/WinRegistry.java
@@ -62,7 +62,7 @@ public final class WinRegistry {
             regQueryInfoKey = userClass.getDeclaredMethod("WindowsRegQueryInfoKey1", int.class);
             regEnumKeyEx = userClass.getDeclaredMethod("WindowsRegEnumKeyEx", int.class, int.class, int.class);
             Utils.setObjectsAccessible(regOpenKey, regCloseKey, regQueryValueEx, regEnumValue, regQueryInfoKey, regEnumKeyEx);
-        } catch (SecurityException | ReflectiveOperationException e) {
+        } catch (RuntimeException | ReflectiveOperationException e) {
             throw new JosmRuntimeException(e);
         }
     }
diff --git a/src/org/openstreetmap/josm/tools/bugreport/BugReport.java b/src/org/openstreetmap/josm/tools/bugreport/BugReport.java
index 1b8f6a4..245b86f 100644
--- a/src/org/openstreetmap/josm/tools/bugreport/BugReport.java
+++ b/src/org/openstreetmap/josm/tools/bugreport/BugReport.java
@@ -7,8 +7,6 @@ import java.io.StringWriter;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.function.Predicate;
 
-import org.openstreetmap.josm.actions.ShowStatusReportAction;
-
 /**
  * This class contains utility methods to create and handle a bug report.
  * <p>
@@ -20,7 +18,7 @@ import org.openstreetmap.josm.actions.ShowStatusReportAction;
  * In your code, you should add try...catch blocks for any runtime exceptions that might happen. It is fine to catch throwable there.
  * <p>
  * You should then add some debug information there. This can be the OSM ids that caused the error, information on the data you were working on
- * or other local variables. Make sure that no excpetions may occur while computing the values. It is best to send plain local variables to
+ * or other local variables. Make sure that no exceptions may occur while computing the values. It is best to send plain local variables to
  * put(...). If you need to do computations, put them into a lambda expression. Then simply throw the throwable you got from the bug report.
  * The global exception handler will do the rest.
  * <pre>
@@ -116,15 +114,16 @@ public final class BugReport implements Serializable {
 
     /**
      * Gets the full string that should be send as error report.
+     * @param header header text for the error report
      * @return The string.
      * @since 10585
      */
-    public String getReportText() {
+    public String getReportText(String header) {
         StringWriter stringWriter = new StringWriter();
         PrintWriter out = new PrintWriter(stringWriter);
         if (isIncludeStatusReport()) {
             try {
-                out.println(ShowStatusReportAction.getReportHeader());
+                out.println(header);
             } catch (RuntimeException e) { // NOPMD
                 out.println("Could not generate status report: " + e.getMessage());
             }
diff --git a/src/org/openstreetmap/josm/tools/bugreport/BugReportQueue.java b/src/org/openstreetmap/josm/tools/bugreport/BugReportQueue.java
index 35ecd61..b2490e3 100644
--- a/src/org/openstreetmap/josm/tools/bugreport/BugReportQueue.java
+++ b/src/org/openstreetmap/josm/tools/bugreport/BugReportQueue.java
@@ -1,14 +1,12 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.tools.bugreport;
 
-import java.awt.GraphicsEnvironment;
 import java.util.ArrayList;
 import java.util.LinkedList;
+import java.util.Objects;
 import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.function.BiFunction;
 import java.util.function.Predicate;
 
-import org.openstreetmap.josm.gui.bugreport.BugReportDialog;
 import org.openstreetmap.josm.tools.Logging;
 
 /**
@@ -18,19 +16,41 @@ import org.openstreetmap.josm.tools.Logging;
  */
 public class BugReportQueue {
 
+    /**
+     * The fallback bug report handler if none is set. Prints the stacktrace on standard error stream.
+     * @since 12770
+     */
+    public static final BugReportHandler FALLBACK_BUGREPORT_HANDLER = (e, index) -> {
+        e.printStackTrace();
+        return BugReportQueue.SuppressionMode.NONE;
+    };
+
     private static final BugReportQueue INSTANCE = new BugReportQueue();
 
     private final LinkedList<ReportedException> reportsToDisplay = new LinkedList<>();
     private boolean suppressAllMessages;
     private final ArrayList<ReportedException> suppressFor = new ArrayList<>();
     private Thread displayThread;
-    private final BiFunction<ReportedException, Integer, SuppressionMode> bugReportHandler = getBestHandler();
+    private BugReportHandler bugReportHandler = FALLBACK_BUGREPORT_HANDLER;
     private final CopyOnWriteArrayList<Predicate<ReportedException>> handlers = new CopyOnWriteArrayList<>();
     private int displayedErrors;
 
     private boolean inReportDialog;
 
     /**
+     * Class that handles reporting a bug to the user.
+     */
+    public interface BugReportHandler {
+        /**
+         * Handle the bug report for a given exception
+         * @param e The exception to display
+         * @param exceptionCounter A counter of how many exceptions have already been worked on
+         * @return The new suppression status
+         */
+        SuppressionMode handle(ReportedException e, int exceptionCounter);
+    }
+
+    /**
      * The suppression mode that should be used after the dialog was closed.
      */
     public enum SuppressionMode {
@@ -111,7 +131,7 @@ public class BugReportQueue {
             Logging.trace("Intercepted by handler.");
             return SuppressionMode.NONE;
         }
-        return bugReportHandler.apply(e, getDisplayedErrors());
+        return bugReportHandler.handle(e, getDisplayedErrors());
     }
 
     private synchronized int getDisplayedErrors() {
@@ -126,19 +146,17 @@ public class BugReportQueue {
         return !reportsToDisplay.isEmpty() || inReportDialog;
     }
 
-    private static BiFunction<ReportedException, Integer, SuppressionMode> getBestHandler() {
-        if (GraphicsEnvironment.isHeadless()) {
-            return (e, index) -> {
-                e.printStackTrace();
-                return SuppressionMode.NONE;
-            };
-        } else {
-            return BugReportDialog::showFor;
-        }
+    /**
+     * Sets the {@link BugReportHandler} for this queue.
+     * @param bugReportHandler the handler in charge of displaying the bug report. Must not be null
+     * @since 12770
+     */
+    public void setBugReportHandler(BugReportHandler bugReportHandler) {
+        this.bugReportHandler = Objects.requireNonNull(bugReportHandler, "bugReportHandler");
     }
 
     /**
-     * Allows you to peek or even intersect the bug reports.
+     * Allows you to peek or even intercept the bug reports.
      * @param handler The handler. It can return false to stop all further handling of the exception.
      * @since 10886
      */
diff --git a/src/org/openstreetmap/josm/tools/bugreport/BugReportSender.java b/src/org/openstreetmap/josm/tools/bugreport/BugReportSender.java
index be2116b..6f2f439 100644
--- a/src/org/openstreetmap/josm/tools/bugreport/BugReportSender.java
+++ b/src/org/openstreetmap/josm/tools/bugreport/BugReportSender.java
@@ -1,20 +1,14 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.tools.bugreport;
 
-import static org.openstreetmap.josm.tools.I18n.tr;
-
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
 import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
 import java.util.Base64;
+import java.util.Objects;
 
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.SwingUtilities;
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.xpath.XPath;
 import javax.xml.xpath.XPathConstants;
@@ -22,10 +16,6 @@ import javax.xml.xpath.XPathExpressionException;
 import javax.xml.xpath.XPathFactory;
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.gui.bugreport.DebugTextDisplay;
-import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
-import org.openstreetmap.josm.gui.widgets.UrlLabel;
-import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.HttpClient;
 import org.openstreetmap.josm.tools.HttpClient.Response;
 import org.openstreetmap.josm.tools.Logging;
@@ -44,6 +34,45 @@ import org.xml.sax.SAXException;
  */
 public class BugReportSender extends Thread {
 
+    /**
+     * Called during bug submission to JOSM bugtracker. Completes the bug report submission and handles errors.
+     * @since 12790
+     */
+    public interface BugReportSendingHandler {
+        /**
+         * Called when a bug is sent to JOSM bugtracker.
+         * @param bugUrl URL to visit to effectively submit the bug report to JOSM website
+         * @param statusText the status text being sent
+         * @return <code>null</code> for success or a string in case of an error
+         */
+        String sendingBugReport(String bugUrl, String statusText);
+
+        /**
+         * Called when a bug failed to be sent to JOSM bugtracker.
+         * @param errorMessage the error message
+         * @param statusText the status text being sent
+         */
+        void failed(String errorMessage, String statusText);
+    }
+
+    /**
+     * The fallback bug report sending handler if none is set.
+     * @since 12790
+     */
+    public static final BugReportSendingHandler FALLBACK_BUGREPORT_SENDING_HANDLER = new BugReportSendingHandler() {
+        @Override
+        public String sendingBugReport(String bugUrl, String statusText) {
+            return OpenBrowser.displayUrl(bugUrl);
+        }
+
+        @Override
+        public void failed(String errorMessage, String statusText) {
+            Logging.error("Unable to send bug report: {0}\n{1}", errorMessage, statusText);
+        }
+    };
+
+    private static volatile BugReportSendingHandler handler = FALLBACK_BUGREPORT_SENDING_HANDLER;
+
     private final String statusText;
     private String errorMessage;
 
@@ -61,16 +90,18 @@ public class BugReportSender extends Thread {
         try {
             // first, send the debug text using post.
             String debugTextPasteId = pasteDebugText();
+            String bugUrl = getJOSMTicketURL() + "?pdata_stored=" + debugTextPasteId;
 
-            // then open a browser to display the pasted text.
-            String openBrowserError = OpenBrowser.displayUrl(getJOSMTicketURL() + "?pdata_stored=" + debugTextPasteId);
-            if (openBrowserError != null) {
-                Logging.warn(openBrowserError);
-                failed(openBrowserError);
+            // then notify handler
+            errorMessage = handler.sendingBugReport(bugUrl, statusText);
+            if (errorMessage != null) {
+                Logging.warn(errorMessage);
+                handler.failed(errorMessage, statusText);
             }
         } catch (BugReportSenderException e) {
             Logging.warn(e);
-            failed(e.getMessage());
+            errorMessage = e.getMessage();
+            handler.failed(errorMessage, statusText);
         }
     }
 
@@ -127,21 +158,6 @@ public class BugReportSender extends Thread {
         return token;
     }
 
-    private void failed(String string) {
-        errorMessage = string;
-        SwingUtilities.invokeLater(() -> {
-            JPanel errorPanel = new JPanel(new GridBagLayout());
-            errorPanel.add(new JMultilineLabel(
-                    tr("Opening the bug report failed. Please report manually using this website:")),
-                    GBC.eol().fill(GridBagConstraints.HORIZONTAL));
-            errorPanel.add(new UrlLabel(Main.getJOSMWebsite() + "/newticket", 2), GBC.eop().insets(8, 0, 0, 0));
-            errorPanel.add(new DebugTextDisplay(statusText));
-
-            JOptionPane.showMessageDialog(Main.parent, errorPanel, tr("You have encountered a bug in JOSM"),
-                    JOptionPane.ERROR_MESSAGE);
-        });
-    }
-
     /**
      * Returns the error message that could have occured during bug sending.
      * @return the error message, or {@code null} if successful
@@ -170,4 +186,13 @@ public class BugReportSender extends Thread {
         sender.start();
         return sender;
     }
+
+    /**
+     * Sets the {@link BugReportSendingHandler} for bug report sender.
+     * @param bugReportSendingHandler the handler in charge of completing the bug report submission and handle errors. Must not be null
+     * @since 12790
+     */
+    public static void setBugReportSendingHandler(BugReportSendingHandler bugReportSendingHandler) {
+        handler = Objects.requireNonNull(bugReportSendingHandler, "bugReportSendingHandler");
+    }
 }
diff --git a/src/org/openstreetmap/josm/tools/template_engine/CompoundTemplateEntry.java b/src/org/openstreetmap/josm/tools/template_engine/CompoundTemplateEntry.java
index 989971a..dc9836c 100644
--- a/src/org/openstreetmap/josm/tools/template_engine/CompoundTemplateEntry.java
+++ b/src/org/openstreetmap/josm/tools/template_engine/CompoundTemplateEntry.java
@@ -12,7 +12,7 @@ public final class CompoundTemplateEntry implements TemplateEntry {
             return new CompoundTemplateEntry(entry);
     }
 
-    private CompoundTemplateEntry(TemplateEntry ... entries) {
+    private CompoundTemplateEntry(TemplateEntry... entries) {
         this.entries = entries;
     }
 
diff --git a/test/functional/org/openstreetmap/josm/data/BoundariesTestIT.java b/test/functional/org/openstreetmap/josm/data/BoundariesTestIT.java
index f74fe84..66d4d64 100644
--- a/test/functional/org/openstreetmap/josm/data/BoundariesTestIT.java
+++ b/test/functional/org/openstreetmap/josm/data/BoundariesTestIT.java
@@ -10,11 +10,15 @@ import java.util.List;
 import java.util.Locale;
 import java.util.stream.Collectors;
 
+import org.junit.Rule;
 import org.junit.Test;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.search.SearchCompiler;
 import org.openstreetmap.josm.io.OsmReader;
+import org.openstreetmap.josm.testutils.JOSMTestRules;
+
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 
 /**
  * Test of boundaries OSM file.
@@ -37,6 +41,13 @@ public class BoundariesTestIT {
             "US-WY");
 
     /**
+     * Setup test.
+     */
+    @Rule
+    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
+    public JOSMTestRules test = new JOSMTestRules().preferences();
+
+    /**
      * Test of boundaries OSM file.
      * @throws Exception if an error occurs
      */
diff --git a/test/functional/org/openstreetmap/josm/data/imagery/ImageryCompareTestIT.java b/test/functional/org/openstreetmap/josm/data/imagery/ImageryCompareTestIT.java
index 397efc7..ae9e520 100644
--- a/test/functional/org/openstreetmap/josm/data/imagery/ImageryCompareTestIT.java
+++ b/test/functional/org/openstreetmap/josm/data/imagery/ImageryCompareTestIT.java
@@ -5,9 +5,13 @@ import static org.junit.Assert.fail;
 
 import java.net.URL;
 
+import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.testutils.JOSMTestRules;
 import org.openstreetmap.josm.tools.HttpClient;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
 /**
  * Automatic test of imagery synchronization between JOSM and ELI.
  * See <a href="https://josm.openstreetmap.de/wiki/ImageryCompare">JOSM wiki</a>
@@ -18,6 +22,13 @@ public class ImageryCompareTestIT {
     private static String RED_PREFIX = "<pre style=\"margin:3px;color:red\">";
 
     /**
+     * Setup test.
+     */
+    @Rule
+    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
+    public JOSMTestRules test = new JOSMTestRules().preferences();
+
+    /**
      * Test of imagery entries.
      * @throws Exception if an error occurs
      */
diff --git a/test/functional/org/openstreetmap/josm/data/osm/TaginfoTestIT.java b/test/functional/org/openstreetmap/josm/data/osm/TaginfoTestIT.java
index 4b47521..7ed607c 100644
--- a/test/functional/org/openstreetmap/josm/data/osm/TaginfoTestIT.java
+++ b/test/functional/org/openstreetmap/josm/data/osm/TaginfoTestIT.java
@@ -14,16 +14,19 @@ import javax.json.JsonObject;
 import javax.json.JsonReader;
 import javax.json.JsonValue;
 
-import org.junit.BeforeClass;
+import org.junit.Rule;
 import org.junit.Test;
-import org.openstreetmap.josm.JOSMFixture;
+import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.validation.tests.MapCSSTagChecker;
 import org.openstreetmap.josm.data.validation.tests.TagChecker;
 import org.openstreetmap.josm.gui.mappaint.mapcss.parsergen.ParseException;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresets;
+import org.openstreetmap.josm.testutils.JOSMTestRules;
 import org.openstreetmap.josm.tools.HttpClient;
 import org.xml.sax.SAXException;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
 /**
  * Various integration tests with Taginfo.
  */
@@ -32,10 +35,9 @@ public class TaginfoTestIT {
     /**
      * Setup test.
      */
-    @BeforeClass
-    public static void setUp() {
-        JOSMFixture.createFunctionalTestFixture().init();
-    }
+    @Rule
+    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
+    public JOSMTestRules test = new JOSMTestRules().preferences();
 
     /**
      * Checks that popular tags are known (i.e included in internal presets, or deprecated, or explicitely ignored)
@@ -64,12 +66,13 @@ public class TaginfoTestIT {
                     // Check if tag is in internal presets
                     if (!TagChecker.isTagInPresets(key, value)) {
                         // If not, check if we have either a deprecated mapcss test for it
-                        Node n = new Node();
+                        Node n = new Node(LatLon.NORTH_POLE);
                         Way w = new Way();
                         Relation r = new Relation();
                         n.put(key, value);
                         w.put(key, value);
                         r.put(key, value);
+                        new DataSet(n, w, r);
                         if (mapCssTagChecker.getErrorsForPrimitive(n, false).isEmpty()
                          && mapCssTagChecker.getErrorsForPrimitive(w, false).isEmpty()
                          && mapCssTagChecker.getErrorsForPrimitive(r, false).isEmpty()) {
diff --git a/test/functional/org/openstreetmap/josm/gui/mappaint/MapCSSRendererTest.java b/test/functional/org/openstreetmap/josm/gui/mappaint/MapCSSRendererTest.java
index ef6539f..aca58f7 100644
--- a/test/functional/org/openstreetmap/josm/gui/mappaint/MapCSSRendererTest.java
+++ b/test/functional/org/openstreetmap/josm/gui/mappaint/MapCSSRendererTest.java
@@ -36,6 +36,7 @@ import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.visitor.paint.StyledMapRenderer;
 import org.openstreetmap.josm.data.preferences.sources.SourceEntry;
+import org.openstreetmap.josm.data.preferences.sources.SourceType;
 import org.openstreetmap.josm.gui.NavigatableComponent;
 import org.openstreetmap.josm.gui.mappaint.mapcss.MapCSSStyleSource;
 import org.openstreetmap.josm.io.IllegalDataException;
@@ -301,7 +302,7 @@ public class MapCSSRendererTest {
         }
 
         public SourceEntry getStyleSourceEntry() {
-            return new SourceEntry(getTestDirectory() + "/style.mapcss",
+            return new SourceEntry(SourceType.MAP_PAINT_STYLE, getTestDirectory() + "/style.mapcss",
                     "test style", "a test style", true // active
             );
         }
diff --git a/test/functional/org/openstreetmap/josm/io/MultiFetchServerObjectReaderTest.java b/test/functional/org/openstreetmap/josm/io/MultiFetchServerObjectReaderTest.java
index a5bd924..25f8deb 100644
--- a/test/functional/org/openstreetmap/josm/io/MultiFetchServerObjectReaderTest.java
+++ b/test/functional/org/openstreetmap/josm/io/MultiFetchServerObjectReaderTest.java
@@ -27,7 +27,6 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.Timeout;
 import org.openstreetmap.josm.JOSMFixture;
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.Changeset;
 import org.openstreetmap.josm.data.osm.DataSet;
@@ -37,6 +36,7 @@ import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
+import org.openstreetmap.josm.spi.preferences.Config;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 
@@ -152,10 +152,10 @@ public class MultiFetchServerObjectReaderTest {
         logger.info("initializing ...");
         JOSMFixture.createFunctionalTestFixture().init();
 
-        Main.pref.put("osm-server.auth-method", "basic");
+        Config.getPref().put("osm-server.auth-method", "basic");
 
         // don't use atomic upload, the test API server can't cope with large diff uploads
-        Main.pref.put("osm-server.atomic-upload", false);
+        Config.getPref().putBoolean("osm-server.atomic-upload", false);
 
         File dataSetCacheOutputFile = new File(System.getProperty("java.io.tmpdir"),
                 MultiFetchServerObjectReaderTest.class.getName() + ".dataset");
diff --git a/test/functional/org/openstreetmap/josm/io/OsmServerBackreferenceReaderTest.java b/test/functional/org/openstreetmap/josm/io/OsmServerBackreferenceReaderTest.java
index c27e473..f5a9234 100644
--- a/test/functional/org/openstreetmap/josm/io/OsmServerBackreferenceReaderTest.java
+++ b/test/functional/org/openstreetmap/josm/io/OsmServerBackreferenceReaderTest.java
@@ -39,6 +39,7 @@ import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.projection.Projections;
 import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -160,11 +161,11 @@ public class OsmServerBackreferenceReaderTest {
 
         JOSMFixture.createFunctionalTestFixture().init();
 
-        Main.pref.put("osm-server.auth-method", "basic");
+        Config.getPref().put("osm-server.auth-method", "basic");
 
         // don't use atomic upload, the test API server can't cope with large diff uploads
         //
-        Main.pref.put("osm-server.atomic-upload", false);
+        Config.getPref().putBoolean("osm-server.atomic-upload", false);
         Main.setProjection(Projections.getProjectionByCode("EPSG:3857")); // Mercator
         Logging.setLogLevel(Logging.LEVEL_DEBUG);
 
diff --git a/test/functional/org/openstreetmap/josm/io/OsmServerHistoryReaderTest.java b/test/functional/org/openstreetmap/josm/io/OsmServerHistoryReaderTest.java
index 323e17e..26faa3b 100644
--- a/test/functional/org/openstreetmap/josm/io/OsmServerHistoryReaderTest.java
+++ b/test/functional/org/openstreetmap/josm/io/OsmServerHistoryReaderTest.java
@@ -6,11 +6,11 @@ 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;
 import org.openstreetmap.josm.data.osm.history.HistoryDataSet;
 import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
+import org.openstreetmap.josm.spi.preferences.Config;
 
 /**
  * History fetching tests. This test operates with production API.
@@ -23,7 +23,7 @@ public class OsmServerHistoryReaderTest {
     @BeforeClass
     public static void init() {
         JOSMFixture.createUnitTestFixture().init();
-        Main.pref.put("osm-server.url", OsmApi.DEFAULT_API_URL);
+        Config.getPref().put("osm-server.url", OsmApi.DEFAULT_API_URL);
     }
 
     /**
diff --git a/test/functional/org/openstreetmap/josm/tools/HttpClientTest.java b/test/functional/org/openstreetmap/josm/tools/HttpClientTest.java
index d6e1fac..94e6250 100644
--- a/test/functional/org/openstreetmap/josm/tools/HttpClientTest.java
+++ b/test/functional/org/openstreetmap/josm/tools/HttpClientTest.java
@@ -182,7 +182,7 @@ public class HttpClientTest {
         assertThat(captured.getLevel(), is(Logging.LEVEL_DEBUG));
     }
 
-    @Test()
+    @Test
     public void testHttp401() throws IOException {
         // https://tools.ietf.org/html/rfc2324
         final HttpClient.Response response = HttpClient.create(new URL("https://httpbin.org/status/401")).connect(progress);
diff --git a/test/performance/org/openstreetmap/josm/gui/mappaint/MapRendererPerformanceTest.java b/test/performance/org/openstreetmap/josm/gui/mappaint/MapRendererPerformanceTest.java
index 16a7cf0..d842d0d 100644
--- a/test/performance/org/openstreetmap/josm/gui/mappaint/MapRendererPerformanceTest.java
+++ b/test/performance/org/openstreetmap/josm/gui/mappaint/MapRendererPerformanceTest.java
@@ -25,6 +25,7 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.Timeout;
 import org.openstreetmap.josm.JOSMFixture;
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.PerformanceTestUtils;
 import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.data.Bounds;
@@ -34,7 +35,6 @@ import org.openstreetmap.josm.data.osm.visitor.paint.RenderBenchmarkCollector.Ca
 import org.openstreetmap.josm.data.osm.visitor.paint.StyledMapRenderer;
 import org.openstreetmap.josm.data.osm.visitor.paint.StyledMapRenderer.StyleRecord;
 import org.openstreetmap.josm.data.preferences.sources.SourceEntry;
-import org.openstreetmap.josm.data.projection.Projections;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.NavigatableComponent;
 import org.openstreetmap.josm.gui.mappaint.StyleSetting.BooleanStyleSetting;
@@ -186,7 +186,7 @@ public class MapRendererPerformanceTest {
                 checkScale = true;
                 scale = SCALE_Z17;
             }
-            nc.zoomTo(Projections.project(center), scale);
+            nc.zoomTo(Main.getProjection().latlon2eastNorth(center), scale);
             if (checkScale) {
                 int lvl = Selector.OptimizedGeneralSelector.scale2level(nc.getDist100Pixel());
                 Assert.assertEquals(17, lvl);
diff --git a/test/performance/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSPerformanceTest.java b/test/performance/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSPerformanceTest.java
index acbc44d..d58eb86 100644
--- a/test/performance/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSPerformanceTest.java
+++ b/test/performance/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSPerformanceTest.java
@@ -16,6 +16,7 @@ import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.visitor.paint.StyledMapRenderer;
 import org.openstreetmap.josm.data.preferences.sources.SourceEntry;
+import org.openstreetmap.josm.data.preferences.sources.SourceType;
 import org.openstreetmap.josm.gui.NavigatableComponent;
 import org.openstreetmap.josm.gui.mappaint.MapRendererPerformanceTest;
 import org.openstreetmap.josm.io.Compression;
@@ -70,6 +71,7 @@ public class MapCSSPerformanceTest {
         System.out.print("Loading style '"+STYLE_FILE+"' ...");
         MapCSSStyleSource source = new MapCSSStyleSource(
             new SourceEntry(
+                SourceType.MAP_PAINT_STYLE,
                 STYLE_FILE,
                 "test style",
                 "a test style",
diff --git a/test/unit/org/CustomMatchers.java b/test/unit/org/CustomMatchers.java
index 33b0cce..983bbba 100644
--- a/test/unit/org/CustomMatchers.java
+++ b/test/unit/org/CustomMatchers.java
@@ -3,6 +3,7 @@ package org;
 
 import java.awt.geom.Point2D;
 import java.util.Collection;
+import java.util.Locale;
 import java.util.Objects;
 import java.util.function.Predicate;
 
@@ -11,6 +12,7 @@ import org.hamcrest.Description;
 import org.hamcrest.Matcher;
 import org.hamcrest.TypeSafeMatcher;
 import org.junit.Ignore;
+import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.coor.LatLon;
 
@@ -20,6 +22,21 @@ import org.openstreetmap.josm.data.coor.LatLon;
 @Ignore("no test")
 public final class CustomMatchers {
 
+    /**
+     * Error mode, denoting different ways to calculate the error of a number relative to an expected value.
+     */
+    public enum ErrorMode {
+        /**
+         * absolute error (difference of actual and expected value)
+         */
+        ABSOLUTE,
+
+        /**
+         * relative error (difference divided by the expected value)
+         */
+        RELATIVE
+    }
+
     private CustomMatchers() {
         // Hide constructor for utility classes
     }
@@ -125,4 +142,96 @@ public final class CustomMatchers {
             }
         };
     }
+
+    /**
+     * Matcher for a {@link Bounds} object
+     * @param expected expected bounds
+     * @param tolerance acceptable deviation (epsilon)
+     * @return Matcher for a {@link Bounds} object
+     */
+    public static Matcher<Bounds> is(final Bounds expected, double tolerance) {
+        return new TypeSafeMatcher<Bounds>() {
+           @Override
+           public void describeTo(Description description) {
+              description.appendText("is ")
+                      .appendValue(expected)
+                      .appendText(" (tolarance: " + tolerance + ")");
+           }
+
+           @Override
+           protected void describeMismatchSafely(Bounds bounds, Description mismatchDescription) {
+              mismatchDescription.appendText("was ").appendValue(bounds);
+           }
+
+           @Override
+           protected boolean matchesSafely(Bounds bounds) {
+              return Math.abs(expected.getMinLon() - bounds.getMinLon()) <= tolerance &&
+                    Math.abs(expected.getMinLat() - bounds.getMinLat()) <= tolerance &&
+                    Math.abs(expected.getMaxLon() - bounds.getMaxLon()) <= tolerance &&
+                    Math.abs(expected.getMaxLat() - bounds.getMaxLat()) <= tolerance;
+           }
+        };
+    }
+
+    /**
+     * Matcher for a floating point number.
+     * @param expected expected value
+     * @param errorMode the error mode
+     * @param tolerance admissible error
+     * @return Matcher for a floating point number
+     */
+    public static Matcher<Double> isFP(final double expected, ErrorMode errorMode, double tolerance) {
+        return new TypeSafeMatcher<Double>() {
+            @Override
+            public void describeTo(Description description) {
+                description.appendText("is ")
+                        .appendValue(expected)
+                        .appendText(" (tolarance")
+                        .appendText(errorMode == ErrorMode.RELATIVE ? ", relative:" : ":")
+                        .appendText(Double.toString(tolerance))
+                        .appendText(")");
+            }
+
+            @Override
+            protected void describeMismatchSafely(Double was, Description mismatchDescription) {
+                mismatchDescription.appendText("was ").appendValue(was);
+                if (errorMode == ErrorMode.RELATIVE) {
+                    mismatchDescription.appendText(" (actual relative error: ")
+                            .appendText(String.format(Locale.US, "%.2e", Math.abs((was - expected) / expected)))
+                            .appendText(")");
+                }
+            }
+
+            @Override
+            protected boolean matchesSafely(Double x) {
+                switch (errorMode) {
+                    case ABSOLUTE:
+                        return Math.abs(x - expected) <= tolerance;
+                    case RELATIVE:
+                        return Math.abs((x - expected) / expected) <= tolerance;
+                    default:
+                        throw new AssertionError();
+                }
+            }
+        };
+    }
+
+    /**
+     * Matcher for a floating point number.
+     * @param expected expected value
+     * @param tolerance admissible error (absolute)
+     * @return Matcher for a floating point number
+     */
+    public static Matcher<Double> isFP(final double expected, double tolerance) {
+        return isFP(expected, ErrorMode.ABSOLUTE, tolerance);
+    }
+
+    /**
+     * Matcher for a floating point number.
+     * @param expected expected value
+     * @return Matcher for a floating point number
+     */
+    public static Matcher<Double> isFP(final double expected) {
+        return isFP(expected, 1e-8);
+    }
 }
diff --git a/test/unit/org/openstreetmap/josm/JOSMFixture.java b/test/unit/org/openstreetmap/josm/JOSMFixture.java
index d262877..48244ba 100644
--- a/test/unit/org/openstreetmap/josm/JOSMFixture.java
+++ b/test/unit/org/openstreetmap/josm/JOSMFixture.java
@@ -13,6 +13,8 @@ import java.text.MessageFormat;
 import java.util.Locale;
 import java.util.TimeZone;
 
+import org.openstreetmap.josm.actions.DeleteAction;
+import org.openstreetmap.josm.command.DeleteCommand;
 import org.openstreetmap.josm.data.projection.Projections;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.MainApplicationTest;
@@ -20,6 +22,7 @@ import org.openstreetmap.josm.gui.layer.LayerManagerTest.TestLayer;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.io.CertificateAmendment;
 import org.openstreetmap.josm.io.OsmApi;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 import org.openstreetmap.josm.tools.I18n;
 import org.openstreetmap.josm.tools.JosmRuntimeException;
@@ -93,6 +96,8 @@ public class JOSMFixture {
         }
         System.setProperty("josm.home", josmHome);
         TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
+        Config.setPreferencesInstance(Main.pref);
+        Config.setBaseDirectoriesProvider(Main.pref);
         Main.pref.resetToInitialState();
         Main.pref.enableSaveOnPut(false);
         I18n.init();
@@ -103,11 +108,11 @@ public class JOSMFixture {
 
         Logging.setLogLevel(Logging.LEVEL_INFO);
         Main.pref.init(false);
-        String url = Main.pref.get("osm-server.url");
+        String url = Config.getPref().get("osm-server.url");
         if (url == null || url.isEmpty() || isProductionApiUrl(url)) {
-            Main.pref.put("osm-server.url", "http://api06.dev.openstreetmap.org/api");
+            Config.getPref().put("osm-server.url", "http://api06.dev.openstreetmap.org/api");
         }
-        I18n.set(Main.pref.get("language", "en"));
+        I18n.set(Config.getPref().get("language", "en"));
 
         try {
             CertificateAmendment.addMissingCertificates();
@@ -118,12 +123,18 @@ public class JOSMFixture {
         // init projection
         Main.setProjection(Projections.getProjectionByCode("EPSG:3857")); // Mercator
 
+        // setup projection grid files
+        MainApplication.setupNadGridSources();
+
         // make sure we don't upload to or test against production
         url = OsmApi.getOsmApi().getBaseUrl().toLowerCase(Locale.ENGLISH).trim();
         if (isProductionApiUrl(url)) {
             fail(MessageFormat.format("configured server url ''{0}'' seems to be a productive url, aborting.", url));
         }
 
+        // Setup callbacks
+        DeleteCommand.setDeletionCallback(DeleteAction.defaultDeletionCallback);
+
         if (createGui) {
             GuiHelper.runInEDTAndWaitWithException(new Runnable() {
                 @Override
diff --git a/test/unit/org/openstreetmap/josm/TestUtils.java b/test/unit/org/openstreetmap/josm/TestUtils.java
index 5c1543e..4717f3d 100644
--- a/test/unit/org/openstreetmap/josm/TestUtils.java
+++ b/test/unit/org/openstreetmap/josm/TestUtils.java
@@ -21,6 +21,7 @@ import java.util.Objects;
 import java.util.stream.Stream;
 
 import org.openstreetmap.josm.command.Command;
+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.OsmUtils;
@@ -256,10 +257,11 @@ public final class TestUtils {
 
     /**
      * Creates a new empty command.
+     * @param ds data set
      * @return a new empty command
      */
-    public static Command newCommand() {
-        return new Command() {
+    public static Command newCommand(DataSet ds) {
+        return new Command(ds) {
             @Override
             public String getDescriptionText() {
                 return "";
diff --git a/test/unit/org/openstreetmap/josm/actions/CreateMultipolygonActionTest.java b/test/unit/org/openstreetmap/josm/actions/CreateMultipolygonActionTest.java
index c2032c6..296145f 100644
--- a/test/unit/org/openstreetmap/josm/actions/CreateMultipolygonActionTest.java
+++ b/test/unit/org/openstreetmap/josm/actions/CreateMultipolygonActionTest.java
@@ -16,9 +16,9 @@ import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.data.osm.search.SearchCompiler;
 import org.openstreetmap.josm.data.osm.search.SearchParseError;
 import org.openstreetmap.josm.data.osm.search.SearchSetting;
-import org.openstreetmap.josm.data.osm.search.SearchCompiler;
 import org.openstreetmap.josm.io.OsmReader;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 import org.openstreetmap.josm.tools.Pair;
@@ -40,8 +40,15 @@ public class CreateMultipolygonActionTest {
 
     private static Map<String, String> getRefToRoleMap(Relation relation) {
         Map<String, String> refToRole = new TreeMap<>();
+        String ref = relation.get("ref");
+        if (ref != null) {
+            refToRole.put(ref, "outer");
+        }
         for (RelationMember i : relation.getMembers()) {
-            refToRole.put(i.getMember().get("ref"), i.getRole());
+            ref = i.getMember().get("ref");
+            if (ref != null) {
+                refToRole.put(ref, i.getRole());
+            }
         }
         return refToRole;
     }
@@ -54,10 +61,14 @@ public class CreateMultipolygonActionTest {
     }
 
     @SuppressWarnings("unchecked")
-    private static Pair<SequenceCommand, Relation> createMultipolygonCommand(Collection<Way> ways, String pattern, Relation r)
+    private static Relation createMultipolygon(Collection<Way> ways, String pattern, Relation r, boolean runCmd)
             throws SearchParseError {
-        return CreateMultipolygonAction.createMultipolygonCommand(
+        Pair<SequenceCommand, Relation> cmd = CreateMultipolygonAction.createMultipolygonCommand(
             (Collection<Way>) (Collection<?>) SubclassFilteredCollection.filter(ways, SearchCompiler.compile(regexpSearch(pattern))), r);
+        if (runCmd) {
+            cmd.a.executeCommand();
+        }
+        return cmd.b;
     }
 
     @Test
@@ -71,27 +82,27 @@ public class CreateMultipolygonActionTest {
     @Test
     public void testCreate2() throws Exception {
         DataSet ds = OsmReader.parseDataSet(new FileInputStream(TestUtils.getTestDataRoot() + "create_multipolygon.osm"), null);
-        Pair<SequenceCommand, Relation> mp = createMultipolygonCommand(ds.getWays(), "ref=1 OR ref:1.1.", null);
-        assertEquals("{1=outer, 1.1.1=inner, 1.1.2=inner}", getRefToRoleMap(mp.b).toString());
+        Relation mp = createMultipolygon(ds.getWays(), "ref=1 OR ref:1.1.", null, true);
+        assertEquals("{1=outer, 1.1.1=inner, 1.1.2=inner}", getRefToRoleMap(mp).toString());
     }
 
     @Test
     public void testUpdate1() throws Exception {
         DataSet ds = OsmReader.parseDataSet(new FileInputStream(TestUtils.getTestDataRoot() + "create_multipolygon.osm"), null);
-        Pair<SequenceCommand, Relation> mp = createMultipolygonCommand(ds.getWays(), "ref=\".*1$\"", null);
-        assertEquals(3, mp.b.getMembersCount());
-        assertEquals("{1=outer, 1.1=inner, 1.1.1=outer}", getRefToRoleMap(mp.b).toString());
-        Pair<SequenceCommand, Relation> mp2 = createMultipolygonCommand(ds.getWays(), "ref=1.2", mp.b);
-        assertEquals(4, mp2.b.getMembersCount());
-        assertEquals("{1=outer, 1.1=inner, 1.1.1=outer, 1.2=inner}", getRefToRoleMap(mp2.b).toString());
+        Relation mp = createMultipolygon(ds.getWays(), "ref=\".*1$\"", null, true);
+        assertEquals(3, mp.getMembersCount());
+        assertEquals("{1=outer, 1.1=inner, 1.1.1=outer}", getRefToRoleMap(mp).toString());
+        Relation mp2 = createMultipolygon(ds.getWays(), "ref=1.2", mp, true);
+        assertEquals(4, mp2.getMembersCount());
+        assertEquals("{1=outer, 1.1=inner, 1.1.1=outer, 1.2=inner}", getRefToRoleMap(mp2).toString());
     }
 
     @Test
     public void testUpdate2() throws Exception {
         DataSet ds = OsmReader.parseDataSet(new FileInputStream(TestUtils.getTestDataRoot() + "create_multipolygon.osm"), null);
-        Pair<SequenceCommand, Relation> mp = createMultipolygonCommand(ds.getWays(), "ref=1 OR ref:1.1.1", null);
-        assertEquals("{1=outer, 1.1.1=inner}", getRefToRoleMap(mp.b).toString());
-        Pair<SequenceCommand, Relation> mp2 = createMultipolygonCommand(ds.getWays(), "ref=1.1 OR ref=1.2 OR ref=1.1.2", mp.b);
-        assertEquals("{1=outer, 1.1=inner, 1.1.1=outer, 1.1.2=outer, 1.2=inner}", getRefToRoleMap(mp2.b).toString());
+        Relation mp = createMultipolygon(ds.getWays(), "ref=1 OR ref:1.1.1", null, true);
+        assertEquals("{1=outer, 1.1.1=inner}", getRefToRoleMap(mp).toString());
+        Relation mp2 = createMultipolygon(ds.getWays(), "ref=1.1 OR ref=1.2 OR ref=1.1.2", mp, false);
+        assertEquals("{1=outer, 1.1=inner, 1.1.1=outer, 1.1.2=outer, 1.2=inner}", getRefToRoleMap(mp2).toString());
     }
 }
diff --git a/test/unit/org/openstreetmap/josm/actions/JoinAreasActionTest.java b/test/unit/org/openstreetmap/josm/actions/JoinAreasActionTest.java
index f26765b..bca93b8 100644
--- a/test/unit/org/openstreetmap/josm/actions/JoinAreasActionTest.java
+++ b/test/unit/org/openstreetmap/josm/actions/JoinAreasActionTest.java
@@ -62,7 +62,7 @@ public class JoinAreasActionTest {
             Layer layer = new OsmDataLayer(ds, null, null);
             MainApplication.getLayerManager().addLayer(layer);
             try {
-                new JoinAreasAction().join(ds.getWays());
+                new JoinAreasAction(false).join(ds.getWays());
             } finally {
                 // Ensure we clean the place before leaving, even if test fails.
                 MainApplication.getLayerManager().removeLayer(layer);
@@ -124,7 +124,7 @@ public class JoinAreasActionTest {
             for (OsmPrimitive osm : primitives) {
                 assertTrue(test + "; expected way, but got: " + osm, osm instanceof Way);
             }
-            new JoinAreasAction().join((Collection) primitives);
+            new JoinAreasAction(false).join((Collection) primitives);
             Collection<OsmPrimitive> joinedCol = dsToJoin.getPrimitives(osm -> !osm.isDeleted() && Objects.equals(osm.get("test"), test));
             assertEquals("in test " + test + ":", 1, joinedCol.size());
             Collection<OsmPrimitive> expectedCol = dsExpected.getPrimitives(osm -> !osm.isDeleted() && Objects.equals(osm.get("test"), test));
diff --git a/test/unit/org/openstreetmap/josm/actions/MergeNodesActionTest.java b/test/unit/org/openstreetmap/josm/actions/MergeNodesActionTest.java
index 196fe98..88b2990 100644
--- a/test/unit/org/openstreetmap/josm/actions/MergeNodesActionTest.java
+++ b/test/unit/org/openstreetmap/josm/actions/MergeNodesActionTest.java
@@ -9,10 +9,10 @@ import java.util.Collections;
 
 import org.junit.Rule;
 import org.junit.Test;
-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.Node;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -42,7 +42,7 @@ public class MergeNodesActionTest {
      */
     @Test(expected = IllegalStateException.class)
     public void testSelectTargetLocationNodeInvalidMode() {
-        Main.pref.putInteger("merge-nodes.mode", -1);
+        Config.getPref().putInt("merge-nodes.mode", -1);
         MergeNodesAction.selectTargetLocationNode(Arrays.asList(new Node(0), new Node(1)));
     }
 
@@ -51,14 +51,14 @@ public class MergeNodesActionTest {
      */
     @Test
     public void testSelectTargetLocationNode() {
-        Main.pref.putInteger("merge-nodes.mode", 0);
+        Config.getPref().putInt("merge-nodes.mode", 0);
         assertEquals(1, MergeNodesAction.selectTargetLocationNode(Arrays.asList(new Node(0), new Node(1))).getId());
 
-        Main.pref.putInteger("merge-nodes.mode", 1);
+        Config.getPref().putInt("merge-nodes.mode", 1);
         assertEquals(LatLon.ZERO, MergeNodesAction.selectTargetLocationNode(
                 Arrays.asList(new Node(LatLon.NORTH_POLE), new Node(LatLon.SOUTH_POLE))).getCoor());
 
-        Main.pref.putInteger("merge-nodes.mode", 2);
+        Config.getPref().putInt("merge-nodes.mode", 2);
         assertEquals(LatLon.NORTH_POLE, MergeNodesAction.selectTargetLocationNode(
                 Arrays.asList(new Node(LatLon.NORTH_POLE))).getCoor());
     }
diff --git a/test/unit/org/openstreetmap/josm/actions/SplitWayActionTest.java b/test/unit/org/openstreetmap/josm/actions/SplitWayActionTest.java
index 7c87940..5bb97f2 100644
--- a/test/unit/org/openstreetmap/josm/actions/SplitWayActionTest.java
+++ b/test/unit/org/openstreetmap/josm/actions/SplitWayActionTest.java
@@ -1,26 +1,17 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.actions;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 
-import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Iterator;
 
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
-import org.openstreetmap.josm.actions.SplitWayAction.Strategy;
 import org.openstreetmap.josm.data.coor.EastNorth;
-import org.openstreetmap.josm.data.coor.LatLon;
 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.Relation;
-import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
@@ -111,112 +102,4 @@ public final class SplitWayActionTest {
                        w1.getNode(i), w1NodesArray[i]);
         }
     }
-
-    /**
-     * Unit test of {@link SplitWayAction#findVia}.
-     */
-    @Test
-    public void testFindVia() {
-        // empty relation
-        assertNull(SplitWayAction.findVia(new Relation(), null));
-        // restriction relation without via member
-        Relation r = new Relation();
-        r.addMember(new RelationMember("", new Node()));
-        assertNull(SplitWayAction.findVia(r, "restriction"));
-        // restriction relation with via member
-        r = new Relation();
-        OsmPrimitive via = new Node();
-        r.addMember(new RelationMember("via", via));
-        assertEquals(via, SplitWayAction.findVia(r, "restriction"));
-        // destination_sign relation without sign nor intersection
-        r = new Relation();
-        r.addMember(new RelationMember("", new Node()));
-        assertNull(SplitWayAction.findVia(r, "destination_sign"));
-        // destination_sign with sign
-        r = new Relation();
-        via = new Node();
-        r.addMember(new RelationMember("sign", via));
-        assertEquals(via, SplitWayAction.findVia(r, "destination_sign"));
-        // destination_sign with intersection
-        r = new Relation();
-        via = new Node();
-        r.addMember(new RelationMember("intersection", via));
-        assertEquals(via, SplitWayAction.findVia(r, "destination_sign"));
-    }
-
-    /**
-     * Unit tests of route relations.
-     */
-    @Test
-    public void testRouteRelation() {
-        doTestRouteRelation(false, 0);
-        doTestRouteRelation(false, 1);
-        doTestRouteRelation(false, 2);
-        doTestRouteRelation(false, 3);
-        doTestRouteRelation(true, 0);
-        doTestRouteRelation(true, 1);
-        doTestRouteRelation(true, 2);
-        doTestRouteRelation(true, 3);
-    }
-
-    void doTestRouteRelation(final boolean wayIsReversed, final int indexOfWayToKeep) {
-        final DataSet dataSet = new DataSet();
-        final OsmDataLayer layer = new OsmDataLayer(dataSet, OsmDataLayer.createNewName(), null);
-        final Node n1 = new Node(new LatLon(1, 0));
-        final Node n2 = new Node(new LatLon(2, 0));
-        final Node n3 = new Node(new LatLon(3, 0));
-        final Node n4 = new Node(new LatLon(4, 0));
-        final Node n5 = new Node(new LatLon(5, 0));
-        final Node n6 = new Node(new LatLon(6, 0));
-        final Node n7 = new Node(new LatLon(7, 0));
-        final Way w1 = new Way();
-        final Way w2 = new Way();
-        final Way w3 = new Way();
-        final Relation route = new Relation();
-        for (OsmPrimitive p : Arrays.asList(n1, n2, n3, n4, n5, n6, n7, w1, w2, w3, route)) {
-            dataSet.addPrimitive(p);
-        }
-        w1.setNodes(Arrays.asList(n1, n2));
-        w2.setNodes(wayIsReversed
-                ? Arrays.asList(n6, n5, n4, n3, n2)
-                : Arrays.asList(n2, n3, n4, n5, n6)
-        );
-        w3.setNodes(Arrays.asList(n6, n7));
-        route.put("type", "route");
-        route.addMember(new RelationMember("", w1));
-        route.addMember(new RelationMember("", w2));
-        route.addMember(new RelationMember("", w3));
-        dataSet.setSelected(Arrays.asList(w2, n3, n4, n5));
-
-        final Strategy strategy = wayChunks -> {
-                final Iterator<Way> it = wayChunks.iterator();
-                for (int i = 0; i < indexOfWayToKeep; i++) {
-                    it.next();
-                }
-                return it.next();
-            };
-        final SplitWayAction.SplitWayResult result = SplitWayAction.splitWay(
-                layer, w2, SplitWayAction.buildSplitChunks(w2, Arrays.asList(n3, n4, n5)), new ArrayList<OsmPrimitive>(), strategy);
-        MainApplication.undoRedo.add(result.getCommand());
-
-        assertEquals(6, route.getMembersCount());
-        assertEquals(w1, route.getMemberPrimitivesList().get(0));
-        assertEquals(w3, route.getMemberPrimitivesList().get(5));
-        assertFirstLastNodeIs(((Way) route.getMemberPrimitivesList().get(0)), n1);
-        assertFirstLastNodeIs(((Way) route.getMemberPrimitivesList().get(0)), n2);
-        assertFirstLastNodeIs(((Way) route.getMemberPrimitivesList().get(1)), n2);
-        assertFirstLastNodeIs(((Way) route.getMemberPrimitivesList().get(1)), n3);
-        assertFirstLastNodeIs(((Way) route.getMemberPrimitivesList().get(2)), n3);
-        assertFirstLastNodeIs(((Way) route.getMemberPrimitivesList().get(2)), n4);
-        assertFirstLastNodeIs(((Way) route.getMemberPrimitivesList().get(3)), n4);
-        assertFirstLastNodeIs(((Way) route.getMemberPrimitivesList().get(3)), n5);
-        assertFirstLastNodeIs(((Way) route.getMemberPrimitivesList().get(4)), n5);
-        assertFirstLastNodeIs(((Way) route.getMemberPrimitivesList().get(4)), n6);
-        assertFirstLastNodeIs(((Way) route.getMemberPrimitivesList().get(5)), n6);
-        assertFirstLastNodeIs(((Way) route.getMemberPrimitivesList().get(5)), n7);
-    }
-
-    static void assertFirstLastNodeIs(Way way, Node node) {
-        assertTrue("First/last node of " + way + " should be " + node, node.equals(way.firstNode()) || node.equals(way.lastNode()));
-    }
 }
diff --git a/test/unit/org/openstreetmap/josm/actions/mapmode/SelectActionTest.java b/test/unit/org/openstreetmap/josm/actions/mapmode/SelectActionTest.java
index 238c194..97d2eb7 100644
--- a/test/unit/org/openstreetmap/josm/actions/mapmode/SelectActionTest.java
+++ b/test/unit/org/openstreetmap/josm/actions/mapmode/SelectActionTest.java
@@ -13,7 +13,6 @@ import java.util.Collection;
 
 import org.junit.Rule;
 import org.junit.Test;
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.actions.mapmode.SelectAction.Mode;
 import org.openstreetmap.josm.actions.mapmode.SelectAction.SelectActionCursor;
@@ -25,6 +24,7 @@ import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.MapFrame;
 import org.openstreetmap.josm.gui.layer.MainLayerManager;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -87,7 +87,7 @@ public class SelectActionTest {
         dataSet.addSelected(n2);
         dataSet.addSelected(w);
 
-        Main.pref.put("edit.initial-move-delay", "0");
+        Config.getPref().put("edit.initial-move-delay", "0");
         MainApplication.getLayerManager().addLayer(layer);
         try {
             MapFrame map = MainApplication.getMap();
diff --git a/test/unit/org/openstreetmap/josm/actions/upload/FixDataHookTest.java b/test/unit/org/openstreetmap/josm/actions/upload/FixDataHookTest.java
index aaef855..34a1ebe 100644
--- a/test/unit/org/openstreetmap/josm/actions/upload/FixDataHookTest.java
+++ b/test/unit/org/openstreetmap/josm/actions/upload/FixDataHookTest.java
@@ -14,7 +14,7 @@ import org.junit.Test;
 import org.openstreetmap.josm.command.PseudoCommand;
 import org.openstreetmap.josm.command.SequenceCommand;
 import org.openstreetmap.josm.data.APIDataSet;
-import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.Way;
@@ -45,8 +45,7 @@ public class FixDataHookTest {
         new FixDataHook().checkUpload(new APIDataSet());
         assertTrue(MainApplication.undoRedo.commands.isEmpty());
 
-        // Complete data set
-        Node emptyNode = new Node();
+        // Complete data set (except empty node which cannot be tested anymore)
         Way emptyWay = new Way();
         Relation emptyRelation = new Relation();
         Way w1 = new Way();
@@ -74,7 +73,7 @@ public class FixDataHookTest {
         r2.put("space_end ", "test");
         r2.put(" space_both ", "test");
         APIDataSet ads = new APIDataSet();
-        ads.init(Arrays.asList(emptyNode, emptyWay, emptyRelation, w1, w2, w3, w4, w5, w6, w7, r1, r2));
+        ads.init(new DataSet(emptyWay, emptyRelation, w1, w2, w3, w4, w5, w6, w7, r1, r2));
 
         MainApplication.undoRedo.commands.clear();
         new FixDataHook().checkUpload(ads);
diff --git a/test/unit/org/openstreetmap/josm/command/AddCommandTest.java b/test/unit/org/openstreetmap/josm/command/AddCommandTest.java
index 9c79939..34fd7bb 100644
--- a/test/unit/org/openstreetmap/josm/command/AddCommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/AddCommandTest.java
@@ -15,7 +15,6 @@ import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.User;
 import org.openstreetmap.josm.data.osm.Way;
-import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
@@ -40,34 +39,30 @@ public class AddCommandTest {
      */
     @Test
     public void testAdd() {
-        OsmDataLayer layer1 = new OsmDataLayer(new DataSet(), "l1", null);
-        MainApplication.getLayerManager().addLayer(layer1);
-        assertArrayEquals(new Object[0], layer1.data.allPrimitives().toArray());
+        DataSet ds = new DataSet();
+        assertArrayEquals(new Object[0], ds.allPrimitives().toArray());
 
         Node osm = new Node(LatLon.ZERO);
-        assertTrue(new AddCommand(osm).executeCommand());
+        assertTrue(new AddCommand(ds, osm).executeCommand());
 
-        assertArrayEquals(new Object[] {osm}, layer1.data.allPrimitives().toArray());
-        assertArrayEquals(new Object[] {osm}, layer1.data.allModifiedPrimitives().toArray());
+        assertArrayEquals(new Object[] {osm}, ds.allPrimitives().toArray());
+        assertArrayEquals(new Object[] {osm}, ds.allModifiedPrimitives().toArray());
         assertTrue(osm.isModified());
     }
 
     /**
-     * Tests if the add command respects the layer.
+     * Tests if the add command respects the data set.
      */
     @Test
     public void testAddToLayer() {
-        OsmDataLayer layer1 = new OsmDataLayer(new DataSet(), "l1", null);
-        OsmDataLayer layer2 = new OsmDataLayer(new DataSet(), "l1", null);
-
-        MainApplication.getLayerManager().addLayer(layer1);
-        MainApplication.getLayerManager().addLayer(layer2);
+        DataSet ds1 = new DataSet();
+        DataSet ds2 = new DataSet();
 
         Node osm = new Node(LatLon.ZERO);
-        assertTrue(new AddCommand(layer2, osm).executeCommand());
+        assertTrue(new AddCommand(ds2, osm).executeCommand());
 
-        assertArrayEquals(new Object[0], layer1.data.allPrimitives().toArray());
-        assertArrayEquals(new Object[] {osm}, layer2.data.allPrimitives().toArray());
+        assertArrayEquals(new Object[0], ds1.allPrimitives().toArray());
+        assertArrayEquals(new Object[] {osm}, ds2.allPrimitives().toArray());
     }
 
     /**
@@ -75,16 +70,14 @@ public class AddCommandTest {
      */
     @Test
     public void testUndo() {
-        OsmDataLayer layer1 = new OsmDataLayer(new DataSet(), "l1", null);
-        MainApplication.getLayerManager().addLayer(layer1);
         Node osm = new Node(LatLon.ZERO);
-        layer1.data.addPrimitive(osm);
+        DataSet ds = new DataSet(osm);
 
-        AddCommand command = new AddCommand(new Node(LatLon.ZERO));
+        AddCommand command = new AddCommand(ds, new Node(LatLon.ZERO));
         command.executeCommand();
 
         command.undoCommand();
-        assertArrayEquals(new Object[] {osm}, layer1.data.allPrimitives().toArray());
+        assertArrayEquals(new Object[] {osm}, ds.allPrimitives().toArray());
     }
 
     /**
@@ -94,7 +87,7 @@ public class AddCommandTest {
     public void testParticipatingPrimitives() {
         Node osm = new Node(LatLon.ZERO);
 
-        assertArrayEquals(new Object[] {osm}, new AddCommand(osm).getParticipatingPrimitives().toArray());
+        assertArrayEquals(new Object[] {osm}, new AddCommand(new DataSet(), osm).getParticipatingPrimitives().toArray());
     }
 
     /**
@@ -107,7 +100,7 @@ public class AddCommandTest {
         ArrayList<OsmPrimitive> modified = new ArrayList<>();
         ArrayList<OsmPrimitive> deleted = new ArrayList<>();
         ArrayList<OsmPrimitive> added = new ArrayList<>();
-        new AddCommand(osm).fillModifiedData(modified, deleted, added);
+        new AddCommand(new DataSet(), osm).fillModifiedData(modified, deleted, added);
         assertArrayEquals(new Object[] {}, modified.toArray());
         assertArrayEquals(new Object[] {}, deleted.toArray());
         assertArrayEquals(new Object[] {osm}, added.toArray());
@@ -126,9 +119,10 @@ public class AddCommandTest {
         Relation relation = new Relation();
         relation.put("name", "xy");
 
-        assertTrue(new AddCommand(node).getDescriptionText().matches("Add node.*xy.*"));
-        assertTrue(new AddCommand(way).getDescriptionText().matches("Add way.*xy.*"));
-        assertTrue(new AddCommand(relation).getDescriptionText().matches("Add relation.*xy.*"));
+        DataSet ds = new DataSet();
+        assertTrue(new AddCommand(ds, node).getDescriptionText().matches("Add node.*xy.*"));
+        assertTrue(new AddCommand(ds, way).getDescriptionText().matches("Add way.*xy.*"));
+        assertTrue(new AddCommand(ds, relation).getDescriptionText().matches("Add relation.*xy.*"));
     }
 
     /**
diff --git a/test/unit/org/openstreetmap/josm/command/AddPrimitivesCommandTest.java b/test/unit/org/openstreetmap/josm/command/AddPrimitivesCommandTest.java
index 2879a14..f1f1162 100644
--- a/test/unit/org/openstreetmap/josm/command/AddPrimitivesCommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/AddPrimitivesCommandTest.java
@@ -22,7 +22,6 @@ import org.openstreetmap.josm.data.osm.PrimitiveData;
 import org.openstreetmap.josm.data.osm.User;
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.osm.WayData;
-import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
@@ -47,14 +46,13 @@ public class AddPrimitivesCommandTest {
      */
     @Test
     public void testAdd() {
-        OsmDataLayer layer1 = new OsmDataLayer(new DataSet(), "l1", null);
-        MainApplication.getLayerManager().addLayer(layer1);
+        DataSet ds = new DataSet();
 
         List<PrimitiveData> testData = createTestData();
-        assertTrue(new AddPrimitivesCommand(testData).executeCommand());
+        assertTrue(new AddPrimitivesCommand(testData, ds).executeCommand());
 
-        testContainsTestData(layer1);
-        assertEquals(3, layer1.data.getAllSelected().size());
+        testContainsTestData(ds);
+        assertEquals(3, ds.getAllSelected().size());
     }
 
     /**
@@ -62,37 +60,33 @@ public class AddPrimitivesCommandTest {
      */
     @Test
     public void testAddSetSelection() {
-        OsmDataLayer layer1 = new OsmDataLayer(new DataSet(), "l1", null);
-        MainApplication.getLayerManager().addLayer(layer1);
+        DataSet ds = new DataSet();
 
         List<PrimitiveData> testData = createTestData();
-        assertTrue(new AddPrimitivesCommand(testData, testData.subList(2, 3)).executeCommand());
+        assertTrue(new AddPrimitivesCommand(testData, testData.subList(2, 3), ds).executeCommand());
 
-        testContainsTestData(layer1);
+        testContainsTestData(ds);
 
-        assertEquals(1, layer1.data.getAllSelected().size());
-        assertEquals(1, layer1.data.getSelectedWays().size());
+        assertEquals(1, ds.getAllSelected().size());
+        assertEquals(1, ds.getSelectedWays().size());
     }
 
     /**
-     * Tests if the add command respects the layer.
+     * Tests if the add command respects the data set.
      */
     @Test
     public void testAddToLayer() {
-        OsmDataLayer layer1 = new OsmDataLayer(new DataSet(), "l1", null);
-        OsmDataLayer layer2 = new OsmDataLayer(new DataSet(), "l1", null);
-
-        MainApplication.getLayerManager().addLayer(layer1);
-        MainApplication.getLayerManager().addLayer(layer2);
+        DataSet ds1 = new DataSet();
+        DataSet ds2 = new DataSet();
 
         List<PrimitiveData> testData = createTestData();
-        assertTrue(new AddPrimitivesCommand(testData, testData.subList(2, 3), layer1).executeCommand());
+        assertTrue(new AddPrimitivesCommand(testData, testData.subList(2, 3), ds1).executeCommand());
 
-        testContainsTestData(layer1);
-        assertTrue(layer2.data.allPrimitives().isEmpty());
+        testContainsTestData(ds1);
+        assertTrue(ds2.allPrimitives().isEmpty());
 
-        assertEquals(1, layer1.data.getAllSelected().size());
-        assertEquals(1, layer1.data.getSelectedWays().size());
+        assertEquals(1, ds1.getAllSelected().size());
+        assertEquals(1, ds1.getSelectedWays().size());
     }
 
     /**
@@ -100,19 +94,18 @@ public class AddPrimitivesCommandTest {
      */
     @Test
     public void testAddIgnoresExisting() {
-        OsmDataLayer layer1 = new OsmDataLayer(new DataSet(), "l1", null);
-        MainApplication.getLayerManager().addLayer(layer1);
+        DataSet ds = new DataSet();
 
         List<PrimitiveData> testData = createTestData();
-        assertTrue(new AddPrimitivesCommand(testData).executeCommand());
-        assertEquals(2, layer1.data.getNodes().size());
-        assertEquals(1, layer1.data.getWays().size());
+        assertTrue(new AddPrimitivesCommand(testData, ds).executeCommand());
+        assertEquals(2, ds.getNodes().size());
+        assertEquals(1, ds.getWays().size());
 
         testData.set(2, createTestNode(7));
-        assertTrue(new AddPrimitivesCommand(testData).executeCommand());
+        assertTrue(new AddPrimitivesCommand(testData, ds).executeCommand());
 
-        assertEquals(3, layer1.data.getNodes().size());
-        assertEquals(1, layer1.data.getWays().size());
+        assertEquals(3, ds.getNodes().size());
+        assertEquals(1, ds.getWays().size());
     }
 
     /**
@@ -120,14 +113,13 @@ public class AddPrimitivesCommandTest {
      */
     @Test
     public void testDescription() {
-        OsmDataLayer layer1 = new OsmDataLayer(new DataSet(), "l1", null);
-        MainApplication.getLayerManager().addLayer(layer1);
+        DataSet ds = new DataSet();
 
         List<PrimitiveData> testData = createTestData();
         NodeData data2 = createTestNode(7);
 
-        AddPrimitivesCommand command1 = new AddPrimitivesCommand(testData);
-        AddPrimitivesCommand command2 = new AddPrimitivesCommand(Arrays.<PrimitiveData>asList(data2));
+        AddPrimitivesCommand command1 = new AddPrimitivesCommand(testData, ds);
+        AddPrimitivesCommand command2 = new AddPrimitivesCommand(Arrays.<PrimitiveData>asList(data2), ds);
 
         assertEquals("Added 3 objects", command1.getDescriptionText());
         assertEquals("Added 1 object", command2.getDescriptionText());
@@ -145,32 +137,31 @@ public class AddPrimitivesCommandTest {
      */
     @Test
     public void testUndo() {
-        OsmDataLayer layer1 = new OsmDataLayer(new DataSet(), "l1", null);
-        MainApplication.getLayerManager().addLayer(layer1);
+        DataSet ds = new DataSet();
 
         List<PrimitiveData> testData = createTestData();
 
-        AddPrimitivesCommand command = new AddPrimitivesCommand(testData);
+        AddPrimitivesCommand command = new AddPrimitivesCommand(testData, ds);
 
         assertTrue(command.executeCommand());
 
-        assertEquals(3, layer1.data.allPrimitives().size());
-        assertEquals(1, layer1.data.getWays().size());
-        Way way = layer1.data.getWays().iterator().next();
+        assertEquals(3, ds.allPrimitives().size());
+        assertEquals(1, ds.getWays().size());
+        Way way = ds.getWays().iterator().next();
 
         for (int i = 0; i < 2; i++) {
             // Needs to work multiple times.
             command.undoCommand();
 
-            assertEquals(0, layer1.data.allPrimitives().size());
-            assertEquals(0, layer1.data.getWays().size());
+            assertEquals(0, ds.allPrimitives().size());
+            assertEquals(0, ds.getWays().size());
 
             // redo
             assertTrue(command.executeCommand());
 
-            assertEquals(3, layer1.data.allPrimitives().size());
-            assertEquals(1, layer1.data.getWays().size());
-            assertSame(way, layer1.data.getWays().iterator().next());
+            assertEquals(3, ds.allPrimitives().size());
+            assertEquals(1, ds.getWays().size());
+            assertSame(way, ds.getWays().iterator().next());
         }
     }
 
@@ -180,36 +171,35 @@ public class AddPrimitivesCommandTest {
      */
     @Test
     public void testUndoIgnoresExisting() {
-        OsmDataLayer layer1 = new OsmDataLayer(new DataSet(), "l1", null);
-        MainApplication.getLayerManager().addLayer(layer1);
+        DataSet ds = new DataSet();
 
         List<PrimitiveData> testData = createTestData();
 
-        assertTrue(new AddPrimitivesCommand(testData).executeCommand());
-        assertEquals(2, layer1.data.getNodes().size());
-        assertEquals(1, layer1.data.getWays().size());
+        assertTrue(new AddPrimitivesCommand(testData, ds).executeCommand());
+        assertEquals(2, ds.getNodes().size());
+        assertEquals(1, ds.getWays().size());
 
         testData.set(2, createTestNode(7));
 
-        AddPrimitivesCommand command = new AddPrimitivesCommand(testData);
+        AddPrimitivesCommand command = new AddPrimitivesCommand(testData, ds);
 
         assertTrue(command.executeCommand());
 
-        assertEquals(3, layer1.data.getNodes().size());
-        assertEquals(1, layer1.data.getWays().size());
+        assertEquals(3, ds.getNodes().size());
+        assertEquals(1, ds.getWays().size());
 
         for (int i = 0; i < 2; i++) {
             // Needs to work multiple times.
             command.undoCommand();
 
-            assertEquals(2, layer1.data.getNodes().size());
-            assertEquals(1, layer1.data.getWays().size());
+            assertEquals(2, ds.getNodes().size());
+            assertEquals(1, ds.getWays().size());
 
             // redo
             assertTrue(command.executeCommand());
 
-            assertEquals(3, layer1.data.getNodes().size());
-            assertEquals(1, layer1.data.getWays().size());
+            assertEquals(3, ds.getNodes().size());
+            assertEquals(1, ds.getWays().size());
         }
     }
 
@@ -218,15 +208,14 @@ public class AddPrimitivesCommandTest {
      */
     @Test
     public void testParticipatingPrimitives() {
-        OsmDataLayer layer1 = new OsmDataLayer(new DataSet(), "l1", null);
-        MainApplication.getLayerManager().addLayer(layer1);
+        DataSet ds = new DataSet();
 
         List<PrimitiveData> testData = createTestData();
-        AddPrimitivesCommand command = new AddPrimitivesCommand(testData);
+        AddPrimitivesCommand command = new AddPrimitivesCommand(testData, ds);
         assertTrue(command.executeCommand());
 
         assertEquals(3, command.getParticipatingPrimitives().size());
-        HashSet<OsmPrimitive> should = new HashSet<>(layer1.data.allPrimitives());
+        HashSet<OsmPrimitive> should = new HashSet<>(ds.allPrimitives());
         assertEquals(should, new HashSet<>(command.getParticipatingPrimitives()));
 
         // needs to be the same after undo
@@ -244,28 +233,28 @@ public class AddPrimitivesCommandTest {
         ArrayList<OsmPrimitive> added = new ArrayList<>();
 
         List<PrimitiveData> testData = createTestData();
-        new AddPrimitivesCommand(testData).fillModifiedData(modified, deleted, added);
+        new AddPrimitivesCommand(testData, new DataSet()).fillModifiedData(modified, deleted, added);
 
         assertArrayEquals(new Object[] {}, modified.toArray());
         assertArrayEquals(new Object[] {}, deleted.toArray());
         assertArrayEquals(new Object[] {}, added.toArray());
     }
 
-    private void testContainsTestData(OsmDataLayer layer1) {
-        assertEquals(3, layer1.data.allPrimitives().size());
-        assertEquals(2, layer1.data.getNodes().size());
-        assertEquals(1, layer1.data.getWays().size());
-        assertEquals(3, layer1.data.allModifiedPrimitives().size());
-        for (OsmPrimitive n : layer1.data.allPrimitives()) {
+    private void testContainsTestData(DataSet data) {
+        assertEquals(3, data.allPrimitives().size());
+        assertEquals(2, data.getNodes().size());
+        assertEquals(1, data.getWays().size());
+        assertEquals(3, data.allModifiedPrimitives().size());
+        for (OsmPrimitive n : data.allPrimitives()) {
             assertEquals("test", n.get("test"));
             assertTrue(n.isModified());
         }
 
-        for (Node n : layer1.data.getNodes()) {
+        for (Node n : data.getNodes()) {
             assertEquals(LatLon.ZERO, n.getCoor());
         }
 
-        for (Way w : layer1.data.getWays()) {
+        for (Way w : data.getWays()) {
             assertEquals(2, w.getNodes().size());
             assertEquals(5, w.getNode(0).getId());
             assertEquals(6, w.getNode(1).getId());
diff --git a/test/unit/org/openstreetmap/josm/command/ChangeCommandTest.java b/test/unit/org/openstreetmap/josm/command/ChangeCommandTest.java
index b3c2ca5..ac7f548 100644
--- a/test/unit/org/openstreetmap/josm/command/ChangeCommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/ChangeCommandTest.java
@@ -141,10 +141,11 @@ public class ChangeCommandTest {
         way.put("name", "xy");
         Relation relation = new Relation();
         relation.put("name", "xy");
+        DataSet ds = new DataSet(node, way, relation);
 
-        assertTrue(new ChangeCommand(node, node).getDescriptionText().matches("Change node.*xy.*"));
-        assertTrue(new ChangeCommand(way, way).getDescriptionText().matches("Change way.*xy.*"));
-        assertTrue(new ChangeCommand(relation, relation).getDescriptionText().matches("Change relation.*xy.*"));
+        assertTrue(new ChangeCommand(ds, node, node).getDescriptionText().matches("Change node.*xy.*"));
+        assertTrue(new ChangeCommand(ds, way, way).getDescriptionText().matches("Change way.*xy.*"));
+        assertTrue(new ChangeCommand(ds, relation, relation).getDescriptionText().matches("Change relation.*xy.*"));
     }
 
     /**
diff --git a/test/unit/org/openstreetmap/josm/command/ChangeNodesCommandTest.java b/test/unit/org/openstreetmap/josm/command/ChangeNodesCommandTest.java
index 49c2948..3d3c212 100644
--- a/test/unit/org/openstreetmap/josm/command/ChangeNodesCommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/ChangeNodesCommandTest.java
@@ -114,9 +114,9 @@ public class ChangeNodesCommandTest {
         Way way = new Way();
         way.addNode(node);
         way.put("name", "xy");
-
+        DataSet ds = new DataSet(node, way);
         assertTrue(
-                new ChangeNodesCommand(way, Arrays.asList(node)).getDescriptionText().matches("Change nodes of.*xy.*"));
+                new ChangeNodesCommand(ds, way, Arrays.asList(node)).getDescriptionText().matches("Change nodes of.*xy.*"));
     }
 
     /**
diff --git a/test/unit/org/openstreetmap/josm/command/ChangePropertyCommandTest.java b/test/unit/org/openstreetmap/josm/command/ChangePropertyCommandTest.java
index b5b89aa..79f5351 100644
--- a/test/unit/org/openstreetmap/josm/command/ChangePropertyCommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/ChangePropertyCommandTest.java
@@ -200,11 +200,10 @@ public class ChangePropertyCommandTest {
         HashMap<String, String> tagsRemove = new HashMap<>();
         tagsRemove.put("existing", "");
 
-        Way way = new Way();
-        way.addNode(node1);
+        Way way = testData.createWay(20, node1);
         way.put("name", "xy");
         way.put("existing", "existing");
-        Relation relation = new Relation();
+        Relation relation = testData.createRelation(30);
         relation.put("name", "xy");
         relation.put("existing", "existing");
 
diff --git a/test/unit/org/openstreetmap/josm/command/CommandTest.java b/test/unit/org/openstreetmap/josm/command/CommandTest.java
index 44d2bf8..b71ef80 100644
--- a/test/unit/org/openstreetmap/josm/command/CommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/CommandTest.java
@@ -1,20 +1,13 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.command;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
-
 import java.util.Arrays;
-import java.util.Collection;
 
-import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.openstreetmap.josm.data.coor.LatLon;
 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.Relation;
 import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.data.osm.User;
@@ -38,43 +31,6 @@ public class CommandTest {
     @Rule
     @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
     public JOSMTestRules test = new JOSMTestRules().preferences().i18n();
-    private CommandTestData testData;
-
-    /**
-     * Set up the test data.
-     */
-    @Before
-    public void createTestData() {
-        testData = new CommandTestData();
-    }
-
-    /**
-     * Test {@link Command#invalidBecauselayerRemoved(org.openstreetmap.josm.gui.layer.Layer)}
-     */
-    @Test
-    public void testInvalidBecauselayerRemoved() {
-        OsmDataLayer layer2 = new OsmDataLayer(new DataSet(), "test", null);
-
-        Command command = new NopCommand();
-        assertFalse(command.invalidBecauselayerRemoved(layer2));
-        assertTrue(command.invalidBecauselayerRemoved(testData.layer));
-
-        Command command2 = new NopCommand(layer2);
-        assertTrue(command2.invalidBecauselayerRemoved(layer2));
-        assertFalse(command2.invalidBecauselayerRemoved(testData.layer));
-    }
-
-    /**
-     * Test {@link Command#getLayer()}
-     */
-    @Test
-    public void testGetLayer() {
-        OsmDataLayer layer2 = new OsmDataLayer(new DataSet(), "test", null);
-        Command command = new NopCommand();
-        Command command2 = new NopCommand(layer2);
-        assertSame(testData.layer, command.getLayer());
-        assertSame(layer2, command2.getLayer());
-    }
 
     /**
      * Unit test of methods {@link Command#equals} and {@link Command#hashCode}.
@@ -92,27 +48,6 @@ public class CommandTest {
             .verify();
     }
 
-    private static final class NopCommand extends Command {
-        NopCommand() {
-            super();
-        }
-
-        NopCommand(OsmDataLayer layer) {
-            super(layer);
-        }
-
-        @Override
-        public String getDescriptionText() {
-            return "";
-        }
-
-        @Override
-        public void fillModifiedData(Collection<OsmPrimitive> modified, Collection<OsmPrimitive> deleted,
-                Collection<OsmPrimitive> added) {
-            // nop
-        }
-    }
-
     /**
      * A change test data consisting of two nodes and a way.
      * @author Michael Zangl
diff --git a/test/unit/org/openstreetmap/josm/command/DeleteCommandTest.java b/test/unit/org/openstreetmap/josm/command/DeleteCommandTest.java
index 89ae6d1..d867949 100644
--- a/test/unit/org/openstreetmap/josm/command/DeleteCommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/DeleteCommandTest.java
@@ -10,6 +10,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
+import java.util.NoSuchElementException;
 
 import org.junit.Before;
 import org.junit.Rule;
@@ -101,7 +102,7 @@ public class DeleteCommandTest {
      */
     @Test
     public void testReferredDelete() {
-        DeleteCommand.deleteWithReferences(testData.layer, Arrays.asList(testData.existingNode), true).executeCommand();
+        DeleteCommand.deleteWithReferences(Arrays.asList(testData.existingNode), true).executeCommand();
 
         assertTrue(testData.existingNode.isDeleted());
         assertEquals(0, testData.existingWay.getNodesCount());
@@ -112,11 +113,11 @@ public class DeleteCommandTest {
      * Delete nodes that would be without reference afterwards.
      */
     @Test
-    public void testDelteNodesInWay() {
+    public void testDeleteNodesInWay() {
         testData.existingNode.removeAll();
         // That untagged node should be deleted.
         testData.existingNode2.removeAll();
-        DeleteCommand.delete(testData.layer, Arrays.asList(testData.existingWay), true, true).executeCommand();
+        DeleteCommand.delete(Arrays.asList(testData.existingWay), true, true).executeCommand();
 
         assertTrue(testData.existingWay.isDeleted());
         assertTrue(testData.existingNode2.isDeleted());
@@ -136,7 +137,7 @@ public class DeleteCommandTest {
         Way way2 = new Way(26, 1);
         way2.setNodes(Arrays.asList(node2, node3, node4));
         testData.layer.data.addPrimitive(way2);
-        DeleteCommand.delete(testData.layer, Arrays.asList(way1, way2), true, true).executeCommand();
+        DeleteCommand.delete(Arrays.asList(way1, way2), true, true).executeCommand();
 
         assertTrue(way1.isDeleted());
         assertTrue(way2.isDeleted());
@@ -166,7 +167,7 @@ public class DeleteCommandTest {
     /**
      * Test that {@link DeleteCommand} checks for non-empty list
      */
-    @Test(expected = IllegalArgumentException.class)
+    @Test(expected = NoSuchElementException.class)
     public void testConsistencyNonEmpty() {
         new DeleteCommand(Arrays.<OsmPrimitive>asList());
     }
@@ -174,7 +175,7 @@ public class DeleteCommandTest {
     /**
      * Test that {@link DeleteCommand} checks for non-null list
      */
-    @Test(expected = IllegalArgumentException.class)
+    @Test(expected = NullPointerException.class)
     public void testConsistencyNonNull() {
         new DeleteCommand((Collection<OsmPrimitive>) null);
     }
@@ -204,21 +205,21 @@ public class DeleteCommandTest {
     }
 
     /**
-     * Test {@link DeleteCommand#deleteWaySegment(OsmDataLayer, org.openstreetmap.josm.data.osm.WaySegment)}
+     * Test {@link DeleteCommand#deleteWaySegment(WaySegment)}
      * Way with only 1 segment
      */
     @Test
     public void testDeleteWaySegment() {
         Way way1 = testData.createWay(100, testData.createNode(101), testData.createNode(102));
         WaySegment ws = new WaySegment(way1, 0);
-        Command command = DeleteCommand.deleteWaySegment(testData.layer, ws);
+        Command command = DeleteCommand.deleteWaySegment(ws);
         command.executeCommand();
 
         assertTrue(way1.isDeleted());
     }
 
     /**
-     * Test {@link DeleteCommand#deleteWaySegment(OsmDataLayer, org.openstreetmap.josm.data.osm.WaySegment)}
+     * Test {@link DeleteCommand#deleteWaySegment(WaySegment)}
      * Delete end of way
      */
     @Test
@@ -226,7 +227,7 @@ public class DeleteCommandTest {
         Way way = testData.createWay(200, testData.createNode(201), testData.createNode(202), testData.createNode(203),
                 testData.createNode(204));
         WaySegment ws = new WaySegment(way, 2);
-        Command command = DeleteCommand.deleteWaySegment(testData.layer, ws);
+        Command command = DeleteCommand.deleteWaySegment(ws);
         command.executeCommand();
 
         assertEquals(3, way.getNodesCount());
@@ -236,7 +237,7 @@ public class DeleteCommandTest {
     }
 
     /**
-     * Test {@link DeleteCommand#deleteWaySegment(OsmDataLayer, org.openstreetmap.josm.data.osm.WaySegment)}
+     * Test {@link DeleteCommand#deleteWaySegment(WaySegment)}
      * Delete start of way
      */
     @Test
@@ -244,7 +245,7 @@ public class DeleteCommandTest {
         Way way = testData.createWay(100, testData.createNode(101), testData.createNode(102), testData.createNode(103),
                 testData.createNode(104));
         WaySegment ws = new WaySegment(way, 0);
-        Command command = DeleteCommand.deleteWaySegment(testData.layer, ws);
+        Command command = DeleteCommand.deleteWaySegment(ws);
         command.executeCommand();
 
         assertEquals(3, way.getNodesCount());
@@ -254,7 +255,7 @@ public class DeleteCommandTest {
     }
 
     /**
-     * Test {@link DeleteCommand#deleteWaySegment(OsmDataLayer, org.openstreetmap.josm.data.osm.WaySegment)}
+     * Test {@link DeleteCommand#deleteWaySegment(WaySegment)}
      * Delete start of way
      */
     @Test
@@ -263,7 +264,7 @@ public class DeleteCommandTest {
         Node node104 = testData.createNode(104);
         Way way = testData.createWay(100, testData.createNode(101), testData.createNode(102), node103, node104);
         WaySegment ws = new WaySegment(way, 1);
-        Command command = DeleteCommand.deleteWaySegment(testData.layer, ws);
+        Command command = DeleteCommand.deleteWaySegment(ws);
         command.executeCommand();
 
         assertEquals(2, way.getNodesCount());
@@ -278,7 +279,7 @@ public class DeleteCommandTest {
     }
 
     /**
-     * Test {@link DeleteCommand#deleteWaySegment(OsmDataLayer, org.openstreetmap.josm.data.osm.WaySegment)}
+     * Test {@link DeleteCommand#deleteWaySegment(WaySegment)}
      * Delete start of way
      */
     @Test
@@ -287,7 +288,7 @@ public class DeleteCommandTest {
         Way way = testData.createWay(100, n, testData.createNode(102), testData.createNode(103),
                 testData.createNode(104), n);
         WaySegment ws = new WaySegment(way, 2);
-        Command command = DeleteCommand.deleteWaySegment(testData.layer, ws);
+        Command command = DeleteCommand.deleteWaySegment(ws);
         command.executeCommand();
 
         assertEquals(4, way.getNodesCount());
diff --git a/test/unit/org/openstreetmap/josm/command/MoveCommandTest.java b/test/unit/org/openstreetmap/josm/command/MoveCommandTest.java
index f0b35de..cdf9f23 100644
--- a/test/unit/org/openstreetmap/josm/command/MoveCommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/MoveCommandTest.java
@@ -247,7 +247,7 @@ public class MoveCommandTest {
     public void testDescription() {
         Node node = new Node(LatLon.ZERO);
         node.put("name", "xy");
-
+        new DataSet(node);
         List<OsmPrimitive> nodeList = Arrays.<OsmPrimitive>asList(node);
         assertTrue(new MoveCommand(nodeList, 1, 2).getDescriptionText().matches("Move 1 node"));
         List<OsmPrimitive> nodes = Arrays.<OsmPrimitive>asList(node, testData.existingNode, testData.existingNode2);
diff --git a/test/unit/org/openstreetmap/josm/command/PurgeCommandTest.java b/test/unit/org/openstreetmap/josm/command/PurgeCommandTest.java
index 34caf64..87246e9 100644
--- a/test/unit/org/openstreetmap/josm/command/PurgeCommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/PurgeCommandTest.java
@@ -61,7 +61,7 @@ public class PurgeCommandTest {
         Relation relationParent2 = testData.createRelation(101, new RelationMember("child", testData.existingRelation));
         // to check that algorithm ignores it:
         Relation relationParent3 = testData.createRelation(102, new RelationMember("child", testData.existingRelation));
-        PurgeCommand command = new PurgeCommand(testData.layer,
+        PurgeCommand command = new PurgeCommand(testData.layer.data,
                 Arrays.<OsmPrimitive>asList(testData.existingNode, testData.existingNode2, testData.existingWay,
                         testData.existingRelation, relationParent, relationParent2),
                 Arrays.<OsmPrimitive>asList(testData.existingNode2, testData.existingWay, testData.existingRelation));
@@ -82,7 +82,7 @@ public class PurgeCommandTest {
      */
     @Test
     public void testUndo() {
-        PurgeCommand command = new PurgeCommand(testData.layer,
+        PurgeCommand command = new PurgeCommand(testData.layer.data,
                 Arrays.<OsmPrimitive>asList(testData.existingNode, testData.existingWay),
                 Arrays.<OsmPrimitive>asList(testData.existingWay));
         command.executeCommand();
@@ -106,7 +106,7 @@ public class PurgeCommandTest {
         ArrayList<OsmPrimitive> modified = new ArrayList<>();
         ArrayList<OsmPrimitive> deleted = new ArrayList<>();
         ArrayList<OsmPrimitive> added = new ArrayList<>();
-        PurgeCommand command = new PurgeCommand(testData.layer, Arrays.<OsmPrimitive>asList(testData.existingNode),
+        PurgeCommand command = new PurgeCommand(testData.layer.data, Arrays.<OsmPrimitive>asList(testData.existingNode),
                 Arrays.<OsmPrimitive>asList(testData.existingRelation));
         command.fillModifiedData(modified, deleted, added);
         // intentianally empty (?)
@@ -120,7 +120,7 @@ public class PurgeCommandTest {
      */
     @Test
     public void testGetParticipatingPrimitives() {
-        PurgeCommand command = new PurgeCommand(testData.layer, Arrays.<OsmPrimitive>asList(testData.existingNode),
+        PurgeCommand command = new PurgeCommand(testData.layer.data, Arrays.<OsmPrimitive>asList(testData.existingNode),
                 Arrays.<OsmPrimitive>asList(testData.existingRelation));
         assertArrayEquals(new Object[] {testData.existingNode }, command.getParticipatingPrimitives().toArray());
     }
@@ -131,11 +131,11 @@ public class PurgeCommandTest {
     @Test
     public void testDescription() {
         List<OsmPrimitive> shortList = Arrays.<OsmPrimitive>asList(testData.existingWay);
-        assertTrue(new PurgeCommand(testData.layer, shortList, Arrays.<OsmPrimitive>asList()).getDescriptionText()
+        assertTrue(new PurgeCommand(testData.layer.data, shortList, Arrays.<OsmPrimitive>asList()).getDescriptionText()
                 .matches("Purged 1 object"));
         List<OsmPrimitive> longList = Arrays.<OsmPrimitive>asList(testData.existingNode, testData.existingNode2,
                 testData.existingWay);
-        assertTrue(new PurgeCommand(testData.layer, longList, Arrays.<OsmPrimitive>asList()).getDescriptionText()
+        assertTrue(new PurgeCommand(testData.layer.data, longList, Arrays.<OsmPrimitive>asList()).getDescriptionText()
                 .matches("Purged 3 objects"));
     }
 
diff --git a/test/unit/org/openstreetmap/josm/command/RotateCommandTest.java b/test/unit/org/openstreetmap/josm/command/RotateCommandTest.java
index 6e60b1d..3364448 100644
--- a/test/unit/org/openstreetmap/josm/command/RotateCommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/RotateCommandTest.java
@@ -54,6 +54,7 @@ public class RotateCommandTest {
         Node n1 = new Node(new EastNorth(10, 10));
         Node n2 = new Node(new EastNorth(-1, 0));
         Node n3 = new Node(new EastNorth(-9, -10));
+        new DataSet(n1, n2, n3);
         RotateCommand rotate = new RotateCommand(Arrays.asList(n1, n2, n3), new EastNorth(0, 0));
         rotate.setRotationAngle(Math.PI / 4);
         rotate.executeCommand();
@@ -72,6 +73,7 @@ public class RotateCommandTest {
         Node n1 = new Node(new EastNorth(10, 10));
         Node n2 = new Node(new EastNorth(-1, 0));
         Node n3 = new Node(new EastNorth(-9, -10));
+        new DataSet(n1, n2, n3);
         RotateCommand rotate = new RotateCommand(Arrays.asList(n1, n2, n3), new EastNorth(0, 0));
         rotate.setRotationAngle(Math.PI / 4);
         rotate.executeCommand();
diff --git a/test/unit/org/openstreetmap/josm/command/ScaleCommandTest.java b/test/unit/org/openstreetmap/josm/command/ScaleCommandTest.java
index 83802f2..1292c92 100644
--- a/test/unit/org/openstreetmap/josm/command/ScaleCommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/ScaleCommandTest.java
@@ -54,6 +54,7 @@ public class ScaleCommandTest {
         Node n1 = new Node(new EastNorth(10, 10));
         Node n2 = new Node(new EastNorth(-1, 0));
         Node n3 = new Node(new EastNorth(-9, -10));
+        new DataSet(n1, n2, n3);
         ScaleCommand scale = new ScaleCommand(Arrays.asList(n1, n2, n3), new EastNorth(0, 0));
         scale.setScalingFactor(2.5);
         scale.executeCommand();
@@ -72,6 +73,7 @@ public class ScaleCommandTest {
         Node n1 = new Node(new EastNorth(10, 10));
         Node n2 = new Node(new EastNorth(-1, 0));
         Node n3 = new Node(new EastNorth(-9, -10));
+        new DataSet(n1, n2, n3);
         ScaleCommand scale = new ScaleCommand(Arrays.asList(n1, n2, n3), new EastNorth(0, 0));
         scale.setScalingFactor(2.5);
         scale.executeCommand();
diff --git a/test/unit/org/openstreetmap/josm/command/SelectCommandTest.java b/test/unit/org/openstreetmap/josm/command/SelectCommandTest.java
index 0407946..4e667ee 100644
--- a/test/unit/org/openstreetmap/josm/command/SelectCommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/SelectCommandTest.java
@@ -49,7 +49,7 @@ public class SelectCommandTest {
      */
     @Test
     public void testExecute() {
-        SelectCommand command = new SelectCommand(Arrays.asList(testData.existingNode, testData.existingWay));
+        SelectCommand command = new SelectCommand(testData.layer.data, Arrays.asList(testData.existingNode, testData.existingWay));
 
         testData.layer.data.setSelected(Arrays.asList(testData.existingNode2));
 
@@ -66,7 +66,7 @@ public class SelectCommandTest {
     @Test
     public void testExecuteAfterModify() {
         List<OsmPrimitive> list = new ArrayList<>(Arrays.asList(testData.existingNode, testData.existingWay));
-        SelectCommand command = new SelectCommand(list);
+        SelectCommand command = new SelectCommand(testData.layer.data, list);
 
         list.remove(testData.existingNode);
         list.add(testData.existingNode2);
@@ -83,7 +83,7 @@ public class SelectCommandTest {
      */
     @Test
     public void testUndo() {
-        SelectCommand command = new SelectCommand(Arrays.asList(testData.existingNode, testData.existingWay));
+        SelectCommand command = new SelectCommand(testData.layer.data, Arrays.asList(testData.existingNode, testData.existingWay));
         testData.layer.data.setSelected(Arrays.asList(testData.existingNode2));
 
         command.executeCommand();
@@ -109,7 +109,7 @@ public class SelectCommandTest {
         ArrayList<OsmPrimitive> modified = new ArrayList<>();
         ArrayList<OsmPrimitive> deleted = new ArrayList<>();
         ArrayList<OsmPrimitive> added = new ArrayList<>();
-        SelectCommand command = new SelectCommand(Arrays.asList(testData.existingNode, testData.existingWay));
+        SelectCommand command = new SelectCommand(testData.layer.data, Arrays.asList(testData.existingNode, testData.existingWay));
         command.fillModifiedData(modified, deleted, added);
         // intentionally empty.
         assertArrayEquals(new Object[] {}, modified.toArray());
@@ -122,7 +122,7 @@ public class SelectCommandTest {
      */
     @Test
     public void testGetParticipatingPrimitives() {
-        SelectCommand command = new SelectCommand(Arrays.asList(testData.existingNode));
+        SelectCommand command = new SelectCommand(testData.layer.data, Arrays.asList(testData.existingNode));
         command.executeCommand();
         assertArrayEquals(new Object[] {testData.existingNode}, command.getParticipatingPrimitives().toArray());
     }
@@ -132,13 +132,14 @@ public class SelectCommandTest {
      */
     @Test
     public void testDescription() {
-        assertTrue(new SelectCommand(Arrays.<OsmPrimitive>asList(testData.existingNode))
+        DataSet ds = testData.layer.data;
+        assertTrue(new SelectCommand(ds, Arrays.<OsmPrimitive>asList(testData.existingNode))
                 .getDescriptionText().matches("Selected 1 object"));
-        assertTrue(new SelectCommand(Arrays.asList(testData.existingNode, testData.existingWay))
+        assertTrue(new SelectCommand(ds, Arrays.asList(testData.existingNode, testData.existingWay))
                 .getDescriptionText().matches("Selected 2 objects"));
-        assertTrue(new SelectCommand(Arrays.<OsmPrimitive>asList())
+        assertTrue(new SelectCommand(ds, Arrays.<OsmPrimitive>asList())
                 .getDescriptionText().matches("Selected 0 objects"));
-        assertTrue(new SelectCommand(null)
+        assertTrue(new SelectCommand(ds, null)
                 .getDescriptionText().matches("Selected 0 objects"));
     }
 
diff --git a/test/unit/org/openstreetmap/josm/command/SequenceCommandTest.java b/test/unit/org/openstreetmap/josm/command/SequenceCommandTest.java
index 0de085d..98735b4 100644
--- a/test/unit/org/openstreetmap/josm/command/SequenceCommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/SequenceCommandTest.java
@@ -11,6 +11,7 @@ import static org.junit.Assert.fail;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.Collections;
 
 import org.junit.Before;
 import org.junit.Rule;
@@ -53,8 +54,9 @@ public class SequenceCommandTest {
      */
     @Test
     public void testExecute() {
-        final TestCommand command1 = new TestCommand(Arrays.<OsmPrimitive>asList(testData.existingNode));
-        TestCommand command2 = new TestCommand(Arrays.<OsmPrimitive>asList(testData.existingNode2)) {
+        DataSet ds = new DataSet();
+        final TestCommand command1 = new TestCommand(ds, Arrays.<OsmPrimitive>asList(testData.existingNode));
+        TestCommand command2 = new TestCommand(ds, Arrays.<OsmPrimitive>asList(testData.existingNode2)) {
             @Override
             public boolean executeCommand() {
                 assertTrue(command1.executed);
@@ -74,8 +76,9 @@ public class SequenceCommandTest {
      */
     @Test
     public void testUndo() {
-        final TestCommand command2 = new TestCommand(Arrays.<OsmPrimitive>asList(testData.existingNode2));
-        TestCommand command1 = new TestCommand(Arrays.<OsmPrimitive>asList(testData.existingNode)) {
+        DataSet ds = new DataSet();
+        final TestCommand command2 = new TestCommand(ds, Arrays.<OsmPrimitive>asList(testData.existingNode2));
+        TestCommand command1 = new TestCommand(ds, Arrays.<OsmPrimitive>asList(testData.existingNode)) {
             @Override
             public void undoCommand() {
                 assertFalse(command2.executed);
@@ -102,9 +105,10 @@ public class SequenceCommandTest {
      */
     @Test
     public void testExecuteRollback() {
-        TestCommand command1 = new TestCommand(null);
-        FailingCommand command2 = new FailingCommand();
-        TestCommand command3 = new TestCommand(null);
+        DataSet ds = new DataSet();
+        TestCommand command1 = new TestCommand(ds, null);
+        FailingCommand command2 = new FailingCommand(ds);
+        TestCommand command3 = new TestCommand(ds, null);
         SequenceCommand command = new SequenceCommand("seq", Arrays.<Command>asList(command1, command2, command3));
         assertFalse(command.executeCommand());
         assertFalse(command1.executed);
@@ -118,9 +122,10 @@ public class SequenceCommandTest {
      */
     @Test
     public void testContinueOnErrors() {
-        TestCommand command1 = new TestCommand(null);
-        FailingCommand command2 = new FailingCommand();
-        TestCommand command3 = new TestCommand(null);
+        DataSet ds = new DataSet();
+        TestCommand command1 = new TestCommand(ds, null);
+        FailingCommand command2 = new FailingCommand(ds);
+        TestCommand command3 = new TestCommand(ds, null);
         SequenceCommand command = new SequenceCommand("seq", Arrays.<Command>asList(command1, command2, command3), true);
         assertTrue(command.executeCommand());
         assertTrue(command1.executed);
@@ -136,11 +141,12 @@ public class SequenceCommandTest {
      */
     @Test
     public void testGetLastCommand() {
-        final TestCommand command1 = new TestCommand(Arrays.<OsmPrimitive>asList(testData.existingNode));
-        final TestCommand command2 = new TestCommand(Arrays.<OsmPrimitive>asList(testData.existingNode2));
+        DataSet ds = new DataSet();
+        final TestCommand command1 = new TestCommand(ds, Arrays.<OsmPrimitive>asList(testData.existingNode));
+        final TestCommand command2 = new TestCommand(ds, Arrays.<OsmPrimitive>asList(testData.existingNode2));
 
-        assertEquals(command2, new SequenceCommand("seq", command1, command2).getLastCommand());
-        assertNull(new SequenceCommand("seq").getLastCommand());
+        assertEquals(command2, new SequenceCommand(ds, "seq", Arrays.asList(command1, command2), false).getLastCommand());
+        assertNull(new SequenceCommand(ds, "seq", Collections.emptyList(), false).getLastCommand());
     }
 
     /**
@@ -148,16 +154,17 @@ public class SequenceCommandTest {
      */
     @Test
     public void testFillModifiedData() {
-        Command command1 = new TestCommand(Arrays.<OsmPrimitive>asList(testData.existingNode));
-        Command command2 = new TestCommand(Arrays.<OsmPrimitive>asList(testData.existingNode2));
-        Command command3 = new TestCommand(Arrays.<OsmPrimitive>asList(testData.existingWay)) {
+        DataSet ds = new DataSet();
+        Command command1 = new TestCommand(ds, Arrays.<OsmPrimitive>asList(testData.existingNode));
+        Command command2 = new TestCommand(ds, Arrays.<OsmPrimitive>asList(testData.existingNode2));
+        Command command3 = new TestCommand(ds, Arrays.<OsmPrimitive>asList(testData.existingWay)) {
             @Override
             public void fillModifiedData(Collection<OsmPrimitive> modified, Collection<OsmPrimitive> deleted,
                     Collection<OsmPrimitive> added) {
                 deleted.addAll(primitives);
             }
         };
-        Command command4 = new TestCommand(Arrays.<OsmPrimitive>asList(testData.existingRelation)) {
+        Command command4 = new TestCommand(ds, Arrays.<OsmPrimitive>asList(testData.existingRelation)) {
             @Override
             public void fillModifiedData(Collection<OsmPrimitive> modified, Collection<OsmPrimitive> deleted,
                     Collection<OsmPrimitive> added) {
@@ -180,8 +187,9 @@ public class SequenceCommandTest {
      */
     @Test
     public void testGetParticipatingPrimitives() {
-        Command command1 = new TestCommand(Arrays.<OsmPrimitive>asList(testData.existingNode));
-        Command command2 = new TestCommand(Arrays.<OsmPrimitive>asList(testData.existingNode2));
+        DataSet ds = new DataSet();
+        Command command1 = new TestCommand(ds, Arrays.<OsmPrimitive>asList(testData.existingNode));
+        Command command2 = new TestCommand(ds, Arrays.<OsmPrimitive>asList(testData.existingNode2));
 
         SequenceCommand command = new SequenceCommand("seq", command1, command2);
         command.executeCommand();
@@ -196,7 +204,7 @@ public class SequenceCommandTest {
      */
     @Test
     public void testDescription() {
-        assertTrue(new SequenceCommand("test").getDescriptionText().matches("Sequence: test"));
+        assertTrue(new SequenceCommand(new DataSet(), "test", Collections.emptyList(), false).getDescriptionText().matches("Sequence: test"));
     }
 
     /**
@@ -204,9 +212,10 @@ public class SequenceCommandTest {
      */
     @Test
     public void testEqualsContract() {
+        DataSet ds = new DataSet();
         EqualsVerifier.forClass(SequenceCommand.class).usingGetClass()
             .withPrefabValues(Command.class,
-                new AddCommand(new Node(1)), new AddCommand(new Node(2)))
+                new AddCommand(ds, new Node(1)), new AddCommand(ds, new Node(2)))
             .withPrefabValues(DataSet.class,
                     new DataSet(), new DataSet())
             .withPrefabValues(User.class,
@@ -221,8 +230,8 @@ public class SequenceCommandTest {
         protected final Collection<? extends OsmPrimitive> primitives;
         protected boolean executed;
 
-        TestCommand(Collection<? extends OsmPrimitive> primitives) {
-            super();
+        TestCommand(DataSet ds, Collection<? extends OsmPrimitive> primitives) {
+            super(ds);
             this.primitives = primitives;
         }
 
@@ -265,8 +274,8 @@ public class SequenceCommandTest {
 
     private static class FailingCommand extends TestCommand {
 
-        FailingCommand() {
-            super(null);
+        FailingCommand(DataSet ds) {
+            super(ds, null);
         }
 
         @Override
@@ -285,7 +294,5 @@ public class SequenceCommandTest {
         public String toString() {
             return "FailingCommand";
         }
-
     }
-
 }
diff --git a/test/unit/org/openstreetmap/josm/actions/SplitWayActionTest.java b/test/unit/org/openstreetmap/josm/command/SplitWayCommandTest.java
similarity index 58%
copy from test/unit/org/openstreetmap/josm/actions/SplitWayActionTest.java
copy to test/unit/org/openstreetmap/josm/command/SplitWayCommandTest.java
index 7c87940..2642ffb 100644
--- a/test/unit/org/openstreetmap/josm/actions/SplitWayActionTest.java
+++ b/test/unit/org/openstreetmap/josm/command/SplitWayCommandTest.java
@@ -1,222 +1,145 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.actions;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.openstreetmap.josm.actions.SplitWayAction.Strategy;
-import org.openstreetmap.josm.data.coor.EastNorth;
-import org.openstreetmap.josm.data.coor.LatLon;
-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.Relation;
-import org.openstreetmap.josm.data.osm.RelationMember;
-import org.openstreetmap.josm.data.osm.Way;
-import org.openstreetmap.josm.gui.MainApplication;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer;
-import org.openstreetmap.josm.testutils.JOSMTestRules;
-
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
-
-/**
- * Unit tests for class {@link SplitWayAction}.
- */
-public final class SplitWayActionTest {
-
-    /** Class under test. */
-    private static SplitWayAction action;
-
-    /**
-     * Setup test.
-     */
-    @Rule
-    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
-    public JOSMTestRules test = new JOSMTestRules().main().projection();
-
-    /**
-     * Setup test.
-     */
-    @Before
-    public void setUp() {
-        if (action == null) {
-            action = MainApplication.getMenu().splitWay;
-            action.setEnabled(true);
-        }
-    }
-
-    /**
-     * Test case: When node is share by multiple ways, split selected way.
-     * see #11184
-     */
-    @Test
-    public void testTicket11184() {
-        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(-1, 1));
-        Node n3 = new Node(new EastNorth(1, 1));
-        Node n4 = new Node(new EastNorth(-1, -1));
-        Node n5 = new Node(new EastNorth(1, -1));
-        Node n6 = new Node(new EastNorth(-1, 0));
-        Node n7 = new Node(new EastNorth(1, 0));
-        dataSet.addPrimitive(n1);
-        dataSet.addPrimitive(n2);
-        dataSet.addPrimitive(n3);
-        dataSet.addPrimitive(n4);
-        dataSet.addPrimitive(n5);
-        dataSet.addPrimitive(n6);
-        dataSet.addPrimitive(n7);
-
-        Way w1 = new Way();
-        Node[] w1NodesArray = new Node[] {n6, n1, n7};
-        w1.setNodes(Arrays.asList(w1NodesArray));
-        Way w2 = new Way();
-        w2.setNodes(Arrays.asList(new Node[] {n1, n2, n3, n1, n4, n5, n1}));
-        dataSet.addPrimitive(w1);
-        dataSet.addPrimitive(w2);
-
-        dataSet.addSelected(n1);
-        dataSet.addSelected(w2);
-
-        try {
-            MainApplication.getLayerManager().addLayer(layer);
-            action.actionPerformed(null);
-        } finally {
-            // Ensure we clean the place before leaving, even if test fails.
-            MainApplication.getLayerManager().removeLayer(layer);
-        }
-
-        // Ensures 3 ways.
-        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));
-        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]);
-        }
-    }
-
-    /**
-     * Unit test of {@link SplitWayAction#findVia}.
-     */
-    @Test
-    public void testFindVia() {
-        // empty relation
-        assertNull(SplitWayAction.findVia(new Relation(), null));
-        // restriction relation without via member
-        Relation r = new Relation();
-        r.addMember(new RelationMember("", new Node()));
-        assertNull(SplitWayAction.findVia(r, "restriction"));
-        // restriction relation with via member
-        r = new Relation();
-        OsmPrimitive via = new Node();
-        r.addMember(new RelationMember("via", via));
-        assertEquals(via, SplitWayAction.findVia(r, "restriction"));
-        // destination_sign relation without sign nor intersection
-        r = new Relation();
-        r.addMember(new RelationMember("", new Node()));
-        assertNull(SplitWayAction.findVia(r, "destination_sign"));
-        // destination_sign with sign
-        r = new Relation();
-        via = new Node();
-        r.addMember(new RelationMember("sign", via));
-        assertEquals(via, SplitWayAction.findVia(r, "destination_sign"));
-        // destination_sign with intersection
-        r = new Relation();
-        via = new Node();
-        r.addMember(new RelationMember("intersection", via));
-        assertEquals(via, SplitWayAction.findVia(r, "destination_sign"));
-    }
-
-    /**
-     * Unit tests of route relations.
-     */
-    @Test
-    public void testRouteRelation() {
-        doTestRouteRelation(false, 0);
-        doTestRouteRelation(false, 1);
-        doTestRouteRelation(false, 2);
-        doTestRouteRelation(false, 3);
-        doTestRouteRelation(true, 0);
-        doTestRouteRelation(true, 1);
-        doTestRouteRelation(true, 2);
-        doTestRouteRelation(true, 3);
-    }
-
-    void doTestRouteRelation(final boolean wayIsReversed, final int indexOfWayToKeep) {
-        final DataSet dataSet = new DataSet();
-        final OsmDataLayer layer = new OsmDataLayer(dataSet, OsmDataLayer.createNewName(), null);
-        final Node n1 = new Node(new LatLon(1, 0));
-        final Node n2 = new Node(new LatLon(2, 0));
-        final Node n3 = new Node(new LatLon(3, 0));
-        final Node n4 = new Node(new LatLon(4, 0));
-        final Node n5 = new Node(new LatLon(5, 0));
-        final Node n6 = new Node(new LatLon(6, 0));
-        final Node n7 = new Node(new LatLon(7, 0));
-        final Way w1 = new Way();
-        final Way w2 = new Way();
-        final Way w3 = new Way();
-        final Relation route = new Relation();
-        for (OsmPrimitive p : Arrays.asList(n1, n2, n3, n4, n5, n6, n7, w1, w2, w3, route)) {
-            dataSet.addPrimitive(p);
-        }
-        w1.setNodes(Arrays.asList(n1, n2));
-        w2.setNodes(wayIsReversed
-                ? Arrays.asList(n6, n5, n4, n3, n2)
-                : Arrays.asList(n2, n3, n4, n5, n6)
-        );
-        w3.setNodes(Arrays.asList(n6, n7));
-        route.put("type", "route");
-        route.addMember(new RelationMember("", w1));
-        route.addMember(new RelationMember("", w2));
-        route.addMember(new RelationMember("", w3));
-        dataSet.setSelected(Arrays.asList(w2, n3, n4, n5));
-
-        final Strategy strategy = wayChunks -> {
-                final Iterator<Way> it = wayChunks.iterator();
-                for (int i = 0; i < indexOfWayToKeep; i++) {
-                    it.next();
-                }
-                return it.next();
-            };
-        final SplitWayAction.SplitWayResult result = SplitWayAction.splitWay(
-                layer, w2, SplitWayAction.buildSplitChunks(w2, Arrays.asList(n3, n4, n5)), new ArrayList<OsmPrimitive>(), strategy);
-        MainApplication.undoRedo.add(result.getCommand());
-
-        assertEquals(6, route.getMembersCount());
-        assertEquals(w1, route.getMemberPrimitivesList().get(0));
-        assertEquals(w3, route.getMemberPrimitivesList().get(5));
-        assertFirstLastNodeIs(((Way) route.getMemberPrimitivesList().get(0)), n1);
-        assertFirstLastNodeIs(((Way) route.getMemberPrimitivesList().get(0)), n2);
-        assertFirstLastNodeIs(((Way) route.getMemberPrimitivesList().get(1)), n2);
-        assertFirstLastNodeIs(((Way) route.getMemberPrimitivesList().get(1)), n3);
-        assertFirstLastNodeIs(((Way) route.getMemberPrimitivesList().get(2)), n3);
-        assertFirstLastNodeIs(((Way) route.getMemberPrimitivesList().get(2)), n4);
-        assertFirstLastNodeIs(((Way) route.getMemberPrimitivesList().get(3)), n4);
-        assertFirstLastNodeIs(((Way) route.getMemberPrimitivesList().get(3)), n5);
-        assertFirstLastNodeIs(((Way) route.getMemberPrimitivesList().get(4)), n5);
-        assertFirstLastNodeIs(((Way) route.getMemberPrimitivesList().get(4)), n6);
-        assertFirstLastNodeIs(((Way) route.getMemberPrimitivesList().get(5)), n6);
-        assertFirstLastNodeIs(((Way) route.getMemberPrimitivesList().get(5)), n7);
-    }
-
-    static void assertFirstLastNodeIs(Way way, Node node) {
-        assertTrue("First/last node of " + way + " should be " + node, node.equals(way.firstNode()) || node.equals(way.lastNode()));
-    }
-}
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.command;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.openstreetmap.josm.command.SplitWayCommand.Strategy;
+import org.openstreetmap.josm.data.coor.LatLon;
+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.Relation;
+import org.openstreetmap.josm.data.osm.RelationMember;
+import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.gui.MainApplication;
+import org.openstreetmap.josm.testutils.JOSMTestRules;
+
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
+/**
+ * Unit tests for class {@link SplitWayCommand}.
+ */
+public final class SplitWayCommandTest {
+
+    /**
+     * Setup test.
+     */
+    @Rule
+    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
+    public JOSMTestRules test = new JOSMTestRules().main().projection();
+
+    /**
+     * Unit test of {@link SplitWayCommand#findVia}.
+     */
+    @Test
+    public void testFindVia() {
+        // empty relation
+        assertNull(SplitWayCommand.findVia(new Relation(), null));
+        // restriction relation without via member
+        Relation r = new Relation();
+        r.addMember(new RelationMember("", new Node()));
+        assertNull(SplitWayCommand.findVia(r, "restriction"));
+        // restriction relation with via member
+        r = new Relation();
+        OsmPrimitive via = new Node();
+        r.addMember(new RelationMember("via", via));
+        assertEquals(via, SplitWayCommand.findVia(r, "restriction"));
+        // destination_sign relation without sign nor intersection
+        r = new Relation();
+        r.addMember(new RelationMember("", new Node()));
+        assertNull(SplitWayCommand.findVia(r, "destination_sign"));
+        // destination_sign with sign
+        r = new Relation();
+        via = new Node();
+        r.addMember(new RelationMember("sign", via));
+        assertEquals(via, SplitWayCommand.findVia(r, "destination_sign"));
+        // destination_sign with intersection
+        r = new Relation();
+        via = new Node();
+        r.addMember(new RelationMember("intersection", via));
+        assertEquals(via, SplitWayCommand.findVia(r, "destination_sign"));
+    }
+
+    /**
+     * Unit tests of route relations.
+     */
+    @Test
+    public void testRouteRelation() {
+        doTestRouteRelation(false, 0);
+        doTestRouteRelation(false, 1);
+        doTestRouteRelation(false, 2);
+        doTestRouteRelation(false, 3);
+        doTestRouteRelation(true, 0);
+        doTestRouteRelation(true, 1);
+        doTestRouteRelation(true, 2);
+        doTestRouteRelation(true, 3);
+    }
+
+    void doTestRouteRelation(final boolean wayIsReversed, final int indexOfWayToKeep) {
+        final DataSet dataSet = new DataSet();
+        final Node n1 = new Node(new LatLon(1, 0));
+        final Node n2 = new Node(new LatLon(2, 0));
+        final Node n3 = new Node(new LatLon(3, 0));
+        final Node n4 = new Node(new LatLon(4, 0));
+        final Node n5 = new Node(new LatLon(5, 0));
+        final Node n6 = new Node(new LatLon(6, 0));
+        final Node n7 = new Node(new LatLon(7, 0));
+        final Way w1 = new Way();
+        final Way w2 = new Way();
+        final Way w3 = new Way();
+        final Relation route = new Relation();
+        for (OsmPrimitive p : Arrays.asList(n1, n2, n3, n4, n5, n6, n7, w1, w2, w3, route)) {
+            dataSet.addPrimitive(p);
+        }
+        w1.setNodes(Arrays.asList(n1, n2));
+        w2.setNodes(wayIsReversed
+                ? Arrays.asList(n6, n5, n4, n3, n2)
+                : Arrays.asList(n2, n3, n4, n5, n6)
+        );
+        w3.setNodes(Arrays.asList(n6, n7));
+        route.put("type", "route");
+        route.addMember(new RelationMember("", w1));
+        route.addMember(new RelationMember("", w2));
+        route.addMember(new RelationMember("", w3));
+        dataSet.setSelected(Arrays.asList(w2, n3, n4, n5));
+
+        final Strategy strategy = wayChunks -> {
+                final Iterator<Way> it = wayChunks.iterator();
+                for (int i = 0; i < indexOfWayToKeep; i++) {
+                    it.next();
+                }
+                return it.next();
+            };
+        final SplitWayCommand result = SplitWayCommand.splitWay(
+                w2, SplitWayCommand.buildSplitChunks(w2, Arrays.asList(n3, n4, n5)), new ArrayList<OsmPrimitive>(), strategy);
+        MainApplication.undoRedo.add(result);
+
+        assertEquals(6, route.getMembersCount());
+        assertEquals(w1, route.getMemberPrimitivesList().get(0));
+        assertEquals(w3, route.getMemberPrimitivesList().get(5));
+        assertFirstLastNodeIs(((Way) route.getMemberPrimitivesList().get(0)), n1);
+        assertFirstLastNodeIs(((Way) route.getMemberPrimitivesList().get(0)), n2);
+        assertFirstLastNodeIs(((Way) route.getMemberPrimitivesList().get(1)), n2);
+        assertFirstLastNodeIs(((Way) route.getMemberPrimitivesList().get(1)), n3);
+        assertFirstLastNodeIs(((Way) route.getMemberPrimitivesList().get(2)), n3);
+        assertFirstLastNodeIs(((Way) route.getMemberPrimitivesList().get(2)), n4);
+        assertFirstLastNodeIs(((Way) route.getMemberPrimitivesList().get(3)), n4);
+        assertFirstLastNodeIs(((Way) route.getMemberPrimitivesList().get(3)), n5);
+        assertFirstLastNodeIs(((Way) route.getMemberPrimitivesList().get(4)), n5);
+        assertFirstLastNodeIs(((Way) route.getMemberPrimitivesList().get(4)), n6);
+        assertFirstLastNodeIs(((Way) route.getMemberPrimitivesList().get(5)), n6);
+        assertFirstLastNodeIs(((Way) route.getMemberPrimitivesList().get(5)), n7);
+    }
+
+    static void assertFirstLastNodeIs(Way way, Node node) {
+        assertTrue("First/last node of " + way + " should be " + node, node.equals(way.firstNode()) || node.equals(way.lastNode()));
+    }
+}
diff --git a/test/unit/org/openstreetmap/josm/command/conflict/ConflictAddCommandTest.java b/test/unit/org/openstreetmap/josm/command/conflict/ConflictAddCommandTest.java
index da83ed4..ba22ba4 100644
--- a/test/unit/org/openstreetmap/josm/command/conflict/ConflictAddCommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/conflict/ConflictAddCommandTest.java
@@ -5,16 +5,15 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
-import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.command.CommandTest.CommandTestData;
 import org.openstreetmap.josm.data.conflict.Conflict;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.User;
 import org.openstreetmap.josm.data.osm.Way;
-import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
@@ -27,30 +26,20 @@ import nl.jqno.equalsverifier.Warning;
  */
 public class ConflictAddCommandTest {
 
-    private OsmDataLayer layer;
-
     /**
      * Setup test.
      */
     @Rule
     @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
     public JOSMTestRules test = new JOSMTestRules().platform();
+    private CommandTestData testData;
 
     /**
      * Setup test.
      */
     @Before
     public void setUp() {
-        layer = new OsmDataLayer(new DataSet(), null, null);
-        MainApplication.getLayerManager().addLayer(layer);
-    }
-
-    /**
-     * Cleanup test resources.
-     */
-    @After
-    public void tearDown() {
-        MainApplication.getLayerManager().removeLayer(layer);
+        testData = new CommandTestData();
     }
 
     /**
@@ -58,8 +47,8 @@ public class ConflictAddCommandTest {
      */
     @Test
     public void testExecuteUndoCommand() {
-        DataSet ds = MainApplication.getLayerManager().getEditDataSet();
-        Conflict<Node> conflict = new Conflict<>(new Node(), new Node());
+        DataSet ds = testData.layer.data;
+        Conflict<Node> conflict = new Conflict<>(testData.existingNode, testData.existingNode2);
         ConflictAddCommand cmd = new ConflictAddCommand(ds, conflict);
         assertTrue(cmd.executeCommand());
         assertFalse(ds.getConflicts().isEmpty());
@@ -74,9 +63,8 @@ public class ConflictAddCommandTest {
      */
     @Test
     public void testGetDescriptionIcon() {
-        OsmDataLayer layer = MainApplication.getLayerManager().getEditLayer();
-        Conflict<Node> conflict = new Conflict<>(new Node(), new Node());
-        assertNotNull(new ConflictAddCommand(layer, conflict).getDescriptionIcon());
+        Conflict<Node> conflict = new Conflict<>(testData.existingNode, testData.existingNode2);
+        assertNotNull(new ConflictAddCommand(testData.layer.data, conflict).getDescriptionIcon());
     }
 
     /**
diff --git a/test/unit/org/openstreetmap/josm/command/conflict/CoordinateConflictResolveCommandTest.java b/test/unit/org/openstreetmap/josm/command/conflict/CoordinateConflictResolveCommandTest.java
index 8fac6d8..35b45f6 100644
--- a/test/unit/org/openstreetmap/josm/command/conflict/CoordinateConflictResolveCommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/conflict/CoordinateConflictResolveCommandTest.java
@@ -5,17 +5,16 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
-import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.command.CommandTest.CommandTestData;
 import org.openstreetmap.josm.data.conflict.Conflict;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.User;
 import org.openstreetmap.josm.data.osm.Way;
-import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.conflict.pair.MergeDecisionType;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
@@ -29,7 +28,7 @@ import nl.jqno.equalsverifier.Warning;
  */
 public class CoordinateConflictResolveCommandTest {
 
-    private OsmDataLayer layer;
+    private CommandTestData testData;
 
     /**
      * Setup test.
@@ -43,20 +42,11 @@ public class CoordinateConflictResolveCommandTest {
      */
     @Before
     public void setUp() {
-        layer = new OsmDataLayer(new DataSet(), null, null);
-        MainApplication.getLayerManager().addLayer(layer);
+        testData = new CommandTestData();
     }
 
-    /**
-     * Cleanup test resources.
-     */
-    @After
-    public void tearDown() {
-        MainApplication.getLayerManager().removeLayer(layer);
-    }
-
-    private static Conflict<Node> createConflict() {
-        return new Conflict<>(new Node(LatLon.ZERO), new Node(new LatLon(50, 50)));
+    private Conflict<Node> createConflict() {
+        return new Conflict<>(testData.existingNode, testData.existingNode2);
     }
 
     /**
diff --git a/test/unit/org/openstreetmap/josm/data/PreferencesUtilsTest.java b/test/unit/org/openstreetmap/josm/data/PreferencesUtilsTest.java
new file mode 100644
index 0000000..eab0a3c
--- /dev/null
+++ b/test/unit/org/openstreetmap/josm/data/PreferencesUtilsTest.java
@@ -0,0 +1,56 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.openstreetmap.josm.testutils.JOSMTestRules;
+
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+import net.trajano.commons.testing.UtilityClassTestUtil;
+
+/**
+ * Unit tests for class {@link PreferencesUtils}.
+ */
+public class PreferencesUtilsTest {
+
+    /**
+     * Setup test.
+     */
+    @Rule
+    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
+    public JOSMTestRules test = new JOSMTestRules().preferences();
+
+    /**
+     * Setup test.
+     */
+    @Before
+    public void setUp() {
+        PreferencesUtils.resetLog();
+    }
+
+    /**
+     * Test method for {@link PreferencesUtils#log}.
+     */
+    @Test
+    public void testLog() {
+        assertEquals("", PreferencesUtils.getLog());
+        PreferencesUtils.log("test");
+        assertEquals("test\n", PreferencesUtils.getLog());
+        PreferencesUtils.log("%d\n", 100);
+        assertEquals("test\n100\n", PreferencesUtils.getLog());
+        PreferencesUtils.log("test");
+        assertEquals("test\n100\ntest\n", PreferencesUtils.getLog());
+    }
+
+    /**
+     * Tests that {@code PreferencesUtils} satisfies utility class criterias.
+     * @throws ReflectiveOperationException if an error occurs
+     */
+    @Test
+    public void testUtilityClass() throws ReflectiveOperationException {
+        UtilityClassTestUtil.assertUtilityClassWellDefined(PreferencesUtils.class);
+    }
+}
diff --git a/test/unit/org/openstreetmap/josm/gui/JosmUserIdentityManagerTest.java b/test/unit/org/openstreetmap/josm/data/UserIdentityManagerTest.java
similarity index 60%
rename from test/unit/org/openstreetmap/josm/gui/JosmUserIdentityManagerTest.java
rename to test/unit/org/openstreetmap/josm/data/UserIdentityManagerTest.java
index eb7b2ec..0df15cb 100644
--- a/test/unit/org/openstreetmap/josm/gui/JosmUserIdentityManagerTest.java
+++ b/test/unit/org/openstreetmap/josm/data/UserIdentityManagerTest.java
@@ -1,5 +1,5 @@
 // License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui;
+package org.openstreetmap.josm.data;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -8,25 +8,26 @@ import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 
-import org.junit.BeforeClass;
+import org.junit.Rule;
 import org.junit.Test;
-import org.openstreetmap.josm.JOSMFixture;
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.User;
 import org.openstreetmap.josm.data.osm.UserInfo;
+import org.openstreetmap.josm.spi.preferences.Config;
+import org.openstreetmap.josm.testutils.JOSMTestRules;
+
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 
 /**
- * Unit tests of {@link JosmUserIdentityManager} class.
+ * Unit tests of {@link UserIdentityManager} class.
  */
-public class JosmUserIdentityManagerTest {
+public class UserIdentityManagerTest {
 
     /**
      * Setup test.
      */
-    @BeforeClass
-    public static void initTestCase() {
-        JOSMFixture.createUnitTestFixture().init();
-    }
+    @Rule
+    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
+    public JOSMTestRules test = new JOSMTestRules().preferences();
 
     private static UserInfo newUserInfo() {
         return newUserInfo(1, "a description");
@@ -45,23 +46,23 @@ public class JosmUserIdentityManagerTest {
     @Test
     public void testSingletonAccess() {
 
-        JosmUserIdentityManager im = JosmUserIdentityManager.getInstance();
+        UserIdentityManager im = UserIdentityManager.getInstance();
 
         // created ?
         assertNotNull(im);
 
-        JosmUserIdentityManager im2 = JosmUserIdentityManager.getInstance();
+        UserIdentityManager im2 = UserIdentityManager.getInstance();
 
         // only one instance
         assertSame(im, im2);
     }
 
     /**
-     * Unit test of {@link JosmUserIdentityManager#setAnonymous}.
+     * Unit test of {@link UserIdentityManager#setAnonymous}.
      */
     @Test
     public void testSetAnonymous() {
-        JosmUserIdentityManager im = JosmUserIdentityManager.getInstance();
+        UserIdentityManager im = UserIdentityManager.getInstance();
 
         im.setPartiallyIdentified("test");
         im.setAnonymous();
@@ -77,11 +78,11 @@ public class JosmUserIdentityManagerTest {
     }
 
     /**
-     * Unit test of {@link JosmUserIdentityManager#setPartiallyIdentified} - nominal case.
+     * Unit test of {@link UserIdentityManager#setPartiallyIdentified} - nominal case.
      */
     @Test
     public void testSetPartiallyIdentified() {
-        JosmUserIdentityManager im = JosmUserIdentityManager.getInstance();
+        UserIdentityManager im = UserIdentityManager.getInstance();
         im.setPartiallyIdentified("test");
 
         assertFalse(im.isAnonymous());
@@ -97,35 +98,35 @@ public class JosmUserIdentityManagerTest {
     }
 
     /**
-     * Unit test of {@link JosmUserIdentityManager#setPartiallyIdentified} - null case.
+     * Unit test of {@link UserIdentityManager#setPartiallyIdentified} - null case.
      */
     @Test(expected = IllegalArgumentException.class)
     public void testSetPartiallyIdentifiedNull() {
-        JosmUserIdentityManager.getInstance().setPartiallyIdentified(null);
+        UserIdentityManager.getInstance().setPartiallyIdentified(null);
     }
 
     /**
-     * Unit test of {@link JosmUserIdentityManager#setPartiallyIdentified} - empty case.
+     * Unit test of {@link UserIdentityManager#setPartiallyIdentified} - empty case.
      */
     @Test(expected = IllegalArgumentException.class)
     public void testSetPartiallyIdentifiedEmpty() {
-        JosmUserIdentityManager.getInstance().setPartiallyIdentified("");
+        UserIdentityManager.getInstance().setPartiallyIdentified("");
     }
 
     /**
-     * Unit test of {@link JosmUserIdentityManager#setPartiallyIdentified} - blank case.
+     * Unit test of {@link UserIdentityManager#setPartiallyIdentified} - blank case.
      */
     @Test(expected = IllegalArgumentException.class)
     public void testSetPartiallyIdentifiedBlank() {
-        JosmUserIdentityManager.getInstance().setPartiallyIdentified("  \t  ");
+        UserIdentityManager.getInstance().setPartiallyIdentified("  \t  ");
     }
 
     /**
-     * Unit test of {@link JosmUserIdentityManager#setFullyIdentified} - nominal case.
+     * Unit test of {@link UserIdentityManager#setFullyIdentified} - nominal case.
      */
     @Test
     public void testSetFullyIdentified() {
-        JosmUserIdentityManager im = JosmUserIdentityManager.getInstance();
+        UserIdentityManager im = UserIdentityManager.getInstance();
 
         UserInfo userInfo = newUserInfo();
 
@@ -144,35 +145,35 @@ public class JosmUserIdentityManagerTest {
     }
 
     /**
-     * Unit test of {@link JosmUserIdentityManager#setFullyIdentified} - null name case.
+     * Unit test of {@link UserIdentityManager#setFullyIdentified} - null name case.
      */
     @Test(expected = IllegalArgumentException.class)
     public void testSetFullyIdentifiedNullName() {
-        JosmUserIdentityManager.getInstance().setFullyIdentified(null, newUserInfo());
+        UserIdentityManager.getInstance().setFullyIdentified(null, newUserInfo());
     }
 
     /**
-     * Unit test of {@link JosmUserIdentityManager#setFullyIdentified} - empty name case.
+     * Unit test of {@link UserIdentityManager#setFullyIdentified} - empty name case.
      */
     @Test(expected = IllegalArgumentException.class)
     public void testSetFullyIdentifiedEmptyName() {
-        JosmUserIdentityManager.getInstance().setFullyIdentified("", newUserInfo());
+        UserIdentityManager.getInstance().setFullyIdentified("", newUserInfo());
     }
 
     /**
-     * Unit test of {@link JosmUserIdentityManager#setFullyIdentified} - blank name case.
+     * Unit test of {@link UserIdentityManager#setFullyIdentified} - blank name case.
      */
     @Test(expected = IllegalArgumentException.class)
     public void testSetFullyIdentifiedBlankName() {
-        JosmUserIdentityManager.getInstance().setFullyIdentified(" \t ", newUserInfo());
+        UserIdentityManager.getInstance().setFullyIdentified(" \t ", newUserInfo());
     }
 
     /**
-     * Unit test of {@link JosmUserIdentityManager#setFullyIdentified} - null info case.
+     * Unit test of {@link UserIdentityManager#setFullyIdentified} - null info case.
      */
     @Test(expected = IllegalArgumentException.class)
     public void testSetFullyIdentifiedNullInfo() {
-        JosmUserIdentityManager.getInstance().setFullyIdentified("test", null);
+        UserIdentityManager.getInstance().setFullyIdentified("test", null);
     }
 
     /**
@@ -180,23 +181,23 @@ public class JosmUserIdentityManagerTest {
      */
     @Test
     public void testInitFromPreferences1() {
-        JosmUserIdentityManager im = JosmUserIdentityManager.getInstance();
+        UserIdentityManager im = UserIdentityManager.getInstance();
 
         // reset it
         im.setAnonymous();
 
         // for this test we disable the listener
-        Main.pref.removePreferenceChangeListener(im);
+        Config.getPref().removePreferenceChangeListener(im);
 
         try {
-            Main.pref.put("osm-server.url", null);
-            Main.pref.put("osm-server.username", null);
+            Config.getPref().put("osm-server.url", null);
+            Config.getPref().put("osm-server.username", null);
 
             im.initFromPreferences();
 
             assertTrue(im.isAnonymous());
         } finally {
-            Main.pref.addPreferenceChangeListener(im);
+            Config.getPref().addPreferenceChangeListener(im);
         }
     }
 
@@ -205,23 +206,23 @@ public class JosmUserIdentityManagerTest {
      */
     @Test
     public void testInitFromPreferences2() {
-        JosmUserIdentityManager im = JosmUserIdentityManager.getInstance();
+        UserIdentityManager im = UserIdentityManager.getInstance();
 
         // reset it
         im.setAnonymous();
 
         // for this test we disable the listener
-        Main.pref.removePreferenceChangeListener(im);
+        Config.getPref().removePreferenceChangeListener(im);
 
         try {
-            Main.pref.put("osm-server.url", "http://api.openstreetmap.org");
-            Main.pref.put("osm-server.username", null);
+            Config.getPref().put("osm-server.url", "http://api.openstreetmap.org");
+            Config.getPref().put("osm-server.username", null);
 
             im.initFromPreferences();
 
             assertTrue(im.isAnonymous());
         } finally {
-            Main.pref.addPreferenceChangeListener(im);
+            Config.getPref().addPreferenceChangeListener(im);
         }
     }
 
@@ -230,23 +231,23 @@ public class JosmUserIdentityManagerTest {
      */
     @Test
     public void testInitFromPreferences3() {
-        JosmUserIdentityManager im = JosmUserIdentityManager.getInstance();
+        UserIdentityManager im = UserIdentityManager.getInstance();
 
         // for this test we disable the listener
-        Main.pref.removePreferenceChangeListener(im);
+        Config.getPref().removePreferenceChangeListener(im);
 
         try {
             // reset it
             im.setAnonymous();
 
-            Main.pref.put("osm-server.url", "http://api.openstreetmap.org");
-            Main.pref.put("osm-server.username", "test");
+            Config.getPref().put("osm-server.url", "http://api.openstreetmap.org");
+            Config.getPref().put("osm-server.username", "test");
 
             im.initFromPreferences();
 
             assertTrue(im.isPartiallyIdentified());
         } finally {
-            Main.pref.addPreferenceChangeListener(im);
+            Config.getPref().addPreferenceChangeListener(im);
         }
     }
 
@@ -257,22 +258,22 @@ public class JosmUserIdentityManagerTest {
      */
     @Test
     public void testInitFromPreferences4() {
-        JosmUserIdentityManager im = JosmUserIdentityManager.getInstance();
+        UserIdentityManager im = UserIdentityManager.getInstance();
 
         // for this test we disable the listener
-        Main.pref.removePreferenceChangeListener(im);
+        Config.getPref().removePreferenceChangeListener(im);
 
         try {
             im.setFullyIdentified("test1", newUserInfo());
 
-            Main.pref.put("osm-server.url", "http://api.openstreetmap.org");
-            Main.pref.put("osm-server.username", "test2");
+            Config.getPref().put("osm-server.url", "http://api.openstreetmap.org");
+            Config.getPref().put("osm-server.username", "test2");
 
             im.initFromPreferences();
 
             assertTrue(im.isPartiallyIdentified());
         } finally {
-            Main.pref.addPreferenceChangeListener(im);
+            Config.getPref().addPreferenceChangeListener(im);
         }
     }
 
@@ -283,95 +284,94 @@ public class JosmUserIdentityManagerTest {
      */
     @Test
     public void testInitFromPreferences5() {
-        JosmUserIdentityManager im = JosmUserIdentityManager.getInstance();
+        UserIdentityManager im = UserIdentityManager.getInstance();
 
         // for this test we disable the listener
-        Main.pref.removePreferenceChangeListener(im);
+        Config.getPref().removePreferenceChangeListener(im);
 
         try {
             im.setFullyIdentified("test1", new UserInfo());
 
-            Main.pref.put("osm-server.url", "http://api.openstreetmap.org");
-            Main.pref.put("osm-server.username", "test1");
+            Config.getPref().put("osm-server.url", "http://api.openstreetmap.org");
+            Config.getPref().put("osm-server.username", "test1");
 
             im.initFromPreferences();
 
             assertTrue(im.isFullyIdentified());
         } finally {
-            Main.pref.addPreferenceChangeListener(im);
+            Config.getPref().addPreferenceChangeListener(im);
         }
     }
 
     @Test
     public void testApiUrlChanged() {
-        JosmUserIdentityManager im = JosmUserIdentityManager.getInstance();
+        UserIdentityManager im = UserIdentityManager.getInstance();
 
         // reset it
         im.setAnonymous();
 
-        Main.pref.put("osm-server.url", "http://api.openstreetmap.org");
+        Config.getPref().put("osm-server.url", "http://api.openstreetmap.org");
         assertTrue(im.isAnonymous());
 
-        Main.pref.put("osm-server.url", null);
+        Config.getPref().put("osm-server.url", null);
         assertTrue(im.isAnonymous());
 
         // reset it
         im.setPartiallyIdentified("test");
 
-        Main.pref.put("osm-server.url", "http://api.openstreetmap.org");
+        Config.getPref().put("osm-server.url", "http://api.openstreetmap.org");
         assertTrue(im.isPartiallyIdentified());
         assertEquals("test", im.getUserName());
 
-        Main.pref.put("osm-server.url", null);
+        Config.getPref().put("osm-server.url", null);
         assertTrue(im.isAnonymous());
 
         // reset it
         im.setFullyIdentified("test", newUserInfo());
 
-        Main.pref.put("osm-server.url", "http://api.openstreetmap.org");
+        Config.getPref().put("osm-server.url", "http://api.openstreetmap.org");
         assertTrue(im.isPartiallyIdentified());
         assertEquals("test", im.getUserName());
 
         // reset it
         im.setFullyIdentified("test", newUserInfo());
 
-        Main.pref.put("osm-server.url", null);
+        Config.getPref().put("osm-server.url", null);
         assertTrue(im.isAnonymous());
     }
 
     @Test
-    //@Ignore
     public void testUserNameChanged() {
-        JosmUserIdentityManager im = JosmUserIdentityManager.getInstance();
+        UserIdentityManager im = UserIdentityManager.getInstance();
 
         // reset it
         im.setAnonymous();
 
-        Main.pref.put("osm-server.username", "test");
+        Config.getPref().put("osm-server.username", "test");
         assertTrue(im.isPartiallyIdentified());
         assertEquals("test", im.getUserName());
 
-        Main.pref.put("osm-server.username", null);
+        Config.getPref().put("osm-server.username", null);
         assertTrue(im.isAnonymous());
         assertEquals(User.getAnonymous(), im.asUser());
 
         // reset it
         im.setPartiallyIdentified("test1");
 
-        Main.pref.put("osm-server.username", "test2");
+        Config.getPref().put("osm-server.username", "test2");
         assertTrue(im.isPartiallyIdentified());
         assertEquals("test2", im.getUserName());
         User usr = im.asUser();
         assertEquals(0, usr.getId());
         assertEquals("test2", usr.getName());
 
-        Main.pref.put("osm-server.username", null);
+        Config.getPref().put("osm-server.username", null);
         assertTrue(im.isAnonymous());
 
         // reset it
         im.setFullyIdentified("test1", newUserInfo());
 
-        Main.pref.put("osm-server.username", "test2");
+        Config.getPref().put("osm-server.username", "test2");
         assertTrue(im.isPartiallyIdentified());
         assertEquals("test2", im.getUserName());
         usr = im.asUser();
@@ -381,7 +381,7 @@ public class JosmUserIdentityManagerTest {
         // reset it
         im.setFullyIdentified("test1", newUserInfo());
 
-        Main.pref.put("osm-server.username", null);
+        Config.getPref().put("osm-server.username", null);
         assertTrue(im.isAnonymous());
     }
 }
diff --git a/test/unit/org/openstreetmap/josm/data/coor/LatLonTest.java b/test/unit/org/openstreetmap/josm/data/coor/LatLonTest.java
index a87d7e3..bfad7b1 100644
--- a/test/unit/org/openstreetmap/josm/data/coor/LatLonTest.java
+++ b/test/unit/org/openstreetmap/josm/data/coor/LatLonTest.java
@@ -195,28 +195,6 @@ public class LatLonTest {
     }
 
     /**
-     * Tests the methods {@link LatLon#latToString}, {@link LatLon#lonToString}, {@link LatLon#toStringCSV}.
-     */
-    @Test
-    public void testFormatting() {
-        LatLon c = new LatLon(47.000000, 19.000000);
-        assertEquals("47.0;19.0", c.toStringCSV(";"));
-        assertEquals("47.0", c.latToString(CoordinateFormat.DECIMAL_DEGREES));
-        assertEquals("19.0", c.lonToString(CoordinateFormat.DECIMAL_DEGREES));
-        assertEquals("47°00'00.0\"N", c.latToString(CoordinateFormat.DEGREES_MINUTES_SECONDS));
-        assertEquals("19°00'00.0\"E", c.lonToString(CoordinateFormat.DEGREES_MINUTES_SECONDS));
-        assertEquals("47°00.000'N", c.latToString(CoordinateFormat.NAUTICAL));
-        assertEquals("19°00.000'E", c.lonToString(CoordinateFormat.NAUTICAL));
-        assertEquals("5942074.0724311", c.latToString(CoordinateFormat.EAST_NORTH));
-        assertEquals("2115070.3250722", c.lonToString(CoordinateFormat.EAST_NORTH));
-        c = new LatLon(-47.000000, -19.000000);
-        assertEquals("47°00'00.0\"S", c.latToString(CoordinateFormat.DEGREES_MINUTES_SECONDS));
-        assertEquals("19°00'00.0\"W", c.lonToString(CoordinateFormat.DEGREES_MINUTES_SECONDS));
-        assertEquals("47°00.000'S", c.latToString(CoordinateFormat.NAUTICAL));
-        assertEquals("19°00.000'W", c.lonToString(CoordinateFormat.NAUTICAL));
-    }
-
-    /**
      * Test {@link LatLon#interpolate(LatLon, double)}
      */
     @Test
@@ -290,47 +268,4 @@ public class LatLonTest {
         assertEquals(10, ll3.getCenter(ll2).lon(), 1e-10);
     }
 
-    /**
-     * Unit test of {@link LatLon#parse} method.
-     */
-    @Test
-    public void testParse() {
-        assertEquals(new LatLon(49.29918, 19.24788), LatLon.parse("49.29918° 19.24788°"));
-        assertEquals(new LatLon(49.29918, 19.24788), LatLon.parse("N 49.29918 E 19.24788°"));
-        assertEquals(new LatLon(49.29918, 19.24788), LatLon.parse("49.29918° 19.24788°"));
-        assertEquals(new LatLon(49.29918, 19.24788), LatLon.parse("N 49.29918 E 19.24788"));
-        assertEquals(new LatLon(49.29918, 19.24788), LatLon.parse("n 49.29918 e 19.24788"));
-        assertEquals(new LatLon(-19 - 24.788 / 60, -49 - 29.918 / 60), LatLon.parse("W 49°29.918' S 19°24.788'"));
-        assertEquals(new LatLon(-19 - 24.788 / 60, -49 - 29.918 / 60), LatLon.parse("w 49°29.918' s 19°24.788'"));
-        assertEquals(new LatLon(49 + 29. / 60 + 04. / 3600, 19 + 24. / 60 + 43. / 3600), LatLon.parse("N 49°29'04\" E 19°24'43\""));
-        assertEquals(new LatLon(49.29918, 19.24788), LatLon.parse("49.29918 N, 19.24788 E"));
-        assertEquals(new LatLon(49.29918, 19.24788), LatLon.parse("49.29918 n, 19.24788 e"));
-        assertEquals(new LatLon(49 + 29. / 60 + 21. / 3600, 19 + 24. / 60 + 38. / 3600), LatLon.parse("49°29'21\" N 19°24'38\" E"));
-        assertEquals(new LatLon(49 + 29. / 60 + 51. / 3600, 19 + 24. / 60 + 18. / 3600), LatLon.parse("49 29 51, 19 24 18"));
-        assertEquals(new LatLon(49 + 29. / 60, 19 + 24. / 60), LatLon.parse("49 29, 19 24"));
-        assertEquals(new LatLon(19 + 24. / 60, 49 + 29. / 60), LatLon.parse("E 49 29, N 19 24"));
-        assertEquals(new LatLon(49 + 29. / 60, 19 + 24. / 60), LatLon.parse("49° 29; 19° 24"));
-        assertEquals(new LatLon(49 + 29. / 60, 19 + 24. / 60), LatLon.parse("49° 29; 19° 24"));
-        assertEquals(new LatLon(49 + 29. / 60, -19 - 24. / 60), LatLon.parse("N 49° 29, W 19° 24"));
-        assertEquals(new LatLon(-49 - 29.5 / 60, 19 + 24.6 / 60), LatLon.parse("49° 29.5 S, 19° 24.6 E"));
-        assertEquals(new LatLon(49 + 29.918 / 60, 19 + 15.88 / 60), LatLon.parse("N 49 29.918 E 19 15.88"));
-        assertEquals(new LatLon(49 + 29.4 / 60, 19 + 24.5 / 60), LatLon.parse("49 29.4 19 24.5"));
-        assertEquals(new LatLon(-49 - 29.4 / 60, 19 + 24.5 / 60), LatLon.parse("-49 29.4 N -19 24.5 W"));
-    }
-
-    /**
-     * Unit test of {@link LatLon#parse} method - invalid case 1.
-     */
-    @Test(expected = IllegalArgumentException.class)
-    public void testParseInvalid1() {
-        LatLon.parse("48°45'S 23°30'S");
-    }
-
-    /**
-     * Unit test of {@link LatLon#parse} method - invalid case 2.
-     */
-    @Test(expected = IllegalArgumentException.class)
-    public void testParseInvalid2() {
-        LatLon.parse("47°45'N 24°00'S");
-    }
 }
diff --git a/test/unit/org/openstreetmap/josm/data/coor/conversion/ICoordinateFormatTest.java b/test/unit/org/openstreetmap/josm/data/coor/conversion/ICoordinateFormatTest.java
new file mode 100644
index 0000000..a60f009
--- /dev/null
+++ b/test/unit/org/openstreetmap/josm/data/coor/conversion/ICoordinateFormatTest.java
@@ -0,0 +1,47 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.coor.conversion;
+
+import static org.junit.Assert.assertEquals;
+
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.testutils.JOSMTestRules;
+
+/**
+ * Test for {@link ICoordinateFormat} implementations.
+ */
+public class ICoordinateFormatTest {
+    /**
+     * Setup test.
+     */
+    @Rule
+    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
+    public JOSMTestRules test = new JOSMTestRules().projection();
+
+    /**
+     * Tests {@link ICoordinateFormat#latToString(org.openstreetmap.josm.data.coor.ILatLon)}
+     * and {@link ICoordinateFormat#lonToString(org.openstreetmap.josm.data.coor.ILatLon)}
+     * for various implementations.
+     */
+    @Test
+    public void testFormatting() {
+        LatLon c = new LatLon(47.000000, 19.000000);
+        assertEquals("47.0", DecimalDegreesCoordinateFormat.INSTANCE.latToString(c));
+        assertEquals("19.0", DecimalDegreesCoordinateFormat.INSTANCE.lonToString(c));
+        assertEquals("47°00'00.0\"N", DMSCoordinateFormat.INSTANCE.latToString(c));
+        assertEquals("19°00'00.0\"E", DMSCoordinateFormat.INSTANCE.lonToString(c));
+        assertEquals("47°00.000'N", NauticalCoordinateFormat.INSTANCE.latToString(c));
+        assertEquals("19°00.000'E", NauticalCoordinateFormat.INSTANCE.lonToString(c));
+        assertEquals("5942074.0724311", ProjectedCoordinateFormat.INSTANCE.latToString(c));
+        assertEquals("2115070.3250722", ProjectedCoordinateFormat.INSTANCE.lonToString(c));
+        c = new LatLon(-47.000000, -19.000000);
+        assertEquals("47°00'00.0\"S", DMSCoordinateFormat.INSTANCE.latToString(c));
+        assertEquals("19°00'00.0\"W", DMSCoordinateFormat.INSTANCE.lonToString(c));
+        assertEquals("47°00.000'S", NauticalCoordinateFormat.INSTANCE.latToString(c));
+        assertEquals("19°00.000'W", NauticalCoordinateFormat.INSTANCE.lonToString(c));
+    }
+
+}
diff --git a/test/unit/org/openstreetmap/josm/data/coor/conversion/LatLonParserTest.java b/test/unit/org/openstreetmap/josm/data/coor/conversion/LatLonParserTest.java
new file mode 100644
index 0000000..1140ac1
--- /dev/null
+++ b/test/unit/org/openstreetmap/josm/data/coor/conversion/LatLonParserTest.java
@@ -0,0 +1,69 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.coor.conversion;
+
+import static org.junit.Assert.assertEquals;
+
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.testutils.JOSMTestRules;
+
+/**
+ * Unit tests for class {@link LatLonParser}.
+ */
+public class LatLonParserTest {
+
+    /**
+     * Setup test.
+     */
+    @Rule
+    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
+    public JOSMTestRules test = new JOSMTestRules().projection();
+
+    /**
+     * Unit test of {@link LatLonParser#parse} method.
+     */
+    @Test
+    public void testParse() {
+        assertEquals(new LatLon(49.29918, 19.24788), LatLonParser.parse("49.29918° 19.24788°"));
+        assertEquals(new LatLon(49.29918, 19.24788), LatLonParser.parse("N 49.29918 E 19.24788°"));
+        assertEquals(new LatLon(49.29918, 19.24788), LatLonParser.parse("49.29918° 19.24788°"));
+        assertEquals(new LatLon(49.29918, 19.24788), LatLonParser.parse("N 49.29918 E 19.24788"));
+        assertEquals(new LatLon(49.29918, 19.24788), LatLonParser.parse("n 49.29918 e 19.24788"));
+        assertEquals(new LatLon(-19 - 24.788 / 60, -49 - 29.918 / 60), LatLonParser.parse("W 49°29.918' S 19°24.788'"));
+        assertEquals(new LatLon(-19 - 24.788 / 60, -49 - 29.918 / 60), LatLonParser.parse("w 49°29.918' s 19°24.788'"));
+        assertEquals(new LatLon(49 + 29. / 60 + 04. / 3600, 19 + 24. / 60 + 43. / 3600), LatLonParser.parse("N 49°29'04\" E 19°24'43\""));
+        assertEquals(new LatLon(49.29918, 19.24788), LatLonParser.parse("49.29918 N, 19.24788 E"));
+        assertEquals(new LatLon(49.29918, 19.24788), LatLonParser.parse("49.29918 n, 19.24788 e"));
+        assertEquals(new LatLon(49 + 29. / 60 + 21. / 3600, 19 + 24. / 60 + 38. / 3600), LatLonParser.parse("49°29'21\" N 19°24'38\" E"));
+        assertEquals(new LatLon(49 + 29. / 60 + 51. / 3600, 19 + 24. / 60 + 18. / 3600), LatLonParser.parse("49 29 51, 19 24 18"));
+        assertEquals(new LatLon(49 + 29. / 60, 19 + 24. / 60), LatLonParser.parse("49 29, 19 24"));
+        assertEquals(new LatLon(19 + 24. / 60, 49 + 29. / 60), LatLonParser.parse("E 49 29, N 19 24"));
+        assertEquals(new LatLon(49 + 29. / 60, 19 + 24. / 60), LatLonParser.parse("49° 29; 19° 24"));
+        assertEquals(new LatLon(49 + 29. / 60, 19 + 24. / 60), LatLonParser.parse("49° 29; 19° 24"));
+        assertEquals(new LatLon(49 + 29. / 60, -19 - 24. / 60), LatLonParser.parse("N 49° 29, W 19° 24"));
+        assertEquals(new LatLon(-49 - 29.5 / 60, 19 + 24.6 / 60), LatLonParser.parse("49° 29.5 S, 19° 24.6 E"));
+        assertEquals(new LatLon(49 + 29.918 / 60, 19 + 15.88 / 60), LatLonParser.parse("N 49 29.918 E 19 15.88"));
+        assertEquals(new LatLon(49 + 29.4 / 60, 19 + 24.5 / 60), LatLonParser.parse("49 29.4 19 24.5"));
+        assertEquals(new LatLon(-49 - 29.4 / 60, 19 + 24.5 / 60), LatLonParser.parse("-49 29.4 N -19 24.5 W"));
+    }
+
+    /**
+     * Unit test of {@link LatLonParser#parse} method - invalid case 1.
+     */
+    @Test(expected = IllegalArgumentException.class)
+    public void testParseInvalid1() {
+        LatLonParser.parse("48°45'S 23°30'S");
+    }
+
+    /**
+     * Unit test of {@link LatLonParser#parse} method - invalid case 2.
+     */
+    @Test(expected = IllegalArgumentException.class)
+    public void testParseInvalid2() {
+        LatLonParser.parse("47°45'N 24°00'S");
+    }
+
+}
diff --git a/test/unit/org/openstreetmap/josm/data/gpx/GpxDataTest.java b/test/unit/org/openstreetmap/josm/data/gpx/GpxDataTest.java
index 74017ca..855ce8c 100644
--- a/test/unit/org/openstreetmap/josm/data/gpx/GpxDataTest.java
+++ b/test/unit/org/openstreetmap/josm/data/gpx/GpxDataTest.java
@@ -333,12 +333,12 @@ public class GpxDataTest {
         assertEquals(points.get(1), closeToMiddle);
 
         WayPoint close = data.nearestPointOnTrack(new EastNorth(5, 5), 10);
-        assertEquals(10, close.getEastNorth().east(), .01);
-        assertEquals(5, close.getEastNorth().north(), .01);
+        assertEquals(10, close.getEastNorth(Main.getProjection()).east(), .01);
+        assertEquals(5, close.getEastNorth(Main.getProjection()).north(), .01);
 
         close = data.nearestPointOnTrack(new EastNorth(15, 5), 10);
-        assertEquals(10, close.getEastNorth().east(), .01);
-        assertEquals(5, close.getEastNorth().north(), .01);
+        assertEquals(10, close.getEastNorth(Main.getProjection()).east(), .01);
+        assertEquals(5, close.getEastNorth(Main.getProjection()).north(), .01);
 
         assertNull(data.nearestPointOnTrack(new EastNorth(5, 5), 1));
     }
diff --git a/test/unit/org/openstreetmap/josm/data/imagery/ImageryInfoTest.java b/test/unit/org/openstreetmap/josm/data/imagery/ImageryInfoTest.java
index b529e59..0bff804 100644
--- a/test/unit/org/openstreetmap/josm/data/imagery/ImageryInfoTest.java
+++ b/test/unit/org/openstreetmap/josm/data/imagery/ImageryInfoTest.java
@@ -11,7 +11,7 @@ import java.util.Set;
 
 import org.junit.Rule;
 import org.junit.Test;
-import org.openstreetmap.josm.data.Preferences;
+import org.openstreetmap.josm.data.StructUtils;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 import org.openstreetmap.josm.tools.MultiMap;
 
@@ -55,7 +55,7 @@ public class ImageryInfoTest {
     }
 
     /**
-     * Tests the {@linkplain Preferences#serializeStruct(Object, Class) serialization} of {@link ImageryInfo.ImageryPreferenceEntry}
+     * Tests the {@linkplain StructUtils#serializeStruct(Object, Class) serialization} of {@link ImageryInfo.ImageryPreferenceEntry}
      */
     @Test
     public void testSerializeStruct() {
@@ -63,16 +63,16 @@ public class ImageryInfoTest {
         info.noTileHeaders = new MultiMap<>();
         info.noTileHeaders.put("ETag", "foo");
         info.noTileHeaders.put("ETag", "bar");
-        final Map<String, String> map = Preferences.serializeStruct(info, ImageryInfo.ImageryPreferenceEntry.class);
+        final Map<String, String> map = StructUtils.serializeStruct(info, ImageryInfo.ImageryPreferenceEntry.class);
         assertEquals("{noTileHeaders={\"ETag\":[\"foo\",\"bar\"]}}", map.toString());
     }
 
     /**
-     * Tests the {@linkplain Preferences#deserializeStruct(Map, Class)} deserialization} of {@link ImageryInfo.ImageryPreferenceEntry}
+     * Tests the {@linkplain StructUtils#deserializeStruct(Map, Class)} deserialization} of {@link ImageryInfo.ImageryPreferenceEntry}
      */
     @Test
     public void testDeserializeStruct() {
-        final ImageryInfo.ImageryPreferenceEntry info = Preferences.deserializeStruct(
+        final ImageryInfo.ImageryPreferenceEntry info = StructUtils.deserializeStruct(
                 Collections.singletonMap("noTileHeaders", "{\"ETag\":[\"foo\",\"bar\"]}"), ImageryInfo.ImageryPreferenceEntry.class);
         MultiMap<String, String> expect = new MultiMap<>();
         expect.put("ETag", "foo");
@@ -83,11 +83,11 @@ public class ImageryInfoTest {
     }
 
     /**
-     * Tests the {@linkplain Preferences#deserializeStruct(Map, Class)} deserialization} of legacy {@link ImageryInfo.ImageryPreferenceEntry}
+     * Tests the {@linkplain StructUtils#deserializeStruct(Map, Class)} deserialization} of legacy {@link ImageryInfo.ImageryPreferenceEntry}
      */
     @Test
     public void testDeserializeStructTicket12474() {
-        final ImageryInfo.ImageryPreferenceEntry info = Preferences.deserializeStruct(
+        final ImageryInfo.ImageryPreferenceEntry info = StructUtils.deserializeStruct(
                 Collections.singletonMap("noTileHeaders", "{\"ETag\":\"foo-and-bar\"}"), ImageryInfo.ImageryPreferenceEntry.class);
         final Set<String> eTag = info.noTileHeaders.get("ETag");
         assertEquals(eTag, Collections.singleton("foo-and-bar"));
diff --git a/test/unit/org/openstreetmap/josm/data/osm/ChangesetCacheTest.java b/test/unit/org/openstreetmap/josm/data/osm/ChangesetCacheTest.java
index 64c283a..b8abbce 100644
--- a/test/unit/org/openstreetmap/josm/data/osm/ChangesetCacheTest.java
+++ b/test/unit/org/openstreetmap/josm/data/osm/ChangesetCacheTest.java
@@ -9,12 +9,18 @@ import static org.junit.Assert.assertTrue;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
 
 import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
-import org.openstreetmap.josm.TestUtils;
-import org.openstreetmap.josm.gui.JosmUserIdentityManager;
+import org.openstreetmap.josm.data.UserIdentityManager;
+import org.openstreetmap.josm.testutils.JOSMTestRules;
+import org.openstreetmap.josm.tools.Logging;
+
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 
 /**
  * Unit test of {@link ChangesetCache}
@@ -22,11 +28,44 @@ import org.openstreetmap.josm.gui.JosmUserIdentityManager;
 public class ChangesetCacheTest {
 
     /**
-     * Clears cache after each unit test.
+     * Setup test.
+     */
+    @Rule
+    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
+    public JOSMTestRules test = new JOSMTestRules();
+
+    private static final ChangesetCache cache = ChangesetCache.getInstance();
+
+    /**
+     * Clears cache before/after each unit test.
      */
     @After
-    public void after() {
-        ChangesetCache.getInstance().clear();
+    @Before
+    public void clearCache() {
+        cache.listeners.clear();
+        cache.clear();
+    }
+
+    abstract class TestListener implements ChangesetCacheListener {
+
+        protected final CountDownLatch latch = new CountDownLatch(1);
+        protected ChangesetCacheEvent event;
+
+        @Override
+        public void changesetCacheUpdated(ChangesetCacheEvent event) {
+            this.event = event;
+            latch.countDown();
+        }
+
+        protected final void await() {
+            try {
+                latch.await(2, TimeUnit.SECONDS);
+            } catch (InterruptedException e) {
+                Logging.error(e);
+            }
+        }
+
+        abstract void test();
     }
 
     /**
@@ -37,16 +76,8 @@ public class ChangesetCacheTest {
         assertNotNull(ChangesetCache.getInstance());
     }
 
-    @SuppressWarnings("unchecked")
-    private static List<ChangesetCacheListener> getListeners(ChangesetCache cache) throws ReflectiveOperationException {
-        return (List<ChangesetCacheListener>) TestUtils.getPrivateField(cache, "listeners");
-    }
-
     @Test
-    public void testAddAndRemoveListeners() throws ReflectiveOperationException {
-        ChangesetCache cache = ChangesetCache.getInstance();
-        cache.clear();
-
+    public void testAddAndRemoveListeners() {
         // should work
         cache.addChangesetCacheListener(null);
 
@@ -58,19 +89,16 @@ public class ChangesetCacheTest {
         cache.addChangesetCacheListener(listener);
         // adding a second time - should work too
         cache.addChangesetCacheListener(listener);
-        assertEquals(1, getListeners(cache).size()); // ... but only added once
+        assertEquals(1, cache.listeners.size()); // ... but only added once
 
         cache.removeChangesetCacheListener(null);
 
         cache.removeChangesetCacheListener(listener);
-        assertTrue(getListeners(cache).isEmpty());
+        assertTrue(cache.listeners.isEmpty());
     }
 
     @Test
     public void testUpdateGetRemoveCycle() {
-        ChangesetCache cache = ChangesetCache.getInstance();
-        cache.clear();
-
         cache.update(new Changeset(1));
         assertEquals(1, cache.size());
         assertNotNull(cache.get(1));
@@ -81,9 +109,6 @@ public class ChangesetCacheTest {
 
     @Test
     public void testUpdateTwice() {
-        ChangesetCache cache = ChangesetCache.getInstance();
-        cache.clear();
-
         Changeset cs = new Changeset(1);
         cs.setIncomplete(false);
         cs.put("key1", "value1");
@@ -106,11 +131,7 @@ public class ChangesetCacheTest {
     }
 
     @Test
-    public void testContains() throws ReflectiveOperationException {
-        ChangesetCache cache = ChangesetCache.getInstance();
-        getListeners(cache).clear();
-        cache.clear();
-
+    public void testContains() {
         Changeset cs = new Changeset(1);
         cache.update(cs);
 
@@ -124,15 +145,11 @@ public class ChangesetCacheTest {
     }
 
     @Test
-    public void testFireingEventsAddAChangeset() throws ReflectiveOperationException {
-        ChangesetCache cache = ChangesetCache.getInstance();
-        cache.clear();
-        getListeners(cache).clear();
-
-        // should work
-        ChangesetCacheListener listener = new ChangesetCacheListener() {
+    public void testFireingEventsAddAChangeset() {
+        TestListener listener = new TestListener() {
             @Override
-            public void changesetCacheUpdated(ChangesetCacheEvent event) {
+            public void test() {
+                await();
                 assertNotNull(event);
                 assertEquals(1, event.getAddedChangesets().size());
                 assertTrue(event.getRemovedChangesets().isEmpty());
@@ -142,19 +159,29 @@ public class ChangesetCacheTest {
         };
         cache.addChangesetCacheListener(listener);
         cache.update(new Changeset(1));
+        listener.test();
         cache.removeChangesetCacheListener(listener);
     }
 
     @Test
-    public void testFireingEventsUpdateChangeset() throws ReflectiveOperationException {
-        ChangesetCache cache = ChangesetCache.getInstance();
-        cache.clear();
-        getListeners(cache).clear();
+    public void testFireingEventsUpdateChangeset() {
+        // Waiter listener to ensure the second listener does not receive the first event
+        TestListener waiter = new TestListener() {
+            @Override
+            void test() {
+                await();
+            }
+        };
+        cache.addChangesetCacheListener(waiter);
+        Changeset cs = new Changeset(1);
+        cache.update(cs);
+        waiter.test();
+        cache.removeChangesetCacheListener(waiter);
 
-        // should work
-        ChangesetCacheListener listener = new ChangesetCacheListener() {
+        TestListener listener = new TestListener() {
             @Override
-            public void changesetCacheUpdated(ChangesetCacheEvent event) {
+            void test() {
+                await();
                 assertNotNull(event);
                 assertTrue(event.getAddedChangesets().isEmpty());
                 assertTrue(event.getRemovedChangesets().isEmpty());
@@ -162,23 +189,30 @@ public class ChangesetCacheTest {
                 assertEquals(cache, event.getSource());
             }
         };
-        cache.update(new Changeset(1));
-
         cache.addChangesetCacheListener(listener);
-        cache.update(new Changeset(1));
+        cache.update(cs);
+        listener.test();
         cache.removeChangesetCacheListener(listener);
     }
 
     @Test
-    public void testFireingEventsRemoveChangeset() throws ReflectiveOperationException {
-        ChangesetCache cache = ChangesetCache.getInstance();
-        cache.clear();
-        getListeners(cache).clear();
+    public void testFireingEventsRemoveChangeset() {
+        // Waiter listener to ensure the second listener does not receive the first event
+        TestListener waiter = new TestListener() {
+            @Override
+            void test() {
+                await();
+            }
+        };
+        cache.addChangesetCacheListener(waiter);
+        cache.update(new Changeset(1));
+        waiter.test();
+        cache.removeChangesetCacheListener(waiter);
 
-        // should work
-        ChangesetCacheListener listener = new ChangesetCacheListener() {
+        TestListener listener = new TestListener() {
             @Override
-            public void changesetCacheUpdated(ChangesetCacheEvent event) {
+            void test() {
+                await();
                 assertNotNull(event);
                 assertTrue(event.getAddedChangesets().isEmpty());
                 assertEquals(1, event.getRemovedChangesets().size());
@@ -186,10 +220,9 @@ public class ChangesetCacheTest {
                 assertEquals(cache, event.getSource());
             }
         };
-        cache.update(new Changeset(1));
-
         cache.addChangesetCacheListener(listener);
         cache.remove(1);
+        listener.test();
         cache.removeChangesetCacheListener(listener);
     }
 
@@ -198,7 +231,6 @@ public class ChangesetCacheTest {
      */
     @Test
     public void testGetOpenChangesets() {
-        final ChangesetCache cache = ChangesetCache.getInstance();
         // empty cache => empty list
         assertTrue(
                 "Empty cache should produce an empty list.",
@@ -235,7 +267,6 @@ public class ChangesetCacheTest {
      */
     @Test
     public void testGetOpenChangesetsForCurrentUser() {
-        final ChangesetCache cache = ChangesetCache.getInstance();
         // empty cache => empty list
         assertTrue(
                 "Empty cache should produce an empty list.",
@@ -258,10 +289,10 @@ public class ChangesetCacheTest {
 
         assertEquals(3, cache.getChangesets().size());
 
-        JosmUserIdentityManager.getInstance().setAnonymous();
+        UserIdentityManager.getInstance().setAnonymous();
         assertEquals(2, cache.getOpenChangesetsForCurrentUser().size());
 
-        JosmUserIdentityManager.getInstance().setPartiallyIdentified("foo");
+        UserIdentityManager.getInstance().setPartiallyIdentified("foo");
         assertEquals(1, cache.getOpenChangesetsForCurrentUser().size());
     }
 
@@ -270,7 +301,6 @@ public class ChangesetCacheTest {
      */
     @Test
     public void testRemove() {
-        final ChangesetCache cache = ChangesetCache.getInstance();
         Changeset cs1 = new Changeset(1);
         cache.update(cs1);
         assertEquals(1, cache.getChangesets().size());
diff --git a/test/unit/org/openstreetmap/josm/data/osm/ChangesetTest.java b/test/unit/org/openstreetmap/josm/data/osm/ChangesetTest.java
index 7a2ed67..424c474 100644
--- a/test/unit/org/openstreetmap/josm/data/osm/ChangesetTest.java
+++ b/test/unit/org/openstreetmap/josm/data/osm/ChangesetTest.java
@@ -18,7 +18,6 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.coor.LatLon;
-import org.openstreetmap.josm.data.osm.visitor.Visitor;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 import org.openstreetmap.josm.tools.Logging;
 
@@ -261,39 +260,4 @@ public class ChangesetTest {
         cs.removeAll();
         assertTrue(cs.keySet().isEmpty());
     }
-
-    private static class CsVisitor implements Visitor {
-
-        boolean visited;
-
-        @Override
-        public void visit(Node n) {
-            // Do nothing
-        }
-
-        @Override
-        public void visit(Way w) {
-            // Do nothing
-        }
-
-        @Override
-        public void visit(Relation r) {
-            // Do nothing
-        }
-
-        @Override
-        public void visit(Changeset cs) {
-            visited = true;
-        }
-    }
-
-    /**
-     * Unit test of method {@link Changeset#visit}.
-     */
-    @Test
-    public void testVisit() {
-        CsVisitor v = new CsVisitor();
-        new Changeset().visit(v);
-        assertTrue(v.visited);
-    }
 }
diff --git a/test/unit/org/openstreetmap/josm/data/osm/DataSetMergerTest.java b/test/unit/org/openstreetmap/josm/data/osm/DataSetMergerTest.java
index b9e01a7..8f58107 100644
--- a/test/unit/org/openstreetmap/josm/data/osm/DataSetMergerTest.java
+++ b/test/unit/org/openstreetmap/josm/data/osm/DataSetMergerTest.java
@@ -44,7 +44,6 @@ public class DataSetMergerTest {
      */
     @Before
     public void setUp() {
-        User.clearUserMap();
         my = new DataSet();
         my.setVersion("0.6");
         their = new DataSet();
diff --git a/test/unit/org/openstreetmap/josm/data/osm/UserTest.java b/test/unit/org/openstreetmap/josm/data/osm/UserTest.java
index 5181ff0..931626d 100644
--- a/test/unit/org/openstreetmap/josm/data/osm/UserTest.java
+++ b/test/unit/org/openstreetmap/josm/data/osm/UserTest.java
@@ -28,19 +28,15 @@ public class UserTest {
      */
     @Test
     public void testCreateOsmUser() {
-        try {
-            User user1 = User.createOsmUser(1, "name1");
-            assertEquals(1, user1.getId());
-            assertEquals("name1", user1.getName());
-            User user2 = User.createOsmUser(1, "name2");
-            assertSame(user1, user2);
-            assertEquals(1, user2.getId());
-            assertEquals("name2", user2.getName());
-            assertEquals(2, user2.getNames().size());
-            assertTrue(user2.getNames().contains("name1"));
-            assertTrue(user2.getNames().contains("name2"));
-        } finally {
-            User.clearUserMap();
-        }
+        User user1 = User.createOsmUser(1, "name1");
+        assertEquals(1, user1.getId());
+        assertEquals("name1", user1.getName());
+        User user2 = User.createOsmUser(1, "name2");
+        assertSame(user1, user2);
+        assertEquals(1, user2.getId());
+        assertEquals("name2", user2.getName());
+        assertEquals(2, user2.getNames().size());
+        assertTrue(user2.getNames().contains("name1"));
+        assertTrue(user2.getNames().contains("name2"));
     }
 }
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 79ff4f7..3a055df 100644
--- a/test/unit/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitorTest.java
+++ b/test/unit/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitorTest.java
@@ -11,7 +11,6 @@ import java.util.Collection;
 import org.junit.Rule;
 import org.junit.Test;
 import org.openstreetmap.josm.data.coor.LatLon;
-import org.openstreetmap.josm.data.osm.Changeset;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -410,12 +409,4 @@ public class MergeSourceBuildingVisitorTest {
         assertEquals(1, r2.getMembersCount());
         assertTrue(r2.getMembers().contains(new RelationMember("relation-1", r1)));
     }
-
-    /**
-     * Unit test of {@code AbstractVisitor#visit(org.openstreetmap.josm.data.osm.Changeset)}.
-     */
-    @Test
-    public void testVisitChangeset() {
-        new MergeSourceBuildingVisitor(new DataSet()).visit(new Changeset());
-    }
 }
diff --git a/test/unit/org/openstreetmap/josm/data/preferences/ColorPropertyTest.java b/test/unit/org/openstreetmap/josm/data/preferences/ColorPropertyTest.java
index 0f1b319..6aa0e81 100644
--- a/test/unit/org/openstreetmap/josm/data/preferences/ColorPropertyTest.java
+++ b/test/unit/org/openstreetmap/josm/data/preferences/ColorPropertyTest.java
@@ -8,7 +8,7 @@ import java.awt.Color;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
-import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -41,7 +41,7 @@ public class ColorPropertyTest {
     public void testGet() {
         assertEquals(Color.RED, base.get());
 
-        Main.pref.put("color.test", "#00ff00");
+        Config.getPref().put("color.test", "#00ff00");
         assertEquals(new Color(0xff00ff00), base.get());
     }
 
@@ -54,7 +54,7 @@ public class ColorPropertyTest {
 
         base.put(new Color(0xff00ff00));
         assertEquals(new Color(0xff00ff00), base.get());
-        assertEquals("#00ff00", Main.pref.get("color.test").toLowerCase());
+        assertEquals("#00ff00", Config.getPref().get("color.test").toLowerCase());
 
         base.put(null);
         assertEquals(Color.RED, base.get());
diff --git a/test/unit/org/openstreetmap/josm/data/preferences/PreferencesWriterTest.java b/test/unit/org/openstreetmap/josm/data/preferences/PreferencesWriterTest.java
index 52730fc..46fe561 100644
--- a/test/unit/org/openstreetmap/josm/data/preferences/PreferencesWriterTest.java
+++ b/test/unit/org/openstreetmap/josm/data/preferences/PreferencesWriterTest.java
@@ -14,6 +14,12 @@ import java.util.TreeMap;
 
 import org.junit.Test;
 import org.openstreetmap.josm.data.Version;
+import org.openstreetmap.josm.spi.preferences.Setting;
+import org.openstreetmap.josm.spi.preferences.ListListSetting;
+import org.openstreetmap.josm.spi.preferences.ListSetting;
+import org.openstreetmap.josm.spi.preferences.AbstractSetting;
+import org.openstreetmap.josm.spi.preferences.StringSetting;
+import org.openstreetmap.josm.spi.preferences.MapListSetting;
 
 /**
  * Unit tests for class {@link PreferencesWriter}.
diff --git a/test/unit/org/openstreetmap/josm/data/preferences/StrokePropertyTest.java b/test/unit/org/openstreetmap/josm/data/preferences/StrokePropertyTest.java
index 55b4754..5f6c02a 100644
--- a/test/unit/org/openstreetmap/josm/data/preferences/StrokePropertyTest.java
+++ b/test/unit/org/openstreetmap/josm/data/preferences/StrokePropertyTest.java
@@ -8,7 +8,7 @@ import java.awt.BasicStroke;
 
 import org.junit.Rule;
 import org.junit.Test;
-import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -32,38 +32,38 @@ public class StrokePropertyTest {
     public void testGetValue() {
         StrokeProperty property = new StrokeProperty("x", "1");
 
-        Main.pref.put("x", "11");
+        Config.getPref().put("x", "11");
         BasicStroke bs = property.get();
         assertWide(bs);
         assertEquals(11, bs.getLineWidth(), 1e-10);
         assertEquals(null, bs.getDashArray());
 
-        Main.pref.put("x", ".5");
+        Config.getPref().put("x", ".5");
         bs = property.get();
         assertThin(bs);
         assertEquals(.5, bs.getLineWidth(), 1e-10);
         assertEquals(null, bs.getDashArray());
 
-        Main.pref.put("x", "2 1");
+        Config.getPref().put("x", "2 1");
         bs = property.get();
         assertWide(bs);
         assertEquals(2, bs.getLineWidth(), 1e-10);
         assertArrayEquals(new float[] {1}, bs.getDashArray(), 1e-10f);
 
-        Main.pref.put("x", "2 0.1 1 10");
+        Config.getPref().put("x", "2 0.1 1 10");
         bs = property.get();
         assertWide(bs);
         assertEquals(2, bs.getLineWidth(), 1e-10);
         assertArrayEquals(new float[] {0.1f, 1, 10}, bs.getDashArray(), 1e-10f);
 
-        Main.pref.put("x", "x");
+        Config.getPref().put("x", "x");
         bs = property.get();
         assertThin(bs);
         assertEquals(1, bs.getLineWidth(), 1e-10);
         assertEquals(null, bs.getDashArray());
 
         // ignore dashes
-        Main.pref.put("x", "11 0 0 0.0001");
+        Config.getPref().put("x", "11 0 0 0.0001");
         bs = property.get();
         assertWide(bs);
         assertEquals(11, bs.getLineWidth(), 1e-10);
diff --git a/test/unit/org/openstreetmap/josm/data/projection/ProjectionRefTest.java b/test/unit/org/openstreetmap/josm/data/projection/ProjectionRefTest.java
index fb5e161..377de70 100644
--- a/test/unit/org/openstreetmap/josm/data/projection/ProjectionRefTest.java
+++ b/test/unit/org/openstreetmap/josm/data/projection/ProjectionRefTest.java
@@ -83,7 +83,7 @@ public class ProjectionRefTest {
      */
     @Rule
     @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
-    public JOSMTestRules test = new JOSMTestRules().platform().timeout(30_000);
+    public JOSMTestRules test = new JOSMTestRules().platform().projectionNadGrids().timeout(30_000);
 
     /**
      * Program entry point.
diff --git a/test/unit/org/openstreetmap/josm/data/projection/SwissGridTest.java b/test/unit/org/openstreetmap/josm/data/projection/SwissGridTest.java
index c60b7ed..6ffd939 100644
--- a/test/unit/org/openstreetmap/josm/data/projection/SwissGridTest.java
+++ b/test/unit/org/openstreetmap/josm/data/projection/SwissGridTest.java
@@ -23,7 +23,7 @@ public class SwissGridTest {
      */
     @Rule
     @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
-    public JOSMTestRules test = new JOSMTestRules().platform();
+    public JOSMTestRules test = new JOSMTestRules().projectionNadGrids().platform();
 
     /**
      * Setup test.
diff --git a/test/unit/org/openstreetmap/josm/data/tagging/ac/AutoCompletionPriorityTest.java b/test/unit/org/openstreetmap/josm/data/tagging/ac/AutoCompletionPriorityTest.java
new file mode 100644
index 0000000..4ebc815
--- /dev/null
+++ b/test/unit/org/openstreetmap/josm/data/tagging/ac/AutoCompletionPriorityTest.java
@@ -0,0 +1,127 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.tagging.ac;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.openstreetmap.josm.testutils.JOSMTestRules;
+
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+import nl.jqno.equalsverifier.EqualsVerifier;
+
+/**
+ * Unit tests of {@link AutoCompletionPriority}.
+ */
+public class AutoCompletionPriorityTest {
+
+    /**
+     * Setup test.
+     */
+    @Rule
+    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
+    public JOSMTestRules test = new JOSMTestRules();
+
+    /**
+     * Test getters.
+     */
+    @Test
+    public void testGetters() {
+        assertTrue(AutoCompletionPriority.IS_IN_STANDARD_AND_IN_DATASET.isInStandard());
+        assertTrue(AutoCompletionPriority.IS_IN_STANDARD_AND_IN_DATASET.isInDataSet());
+        assertFalse(AutoCompletionPriority.IS_IN_STANDARD_AND_IN_DATASET.isSelected());
+        assertNull(AutoCompletionPriority.IS_IN_STANDARD_AND_IN_DATASET.getUserInput());
+
+        assertFalse(AutoCompletionPriority.IS_IN_DATASET.isInStandard());
+        assertTrue(AutoCompletionPriority.IS_IN_DATASET.isInDataSet());
+        assertFalse(AutoCompletionPriority.IS_IN_DATASET.isSelected());
+        assertNull(AutoCompletionPriority.IS_IN_DATASET.getUserInput());
+
+        assertTrue(AutoCompletionPriority.IS_IN_STANDARD.isInStandard());
+        assertFalse(AutoCompletionPriority.IS_IN_STANDARD.isInDataSet());
+        assertFalse(AutoCompletionPriority.IS_IN_STANDARD.isSelected());
+        assertNull(AutoCompletionPriority.IS_IN_STANDARD.getUserInput());
+
+        assertFalse(AutoCompletionPriority.IS_IN_SELECTION.isInStandard());
+        assertFalse(AutoCompletionPriority.IS_IN_SELECTION.isInDataSet());
+        assertTrue(AutoCompletionPriority.IS_IN_SELECTION.isSelected());
+        assertNull(AutoCompletionPriority.IS_IN_SELECTION.getUserInput());
+
+        assertFalse(AutoCompletionPriority.UNKNOWN.isInStandard());
+        assertFalse(AutoCompletionPriority.UNKNOWN.isInDataSet());
+        assertFalse(AutoCompletionPriority.UNKNOWN.isSelected());
+        assertNull(AutoCompletionPriority.UNKNOWN.getUserInput());
+
+        assertEquals(Integer.valueOf(5), new AutoCompletionPriority(false, false, false, 5).getUserInput());
+    }
+
+    /**
+     * Test ordering of priorities.
+     */
+    @Test
+    public void testOrdering() {
+        SortedSet<AutoCompletionPriority> set = new TreeSet<>();
+        set.add(AutoCompletionPriority.IS_IN_STANDARD_AND_IN_DATASET);
+        set.add(AutoCompletionPriority.IS_IN_DATASET);
+        set.add(AutoCompletionPriority.IS_IN_STANDARD);
+        set.add(AutoCompletionPriority.IS_IN_SELECTION);
+        set.add(AutoCompletionPriority.UNKNOWN);
+        set.add(new AutoCompletionPriority(false, false, false, 5));
+        set.add(new AutoCompletionPriority(false, false, false, 0));
+        set.add(new AutoCompletionPriority(false, false, false, 1));
+
+        assertEquals(Arrays.asList(
+                AutoCompletionPriority.UNKNOWN,
+                AutoCompletionPriority.IS_IN_STANDARD,
+                AutoCompletionPriority.IS_IN_DATASET,
+                AutoCompletionPriority.IS_IN_STANDARD_AND_IN_DATASET,
+                AutoCompletionPriority.IS_IN_SELECTION,
+                new AutoCompletionPriority(false, false, false, 5),
+                new AutoCompletionPriority(false, false, false, 1),
+                new AutoCompletionPriority(false, false, false, 0)
+                ), new ArrayList<>(set));
+    }
+
+    /**
+     * Unit test of methods {@link AutoCompletionPriority#equals} and {@link AutoCompletionPriority#hashCode}.
+     */
+    @Test
+    public void testEqualsContract() {
+        EqualsVerifier.forClass(AutoCompletionPriority.class).usingGetClass()
+            .verify();
+    }
+
+    /**
+     * Unit test of method {@link AutoCompletionPriority#toString()}.
+     */
+    @Test
+    public void testToString() {
+        assertEquals("<Priority; userInput: no, inDataSet: true, inStandard: false, selected: false>",
+                AutoCompletionPriority.IS_IN_DATASET.toString());
+        assertEquals("<Priority; userInput: 5, inDataSet: false, inStandard: false, selected: false>",
+                new AutoCompletionPriority(false, false, false, 5).toString());
+    }
+
+    /**
+     * Unit test of method {@link AutoCompletionPriority#mergeWith(AutoCompletionPriority)}.
+     */
+    @Test
+    public void testMergeWith() {
+        assertEquals(AutoCompletionPriority.IS_IN_STANDARD_AND_IN_DATASET,
+                AutoCompletionPriority.IS_IN_DATASET.mergeWith(AutoCompletionPriority.IS_IN_STANDARD));
+        assertEquals(AutoCompletionPriority.IS_IN_STANDARD_AND_IN_DATASET,
+                AutoCompletionPriority.IS_IN_STANDARD.mergeWith(AutoCompletionPriority.IS_IN_DATASET));
+        assertEquals(AutoCompletionPriority.IS_IN_SELECTION,
+                AutoCompletionPriority.UNKNOWN.mergeWith(AutoCompletionPriority.IS_IN_SELECTION));
+        assertEquals(new AutoCompletionPriority(false, false, false, 0),
+                new AutoCompletionPriority(false, false, false, 5).mergeWith(new AutoCompletionPriority(false, false, false, 0)));
+    }
+}
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 242a05a..4bbe763 100644
--- a/test/unit/org/openstreetmap/josm/data/validation/tests/MapCSSTagCheckerTest.java
+++ b/test/unit/org/openstreetmap/josm/data/validation/tests/MapCSSTagCheckerTest.java
@@ -24,7 +24,7 @@ import org.openstreetmap.josm.command.ChangePropertyKeyCommand;
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.PseudoCommand;
 import org.openstreetmap.josm.command.SequenceCommand;
-import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.OsmUtils;
 import org.openstreetmap.josm.data.validation.Severity;
@@ -81,16 +81,15 @@ public class MapCSSTagCheckerTest {
         assertEquals("fixRemove: {0.key}", check.fixCommands.get(0).toString());
         assertEquals("fixAdd: natural=wetland", check.fixCommands.get(1).toString());
         assertEquals("fixAdd: wetland=marsh", check.fixCommands.get(2).toString());
-        final Node n1 = new Node();
-        n1.put("natural", "marsh");
+        final OsmPrimitive n1 = OsmUtils.createPrimitive("node natural=marsh");
+        final OsmPrimitive n2 = OsmUtils.createPrimitive("node natural=wood");
+        new DataSet(n1, n2);
         assertTrue(check.test(n1));
         assertEquals("deprecated", check.getErrorForPrimitive(n1).getMessage());
         assertEquals("natural=marsh is deprecated", check.getErrorForPrimitive(n1).getDescription());
         assertEquals(Severity.WARNING, check.getErrorForPrimitive(n1).getSeverity());
         assertEquals("Sequence: Fix of natural=marsh is deprecated", check.fixPrimitive(n1).getDescriptionText());
         assertEquals("{natural=}", ((ChangePropertyCommand) check.fixPrimitive(n1).getChildren().iterator().next()).getTags().toString());
-        final Node n2 = new Node();
-        n2.put("natural", "wood");
         assertFalse(check.test(n2));
         assertEquals("The key is natural and the value is marsh",
                 TagCheck.insertArguments(check.rule.selectors.get(0), "The key is {0.key} and the value is {0.value}", null));
@@ -108,6 +107,7 @@ public class MapCSSTagCheckerTest {
                 "fixChangeKey: \"highway => construction\";\n" +
                 "fixAdd: \"highway=construction\";\n" +
                 "}")).parseChecks.get(0);
+        new DataSet(p);
         final Command command = check.fixPrimitive(p);
         assertTrue(command instanceof SequenceCommand);
         final Iterator<PseudoCommand> it = command.getChildren().iterator();
diff --git a/test/unit/org/openstreetmap/josm/gui/MainApplicationTest.java b/test/unit/org/openstreetmap/josm/gui/MainApplicationTest.java
index 897c0ce..b71ee25 100644
--- a/test/unit/org/openstreetmap/josm/gui/MainApplicationTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/MainApplicationTest.java
@@ -40,6 +40,7 @@ import org.openstreetmap.josm.plugins.PluginHandlerTestIT;
 import org.openstreetmap.josm.plugins.PluginInformation;
 import org.openstreetmap.josm.plugins.PluginListParseException;
 import org.openstreetmap.josm.plugins.PluginListParser;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Shortcut;
@@ -56,7 +57,7 @@ public class MainApplicationTest {
      */
     @Rule
     @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
-    public JOSMTestRules test = new JOSMTestRules().main().https().devAPI().timeout(20000);
+    public JOSMTestRules test = new JOSMTestRules().main().projection().https().devAPI().timeout(20000);
 
     /**
      * Make sure {@link MainApplication#contentPanePrivate} is initialized.
@@ -204,7 +205,7 @@ public class MainApplicationTest {
     @Test
     public void testSetupUIManager() {
         MainApplication.setupUIManager();
-        assertEquals(Main.pref.get("laf", Main.platform.getDefaultStyle()), UIManager.getLookAndFeel().getClass().getCanonicalName());
+        assertEquals(Config.getPref().get("laf", Main.platform.getDefaultStyle()), UIManager.getLookAndFeel().getClass().getCanonicalName());
     }
 
     private static PluginInformation newPluginInformation(String plugin) throws PluginListParseException {
@@ -251,18 +252,18 @@ public class MainApplicationTest {
     @Test
     public void testPostConstructorProcessCmdLineBounds() {
         doTestPostConstructorProcessCmdLine(
-                "0.01,0.01,0.05,0.05",
+                "-47.20,-126.75,-47.10,-126.65",
                 "51.35,-0.4,51.60,0.2", true);
     }
 
     /**
      * Unit test of {@link MainApplication#postConstructorProcessCmdLine} - nominal case with http/https URLs.
-     * This test assumes the DEV API contains nodes around 0,0 and GPX tracks around London
+     * This test assumes the DEV API contains nodes around -47.15, -126.7 (R'lyeh) and GPX tracks around London
      */
     @Test
     public void testPostConstructorProcessCmdLineHttpUrl() {
         doTestPostConstructorProcessCmdLine(
-                "http://api06.dev.openstreetmap.org/api/0.6/map?bbox=0.01,0.01,0.05,0.05",
+                "http://api06.dev.openstreetmap.org/api/0.6/map?bbox=-126.75,-47.20,-126.65,-47.10",
                 "https://master.apis.dev.openstreetmap.org/api/0.6/trackpoints?bbox=-0.4,51.35,0.2,51.6&page=0", true);
     }
 
diff --git a/test/unit/org/openstreetmap/josm/tools/bugreport/BugReportSettingsPanelTest.java b/test/unit/org/openstreetmap/josm/gui/bugreport/BugReportSettingsPanelTest.java
similarity index 86%
rename from test/unit/org/openstreetmap/josm/tools/bugreport/BugReportSettingsPanelTest.java
rename to test/unit/org/openstreetmap/josm/gui/bugreport/BugReportSettingsPanelTest.java
index 8d88ee8..d94027d 100644
--- a/test/unit/org/openstreetmap/josm/tools/bugreport/BugReportSettingsPanelTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/bugreport/BugReportSettingsPanelTest.java
@@ -1,12 +1,12 @@
 // License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.tools.bugreport;
+package org.openstreetmap.josm.gui.bugreport;
 
 import static org.junit.Assert.assertNotNull;
 
 import org.junit.Rule;
 import org.junit.Test;
-import org.openstreetmap.josm.gui.bugreport.BugReportSettingsPanel;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
+import org.openstreetmap.josm.tools.bugreport.BugReport;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 
diff --git a/test/unit/org/openstreetmap/josm/tools/bugreport/DebugTextDisplayTest.java b/test/unit/org/openstreetmap/josm/gui/bugreport/DebugTextDisplayTest.java
similarity index 90%
rename from test/unit/org/openstreetmap/josm/tools/bugreport/DebugTextDisplayTest.java
rename to test/unit/org/openstreetmap/josm/gui/bugreport/DebugTextDisplayTest.java
index 8fd3529..3abe069 100644
--- a/test/unit/org/openstreetmap/josm/tools/bugreport/DebugTextDisplayTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/bugreport/DebugTextDisplayTest.java
@@ -1,11 +1,10 @@
 // License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.tools.bugreport;
+package org.openstreetmap.josm.gui.bugreport;
 
 import static org.junit.Assert.assertEquals;
 
 import org.junit.Rule;
 import org.junit.Test;
-import org.openstreetmap.josm.gui.bugreport.DebugTextDisplay;
 import org.openstreetmap.josm.gui.datatransfer.ClipboardUtils;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
diff --git a/test/unit/org/openstreetmap/josm/gui/conflict/pair/ConflictResolverTest.java b/test/unit/org/openstreetmap/josm/gui/conflict/pair/ConflictResolverTest.java
index 595bc07..592f596 100644
--- a/test/unit/org/openstreetmap/josm/gui/conflict/pair/ConflictResolverTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/conflict/pair/ConflictResolverTest.java
@@ -4,11 +4,14 @@ package org.openstreetmap.josm.gui.conflict.pair;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 
+import java.util.NoSuchElementException;
+
 import org.junit.Rule;
 import org.junit.Test;
 import org.openstreetmap.josm.command.SequenceCommand;
 import org.openstreetmap.josm.data.conflict.Conflict;
 import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.Way;
@@ -31,7 +34,7 @@ public class ConflictResolverTest {
     /**
      * Unit test of {@link ConflictResolver#buildResolveCommand} - empty case.
      */
-    @Test
+    @Test(expected = NoSuchElementException.class)
     public void testBuildResolveCommandEmpty() {
         assertNotNull(new ConflictResolver().buildResolveCommand());
     }
@@ -46,6 +49,7 @@ public class ConflictResolverTest {
         n1.put("source", "my");
         Node n2 = new Node(LatLon.NORTH_POLE);
         n2.put("source", "theirs");
+        new DataSet(n1, n2);
         resolver.populate(new Conflict<>(n1, n2));
         resolver.decideRemaining(MergeDecisionType.KEEP_MINE);
         assertFalse(((SequenceCommand) resolver.buildResolveCommand()).getChildren().isEmpty());
@@ -61,6 +65,7 @@ public class ConflictResolverTest {
         w1.put("source", "my");
         Way w2 = new Way();
         w2.put("source", "theirs");
+        new DataSet(w1, w2);
         resolver.populate(new Conflict<>(w1, w2));
         resolver.decideRemaining(MergeDecisionType.KEEP_MINE);
         assertFalse(((SequenceCommand) resolver.buildResolveCommand()).getChildren().isEmpty());
@@ -76,6 +81,7 @@ public class ConflictResolverTest {
         r1.put("source", "my");
         Relation r2 = new Relation();
         r2.put("source", "theirs");
+        new DataSet(r1, r2);
         resolver.populate(new Conflict<>(r1, r2));
         resolver.decideRemaining(MergeDecisionType.KEEP_MINE);
         assertFalse(((SequenceCommand) resolver.buildResolveCommand()).getChildren().isEmpty());
diff --git a/test/unit/org/openstreetmap/josm/gui/datatransfer/OsmTransferHandlerTest.java b/test/unit/org/openstreetmap/josm/gui/datatransfer/OsmTransferHandlerTest.java
index eae677e..86d01ee 100644
--- a/test/unit/org/openstreetmap/josm/gui/datatransfer/OsmTransferHandlerTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/datatransfer/OsmTransferHandlerTest.java
@@ -63,6 +63,7 @@ public class OsmTransferHandlerTest {
     @Test
     public void testPasteTags() {
         Node n = new Node(LatLon.ZERO);
+        new DataSet(n);
 
         ClipboardUtils.copyString("test=ok");
         transferHandler.pasteTags(Collections.singleton(n));
diff --git a/test/unit/org/openstreetmap/josm/gui/dialogs/CommandStackDialogTest.java b/test/unit/org/openstreetmap/josm/gui/dialogs/CommandStackDialogTest.java
index 8e73207..7a10fe2 100644
--- a/test/unit/org/openstreetmap/josm/gui/dialogs/CommandStackDialogTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/dialogs/CommandStackDialogTest.java
@@ -45,11 +45,12 @@ public class CommandStackDialogTest {
      */
     @Test
     public void testCommandStackDialogNotEmpty() {
-        OsmDataLayer layer = new OsmDataLayer(new DataSet(), "", null);
+        DataSet ds = new DataSet();
+        OsmDataLayer layer = new OsmDataLayer(ds, "", null);
         MainApplication.getLayerManager().addLayer(layer);
         try {
-            Command cmd1 = TestUtils.newCommand();
-            Command cmd2 = TestUtils.newCommand();
+            Command cmd1 = TestUtils.newCommand(ds);
+            Command cmd2 = TestUtils.newCommand(ds);
             MainApplication.undoRedo.add(cmd1);
             MainApplication.undoRedo.add(cmd2);
             MainApplication.undoRedo.undo(1);
diff --git a/test/unit/org/openstreetmap/josm/gui/dialogs/properties/RecentTagCollectionTest.java b/test/unit/org/openstreetmap/josm/gui/dialogs/properties/RecentTagCollectionTest.java
index 72749f8..b470c29 100644
--- a/test/unit/org/openstreetmap/josm/gui/dialogs/properties/RecentTagCollectionTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/dialogs/properties/RecentTagCollectionTest.java
@@ -13,7 +13,7 @@ import org.junit.Test;
 import org.openstreetmap.josm.data.osm.Tag;
 import org.openstreetmap.josm.data.osm.search.SearchParseError;
 import org.openstreetmap.josm.data.osm.search.SearchSetting;
-import org.openstreetmap.josm.data.preferences.CollectionProperty;
+import org.openstreetmap.josm.data.preferences.ListProperty;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -52,7 +52,7 @@ public class RecentTagCollectionTest {
         recentTags.add(baz);
         assertEquals(Arrays.asList(foo, baz), recentTags.toList());
 
-        final CollectionProperty pref = new CollectionProperty("properties.recent-tags", Collections.<String>emptyList());
+        final ListProperty pref = new ListProperty("properties.recent-tags", Collections.<String>emptyList());
         recentTags.saveToPreference(pref);
         assertEquals(Arrays.asList("name", "foo", "name", "baz"), pref.get());
         pref.put(Arrays.asList("key=", "=value"));
diff --git a/test/unit/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelperTest.java b/test/unit/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelperTest.java
index f82a88a..e2a8ee2 100644
--- a/test/unit/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelperTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelperTest.java
@@ -16,7 +16,7 @@ import javax.swing.table.DefaultTableModel;
 
 import org.junit.Rule;
 import org.junit.Test;
-import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionListItem;
+import org.openstreetmap.josm.data.tagging.ac.AutoCompletionItem;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -45,16 +45,16 @@ public class TagEditHelperTest {
      */
     @Test
     public void testAcItemComparator() {
-        List<AutoCompletionListItem> list = new ArrayList<>();
-        list.add(new AutoCompletionListItem("Bing Sat"));
-        list.add(new AutoCompletionListItem("survey"));
-        list.add(new AutoCompletionListItem("Bing"));
-        list.add(new AutoCompletionListItem("digitalglobe"));
-        list.add(new AutoCompletionListItem("bing"));
-        list.add(new AutoCompletionListItem("DigitalGlobe"));
+        List<AutoCompletionItem> list = new ArrayList<>();
+        list.add(new AutoCompletionItem("Bing Sat"));
+        list.add(new AutoCompletionItem("survey"));
+        list.add(new AutoCompletionItem("Bing"));
+        list.add(new AutoCompletionItem("digitalglobe"));
+        list.add(new AutoCompletionItem("bing"));
+        list.add(new AutoCompletionItem("DigitalGlobe"));
         list.sort(TagEditHelper.DEFAULT_AC_ITEM_COMPARATOR);
         assertEquals(Arrays.asList("Bing", "bing", "Bing Sat", "digitalglobe", "DigitalGlobe", "survey"),
-                list.stream().map(AutoCompletionListItem::getValue).collect(Collectors.toList()));
+                list.stream().map(AutoCompletionItem::getValue).collect(Collectors.toList()));
     }
 
     /**
diff --git a/test/unit/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditorTest.java b/test/unit/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditorTest.java
index a260f71..202a95b 100644
--- a/test/unit/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditorTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditorTest.java
@@ -89,12 +89,14 @@ public class GenericRelationEditorTest {
      */
     @Test
     public void testAddPrimitivesToRelation() {
-        assertNull(GenericRelationEditor.addPrimitivesToRelation(new Relation(1), Collections.<OsmPrimitive>emptyList()));
-        assertNull(GenericRelationEditor.addPrimitivesToRelation(new Relation(1), Collections.singleton(new Relation(1))));
-
-        assertNotNull(GenericRelationEditor.addPrimitivesToRelation(new Relation(1), Collections.singleton(new Node(1))));
-        assertNotNull(GenericRelationEditor.addPrimitivesToRelation(new Relation(1), Collections.singleton(new Way(1))));
-        assertNotNull(GenericRelationEditor.addPrimitivesToRelation(new Relation(1), Collections.singleton(new Relation(2))));
+        Relation r = new Relation(1);
+        new DataSet(r);
+        assertNull(GenericRelationEditor.addPrimitivesToRelation(r, Collections.<OsmPrimitive>emptyList()));
+        assertNull(GenericRelationEditor.addPrimitivesToRelation(r, Collections.singleton(new Relation(1))));
+
+        assertNotNull(GenericRelationEditor.addPrimitivesToRelation(r, Collections.singleton(new Node(1))));
+        assertNotNull(GenericRelationEditor.addPrimitivesToRelation(r, Collections.singleton(new Way(1))));
+        assertNotNull(GenericRelationEditor.addPrimitivesToRelation(r, Collections.singleton(new Relation(2))));
     }
 
     /**
diff --git a/test/unit/org/openstreetmap/josm/gui/io/BasicUploadSettingsPanelTest.java b/test/unit/org/openstreetmap/josm/gui/io/BasicUploadSettingsPanelTest.java
index 252a067..62251af 100644
--- a/test/unit/org/openstreetmap/josm/gui/io/BasicUploadSettingsPanelTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/io/BasicUploadSettingsPanelTest.java
@@ -26,6 +26,6 @@ public class BasicUploadSettingsPanelTest {
      */
     @Test
     public void testBasicUploadSettingsPanel() {
-        assertNotNull(new BasicUploadSettingsPanel(new ChangesetCommentModel(), new ChangesetCommentModel()));
+        assertNotNull(new BasicUploadSettingsPanel(new ChangesetCommentModel(), new ChangesetCommentModel(), new ChangesetReviewModel()));
     }
 }
diff --git a/test/unit/org/openstreetmap/josm/gui/io/CustomConfiguratorTest.java b/test/unit/org/openstreetmap/josm/gui/io/CustomConfiguratorTest.java
index 2ad8735..8081128 100644
--- a/test/unit/org/openstreetmap/josm/gui/io/CustomConfiguratorTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/io/CustomConfiguratorTest.java
@@ -12,18 +12,16 @@ import java.nio.file.Files;
 import java.util.Arrays;
 import java.util.Collections;
 
-import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.data.Preferences;
 import org.openstreetmap.josm.data.PreferencesUtils;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 import org.openstreetmap.josm.tools.Utils;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
-import net.trajano.commons.testing.UtilityClassTestUtil;
 
 /**
  * Unit tests for class {@link CustomConfigurator}.
@@ -38,28 +36,6 @@ public class CustomConfiguratorTest {
     public JOSMTestRules test = new JOSMTestRules().preferences();
 
     /**
-     * Setup test.
-     */
-    @Before
-    public void setUp() {
-        CustomConfigurator.resetLog();
-    }
-
-    /**
-     * Test method for {@link CustomConfigurator#log}.
-     */
-    @Test
-    public void testLog() {
-        assertEquals("", CustomConfigurator.getLog());
-        CustomConfigurator.log("test");
-        assertEquals("test\n", CustomConfigurator.getLog());
-        CustomConfigurator.log("%d\n", 100);
-        assertEquals("test\n100\n", CustomConfigurator.getLog());
-        CustomConfigurator.log("test");
-        assertEquals("test\n100\ntest\n", CustomConfigurator.getLog());
-    }
-
-    /**
      * Test method for {@link CustomConfigurator#exportPreferencesKeysToFile}.
      * @throws IOException if any I/O error occurs
      */
@@ -67,7 +43,7 @@ public class CustomConfiguratorTest {
     public void testExportPreferencesKeysToFile() throws IOException {
         File tmp = File.createTempFile("josm.testExportPreferencesKeysToFile.lorem_ipsum", ".xml");
 
-        Main.pref.putCollection("lorem_ipsum", Arrays.asList(
+        Config.getPref().putList("lorem_ipsum", Arrays.asList(
                 "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
                 "Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor.",
                 "Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi.",
@@ -80,15 +56,15 @@ public class CustomConfiguratorTest {
         CustomConfigurator.exportPreferencesKeysToFile(tmp.getAbsolutePath(), false, "lorem_ipsum");
         String xml = Utils.join("\n", Files.readAllLines(tmp.toPath(), StandardCharsets.UTF_8));
         assertTrue(xml.contains("<preferences operation=\"replace\">"));
-        for (String entry : Main.pref.getCollection("lorem_ipsum")) {
+        for (String entry : Config.getPref().getList("lorem_ipsum")) {
             assertTrue(entry + "\nnot found in:\n" + xml, xml.contains(entry));
         }
 
-        Main.pref.putCollection("test", Arrays.asList("11111111", "2222222", "333333333"));
+        Config.getPref().putList("test", Arrays.asList("11111111", "2222222", "333333333"));
         CustomConfigurator.exportPreferencesKeysByPatternToFile(tmp.getAbsolutePath(), true, "test");
         xml = Utils.join("\n", Files.readAllLines(tmp.toPath(), StandardCharsets.UTF_8));
         assertTrue(xml.contains("<preferences operation=\"append\">"));
-        for (String entry : Main.pref.getCollection("test")) {
+        for (String entry : Config.getPref().getList("test")) {
             assertTrue(entry + "\nnot found in:\n" + xml, xml.contains(entry));
         }
 
@@ -102,31 +78,22 @@ public class CustomConfiguratorTest {
     @Test
     public void testReadXML() throws IOException {
         // Test 1 - read(dir, file) + append
-        Main.pref.putCollection("test", Collections.<String>emptyList());
-        assertTrue(Main.pref.getCollection("test").isEmpty());
+        Config.getPref().putList("test", Collections.<String>emptyList());
+        assertTrue(Config.getPref().getList("test").isEmpty());
         CustomConfigurator.readXML(TestUtils.getTestDataRoot() + "customconfigurator", "append.xml");
-        String log = CustomConfigurator.getLog();
+        String log = PreferencesUtils.getLog();
         assertFalse(log, log.contains("Error"));
-        assertFalse(Main.pref.getCollection("test").isEmpty());
+        assertFalse(Config.getPref().getList("test").isEmpty());
 
         // Test 2 - read(file, pref) + replace
         Preferences pref = new Preferences();
         // avoid messing up preferences file (that makes all following unit tests fail)
         pref.enableSaveOnPut(false);
-        pref.putCollection("lorem_ipsum", Arrays.asList("only 1 string"));
-        assertEquals(1, pref.getCollection("lorem_ipsum").size());
+        pref.putList("lorem_ipsum", Arrays.asList("only 1 string"));
+        assertEquals(1, pref.getList("lorem_ipsum").size());
         CustomConfigurator.readXML(new File(TestUtils.getTestDataRoot() + "customconfigurator", "replace.xml"), pref);
-        log = CustomConfigurator.getLog();
+        log = PreferencesUtils.getLog();
         assertFalse(log, log.contains("Error"));
-        assertEquals(9, pref.getCollection("lorem_ipsum").size());
-    }
-
-    /**
-     * Tests that {@code PreferencesUtils} satisfies utility class criterias.
-     * @throws ReflectiveOperationException if an error occurs
-     */
-    @Test
-    public void testUtilityClass() throws ReflectiveOperationException {
-        UtilityClassTestUtil.assertUtilityClassWellDefined(PreferencesUtils.class);
+        assertEquals(9, pref.getList("lorem_ipsum").size());
     }
 }
diff --git a/test/unit/org/openstreetmap/josm/gui/io/DownloadOpenChangesetsTaskTest.java b/test/unit/org/openstreetmap/josm/gui/io/DownloadOpenChangesetsTaskTest.java
index 3de5f89..d1534c4 100644
--- a/test/unit/org/openstreetmap/josm/gui/io/DownloadOpenChangesetsTaskTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/io/DownloadOpenChangesetsTaskTest.java
@@ -9,7 +9,7 @@ import javax.swing.JPanel;
 
 import org.junit.Rule;
 import org.junit.Test;
-import org.openstreetmap.josm.gui.JosmUserIdentityManager;
+import org.openstreetmap.josm.data.UserIdentityManager;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -34,13 +34,13 @@ public class DownloadOpenChangesetsTaskTest {
         DownloadOpenChangesetsTask task = new DownloadOpenChangesetsTask(new JPanel());
         assertNull(task.getChangesets());
 
-        assertTrue(JosmUserIdentityManager.getInstance().isAnonymous());
+        assertTrue(UserIdentityManager.getInstance().isAnonymous());
         task.run();
         assertNull(task.getChangesets());
 
         task = new DownloadOpenChangesetsTask(new JPanel());
-        JosmUserIdentityManager.getInstance().setPartiallyIdentified(System.getProperty("osm.username", "josm_test"));
-        assertTrue(JosmUserIdentityManager.getInstance().isPartiallyIdentified());
+        UserIdentityManager.getInstance().setPartiallyIdentified(System.getProperty("osm.username", "josm_test"));
+        assertTrue(UserIdentityManager.getInstance().isPartiallyIdentified());
         task.run();
         assertNotNull(task.getChangesets());
     }
diff --git a/test/unit/org/openstreetmap/josm/gui/io/TagSettingsPanelTest.java b/test/unit/org/openstreetmap/josm/gui/io/TagSettingsPanelTest.java
index 3dbcf76..4b256e8 100644
--- a/test/unit/org/openstreetmap/josm/gui/io/TagSettingsPanelTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/io/TagSettingsPanelTest.java
@@ -26,6 +26,6 @@ public class TagSettingsPanelTest {
      */
     @Test
     public void testTagSettingsPanel() {
-        assertNotNull(new TagSettingsPanel(new ChangesetCommentModel(), new ChangesetCommentModel()));
+        assertNotNull(new TagSettingsPanel(new ChangesetCommentModel(), new ChangesetCommentModel(), new ChangesetReviewModel()));
     }
 }
diff --git a/test/unit/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelperTest.java b/test/unit/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelperTest.java
index aed725e..6902944 100644
--- a/test/unit/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelperTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelperTest.java
@@ -10,11 +10,11 @@ import java.util.stream.Collectors;
 
 import org.junit.Rule;
 import org.junit.Test;
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.data.gpx.GpxData;
 import org.openstreetmap.josm.gui.layer.GpxLayer;
 import org.openstreetmap.josm.io.GpxReaderTest;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 import org.openstreetmap.josm.tools.ColorHelper;
 import org.xml.sax.SAXException;
@@ -41,8 +41,8 @@ public class GpxDrawHelperTest {
      */
     @Test
     public void testTicket12312() throws FileNotFoundException, IOException, SAXException {
-        Main.pref.put("draw.rawgps.colors.dynamic.layer 12312", true);
-        Main.pref.putInteger("draw.rawgps.colors.layer 12312", GpxDrawHelper.ColorMode.VELOCITY.toIndex());
+        Config.getPref().putBoolean("draw.rawgps.colors.dynamic.layer 12312", true);
+        Config.getPref().putInt("draw.rawgps.colors.layer 12312", GpxDrawHelper.ColorMode.VELOCITY.toIndex());
         final List<String> colors = calculateColors(TestUtils.getRegressionDataFile(12312, "single_trackpoint.gpx"), "12312", 1);
         assertEquals("[#FF00FF]", colors.toString());
     }
@@ -67,7 +67,7 @@ public class GpxDrawHelperTest {
      */
     @Test
     public void testVelocity() throws IOException, SAXException {
-        Main.pref.putInteger("draw.rawgps.colors.layer 001", GpxDrawHelper.ColorMode.VELOCITY.toIndex());
+        Config.getPref().putInt("draw.rawgps.colors.layer 001", GpxDrawHelper.ColorMode.VELOCITY.toIndex());
         final List<String> colors = calculateColors("data_nodist/2094047.gpx", "001", 10);
         assertEquals("[#FF00FF, #FFAD00, #FFA800, #FFA800, #FF9E00, #FF9400, #FF7000, #FF7000, #FF8000, #FF9400]", colors.toString());
     }
@@ -80,8 +80,8 @@ public class GpxDrawHelperTest {
      */
     @Test
     public void testVelocityDynamic() throws IOException, SAXException {
-        Main.pref.putInteger("draw.rawgps.colors.layer 002", GpxDrawHelper.ColorMode.VELOCITY.toIndex());
-        Main.pref.put("draw.rawgps.colors.dynamic.layer 002", true);
+        Config.getPref().putInt("draw.rawgps.colors.layer 002", GpxDrawHelper.ColorMode.VELOCITY.toIndex());
+        Config.getPref().putBoolean("draw.rawgps.colors.dynamic.layer 002", true);
         final List<String> colors = calculateColors("data_nodist/2094047.gpx", "002", 10);
         assertEquals("[#FF00FF, #00FFE0, #00FFC2, #00FFC2, #00FF75, #00FF3D, #99FF00, #94FF00, #38FF00, #00FF38]", colors.toString());
     }
@@ -94,7 +94,7 @@ public class GpxDrawHelperTest {
      */
     @Test
     public void testDirection() throws IOException, SAXException {
-        Main.pref.putInteger("draw.rawgps.colors.layer 003", GpxDrawHelper.ColorMode.DIRECTION.toIndex());
+        Config.getPref().putInt("draw.rawgps.colors.layer 003", GpxDrawHelper.ColorMode.DIRECTION.toIndex());
         final List<String> colors = calculateColors("data_nodist/2094047.gpx", "003", 10);
         assertEquals("[#FF00FF, #EAEC25, #EDEA26, #EDE525, #ECD322, #EBB81D, #E85A0D, #E73708, #E84D0B, #EA8A15]", colors.toString());
     }
@@ -107,7 +107,7 @@ public class GpxDrawHelperTest {
      */
     @Test
     public void testTime() throws IOException, SAXException {
-        Main.pref.putInteger("draw.rawgps.colors.layer 003", GpxDrawHelper.ColorMode.TIME.toIndex());
+        Config.getPref().putInt("draw.rawgps.colors.layer 003", GpxDrawHelper.ColorMode.TIME.toIndex());
         final List<String> colors = calculateColors("data_nodist/2094047.gpx", "003", 10);
         assertEquals("[#FF00FF, #FF0000, #FF0000, #FF0500, #FF0500, #FF0A00, #FF0A00, #FF1F00, #FF2E00, #FF3300]", colors.toString());
     }
diff --git a/test/unit/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayerTest.java b/test/unit/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayerTest.java
index 5251a79..3b476df 100644
--- a/test/unit/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayerTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayerTest.java
@@ -11,13 +11,13 @@ import java.util.Arrays;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.gpx.GpxConstants;
 import org.openstreetmap.josm.data.gpx.GpxData;
 import org.openstreetmap.josm.data.gpx.GpxLink;
 import org.openstreetmap.josm.data.gpx.WayPoint;
 import org.openstreetmap.josm.gui.MainApplication;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -39,7 +39,7 @@ public class MarkerLayerTest {
      */
     @Before
     public void setUp() {
-        Main.pref.put("marker.traceaudio", true);
+        Config.getPref().putBoolean("marker.traceaudio", true);
     }
 
     /**
diff --git a/test/unit/org/openstreetmap/josm/gui/mappaint/RenderingCLIAreaTest.java b/test/unit/org/openstreetmap/josm/gui/mappaint/RenderingCLIAreaTest.java
new file mode 100644
index 0000000..c40af57
--- /dev/null
+++ b/test/unit/org/openstreetmap/josm/gui/mappaint/RenderingCLIAreaTest.java
@@ -0,0 +1,169 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.mappaint;
+
+import static org.CustomMatchers.isFP;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.CustomMatchers;
+import org.CustomMatchers.ErrorMode;
+import org.hamcrest.CoreMatchers;
+import org.hamcrest.Matcher;
+import org.junit.Rule;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.testutils.JOSMTestRules;
+
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
+/**
+ * Tests the method {@link RenderingCLI#determineRenderingArea(org.openstreetmap.josm.data.osm.DataSet)}.
+ */
+ at RunWith(Parameterized.class)
+public class RenderingCLIAreaTest {
+    /**
+     * Setup rule
+     */
+    @Rule
+    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
+    public JOSMTestRules test = new JOSMTestRules().projection().territories();
+
+    @Parameterized.Parameters
+    public static Collection<Object[]> runs() {
+        Collection<Object[]> runs = new ArrayList<>();
+
+        final double SCALE_Z18 = 0.5971642834779395;
+        final double SCALE_Z19 = 0.29858214173896974;
+
+        // area of imagery tile z=19/x=292949/y=174587
+        Bounds bTile = new Bounds(51.40091918770498, 21.152114868164077, 51.4013475612123, 21.15280151367189, false);
+
+        // 0
+        runs.add(new Object[] {"--zoom 19 --bounds " + param(bTile),
+                CoreMatchers.is(SCALE_Z19),
+                CoreMatchers.is(bTile)});
+
+        Bounds bFeldberg = new Bounds(53.33, 13.43, 53.333, 13.44); // rectangular area in the city Feldberg
+        double scaleFeldberg4000 = 1.7722056827012918;
+
+        // 1
+        runs.add(new Object[] {"--scale 4000 --bounds " + param(bFeldberg),
+                CoreMatchers.is(scaleFeldberg4000),
+                CoreMatchers.is(bFeldberg)});
+
+        // 2
+        runs.add(new Object[] {"--width-px 628 --bounds " + param(bFeldberg),
+                isFP(scaleFeldberg4000, ErrorMode.RELATIVE, 1e-3),
+                CoreMatchers.is(bFeldberg)});
+
+        // 3
+        runs.add(new Object[] {"--height-px 316 --bounds " + param(bFeldberg),
+                isFP(scaleFeldberg4000, ErrorMode.RELATIVE, 1.5e-3),
+                CoreMatchers.is(bFeldberg)});
+
+        LatLon aFeldberg = bFeldberg.getMin();
+        LatLon aFeldberg200mRight = new LatLon(aFeldberg.lat(), 13.433008399004041);
+        LatLon aFeldberg150mUp = new LatLon(53.33134745249311, aFeldberg.lon());
+        Assert.assertThat(aFeldberg.greatCircleDistance(aFeldberg200mRight), isFP(200.0, 0.01));
+        Assert.assertThat(aFeldberg.greatCircleDistance(aFeldberg150mUp), isFP(150.0, 0.01));
+
+        Bounds bFeldberg200x150m = new Bounds(
+                bFeldberg.getMin(), new LatLon(aFeldberg150mUp.lat(), aFeldberg200mRight.lon()));
+
+        // 4
+        runs.add(new Object[] {"--width-m 200 --height-m 150 -z 18 --anchor " + param(aFeldberg),
+                CoreMatchers.is(SCALE_Z18),
+                CustomMatchers.is(bFeldberg200x150m, 1e-7)});
+        // -> image size 561x421 px
+
+        // 5
+        runs.add(new Object[] {"--width-m 200 --height-m 150 --scale 4000 --anchor " + param(aFeldberg),
+                isFP(scaleFeldberg4000, ErrorMode.RELATIVE, 1e-3),
+                CustomMatchers.is(bFeldberg200x150m, 1e-7)});
+        // -> image size 189x142 px
+
+        // 6
+        runs.add(new Object[] {"--width-px 561 --height-px 421 -z 18 --anchor " + param(aFeldberg),
+                CoreMatchers.is(SCALE_Z18),
+                CustomMatchers.is(bFeldberg200x150m, 1e-5)});
+
+        // 7
+        runs.add(new Object[] {"--width-px 189 --height-px 142 --scale 4000 --anchor " + param(aFeldberg),
+                isFP(scaleFeldberg4000, ErrorMode.RELATIVE, 1e-3),
+                CustomMatchers.is(bFeldberg200x150m, 1e-5)});
+
+        // 8
+        runs.add(new Object[] {"--width-px 561 --height-m 150 -z 18 --anchor " + param(aFeldberg),
+                CoreMatchers.is(SCALE_Z18),
+                CustomMatchers.is(bFeldberg200x150m, 1e-5)});
+
+        // 9
+        runs.add(new Object[] {"--width-px 189 --height-m 150 --scale 4000 --anchor " + param(aFeldberg),
+                isFP(scaleFeldberg4000, ErrorMode.RELATIVE, 1e-3),
+                CustomMatchers.is(bFeldberg200x150m, 1e-5)});
+
+        // 10
+        runs.add(new Object[] {"--width-m 200 --height-px 421 -z 18 --anchor " + param(aFeldberg),
+                CoreMatchers.is(SCALE_Z18),
+                CustomMatchers.is(bFeldberg200x150m, 1e-5)});
+
+        // 11
+        runs.add(new Object[] {"--width-m 200 --height-px 142 --scale 4000 --anchor " + param(aFeldberg),
+                isFP(scaleFeldberg4000, ErrorMode.RELATIVE, 1e-3),
+                CustomMatchers.is(bFeldberg200x150m, 1e-5)});
+
+        // 12
+        runs.add(new Object[] {"--width-m 200 --height-m 150 --width-px 561 --anchor " + param(aFeldberg),
+                isFP(SCALE_Z18, ErrorMode.RELATIVE, 1e-3),
+                CustomMatchers.is(bFeldberg200x150m, 1e-5)});
+
+        // 13
+        runs.add(new Object[] {"--width-m 200 --height-m 150 --height-px 421 --anchor " + param(aFeldberg),
+                isFP(SCALE_Z18, ErrorMode.RELATIVE, 1e-3),
+                CustomMatchers.is(bFeldberg200x150m, 1e-5)});
+
+        // 14
+        runs.add(new Object[] {"--width-px 561 --height-px 421 --width-m 200 --anchor " + param(aFeldberg),
+                isFP(SCALE_Z18, ErrorMode.RELATIVE, 1e-3),
+                CustomMatchers.is(bFeldberg200x150m, 1e-5)});
+
+        // 15
+        runs.add(new Object[] {"--width-px 561 --height-px 421 --height-m 150 --anchor " + param(aFeldberg),
+                isFP(SCALE_Z18, ErrorMode.RELATIVE, 1e-3),
+                CustomMatchers.is(bFeldberg200x150m, 1e-5)});
+
+        return runs;
+    }
+
+    private static String param(Bounds b) {
+        return b.getMinLon() + "," + b.getMinLat() + "," + b.getMaxLon() + "," + b.getMaxLat();
+    }
+
+    private static String param(LatLon ll) {
+        return ll.lon() + "," + ll.lat();
+    }
+
+    private final String[] args;
+    private final Matcher<Double> scaleMatcher;
+    private final Matcher<Bounds> boundsMatcher;
+
+    public RenderingCLIAreaTest(String args, Matcher<Double> scaleMatcher, Matcher<Bounds> boundsMatcher) {
+        this.args = args.split("\\s+");
+        this.scaleMatcher = scaleMatcher;
+        this.boundsMatcher = boundsMatcher;
+    }
+
+    @Test
+    public void testDetermineRenderingArea() {
+        RenderingCLI cli = new RenderingCLI();
+        cli.parseArguments(args);
+        RenderingCLI.RenderingArea ra = cli.determineRenderingArea(null);
+        Assert.assertThat(ra.scale, scaleMatcher);
+        Assert.assertThat(ra.bounds, boundsMatcher);
+    }
+}
diff --git a/test/unit/org/openstreetmap/josm/gui/preferences/advanced/PrefEntryTest.java b/test/unit/org/openstreetmap/josm/gui/preferences/advanced/PrefEntryTest.java
index d22f520..1c90092 100644
--- a/test/unit/org/openstreetmap/josm/gui/preferences/advanced/PrefEntryTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/preferences/advanced/PrefEntryTest.java
@@ -8,7 +8,7 @@ import static org.junit.Assert.assertTrue;
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.openstreetmap.josm.JOSMFixture;
-import org.openstreetmap.josm.data.preferences.StringSetting;
+import org.openstreetmap.josm.spi.preferences.StringSetting;
 
 import nl.jqno.equalsverifier.EqualsVerifier;
 
diff --git a/test/unit/org/openstreetmap/josm/gui/preferences/advanced/PreferencesTableTest.java b/test/unit/org/openstreetmap/josm/gui/preferences/advanced/PreferencesTableTest.java
index 538c0cb..4790d80 100644
--- a/test/unit/org/openstreetmap/josm/gui/preferences/advanced/PreferencesTableTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/preferences/advanced/PreferencesTableTest.java
@@ -11,7 +11,7 @@ import java.util.Arrays;
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.openstreetmap.josm.JOSMFixture;
-import org.openstreetmap.josm.data.preferences.StringSetting;
+import org.openstreetmap.josm.spi.preferences.StringSetting;
 import org.openstreetmap.josm.gui.preferences.advanced.PreferencesTable.AllSettingsTableModel;
 
 /**
diff --git a/test/unit/org/openstreetmap/josm/gui/preferences/audio/AudioPreferenceTest.java b/test/unit/org/openstreetmap/josm/gui/preferences/audio/AudioPreferenceTest.java
index 625e890..e68f132 100644
--- a/test/unit/org/openstreetmap/josm/gui/preferences/audio/AudioPreferenceTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/preferences/audio/AudioPreferenceTest.java
@@ -6,8 +6,8 @@ import static org.junit.Assert.assertNotNull;
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.openstreetmap.josm.JOSMFixture;
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.preferences.PreferencesTestUtils;
+import org.openstreetmap.josm.spi.preferences.Config;
 
 /**
  * Unit tests of {@link AudioPreference} class.
@@ -35,9 +35,9 @@ public class AudioPreferenceTest {
      */
     @Test
     public void testAddGui() {
-        Main.pref.put("audio.menuinvisible", true);
+        Config.getPref().putBoolean("audio.menuinvisible", true);
         PreferencesTestUtils.doTestPreferenceSettingAddGui(new AudioPreference.Factory(), null);
-        Main.pref.put("audio.menuinvisible", false);
+        Config.getPref().putBoolean("audio.menuinvisible", false);
         PreferencesTestUtils.doTestPreferenceSettingAddGui(new AudioPreference.Factory(), null);
     }
 }
diff --git a/test/unit/org/openstreetmap/josm/gui/preferences/imagery/ImageryPreferenceTest.java b/test/unit/org/openstreetmap/josm/gui/preferences/imagery/ImageryPreferenceTest.java
index fb99b24..06e5e95 100644
--- a/test/unit/org/openstreetmap/josm/gui/preferences/imagery/ImageryPreferenceTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/preferences/imagery/ImageryPreferenceTest.java
@@ -8,9 +8,9 @@ import java.util.Arrays;
 
 import org.junit.Rule;
 import org.junit.Test;
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.gui.preferences.PreferencesTestUtils;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -41,7 +41,7 @@ public class ImageryPreferenceTest {
     @Test
     public void testAddGui() {
         String fileUrl = new File(TestUtils.getTestDataRoot()+"__files/imagery/maps.xml").toURI().toString();
-        Main.pref.putCollection("imagery.layers.sites", Arrays.asList(fileUrl));
+        Config.getPref().putList("imagery.layers.sites", Arrays.asList(fileUrl));
         PreferencesTestUtils.doTestPreferenceSettingAddGui(new ImageryPreference.Factory(), null);
     }
 }
diff --git a/test/unit/org/openstreetmap/josm/gui/preferences/map/TaggingPresetPreferenceTestIT.java b/test/unit/org/openstreetmap/josm/gui/preferences/map/TaggingPresetPreferenceTestIT.java
index 9212e0c..69a5c89 100644
--- a/test/unit/org/openstreetmap/josm/gui/preferences/map/TaggingPresetPreferenceTestIT.java
+++ b/test/unit/org/openstreetmap/josm/gui/preferences/map/TaggingPresetPreferenceTestIT.java
@@ -16,10 +16,10 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.Timeout;
 import org.openstreetmap.josm.JOSMFixture;
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.preferences.sources.ExtendedSourceEntry;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetReader;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Logging;
 import org.xml.sax.SAXException;
@@ -57,8 +57,8 @@ public class TaggingPresetPreferenceTestIT {
                 .loadAndGetAvailableSources();
         assertFalse(sources.isEmpty());
         // Double traditional timeouts to avoid random problems
-        Main.pref.putInteger("socket.timeout.connect", 30);
-        Main.pref.putInteger("socket.timeout.read", 60);
+        Config.getPref().putInt("socket.timeout.connect", 30);
+        Config.getPref().putInt("socket.timeout.read", 60);
         Map<Object, Throwable> allErrors = new HashMap<>();
         Set<String> allMessages = new HashSet<>();
         for (ExtendedSourceEntry source : sources) {
diff --git a/test/unit/org/openstreetmap/josm/tools/MultiLineFlowLayoutTest.java b/test/unit/org/openstreetmap/josm/gui/util/MultiLineFlowLayoutTest.java
similarity index 98%
rename from test/unit/org/openstreetmap/josm/tools/MultiLineFlowLayoutTest.java
rename to test/unit/org/openstreetmap/josm/gui/util/MultiLineFlowLayoutTest.java
index fc2e343..3400421 100644
--- a/test/unit/org/openstreetmap/josm/tools/MultiLineFlowLayoutTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/util/MultiLineFlowLayoutTest.java
@@ -1,5 +1,5 @@
 // License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.tools;
+package org.openstreetmap.josm.gui.util;
 
 import static org.junit.Assert.assertEquals;
 
diff --git a/test/unit/org/openstreetmap/josm/gui/util/WindowGeometryTest.java b/test/unit/org/openstreetmap/josm/gui/util/WindowGeometryTest.java
index af04bf8..c05f542 100644
--- a/test/unit/org/openstreetmap/josm/gui/util/WindowGeometryTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/util/WindowGeometryTest.java
@@ -15,8 +15,8 @@ import javax.swing.JPanel;
 
 import org.junit.Rule;
 import org.junit.Test;
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.util.WindowGeometry.WindowGeometryException;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -52,7 +52,7 @@ public class WindowGeometryTest {
         assertEquals(new WindowGeometry(new Point(0, 0), dim), WindowGeometry.centerOnScreen(dim));
         assertEquals(new WindowGeometry(new Point(300, 250), dim), WindowGeometry.centerOnScreen(dim, null));
 
-        Main.pref.put("gui.geometry", "x=0,y=0,width=800,height=600");
+        Config.getPref().put("gui.geometry", "x=0,y=0,width=800,height=600");
         assertEquals(new WindowGeometry(new Point(300, 250), dim), WindowGeometry.centerOnScreen(dim));
     }
 
@@ -62,7 +62,7 @@ public class WindowGeometryTest {
      */
     @Test(expected = WindowGeometryException.class)
     public void testWindowGeometryException1() throws WindowGeometryException {
-        Main.pref.put("test", null);
+        Config.getPref().put("test", null);
         new WindowGeometry("test");
     }
 
@@ -72,7 +72,7 @@ public class WindowGeometryTest {
      */
     @Test(expected = WindowGeometryException.class)
     public void testWindowGeometryException2() throws WindowGeometryException {
-        Main.pref.put("test", "");
+        Config.getPref().put("test", "");
         new WindowGeometry("test");
     }
 
@@ -82,7 +82,7 @@ public class WindowGeometryTest {
      */
     @Test(expected = WindowGeometryException.class)
     public void testWindowGeometryException3() throws WindowGeometryException {
-        Main.pref.put("test", "x=not_a_number");
+        Config.getPref().put("test", "x=not_a_number");
         new WindowGeometry("test");
     }
 
@@ -92,7 +92,7 @@ public class WindowGeometryTest {
      */
     @Test(expected = WindowGeometryException.class)
     public void testWindowGeometryException4() throws WindowGeometryException {
-        Main.pref.put("test", "wrong_pattern");
+        Config.getPref().put("test", "wrong_pattern");
         new WindowGeometry("test");
     }
 
@@ -102,7 +102,7 @@ public class WindowGeometryTest {
      */
     @Test
     public void testWindowGeometryException5() throws WindowGeometryException {
-        Main.pref.put("test", "x=15,y=55,width=200,height=100");
+        Config.getPref().put("test", "x=15,y=55,width=200,height=100");
         assertNotNull(new WindowGeometry("test"));
     }
 
diff --git a/test/unit/org/openstreetmap/josm/io/GeoJSONWriterTest.java b/test/unit/org/openstreetmap/josm/io/GeoJSONWriterTest.java
index 49fc929..3cf7537 100644
--- a/test/unit/org/openstreetmap/josm/io/GeoJSONWriterTest.java
+++ b/test/unit/org/openstreetmap/josm/io/GeoJSONWriterTest.java
@@ -15,7 +15,6 @@ import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.Way;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 
 /**
  * Unit tests of {@link GeoJSONWriter} class.
@@ -40,8 +39,7 @@ public class GeoJSONWriterTest {
         node.put("source", "code");
         final DataSet ds = new DataSet();
         ds.addPrimitive(node);
-        final OsmDataLayer layer = new OsmDataLayer(ds, "foo", null);
-        final GeoJSONWriter writer = new GeoJSONWriter(layer);
+        final GeoJSONWriter writer = new GeoJSONWriter(ds);
         assertEquals(("" +
                 "{\n" +
                 "    'type':'FeatureCollection',\n" +
@@ -79,8 +77,7 @@ public class GeoJSONWriterTest {
         way.put("highway", "footway");
         way.setNodes(Arrays.asList(n1, n2));
         ds.addPrimitive(way);
-        final OsmDataLayer layer = new OsmDataLayer(ds, "foo", null);
-        final GeoJSONWriter writer = new GeoJSONWriter(layer);
+        final GeoJSONWriter writer = new GeoJSONWriter(ds);
         assertEquals(("" +
                 "{\n" +
                 "    'type':'FeatureCollection',\n" +
@@ -117,8 +114,7 @@ public class GeoJSONWriterTest {
     public void testMultipolygon() throws Exception {
         try (FileInputStream in = new FileInputStream(TestUtils.getTestDataRoot() + "multipolygon.osm")) {
             DataSet ds = OsmReader.parseDataSet(in, null);
-            final OsmDataLayer layer = new OsmDataLayer(ds, "foo", null);
-            final GeoJSONWriter writer = new GeoJSONWriter(layer);
+            final GeoJSONWriter writer = new GeoJSONWriter(ds);
             assertTrue(writer.write().contains("MultiPolygon"));
         }
     }
@@ -131,8 +127,7 @@ public class GeoJSONWriterTest {
     public void testMultipolygonRobustness() throws Exception {
         try (FileInputStream in = new FileInputStream("data_nodist/multipolygon.osm")) {
             DataSet ds = OsmReader.parseDataSet(in, null);
-            final OsmDataLayer layer = new OsmDataLayer(ds, "foo", null);
-            final GeoJSONWriter writer = new GeoJSONWriter(layer);
+            final GeoJSONWriter writer = new GeoJSONWriter(ds);
             assertTrue(writer.write().contains("MultiPolygon"));
         }
     }
diff --git a/test/unit/org/openstreetmap/josm/io/OverpassDownloadReaderTest.java b/test/unit/org/openstreetmap/josm/io/OverpassDownloadReaderTest.java
index 143075b..d71e9fd 100644
--- a/test/unit/org/openstreetmap/josm/io/OverpassDownloadReaderTest.java
+++ b/test/unit/org/openstreetmap/josm/io/OverpassDownloadReaderTest.java
@@ -6,8 +6,10 @@ import static com.github.tomakehurst.wiremock.client.WireMock.get;
 import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
 import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
+import java.time.LocalDateTime;
 import java.util.regex.Matcher;
 
 import org.junit.Before;
@@ -19,6 +21,7 @@ import org.openstreetmap.josm.io.OverpassDownloadReader.OverpassOutpoutFormat;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 import org.openstreetmap.josm.tools.OverpassTurboQueryWizard;
 import org.openstreetmap.josm.tools.Utils;
+import org.openstreetmap.josm.tools.date.DateUtils;
 
 import com.github.tomakehurst.wiremock.junit.WireMockRule;
 
@@ -86,6 +89,42 @@ public class OverpassDownloadReaderTest {
     }
 
     /**
+     * Tests evaluating the extended query feature {@code date}.
+     */
+    @Test
+    public void testDate() {
+        LocalDateTime from = LocalDateTime.of(2017, 7, 14, 2, 40);
+        assertEquals("2016-07-14T02:40:00Z", OverpassDownloadReader.date("1 year", from));
+        assertEquals("2007-07-14T02:40:00Z", OverpassDownloadReader.date("10years", from));
+        assertEquals("2017-06-14T02:40:00Z", OverpassDownloadReader.date("1 month", from));
+        assertEquals("2016-09-14T02:40:00Z", OverpassDownloadReader.date("10months", from));
+        assertEquals("2017-07-07T02:40:00Z", OverpassDownloadReader.date("1 week", from));
+        assertEquals("2017-05-05T02:40:00Z", OverpassDownloadReader.date("10weeks", from));
+        assertEquals("2017-07-13T02:40:00Z", OverpassDownloadReader.date("1 day", from));
+        assertEquals("2017-07-04T02:40:00Z", OverpassDownloadReader.date("10days", from));
+        assertEquals("2017-07-14T01:40:00Z", OverpassDownloadReader.date("1 hour", from));
+        assertEquals("2017-07-13T16:40:00Z", OverpassDownloadReader.date("10hours", from));
+        assertEquals("2017-07-14T02:39:00Z", OverpassDownloadReader.date("1 minute", from));
+        assertEquals("2017-07-14T02:30:00Z", OverpassDownloadReader.date("10minutes", from));
+        assertEquals("2017-07-14T02:39:59Z", OverpassDownloadReader.date("1 second", from));
+        assertEquals("2017-07-14T02:39:50Z", OverpassDownloadReader.date("10seconds", from));
+
+        assertEquals("2016-07-13T02:40:00Z", OverpassDownloadReader.date("1 year 1 day", from));
+        assertEquals("2016-07-14T02:38:20Z", OverpassDownloadReader.date("1 year 100 seconds", from));
+        assertEquals("2017-07-13T02:38:20Z", OverpassDownloadReader.date("1 day  100 seconds", from));
+    }
+
+    /**
+     * Tests evaluating the extended query feature {@code date} through {@code newer:} operator.
+     */
+    @Test
+    public void testDateNewer() {
+        final String query = getExpandedQuery("type:node and newer:3minutes");
+        String statement = query.substring(query.indexOf("node(newer:\"") + 12, query.lastIndexOf("\");"));
+        assertNotNull(DateUtils.fromString(statement));
+    }
+
+    /**
      * Tests evaluating the extended query feature {@code geocodeArea}.
      */
     @Test
diff --git a/test/unit/org/openstreetmap/josm/io/remotecontrol/RemoteControlTest.java b/test/unit/org/openstreetmap/josm/io/remotecontrol/RemoteControlTest.java
index bf28732..ad73e83 100644
--- a/test/unit/org/openstreetmap/josm/io/remotecontrol/RemoteControlTest.java
+++ b/test/unit/org/openstreetmap/josm/io/remotecontrol/RemoteControlTest.java
@@ -26,7 +26,7 @@ import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.openstreetmap.josm.JOSMFixture;
-import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -51,8 +51,8 @@ public class RemoteControlTest {
 
         RemoteControl.start();
         disableCertificateValidation();
-        httpBase = "http://127.0.0.1:"+Main.pref.getInteger("remote.control.port", 8111);
-        httpsBase = "https://127.0.0.1:"+Main.pref.getInteger("remote.control.https.port", 8112);
+        httpBase = "http://127.0.0.1:"+Config.getPref().getInt("remote.control.port", 8111);
+        httpsBase = "https://127.0.0.1:"+Config.getPref().getInt("remote.control.https.port", 8112);
     }
 
     /**
diff --git a/test/unit/org/openstreetmap/josm/plugins/PluginDownloadExceptionTest.java b/test/unit/org/openstreetmap/josm/plugins/PluginDownloadExceptionTest.java
index 9c483c4..7575b80 100644
--- a/test/unit/org/openstreetmap/josm/plugins/PluginDownloadExceptionTest.java
+++ b/test/unit/org/openstreetmap/josm/plugins/PluginDownloadExceptionTest.java
@@ -3,9 +3,11 @@ package org.openstreetmap.josm.plugins;
 
 import static org.junit.Assert.assertEquals;
 
-import org.junit.BeforeClass;
+import org.junit.Rule;
 import org.junit.Test;
-import org.openstreetmap.josm.JOSMFixture;
+import org.openstreetmap.josm.testutils.JOSMTestRules;
+
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 
 /**
  * Unit tests of {@link PluginDownloadException} class.
@@ -15,10 +17,9 @@ public class PluginDownloadExceptionTest {
     /**
      * Setup test.
      */
-    @BeforeClass
-    public static void setUp() {
-        JOSMFixture.createUnitTestFixture().init();
-    }
+    @Rule
+    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
+    public JOSMTestRules test = new JOSMTestRules();
 
     /**
      * Unit test of {@link PluginDownloadException#PluginDownloadException}.
diff --git a/test/unit/org/openstreetmap/josm/plugins/PluginExceptionTest.java b/test/unit/org/openstreetmap/josm/plugins/PluginExceptionTest.java
index 6728bc8..b0ee56f 100644
--- a/test/unit/org/openstreetmap/josm/plugins/PluginExceptionTest.java
+++ b/test/unit/org/openstreetmap/josm/plugins/PluginExceptionTest.java
@@ -3,9 +3,11 @@ package org.openstreetmap.josm.plugins;
 
 import static org.junit.Assert.assertEquals;
 
-import org.junit.BeforeClass;
+import org.junit.Rule;
 import org.junit.Test;
-import org.openstreetmap.josm.JOSMFixture;
+import org.openstreetmap.josm.testutils.JOSMTestRules;
+
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 
 /**
  * Unit tests of {@link PluginException} class.
@@ -15,10 +17,9 @@ public class PluginExceptionTest {
     /**
      * Setup test.
      */
-    @BeforeClass
-    public static void setUp() {
-        JOSMFixture.createUnitTestFixture().init();
-    }
+    @Rule
+    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
+    public JOSMTestRules test = new JOSMTestRules();
 
     /**
      * Unit test of {@link PluginException#PluginException}.
diff --git a/test/unit/org/openstreetmap/josm/plugins/PluginHandlerTest.java b/test/unit/org/openstreetmap/josm/plugins/PluginHandlerTest.java
index 606cb4d..2ca0a8b 100644
--- a/test/unit/org/openstreetmap/josm/plugins/PluginHandlerTest.java
+++ b/test/unit/org/openstreetmap/josm/plugins/PluginHandlerTest.java
@@ -10,15 +10,16 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
-import org.junit.BeforeClass;
+import org.junit.Rule;
 import org.junit.Test;
-import org.openstreetmap.josm.JOSMFixture;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.preferences.plugin.PluginPreferenceTest;
 import org.openstreetmap.josm.plugins.PluginHandler.DeprecatedPlugin;
 import org.openstreetmap.josm.plugins.PluginHandler.PluginInformationAction;
+import org.openstreetmap.josm.testutils.JOSMTestRules;
 import org.openstreetmap.josm.tools.Utils;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import nl.jqno.equalsverifier.EqualsVerifier;
 
 /**
@@ -29,10 +30,9 @@ public class PluginHandlerTest {
     /**
      * Setup test.
      */
-    @BeforeClass
-    public static void setUp() {
-        JOSMFixture.createUnitTestFixture().init();
-    }
+    @Rule
+    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
+    public JOSMTestRules test = new JOSMTestRules().platform();
 
     /**
      * Unit test of methods {@link DeprecatedPlugin#equals} and {@link DeprecatedPlugin#hashCode}.
diff --git a/test/unit/org/openstreetmap/josm/plugins/PluginHandlerTestIT.java b/test/unit/org/openstreetmap/josm/plugins/PluginHandlerTestIT.java
index 0f12e53..0ed2794 100644
--- a/test/unit/org/openstreetmap/josm/plugins/PluginHandlerTestIT.java
+++ b/test/unit/org/openstreetmap/josm/plugins/PluginHandlerTestIT.java
@@ -17,11 +17,8 @@ import java.util.stream.Collectors;
 
 import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang.exception.ExceptionUtils;
-import org.junit.BeforeClass;
 import org.junit.Rule;
 import org.junit.Test;
-import org.junit.rules.Timeout;
-import org.openstreetmap.josm.JOSMFixture;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.gpx.GpxData;
 import org.openstreetmap.josm.data.osm.DataSet;
@@ -30,6 +27,8 @@ import org.openstreetmap.josm.gui.layer.GpxLayer;
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
+import org.openstreetmap.josm.spi.preferences.Config;
+import org.openstreetmap.josm.testutils.JOSMTestRules;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 
@@ -39,19 +38,11 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 public class PluginHandlerTestIT {
 
     /**
-     * Global timeout applied to all test methods.
+     * Setup test.
      */
     @Rule
     @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
-    public Timeout globalTimeout = Timeout.seconds(10*60);
-
-    /**
-     * Setup test.
-     */
-    @BeforeClass
-    public static void setUp() {
-        JOSMFixture.createUnitTestFixture().init(true);
-    }
+    public JOSMTestRules test = new JOSMTestRules().platform().main().projection().timeout(10*60*1000);
 
     /**
      * Test that available plugins rules can be loaded.
@@ -157,11 +148,11 @@ public class PluginHandlerTestIT {
         // Update the locally installed plugins
         PluginDownloadTask pluginDownloadTask = new PluginDownloadTask(NullProgressMonitor.INSTANCE, plugins, null);
         // Increase default timeout to avoid random network errors on big jar files
-        int defTimeout = Main.pref.getInteger("socket.timeout.read", 30);
-        Main.pref.putInteger("socket.timeout.read", 2 * defTimeout);
+        int defTimeout = Config.getPref().getInt("socket.timeout.read", 30);
+        Config.getPref().putInt("socket.timeout.read", 2 * defTimeout);
         pluginDownloadTask.run();
         // Restore default timeout
-        Main.pref.putInteger("socket.timeout.read", defTimeout);
+        Config.getPref().putInt("socket.timeout.read", defTimeout);
         assertTrue(pluginDownloadTask.getFailedPlugins().toString(), pluginDownloadTask.getFailedPlugins().isEmpty());
         assertEquals(plugins.size(), pluginDownloadTask.getDownloadedPlugins().size());
 
diff --git a/test/unit/org/openstreetmap/josm/plugins/PluginListParseExceptionTest.java b/test/unit/org/openstreetmap/josm/plugins/PluginListParseExceptionTest.java
index 6e587fc..e636424 100644
--- a/test/unit/org/openstreetmap/josm/plugins/PluginListParseExceptionTest.java
+++ b/test/unit/org/openstreetmap/josm/plugins/PluginListParseExceptionTest.java
@@ -3,9 +3,11 @@ package org.openstreetmap.josm.plugins;
 
 import static org.junit.Assert.assertEquals;
 
-import org.junit.BeforeClass;
+import org.junit.Rule;
 import org.junit.Test;
-import org.openstreetmap.josm.JOSMFixture;
+import org.openstreetmap.josm.testutils.JOSMTestRules;
+
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 
 /**
  * Unit tests of {@link PluginListParseException} class.
@@ -15,10 +17,9 @@ public class PluginListParseExceptionTest {
     /**
      * Setup test.
      */
-    @BeforeClass
-    public static void setUp() {
-        JOSMFixture.createUnitTestFixture().init();
-    }
+    @Rule
+    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
+    public JOSMTestRules test = new JOSMTestRules();
 
     /**
      * Unit test of {@link PluginListParseException#PluginListParseException}.
diff --git a/test/unit/org/openstreetmap/josm/data/preferences/ListListSettingTest.java b/test/unit/org/openstreetmap/josm/spi/preferences/ListListSettingTest.java
similarity index 94%
rename from test/unit/org/openstreetmap/josm/data/preferences/ListListSettingTest.java
rename to test/unit/org/openstreetmap/josm/spi/preferences/ListListSettingTest.java
index 891ff77..c0886ca 100644
--- a/test/unit/org/openstreetmap/josm/data/preferences/ListListSettingTest.java
+++ b/test/unit/org/openstreetmap/josm/spi/preferences/ListListSettingTest.java
@@ -1,5 +1,5 @@
 // License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.data.preferences;
+package org.openstreetmap.josm.spi.preferences;
 
 import org.junit.Rule;
 import org.junit.Test;
diff --git a/test/unit/org/openstreetmap/josm/data/preferences/ListSettingTest.java b/test/unit/org/openstreetmap/josm/spi/preferences/ListSettingTest.java
similarity index 94%
rename from test/unit/org/openstreetmap/josm/data/preferences/ListSettingTest.java
rename to test/unit/org/openstreetmap/josm/spi/preferences/ListSettingTest.java
index ff7c9da..cb934ce 100644
--- a/test/unit/org/openstreetmap/josm/data/preferences/ListSettingTest.java
+++ b/test/unit/org/openstreetmap/josm/spi/preferences/ListSettingTest.java
@@ -1,5 +1,5 @@
 // License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.data.preferences;
+package org.openstreetmap.josm.spi.preferences;
 
 import org.junit.Rule;
 import org.junit.Test;
diff --git a/test/unit/org/openstreetmap/josm/data/preferences/MapListSettingTest.java b/test/unit/org/openstreetmap/josm/spi/preferences/MapListSettingTest.java
similarity index 94%
rename from test/unit/org/openstreetmap/josm/data/preferences/MapListSettingTest.java
rename to test/unit/org/openstreetmap/josm/spi/preferences/MapListSettingTest.java
index 1180d36..953f74b 100644
--- a/test/unit/org/openstreetmap/josm/data/preferences/MapListSettingTest.java
+++ b/test/unit/org/openstreetmap/josm/spi/preferences/MapListSettingTest.java
@@ -1,5 +1,5 @@
 // License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.data.preferences;
+package org.openstreetmap.josm.spi.preferences;
 
 import org.junit.Rule;
 import org.junit.Test;
diff --git a/test/unit/org/openstreetmap/josm/data/preferences/StringSettingTest.java b/test/unit/org/openstreetmap/josm/spi/preferences/StringSettingTest.java
similarity index 94%
rename from test/unit/org/openstreetmap/josm/data/preferences/StringSettingTest.java
rename to test/unit/org/openstreetmap/josm/spi/preferences/StringSettingTest.java
index 8aa16d3..03932e7 100644
--- a/test/unit/org/openstreetmap/josm/data/preferences/StringSettingTest.java
+++ b/test/unit/org/openstreetmap/josm/spi/preferences/StringSettingTest.java
@@ -1,5 +1,5 @@
 // License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.data.preferences;
+package org.openstreetmap.josm.spi.preferences;
 
 import org.junit.Rule;
 import org.junit.Test;
diff --git a/test/unit/org/openstreetmap/josm/testutils/JOSMTestRules.java b/test/unit/org/openstreetmap/josm/testutils/JOSMTestRules.java
index 919f28b..0cd4621 100644
--- a/test/unit/org/openstreetmap/josm/testutils/JOSMTestRules.java
+++ b/test/unit/org/openstreetmap/josm/testutils/JOSMTestRules.java
@@ -14,15 +14,21 @@ import org.junit.runners.model.InitializationError;
 import org.junit.runners.model.Statement;
 import org.openstreetmap.josm.JOSMFixture;
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.actions.DeleteAction;
+import org.openstreetmap.josm.command.DeleteCommand;
+import org.openstreetmap.josm.data.UserIdentityManager;
+import org.openstreetmap.josm.data.osm.User;
 import org.openstreetmap.josm.data.osm.event.SelectionEventManager;
 import org.openstreetmap.josm.data.projection.Projections;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.mappaint.MapPaintStyles;
+import org.openstreetmap.josm.gui.oauth.OAuthAuthorizationWizard;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresets;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.io.CertificateAmendment;
 import org.openstreetmap.josm.io.OsmApi;
 import org.openstreetmap.josm.io.OsmApiInitializationException;
+import org.openstreetmap.josm.io.OsmConnection;
 import org.openstreetmap.josm.io.OsmTransferCanceledException;
 import org.openstreetmap.josm.tools.I18n;
 import org.openstreetmap.josm.tools.JosmRuntimeException;
@@ -33,6 +39,7 @@ import org.openstreetmap.josm.tools.Territories;
 import org.openstreetmap.josm.tools.date.DateUtils;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+import org.openstreetmap.josm.spi.preferences.Config;
 
 /**
  * This class runs a test in an environment that resembles the one used by the JOSM main application.
@@ -50,6 +57,7 @@ public class JOSMTestRules implements TestRule {
     private String i18n = null;
     private boolean platform;
     private boolean useProjection;
+    private boolean useProjectionNadGrids;
     private boolean commands;
     private boolean allowMemoryManagerLeaks;
     private boolean useMapStyles;
@@ -153,6 +161,15 @@ public class JOSMTestRules implements TestRule {
     }
 
     /**
+     * Set up loading of NTV2 grit shift files to support projections that need them.
+     * @return this instance, for easy chaining
+     */
+    public JOSMTestRules projectionNadGrids() {
+        useProjectionNadGrids = true;
+        return this;
+    }
+
+    /**
      * Set up HTTPS certificates
      * @return this instance, for easy chaining
      */
@@ -259,10 +276,18 @@ public class JOSMTestRules implements TestRule {
 
         cleanUpFromJosmFixture();
 
+        Config.setPreferencesInstance(Main.pref);
+        Config.setBaseDirectoriesProvider(Main.pref);
         // All tests use the same timezone.
         TimeZone.setDefault(DateUtils.UTC);
         // Set log level to info
         Logging.setLogLevel(Logging.LEVEL_INFO);
+        // Assume anonymous user
+        UserIdentityManager.getInstance().setAnonymous();
+        User.clearUserMap();
+        // Setup callbacks
+        DeleteCommand.setDeletionCallback(DeleteAction.defaultDeletionCallback);
+        OsmConnection.setOAuthAccessTokenFetcher(OAuthAuthorizationWizard::obtainAccessToken);
 
         // Set up i18n
         if (i18n != null) {
@@ -285,7 +310,7 @@ public class JOSMTestRules implements TestRule {
             Main.pref.enableSaveOnPut(false);
             // No pref init -> that would only create the preferences file.
             // We force the use of a wrong API server, just in case anyone attempts an upload
-            Main.pref.put("osm-server.url", "http://invalid");
+            Config.getPref().put("osm-server.url", "http://invalid");
         }
 
         // Set Platform
@@ -305,12 +330,16 @@ public class JOSMTestRules implements TestRule {
             Main.setProjection(Projections.getProjectionByCode("EPSG:3857")); // Mercator
         }
 
+        if (useProjectionNadGrids) {
+            MainApplication.setupNadGridSources();
+        }
+
         // Set API
         if (useAPI == APIType.DEV) {
-            Main.pref.put("osm-server.url", "http://api06.dev.openstreetmap.org/api");
+            Config.getPref().put("osm-server.url", "http://api06.dev.openstreetmap.org/api");
         } else if (useAPI == APIType.FAKE) {
             FakeOsmApi api = FakeOsmApi.getInstance();
-            Main.pref.put("osm-server.url", api.getServerUrl());
+            Config.getPref().put("osm-server.url", api.getServerUrl());
         }
 
         // Initialize API
diff --git a/test/unit/org/openstreetmap/josm/tools/ExifReaderTest.java b/test/unit/org/openstreetmap/josm/tools/ExifReaderTest.java
index 2ad2840..98e10b2 100644
--- a/test/unit/org/openstreetmap/josm/tools/ExifReaderTest.java
+++ b/test/unit/org/openstreetmap/josm/tools/ExifReaderTest.java
@@ -23,6 +23,7 @@ import org.openstreetmap.josm.testutils.JOSMTestRules;
 import org.openstreetmap.josm.tools.date.DateUtils;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+import org.openstreetmap.josm.data.coor.conversion.DMSCoordinateFormat;
 
 /**
  * EXIF metadata extraction test
@@ -103,8 +104,8 @@ public class ExifReaderTest {
         LatLon latlon = ExifReader.readLatLon(directionSampleFile);
         assertNotNull(latlon);
         DecimalFormat f = new DecimalFormat("00.0");
-        assertEquals("51°46'"+f.format(43.0)+"\"", LatLon.degreesMinutesSeconds(latlon.lat()));
-        assertEquals("8°21'"+f.format(56.3)+"\"", LatLon.degreesMinutesSeconds(latlon.lon()));
+        assertEquals("51°46'"+f.format(43.0)+"\"", DMSCoordinateFormat.degreesMinutesSeconds(latlon.lat()));
+        assertEquals("8°21'"+f.format(56.3)+"\"", DMSCoordinateFormat.degreesMinutesSeconds(latlon.lon()));
     }
 
     /**
diff --git a/test/unit/org/openstreetmap/josm/tools/LoggingTest.java b/test/unit/org/openstreetmap/josm/tools/LoggingTest.java
index 4ba9879..6f85999 100644
--- a/test/unit/org/openstreetmap/josm/tools/LoggingTest.java
+++ b/test/unit/org/openstreetmap/josm/tools/LoggingTest.java
@@ -44,19 +44,19 @@ public class LoggingTest {
     };
 
     /**
-     * @throws java.lang.Exception
+     * @throws SecurityException if a security error occurs
      */
     @Before
-    public void setUp() throws Exception {
+    public void setUp() throws SecurityException {
         captured = null;
         Logging.getLogger().addHandler(handler);
     }
 
     /**
-     * @throws java.lang.Exception
+     * @throws SecurityException if a security error occurs
      */
     @After
-    public void tearDown() throws Exception {
+    public void tearDown() throws SecurityException {
         Logging.getLogger().removeHandler(handler);
     }
 
@@ -212,7 +212,7 @@ public class LoggingTest {
     }
 
     /**
-     * Test method for {@link org.openstreetmap.josm.tools.Logging#logWithStackTrace(java.util.logging.Level, java.lang.String, java.lang.Throwable)}.
+     * Test method for {@link Logging#logWithStackTrace(Level, String, Throwable)}.
      */
     @Test
     public void testLogWithStackTraceLevelStringThrowable() {
diff --git a/test/unit/org/openstreetmap/josm/tools/OsmUrlToBoundsTest.java b/test/unit/org/openstreetmap/josm/tools/OsmUrlToBoundsTest.java
index 2244274..15ff6e8 100644
--- a/test/unit/org/openstreetmap/josm/tools/OsmUrlToBoundsTest.java
+++ b/test/unit/org/openstreetmap/josm/tools/OsmUrlToBoundsTest.java
@@ -26,9 +26,9 @@ public class OsmUrlToBoundsTest {
      */
     @Test
     public void testPositionToBounds() {
-        Assert.assertEquals(new Bounds(51.7167359,8.7573485,51.720724,8.7659315),
+        Assert.assertEquals(new Bounds(51.7167359, 8.7573485, 51.720724, 8.7659315),
                 OsmUrlToBounds.positionToBounds(51.71873, 8.76164, 17));
-        Assert.assertEquals(new Bounds(40.8609329,-75.7523458,40.8633671,-75.7480542),
+        Assert.assertEquals(new Bounds(40.8609329, -75.7523458, 40.8633671, -75.7480542),
                 OsmUrlToBounds.positionToBounds(40.86215, -75.75020, 18));
     }
 
diff --git a/test/unit/org/openstreetmap/josm/tools/PlatformHookOsxTest.java b/test/unit/org/openstreetmap/josm/tools/PlatformHookOsxTest.java
index f3dcbae..a2f2413 100644
--- a/test/unit/org/openstreetmap/josm/tools/PlatformHookOsxTest.java
+++ b/test/unit/org/openstreetmap/josm/tools/PlatformHookOsxTest.java
@@ -36,7 +36,7 @@ public class PlatformHookOsxTest {
      */
     @Test
     public void testStartupHook() {
-        hook.startupHook((a,b,c,d) -> System.out.println("callback"));
+        hook.startupHook((a, b, c, d) -> System.out.println("callback"));
     }
 
     /**
diff --git a/test/unit/org/openstreetmap/josm/tools/PlatformHookWindowsTest.java b/test/unit/org/openstreetmap/josm/tools/PlatformHookWindowsTest.java
index c1ce65d..c663847 100644
--- a/test/unit/org/openstreetmap/josm/tools/PlatformHookWindowsTest.java
+++ b/test/unit/org/openstreetmap/josm/tools/PlatformHookWindowsTest.java
@@ -43,7 +43,7 @@ public class PlatformHookWindowsTest {
      */
     @Test
     public void testStartupHook() {
-        hook.startupHook((a,b,c,d) -> System.out.println("callback"));
+        hook.startupHook((a, b, c, d) -> System.out.println("callback"));
     }
 
     /**
diff --git a/test/unit/org/openstreetmap/josm/gui/util/RotationAngleTest.java b/test/unit/org/openstreetmap/josm/tools/RotationAngleTest.java
similarity index 96%
rename from test/unit/org/openstreetmap/josm/gui/util/RotationAngleTest.java
rename to test/unit/org/openstreetmap/josm/tools/RotationAngleTest.java
index 19ed9f0..e7b25c2 100644
--- a/test/unit/org/openstreetmap/josm/gui/util/RotationAngleTest.java
+++ b/test/unit/org/openstreetmap/josm/tools/RotationAngleTest.java
@@ -1,5 +1,5 @@
 // License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui.util;
+package org.openstreetmap.josm.tools;
 
 import static org.junit.Assert.assertEquals;
 
diff --git a/test/unit/org/openstreetmap/josm/tools/TerritoriesTest.java b/test/unit/org/openstreetmap/josm/tools/TerritoriesTest.java
index 112a1e5..fb3ee1e 100644
--- a/test/unit/org/openstreetmap/josm/tools/TerritoriesTest.java
+++ b/test/unit/org/openstreetmap/josm/tools/TerritoriesTest.java
@@ -39,7 +39,7 @@ public class TerritoriesTest {
         check("Paris", new LatLon(48.8567, 2.3508), "EU", "FR", "FX");
     }
 
-    private static void check(String name, LatLon ll, String ... expectedCodes) {
+    private static void check(String name, LatLon ll, String... expectedCodes) {
         for (String e : expectedCodes) {
             assertTrue(name + " " + e, Territories.isIso3166Code(e, ll));
         }
diff --git a/test/unit/org/openstreetmap/josm/tools/bugreport/BugReportExceptionHandlerTest.java b/test/unit/org/openstreetmap/josm/tools/bugreport/BugReportExceptionHandlerTest.java
index b77da96..c086a40 100644
--- a/test/unit/org/openstreetmap/josm/tools/bugreport/BugReportExceptionHandlerTest.java
+++ b/test/unit/org/openstreetmap/josm/tools/bugreport/BugReportExceptionHandlerTest.java
@@ -27,7 +27,9 @@ public class BugReportExceptionHandlerTest {
     @Test
     public void testHandleException() throws InterruptedException {
         CountDownLatch latch = new CountDownLatch(1);
-        BugReportQueue.getInstance().addBugReportHandler(e -> {latch.countDown(); return false;});
+        BugReportQueue.getInstance().addBugReportHandler(e -> {
+            latch.countDown(); return false;
+        });
         BugReportExceptionHandler.handleException(new Exception("testHandleException"));
         latch.await();
     }
diff --git a/test/unit/org/openstreetmap/josm/tools/bugreport/BugReportTest.java b/test/unit/org/openstreetmap/josm/tools/bugreport/BugReportTest.java
index 40fb56b..9659462 100644
--- a/test/unit/org/openstreetmap/josm/tools/bugreport/BugReportTest.java
+++ b/test/unit/org/openstreetmap/josm/tools/bugreport/BugReportTest.java
@@ -11,6 +11,7 @@ import java.io.StringWriter;
 
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.actions.ShowStatusReportAction;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -25,16 +26,16 @@ public class BugReportTest {
      */
     @Rule
     @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
-    public JOSMTestRules test = new JOSMTestRules().preferences();
+    public JOSMTestRules test = new JOSMTestRules().preferences().platform();
 
     /**
-     * Test {@link BugReport#getReportText()}
+     * Test {@link BugReport#getReportText}
      */
     @Test
     public void testReportText() {
         ReportedException e = interceptInChildMethod(new IOException("test-exception-message"));
         e.put("test-key", "test-value");
-        String text = new BugReport(e).getReportText();
+        String text = new BugReport(e).getReportText(ShowStatusReportAction.getReportHeader());
 
         assertTrue(text.contains("test-exception-message"));
         assertTrue(text.contains("interceptInChildMethod"));
diff --git a/tools/checkstyle/josm_checks.xml b/tools/checkstyle/josm_checks.xml
index 5071372..d1e28e1 100644
--- a/tools/checkstyle/josm_checks.xml
+++ b/tools/checkstyle/josm_checks.xml
@@ -14,7 +14,7 @@ JOSM Checkstyle rules
   <property name="charset" value="UTF-8"/>
   <module name="TreeWalker">
     <module name="BooleanExpressionComplexity">
-      <property name="max" value="7"/>
+      <property name="max" value="8"/>
     </module>
     <module name="CatchParameterName">
       <property name="format" value="^(e[1-9]?|t|ex[1-9]?|[a-z][a-z][a-zA-Z]+)$"/>
diff --git a/tools/checkstyle/josm_filters.xml b/tools/checkstyle/josm_filters.xml
index 07f4510..ca6fdce 100644
--- a/tools/checkstyle/josm_filters.xml
+++ b/tools/checkstyle/josm_filters.xml
@@ -23,7 +23,10 @@
   <suppress checks="." files="[\\/]test[\\/]config[\\/]" />
   <suppress checks="." files="[\\/]test[\\/]data[\\/]" />
   <suppress checks="." files="[\\/]test[\\/]lib[\\/]" />
-  <suppress checks="." files="[\\/]tools[\\/]" />
+  <suppress checks="." files="[\\/]tools[\\/]checkstyle[\\/]" />
+  <suppress checks="." files="[\\/]tools[\\/]findbugs[\\/]" />
+  <suppress checks="." files="[\\/]tools[\\/]japicc[\\/]" />
+  <suppress checks="." files="[\\/]tools[\\/]pmd[\\/]" />
   <suppress checks="." files="[\\/]windows[\\/]" />
   <suppress checks="HeaderCheck" files="Ellipsoid\.java" />
   <suppress checks="HeaderCheck" files="NTV2GridShift\.java" />
diff --git a/tools/findbugs/buggy.icns b/tools/findbugs/buggy.icns
deleted file mode 100644
index b1f4660..0000000
Binary files a/tools/findbugs/buggy.icns and /dev/null differ
diff --git a/tools/japicc/japi-compliance-checker.pl b/tools/japicc/japi-compliance-checker.pl
index 9a290a2..66fc969 100644
--- a/tools/japicc/japi-compliance-checker.pl
+++ b/tools/japicc/japi-compliance-checker.pl
@@ -1,6 +1,6 @@
 #!/usr/bin/perl
 ###########################################################################
-# Java API Compliance Checker (JAPICC) 2.1
+# Java API Compliance Checker (JAPICC) 2.3
 # A tool for checking backward compatibility of a Java library API
 #
 # Written by Andrey Ponomarenko
@@ -42,9 +42,9 @@ use File::Basename qw(dirname);
 use Cwd qw(abs_path cwd);
 use Data::Dumper;
 
-my $TOOL_VERSION = "2.1";
-my $API_DUMP_VERSION = "2.1";
-my $API_DUMP_VERSION_MIN = "2.0";
+my $TOOL_VERSION = "2.3";
+my $API_DUMP_VERSION = "2.2";
+my $API_DUMP_VERSION_MIN = "2.2";
 
 # Internal modules
 my $MODULES_DIR = getModules();
@@ -109,6 +109,7 @@ GetOptions("h|help!" => \$In::Opt{"Help"},
   "skip-internal-packages|skip-internal=s" => \$In::Opt{"SkipInternalPackages"},
   "skip-internal-types=s" => \$In::Opt{"SkipInternalTypes"},
   "dump|dump-api=s" => \$In::Opt{"DumpAPI"},
+  "check-packages=s" => \$In::Opt{"CheckPackages"},
   "classes-list=s" => \$In::Opt{"ClassListPath"},
   "annotations-list=s" => \$In::Opt{"AnnotationsListPath"},
   "skip-annotations-list=s" => \$In::Opt{"SkipAnnotationsListPath"},
@@ -290,16 +291,23 @@ EXTRA OPTIONS:
         *examples*
   
   -skip-internal-packages PATTERN
-      Do not check packages matched by the pattern.
+      Do not check packages matched by the regular expression.
   
   -skip-internal-types PATTERN
-      Do not check types (classes and interfaces) matched by the pattern.
+      Do not check types (classes and interfaces) matched by the regular
+      expression. It's matched against full qualified type names (e.g.
+      'org.xyz.Name<T>'). It has to match any part of type name.
   
   -dump|-dump-api PATH
       Dump library API to gzipped TXT format file. You can transfer it
       anywhere and pass instead of the descriptor. Also it may be used
-      for debugging the tool.
-      
+      for debugging the tool. PATH is the path to the Java archive or
+      XML descriptor of the library.
+  
+  -check-packages PATTERN
+      Check packages matched by the regular expression. Other packages
+      will not be checked.
+  
   -classes-list PATH
       This option allows to specify a file with a list
       of classes that should be checked, other classes will not be checked.
@@ -441,6 +449,8 @@ sub helpMsg() {
 #Aliases
 my (%MethodInfo, %TypeInfo, %TName_Tid) = ();
 
+my %TName_Tid_Generic = ();
+
 #Separate checked and unchecked exceptions
 my %KnownRuntimeExceptions= map {$_=>1} (
     "java.lang.AnnotationTypeMismatchException",
@@ -521,6 +531,7 @@ my %CheckedTypes;
 #Classes
 my %LibArchives;
 my %Class_Methods;
+my %Class_Methods_Generic;
 my %Class_AbstractMethods;
 my %Class_Fields;
 my %ClassMethod_AddedUsed;
@@ -529,6 +540,7 @@ my %Class_Constructed;
 #Methods
 my %CheckedMethods;
 my %MethodUsed;
+my %OldMethodSignature;
 
 #Merging
 my %AddedMethod_Abstract;
@@ -536,6 +548,7 @@ my %RemovedMethod_Abstract;
 my %ChangedReturnFromVoid;
 my %CompatRules;
 my %IncompleteRules;
+my %UnknownRules;
 
 #Report
 my %TypeChanges;
@@ -622,7 +635,8 @@ sub mergeClasses()
     foreach my $ClassName (keys(%{$Class_Methods{1}}))
     {
         next if(not $ClassName);
-        my $Type1 = getType($TName_Tid{1}{$ClassName}, 1);
+        my $Type1_Id = $TName_Tid{1}{$ClassName};
+        my $Type1 = getType($Type1_Id, 1);
         
         if($Type1->{"Type"}!~/class|interface/) {
             next;
@@ -633,12 +647,77 @@ sub mergeClasses()
             next;
         }
         
-        if(not classFilter($Type1, 1, 0)) {
+        if(not classFilter($Type1, 1, 1)) {
             next;
         }
         
-        my $Type2_Id = $TName_Tid{2}{$ClassName};
-        if(not $Type2_Id)
+        my $GenericName = getGeneric($ClassName);
+        my $Type2_Id = undef;
+        
+        if(defined $TName_Tid{2}{$ClassName}) {
+            $Type2_Id = $TName_Tid{2}{$ClassName};
+        }
+        elsif(defined $TName_Tid_Generic{2}{$GenericName}) {
+            $Type2_Id = $TName_Tid_Generic{2}{$GenericName};
+        }
+        
+        if($Type2_Id)
+        {
+            my $TName1 = $Type1->{"Name"};
+            my $TName2 = getTypeName($Type2_Id, 2);
+            
+            my $Generic1 = (index($TName1, "<")!=-1);
+            my $Generic2 = (index($TName2, "<")!=-1);
+            
+            if($Generic1 ne $Generic2)
+            { # removed generic parameters
+                foreach my $Method (keys(%{$Class_Methods{1}{$ClassName}}))
+                {
+                    if(not methodFilter($Method, 1)) {
+                        next;
+                    }
+                    
+                    $CheckedTypes{$ClassName} = 1;
+                    $CheckedMethods{$Method} = 1;
+                    
+                    if($Type1->{"Type"} eq "class")
+                    {
+                        if($Generic1)
+                        {
+                            %{$CompatProblems{$Method}{"Class_Became_Raw"}{"this"}} = (
+                                "Type_Name"=>$ClassName,
+                                "New_Value"=>$TName2,
+                                "Target"=>$ClassName);
+                        }
+                        else
+                        {
+                            %{$CompatProblems{$Method}{"Class_Became_Generic"}{"this"}} = (
+                                "Type_Name"=>$ClassName,
+                                "New_Value"=>$TName2,
+                                "Target"=>$ClassName);
+                        }
+                    }
+                    else
+                    {
+                        if($Generic1)
+                        {
+                            %{$CompatProblems{$Method}{"Interface_Became_Raw"}{"this"}} = (
+                                "Type_Name"=>$ClassName,
+                                "New_Value"=>$TName2,
+                                "Target"=>$ClassName);
+                        }
+                        else
+                        {
+                            %{$CompatProblems{$Method}{"Interface_Became_Generic"}{"this"}} = (
+                                "Type_Name"=>$ClassName,
+                                "New_Value"=>$TName2,
+                                "Target"=>$ClassName);
+                        }
+                    }
+                }
+            }
+        }
+        else
         { # classes and interfaces with public methods
             foreach my $Method (keys(%{$Class_Methods{1}{$ClassName}}))
             {
@@ -685,8 +764,17 @@ sub mergeClasses()
         }
         
         my $ClassName = $Class1->{"Name"};
+        my $GenericName = getGeneric($ClassName);
+        my $Class2_Id = undef;
         
-        if(my $Class2_Id = $TName_Tid{2}{$ClassName})
+        if(defined $TName_Tid{2}{$ClassName}) {
+            $Class2_Id = $TName_Tid{2}{$ClassName};
+        }
+        elsif(defined $TName_Tid_Generic{2}{$GenericName}) {
+            $Class2_Id = $TName_Tid_Generic{2}{$GenericName};
+        }
+        
+        if($Class2_Id)
         { # classes and interfaces with public static fields
             if(not defined $Class_Methods{1}{$ClassName})
             {
@@ -868,9 +956,15 @@ sub mergeTypes($$)
     
     return {} if(not $Type1{"Name"} or not $Type2{"Name"});
     return {} if(not $Type1{"Archive"} or not $Type2{"Archive"});
-    return {} if($Type1{"Name"} ne $Type2{"Name"});
+    if($Type1{"Name"} ne $Type2{"Name"})
+    {
+        if(getGeneric($Type1{"Name"}) ne getGeneric($Type2{"Name"}))
+        { # compare type declarations if became generic or raw
+            return {};
+        }
+    }
     
-    if(not classFilter(\%Type1, 1, 0)) {
+    if(not classFilter(\%Type1, 1, 1)) {
         return {};
     }
     
@@ -924,7 +1018,7 @@ sub mergeTypes($$)
     
     pushType($Type1_Id, $Type2_Id);
     
-    foreach my $AddedMethod (keys(%{$AddedMethod_Abstract{$Type1{"Name"}}}))
+    foreach my $AddedMethod (keys(%{$AddedMethod_Abstract{$Type2{"Name"}}}))
     {
         if($Type1{"Type"} eq "class")
         {
@@ -999,54 +1093,52 @@ sub mergeTypes($$)
         my $SuperClassName1 = $SuperClass1->{"Name"};
         my $SuperClassName2 = $SuperClass2->{"Name"};
         
+        # Java 6: java.lang.Object
+        # Java 7: none
+        if(not $SuperClassName1) {
+            $SuperClassName1 = "java.lang.Object";
+        }
+        
+        if(not $SuperClassName2) {
+            $SuperClassName2 = "java.lang.Object";
+        }
+        
         if($SuperClassName2 ne $SuperClassName1)
         {
-            if($SuperClassName1 eq "java.lang.Object"
-            or not $SuperClassName1)
+            if($SuperClassName1 eq "java.lang.Object")
             {
-              # Java 6: java.lang.Object
-              # Java 7: none
-                if($SuperClassName2 ne "java.lang.Object")
+                if($SuperClass2->{"Abstract"}
+                and $Type1{"Abstract"} and $Type2{"Abstract"}
+                and keys(%{$Class_AbstractMethods{2}{$SuperClassName2}}))
                 {
-                    if($SuperClass2->{"Abstract"}
-                    and $Type1{"Abstract"} and $Type2{"Abstract"}
-                    and keys(%{$Class_AbstractMethods{2}{$SuperClassName2}}))
+                    if(my ($Invoked, $InvokedBy) = getInvoked($Type1{"Name"}))
                     {
-                        if(my ($Invoked, $InvokedBy) = getInvoked($Type1{"Name"}))
-                        {
-                            %{$SubProblems{"Abstract_Class_Added_Super_Abstract_Class_Invoked_By_Others"}{""}} = (
-                                "Type_Name"=>$Type1{"Name"},
-                                "Target"=>$SuperClassName2,
-                                "Invoked"=>$Invoked,
-                                "Invoked_By"=>$InvokedBy);
-                        }
-                        else
-                        {
-                            %{$SubProblems{"Abstract_Class_Added_Super_Abstract_Class"}{""}} = (
-                                "Type_Name"=>$Type1{"Name"},
-                                "Target"=>$SuperClassName2);
-                        }
+                        %{$SubProblems{"Abstract_Class_Added_Super_Abstract_Class_Invoked_By_Others"}{""}} = (
+                            "Type_Name"=>$Type1{"Name"},
+                            "Target"=>$SuperClassName2,
+                            "Invoked"=>$Invoked,
+                            "Invoked_By"=>$InvokedBy);
                     }
                     else
                     {
-                        %{$SubProblems{"Added_Super_Class"}{""}} = (
+                        %{$SubProblems{"Abstract_Class_Added_Super_Abstract_Class"}{""}} = (
                             "Type_Name"=>$Type1{"Name"},
                             "Target"=>$SuperClassName2);
                     }
                 }
-            }
-            elsif($SuperClassName2 eq "java.lang.Object"
-            or not $SuperClassName2)
-            {
-              # Java 6: java.lang.Object
-              # Java 7: none
-                if($SuperClassName1 ne "java.lang.Object")
+                else
                 {
-                    %{$SubProblems{"Removed_Super_Class"}{""}} = (
+                    %{$SubProblems{"Added_Super_Class"}{""}} = (
                         "Type_Name"=>$Type1{"Name"},
-                        "Target"=>$SuperClassName1);
+                        "Target"=>$SuperClassName2);
                 }
             }
+            elsif($SuperClassName2 eq "java.lang.Object")
+            {
+                %{$SubProblems{"Removed_Super_Class"}{""}} = (
+                    "Type_Name"=>$Type1{"Name"},
+                    "Target"=>$SuperClassName1);
+            }
             else
             {
                 %{$SubProblems{"Changed_Super_Class"}{""}} = (
@@ -1336,7 +1428,7 @@ sub mergeTypes($$)
             }
         }
         
-        my %Sub_SubChanges = detectTypeChange($FieldType1_Id, $FieldType2_Id, "Field");
+        my %Sub_SubChanges = detectTypeChange(\%Type1, \%Type2, $FieldType1_Id, $FieldType2_Id, "Field");
         foreach my $Sub_SubProblemType (keys(%Sub_SubChanges))
         {
             %{$SubProblems{$Sub_SubProblemType}{$Field_Name}}=(
@@ -1459,7 +1551,16 @@ sub getMShort($)
 sub findMethod($$$$)
 {
     my ($Method, $MethodVersion, $ClassName, $ClassVersion) = @_;
-    my $ClassId = $TName_Tid{$ClassVersion}{$ClassName};
+    
+    my $GenericName = getGeneric($ClassName);
+    my $ClassId = undef;
+    
+    if(defined $TName_Tid{$ClassVersion}{$ClassName}) {
+        $ClassId = $TName_Tid{$ClassVersion}{$ClassName};
+    }
+    elsif(defined $TName_Tid_Generic{$ClassVersion}{$GenericName}) {
+        $ClassId = $TName_Tid_Generic{$ClassVersion}{$GenericName};
+    }
     
     if($ClassId)
     {
@@ -1516,16 +1617,27 @@ sub findMethod($$$$)
 sub findMethod_Class($$$)
 {
     my ($Method, $ClassName, $ClassVersion) = @_;
+    
     my $TargetSuffix = getMSuffix($Method);
     my $TargetShortName = getMShort($Method);
+    my $GenericName = getGeneric($ClassName);
+    
+    my @Candidates = ();
     
-    if(not defined $Class_Methods{$ClassVersion}{$ClassName}) {
+    if(defined $Class_Methods{$ClassVersion}{$ClassName}) {
+        @Candidates = keys(%{$Class_Methods{$ClassVersion}{$ClassName}});
+    }
+    elsif(defined $Class_Methods_Generic{$ClassVersion}{$GenericName}) {
+        @Candidates = keys(%{$Class_Methods_Generic{$ClassVersion}{$GenericName}});
+    }
+    else {
         return undef;
     }
     
-    foreach my $Candidate (sort keys(%{$Class_Methods{$ClassVersion}{$ClassName}}))
+    foreach my $Candidate (sort @Candidates)
     { # search for method with the same parameters suffix
         next if($MethodInfo{$ClassVersion}{$Candidate}{"Constructor"});
+        
         if($TargetSuffix eq getMSuffix($Candidate))
         {
             if($TargetShortName eq getMShort($Candidate)) {
@@ -1537,6 +1649,13 @@ sub findMethod_Class($$$)
     return undef;
 }
 
+sub getBaseSignature($)
+{
+    my $Method = $_[0];
+    $Method=~s/\)(.+)\Z/\)/g;
+    return $Method;
+}
+
 sub prepareData($)
 {
     my $LVer = $_[0];
@@ -1557,6 +1676,11 @@ sub prepareData($)
         
         $TName_Tid{$LVer}{$TName} = $TypeId;
         
+        if(defined $TypeAttr->{"Archive"})
+        { # declaration
+            $TName_Tid_Generic{$LVer}{getGeneric($TName)} = $TypeId;
+        }
+        
         if(not $TypeAttr->{"Dep"})
         {
             if(my $Archive = $TypeAttr->{"Archive"}) {
@@ -1589,6 +1713,8 @@ sub prepareData($)
         {
             my $CName = getTypeName($ClassId, $LVer);
             $Class_Methods{$LVer}{$CName}{$Method} = 1;
+            $Class_Methods_Generic{$LVer}{getGeneric($CName)}{$Method} = 1;
+            
             if($MAttr->{"Abstract"}) {
                 $Class_AbstractMethods{$LVer}{$CName}{$Method} = 1;
             }
@@ -1603,6 +1729,11 @@ sub prepareData($)
                 registerUsage($MAttr->{"Return"}, $LVer);
             }
         }
+        
+        if($LVer==1 and not $MAttr->{"Constructor"}
+        and my $BaseSign = getBaseSignature($Method)) {
+            $OldMethodSignature{$BaseSign} = $Method;
+        }
     }
 }
 
@@ -1856,6 +1987,30 @@ sub mergeParameters($$$)
     
     # checking type declaration changes
     my $SubProblems = mergeTypes($ParamType1_Id, $ParamType2_Id);
+    
+    my $Type1 = getType($ParamType1_Id, 1);
+    my $Type2 = getType($ParamType2_Id, 2);
+    
+    if($Type1->{"Name"} ne $Type2->{"Name"})
+    {
+        if(index($Type1->{"Name"}, "...")!=-1 and index($Type2->{"Name"}, "[]")!=-1)
+        {
+            %{$CompatProblems{$Method}{"Variable_Arity_To_Array"}{$Parameter_Name}} = (
+                "Type_Name"=>getTypeName($MethodInfo{1}{$Method}{"Class"}, 1),
+                "Param_Name"=>$Parameter_Name,
+                "Old_Value"=>$Type1->{"Name"},
+                "New_Value"=>$Type2->{"Name"});
+        }
+        elsif(index($Type1->{"Name"}, "[]")!=-1 and index($Type2->{"Name"}, "...")!=-1)
+        {
+            %{$CompatProblems{$Method}{"Array_To_Variable_Arity"}{$Parameter_Name}} = (
+                "Type_Name"=>getTypeName($MethodInfo{1}{$Method}{"Class"}, 1),
+                "Param_Name"=>$Parameter_Name,
+                "Old_Value"=>$Type1->{"Name"},
+                "New_Value"=>$Type2->{"Name"});
+        }
+    }
+    
     foreach my $SubProblemType (keys(%{$SubProblems}))
     {
         foreach my $SubLocation (keys(%{$SubProblems->{$SubProblemType}}))
@@ -1866,9 +2021,9 @@ sub mergeParameters($$$)
     }
 }
 
-sub detectTypeChange($$$)
+sub detectTypeChange($$$$$)
 {
-    my ($Type1_Id, $Type2_Id, $Prefix) = @_;
+    my ($Ct1, $Ct2, $Type1_Id, $Type2_Id, $Prefix) = @_;
     my %LocalProblems = ();
     
     my $Type1 = getType($Type1_Id, 1);
@@ -1877,6 +2032,23 @@ sub detectTypeChange($$$)
     my $Type1_Name = $Type1->{"Name"};
     my $Type2_Name = $Type2->{"Name"};
     
+    my $Type1_Show = $Type1_Name;
+    my $Type2_Show = $Type2_Name;
+    
+    if(defined $Ct1->{"GenericParam"}
+    and defined $Ct1->{"GenericParam"}{$Type1_Name})
+    {
+        $Type1_Name = getTypeName($Ct1->{"GenericParam"}{$Type1_Name}, 1);
+        $Type1_Show .= " extends ".$Type1_Name;
+    }
+    
+    if(defined $Ct2->{"GenericParam"}
+    and defined $Ct2->{"GenericParam"}{$Type2_Name})
+    {
+        $Type2_Name = getTypeName($Ct2->{"GenericParam"}{$Type2_Name}, 2);
+        $Type2_Show .= " extends ".$Type2_Name;
+    }
+    
     my $Type1_Base = undef;
     my $Type2_Base = undef;
     
@@ -1896,6 +2068,7 @@ sub detectTypeChange($$$)
     
     return () if(not $Type1_Name or not $Type2_Name);
     return () if(not $Type1_Base->{"Name"} or not $Type2_Base->{"Name"});
+    
     if($Type1_Base->{"Name"} ne $Type2_Base->{"Name"} and $Type1_Name eq $Type2_Name)
     {# base type change
         %{$LocalProblems{"Changed_".$Prefix."_BaseType"}}=(
@@ -1905,8 +2078,8 @@ sub detectTypeChange($$$)
     elsif($Type1_Name ne $Type2_Name)
     {# type change
         %{$LocalProblems{"Changed_".$Prefix."_Type"}}=(
-            "Old_Value"=>$Type1_Name,
-            "New_Value"=>$Type2_Name);
+            "Old_Value"=>$Type1_Show,
+            "New_Value"=>$Type2_Show);
     }
     return %LocalProblems;
 }
@@ -1952,7 +2125,8 @@ sub getSignature($$$)
     
     # settings
     my ($Full, $Html, $Simple, $Italic, $Color,
-    $ShowParams, $ShowClass, $ShowAttr, $Desc, $Target) = (0, 0, 0, 0, 0, 0, 0, 0, 0, undef);
+    $ShowParams, $ShowClass, $ShowAttr, $Desc,
+    $ShowReturn, $Target) = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, undef);
     
     if($Kind=~/Full/) {
         $Full = 1;
@@ -1984,10 +2158,13 @@ sub getSignature($$$)
     if($Kind=~/Desc/) {
         $Desc = 1;
     }
+    if($Kind=~/Return/) {
+        $ShowReturn = 1;
+    }
     
     if(not defined $MethodInfo{$LVer}{$Method}{"ShortName"})
     { # from java.lang.Object
-        if($Html or $Simple) {
+        if($Html) {
             return specChars($Method);
         }
         else {
@@ -1995,7 +2172,16 @@ sub getSignature($$$)
         }
     }
     
-    my $Signature = $MethodInfo{$LVer}{$Method}{"ShortName"};
+    my $Signature = "";
+    
+    my $ShortName = $MethodInfo{$LVer}{$Method}{"ShortName"};
+    
+    if($Html) {
+        $ShortName = specChars($ShortName);
+    }
+    
+    $Signature .= $ShortName;
+    
     if($Full or $ShowClass)
     {
         my $Class = getTypeName($MethodInfo{$LVer}{$Method}{"Class"}, $LVer);
@@ -2137,7 +2323,10 @@ sub getSignature($$$)
                 }
             }
         }
-        
+    }
+    
+    if($Full or $ShowReturn)
+    {
         if(my $ReturnId = $MethodInfo{$LVer}{$Method}{"Return"})
         {
             my $RName = getTypeName($ReturnId, $LVer);
@@ -2150,7 +2339,10 @@ sub getSignature($$$)
                 $RName=~s/(\A|\<\s*|\,\s*)[a-z0-9\.]+\./$1/g;
             }
             
-            if($Simple) {
+            if($Desc) {
+                $Signature = "<b>".specChars($RName)."</b> ".$Signature;
+            }
+            elsif($Simple) {
                 $Signature .= " <b>:</b> ".specChars($RName);
             }
             elsif($Html) {
@@ -2160,7 +2352,10 @@ sub getSignature($$$)
                 $Signature .= " : ".$RName;
             }
         }
-        
+    }
+    
+    if($Full)
+    {
         if(not $In::Opt{"SkipDeprecated"})
         {
             if($MethodInfo{$LVer}{$Method}{"Deprecated"}) {
@@ -2321,6 +2516,22 @@ sub getSummary($)
         "Warnings"=>0,
         "Affected"=>0);
     
+    # check rules
+    foreach my $Method (sort keys(%CompatProblems))
+    {
+        foreach my $Kind (keys(%{$CompatProblems{$Method}}))
+        {
+            if(not defined $CompatRules{"Binary"}{$Kind} and not defined $CompatRules{"Source"}{$Kind})
+            { # unknown rule
+                if(not $UnknownRules{$Level}{$Kind})
+                { # only one warning
+                    printMsg("WARNING", "unknown rule \"$Kind\" (\"$Level\")");
+                    $UnknownRules{$Level}{$Kind}=1;
+                }
+            }
+        }
+    }
+    
     foreach my $Method (sort keys(%CompatProblems))
     {
         foreach my $Kind (sort keys(%{$CompatProblems{$Method}}))
@@ -2613,7 +2824,11 @@ sub getSummary($)
     $META_DATA .= "checked_types:".keys(%CheckedTypes).";";
     $META_DATA .= "tool_version:$TOOL_VERSION";
     $Problem_Summary .= "</table>\n";
-    return ($TestInfo.$TestResults.$Problem_Summary, $META_DATA);
+    
+    my $AnyChanged = ($Added or $Removed or $M_Problems_High or $M_Problems_Medium or $M_Problems_Low or
+    $T_Problems_High or $T_Problems_Medium or $T_Problems_Low or $M_Other or $T_Other);
+    
+    return ($TestInfo.$TestResults.$Problem_Summary, $META_DATA, $AnyChanged);
 }
 
 sub getStyle($$$)
@@ -2709,7 +2924,7 @@ sub getReportAdded($)
                     $ADDED_METHODS .= "<div class='symbols'>";
                 }
                 
-                my @SortedMethods = sort {lc($MethodInfo{2}{$a}{"Signature"}) cmp lc($MethodInfo{2}{$b}{"Signature"})} keys(%{$NameSpace_Method{$NameSpace}});
+                my @SortedMethods = sort {lc($MethodInfo{2}{$a}{"Signature"}) cmp lc($MethodInfo{2}{$b}{"Signature"})} sort keys(%{$NameSpace_Method{$NameSpace}});
                 foreach my $Method (@SortedMethods)
                 {
                     $Added_Number += 1;
@@ -2813,7 +3028,7 @@ sub getReportRemoved($)
                     $REMOVED_METHODS .= "<div class='symbols'>";
                 }
                 
-                my @SortedMethods = sort {lc($MethodInfo{1}{$a}{"Signature"}) cmp lc($MethodInfo{1}{$b}{"Signature"})} keys(%{$NameSpace_Method{$NameSpace}});
+                my @SortedMethods = sort {lc($MethodInfo{1}{$a}{"Signature"}) cmp lc($MethodInfo{1}{$b}{"Signature"})} sort keys(%{$NameSpace_Method{$NameSpace}});
                 foreach my $Method (@SortedMethods)
                 {
                     $Removed_Number += 1;
@@ -2928,9 +3143,9 @@ sub addMarkup($)
     return $Content;
 }
 
-sub applyMacroses($$$$$)
+sub applyMacroses($$$$$$)
 {
-    my ($Level, $Kind, $Content, $Problem, $AddAttr) = @_;
+    my ($Level, $Subj, $Kind, $Content, $Problem, $AddAttr) = @_;
     
     $Content = addMarkup($Content);
     
@@ -2978,6 +3193,10 @@ sub applyMacroses($$$$$)
                 }
             }
             
+            if($Subj eq "Change") {
+                $Fmt .= "|Return";
+            }
+            
             if(defined $MethodInfo{1}{$Value}
             and defined $MethodInfo{1}{$Value}{"ShortName"}) {
                 $Value = blackName(getSignature($Value, 1, $Fmt));
@@ -3061,7 +3280,7 @@ sub getReportMethodProblems($$)
                     $METHOD_PROBLEMS .= "<span class='pkg_t'>package</span> <span class='pkg'>$NameSpace</span><br/>\n";
                 }
                 
-                my @SortedMethods = sort {lc($MethodInfo{1}{$a}{"Signature"}) cmp lc($MethodInfo{1}{$b}{"Signature"})} keys(%{$NameSpace_Method{$NameSpace}});
+                my @SortedMethods = sort {lc($MethodInfo{1}{$a}{"Signature"}) cmp lc($MethodInfo{1}{$b}{"Signature"})} sort keys(%{$NameSpace_Method{$NameSpace}});
                 foreach my $Method (@SortedMethods)
                 {
                     my %AddAttr = ();
@@ -3077,9 +3296,9 @@ sub getReportMethodProblems($$)
                         {
                             my $ProblemAttr = $MethodChanges{$Method}{$Kind}{$Loc};
                             
-                            if(my $Change = applyMacroses($Level, $Kind, $CompatRules{$Level}{$Kind}{"Change"}, $ProblemAttr, \%AddAttr))
+                            if(my $Change = applyMacroses($Level, "Change", $Kind, $CompatRules{$Level}{$Kind}{"Change"}, $ProblemAttr, \%AddAttr))
                             {
-                                my $Effect = applyMacroses($Level, $Kind, $CompatRules{$Level}{$Kind}{"Effect"}, $ProblemAttr, \%AddAttr);
+                                my $Effect = applyMacroses($Level, "Effect", $Kind, $CompatRules{$Level}{$Kind}{"Effect"}, $ProblemAttr, \%AddAttr);
                                 $METHOD_REPORT .= "<tr>\n<th>$ProblemNum</th>\n<td>".$Change."</td>\n<td>".$Effect."</td>\n</tr>\n";
                                 $ProblemNum += 1;
                                 $ProblemsNum += 1;
@@ -3232,9 +3451,9 @@ sub getReportTypeProblems($$)
                         
                         my $ProblemAttr = $TypeChanges_Sev{$TypeName}{$Kind}{$Location};
                         
-                        if(my $Change = applyMacroses($Level, $Kind, $CompatRules{$Level}{$Kind}{"Change"}, $ProblemAttr, \%AddAttr))
+                        if(my $Change = applyMacroses($Level, "Change", $Kind, $CompatRules{$Level}{$Kind}{"Change"}, $ProblemAttr, \%AddAttr))
                         {
-                            my $Effect = applyMacroses($Level, $Kind, $CompatRules{$Level}{$Kind}{"Effect"}, $ProblemAttr, \%AddAttr);
+                            my $Effect = applyMacroses($Level, "Effect", $Kind, $CompatRules{$Level}{$Kind}{"Effect"}, $ProblemAttr, \%AddAttr);
                             
                             $TYPE_REPORT .= "<tr>\n<th>$ProblemNum</th>\n<td>".$Change."</td>\n<td>".$Effect."</td>\n</tr>\n";
                             $ProblemNum += 1;
@@ -3586,10 +3805,10 @@ sub getReport($)
         my $Keywords = $In::Opt{"TargetTitle"}.", compatibility";
         my $Description = "Compatibility report for the ".$In::Opt{"TargetTitle"}." library between ".$In::Desc{1}{"Version"}." and ".$In::Desc{2}{"Version"}." versions";
         
-        my ($BSummary, $BMetaData) = getSummary("Binary");
-        my ($SSummary, $SMetaData) = getSummary("Source");
+        my ($BSummary, $BMetaData, $BAnyChanged) = getSummary("Binary");
+        my ($SSummary, $SMetaData, $SAnyChanged) = getSummary("Source");
         
-        my $Report = "<!-\- $BMetaData -\->\n<!-\- $SMetaData -\->\n".composeHTML_Head($Level, $Title, $Keywords, $Description, $CssStyles, $JScripts)."<body><a name='Source'></a><a name='Binary'></a><a name='Top'></a>";
+        my $Report = "<!-\- $BMetaData -\->\n<!-\- $SMetaData -\->\n".composeHTML_Head($Level, $Title, $Keywords, $Description, $CssStyles, $JScripts, ($BAnyChanged or $SAnyChanged))."<body><a name='Source'></a><a name='Binary'></a><a name='Top'></a>";
         
         $Report .= getReportHeader("Join");
         $Report .= "<br/><div class='tabset'>\n";
@@ -3607,13 +3826,13 @@ sub getReport($)
     }
     else
     {
-        my ($Summary, $MetaData) = getSummary($Level);
+        my ($Summary, $MetaData, $AnyChanged) = getSummary($Level);
         
         my $Title = $In::Opt{"TargetTitle"}.": ".$In::Desc{1}{"Version"}." to ".$In::Desc{2}{"Version"}." ".lc($Level)." compatibility report";
         my $Keywords = $In::Opt{"TargetTitle"}.", ".lc($Level).", compatibility";
         my $Description = "$Level compatibility report for the ".$In::Opt{"TargetTitle"}." library between ".$In::Desc{1}{"Version"}." and ".$In::Desc{2}{"Version"}." versions";
         
-        my $Report = "<!-\- $MetaData -\->\n".composeHTML_Head($Level, $Title, $Keywords, $Description, $CssStyles, $JScripts)."<body><a name='Top'></a>";
+        my $Report = "<!-\- $MetaData -\->\n".composeHTML_Head($Level, $Title, $Keywords, $Description, $CssStyles, $JScripts, $AnyChanged)."<body><a name='Top'></a>";
         $Report .= getReportHeader($Level)."\n".$Summary."\n";
         $Report .= getReportAdded($Level).getReportRemoved($Level);
         $Report .= getReportProblems("High", $Level).getReportProblems("Medium", $Level).getReportProblems("Low", $Level).getReportProblems("Safe", $Level);
@@ -3666,9 +3885,9 @@ sub getReportProblems($$)
     return $Report;
 }
 
-sub composeHTML_Head($$$$$$)
+sub composeHTML_Head($$$$$$$)
 {
-    my ($Level, $Title, $Keywords, $Description, $Styles, $Scripts) = @_;
+    my ($Level, $Title, $Keywords, $Description, $Styles, $Scripts, $AnyChanged) = @_;
     
     my $Head = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n";
     $Head .= "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n";
@@ -3677,6 +3896,10 @@ sub composeHTML_Head($$$$$$)
     $Head .= "<meta name=\"keywords\" content=\"$Keywords\" />\n";
     $Head .= "<meta name=\"description\" content=\"$Description\" />\n";
     
+    if(not $AnyChanged) {
+        $Head .= "<meta name=\"robots\" content=\"noindex\" />\n";
+    }
+    
     my $RPath = getReportPath($Level);
     
     if(defined $In::Opt{"ExternCss"}) {
@@ -3748,43 +3971,62 @@ sub detectAdded()
                 next;
             }
             
-            my $ClassId = $MethodInfo{2}{$Method}{"Class"};
-            my $CName = getTypeName($ClassId, 2);
+            my $Class = getType($MethodInfo{2}{$Method}{"Class"}, 2);
             
-            $CheckedTypes{$CName} = 1;
+            $CheckedTypes{$Class->{"Name"}} = 1;
             $CheckedMethods{$Method} = 1;
             
             if(not $MethodInfo{2}{$Method}{"Constructor"}
-            and my $Overridden = findMethod($Method, 2, $CName, 2))
+            and my $Overridden = findMethod($Method, 2, $Class->{"Name"}, 2))
             {
                 if(defined $MethodInfo{1}{$Overridden}
-                and getTypeType($ClassId, 2) eq "class" and $TName_Tid{1}{$CName})
+                and $Class->{"Type"} eq "class"
+                and ($TName_Tid{1}{$Class->{"Name"}} or $TName_Tid_Generic{1}{getGeneric($Class->{"Name"})}))
                 { # class should exist in previous version
                     %{$CompatProblems{$Overridden}{"Class_Overridden_Method"}{"this.".getSFormat($Method)}}=(
-                        "Type_Name"=>$CName,
+                        "Type_Name"=>$Class->{"Name"},
                         "Target"=>$MethodInfo{2}{$Method}{"Signature"},
                         "Old_Value"=>$Overridden,
                         "New_Value"=>$Method);
                 }
             }
             if($MethodInfo{2}{$Method}{"Abstract"}) {
-                $AddedMethod_Abstract{$CName}{$Method} = 1;
+                $AddedMethod_Abstract{$Class->{"Name"}}{$Method} = 1;
             }
             
-            %{$CompatProblems{$Method}{"Added_Method"}{""}}=();
+            if(not ($MethodInfo{2}{$Method}{"Access"} eq "protected" and $Class->{"Final"})) {
+                %{$CompatProblems{$Method}{"Added_Method"}{""}} = ();
+            }
             
             if(not $MethodInfo{2}{$Method}{"Constructor"})
             {
-                if(getTypeName($MethodInfo{2}{$Method}{"Return"}, 2) ne "void"
-                and my $VoidMethod = checkVoidMethod($Method))
+                my $VoidMethod = checkVoidMethod($Method);
+                my $ReturnType = getTypeName($MethodInfo{2}{$Method}{"Return"}, 2);
+                
+                if(defined $Class->{"GenericParam"}
+                and defined $Class->{"GenericParam"}{$ReturnType}) {
+                    $ReturnType = getTypeName($Class->{"GenericParam"}{$ReturnType}, 2);
+                }
+                
+                if(defined $MethodInfo{1}{$VoidMethod}
+                and $ReturnType ne "void")
+                { # return value type changed from void
+                    $ChangedReturnFromVoid{$VoidMethod} = 1;
+                    $ChangedReturnFromVoid{$Method} = 1;
+                    
+                    %{$CompatProblems{$VoidMethod}{"Changed_Method_Return_From_Void"}{""}}=(
+                        "New_Value"=>getTypeName($MethodInfo{2}{$Method}{"Return"}, 2)
+                    );
+                }
+                elsif(my $OldMethod = $OldMethodSignature{getBaseSignature($Method)})
                 {
-                    if(defined $MethodInfo{1}{$VoidMethod})
-                    { # return value type changed from "void" to 
-                        $ChangedReturnFromVoid{$VoidMethod} = 1;
-                        $ChangedReturnFromVoid{$Method} = 1;
+                    if($OldMethod ne $Method)
+                    {
+                        my $OldReturnType = getTypeName($MethodInfo{1}{$OldMethod}{"Return"}, 1);
                         
-                        %{$CompatProblems{$VoidMethod}{"Changed_Method_Return_From_Void"}{""}}=(
-                            "New_Value"=>getTypeName($MethodInfo{2}{$Method}{"Return"}, 2)
+                        %{$CompatProblems{$OldMethod}{"Changed_Method_Return"}{""}}=(
+                            "Old_Value"=>$OldReturnType,
+                            "New_Value"=>$ReturnType
                         );
                     }
                 }
@@ -3803,20 +4045,20 @@ sub detectRemoved()
                 next;
             }
             
-            my $ClassId = $MethodInfo{1}{$Method}{"Class"};
-            my $CName = getTypeName($ClassId, 1);
+            my $Class = getType($MethodInfo{1}{$Method}{"Class"}, 1);
             
-            $CheckedTypes{$CName} = 1;
+            $CheckedTypes{$Class->{"Name"}} = 1;
             $CheckedMethods{$Method} = 1;
             
             if(not $MethodInfo{1}{$Method}{"Constructor"}
-            and my $MovedUp = findMethod($Method, 1, $CName, 2))
+            and my $MovedUp = findMethod($Method, 1, $Class->{"Name"}, 2))
             {
-                if(getTypeType($ClassId, 1) eq "class"
-                and not $MethodInfo{1}{$Method}{"Abstract"} and $TName_Tid{2}{$CName})
+                if($Class->{"Type"} eq "class"
+                and not $MethodInfo{1}{$Method}{"Abstract"}
+                and ($TName_Tid{2}{$Class->{"Name"}} or $TName_Tid_Generic{2}{getGeneric($Class->{"Name"})}))
                 {# class should exist in newer version
                     %{$CompatProblems{$Method}{"Class_Method_Moved_Up_Hierarchy"}{"this.".getSFormat($MovedUp)}}=(
-                        "Type_Name"=>$CName,
+                        "Type_Name"=>$Class->{"Name"},
                         "Target"=>$MethodInfo{2}{$MovedUp}{"Signature"},
                         "Old_Value"=>$Method,
                         "New_Value"=>$MovedUp);
@@ -3825,9 +4067,12 @@ sub detectRemoved()
             else
             {
                 if($MethodInfo{1}{$Method}{"Abstract"}) {
-                    $RemovedMethod_Abstract{$CName}{$Method} = 1;
+                    $RemovedMethod_Abstract{$Class->{"Name"}}{$Method} = 1;
+                }
+                
+                if(not ($MethodInfo{1}{$Method}{"Access"} eq "protected" and $Class->{"Final"})) {
+                    %{$CompatProblems{$Method}{"Removed_Method"}{""}} = ();
                 }
-                %{$CompatProblems{$Method}{"Removed_Method"}{""}}=();
             }
         }
     }
@@ -3929,12 +4174,18 @@ sub readAPIDump($$$)
     {
         if(cmpVersions($APIVer, $API_DUMP_VERSION)>0)
         { # future formats
-            exitStatus("Dump_Version", "the versions of the API dump is newer than version of the tool");
+            exitStatus("Dump_Version", "version of the API dump is newer than version of the tool");
+        }
+        
+        if(cmpVersions($APIVer, $API_DUMP_VERSION)<0)
+        { # old formats
+            printMsg("WARNING", "version of the API dump is older than version of the tool");
         }
     }
     
-    if(cmpVersions($APIVer, $API_DUMP_VERSION_MIN)<0) {
-        exitStatus("Dump_Version", "the version of the API dump is too old and unsupported anymore, please regenerate it");
+    if(cmpVersions($APIVer, $API_DUMP_VERSION_MIN)<0)
+    { # obsolete formats
+        exitStatus("Dump_Version", "version of the API dump is too old and unsupported anymore, please regenerate it");
     }
     
     if($Subj ne "Dep")
@@ -4223,10 +4474,11 @@ sub unpackDump($)
         }
         chdir($UnpackDir);
         system("$UnzipCmd \"$Path\" >contents.txt");
+        chdir($In::Opt{"OrigDir"});
         if($?) {
             exitStatus("Error", "can't extract \'$Path\'");
         }
-        chdir($In::Opt{"OrigDir"});
+        
         my @Contents = ();
         foreach (split("\n", readFile("$UnpackDir/contents.txt")))
         {
@@ -4258,10 +4510,10 @@ sub unpackDump($)
                 exitStatus("Error", "can't extract \'$Path\'");
             }
             my @Contents = qx/$TarCmd -xvf "$Dir\\$FileName.tar"/;
+            chdir($In::Opt{"OrigDir"});
             if($? or not @Contents) {
                 exitStatus("Error", "can't extract \'$Path\'");
             }
-            chdir($In::Opt{"OrigDir"});
             unlink($Dir."/".$FileName.".tar");
             chomp $Contents[0];
             return join_P($UnpackDir, $Contents[0]);
@@ -4274,10 +4526,10 @@ sub unpackDump($)
             }
             chdir($UnpackDir);
             my @Contents = qx/$TarCmd -xvzf "$Path" 2>&1/;
+            chdir($In::Opt{"OrigDir"});
             if($? or not @Contents) {
                 exitStatus("Error", "can't extract \'$Path\'");
             }
-            chdir($In::Opt{"OrigDir"});
             $Contents[0]=~s/^x //; # OS X
             chomp $Contents[0];
             return join_P($UnpackDir, $Contents[0]);
@@ -4307,7 +4559,7 @@ sub createArchive($$)
         system("$ZipCmd -j \"$Name.zip\" \"$Path\" >\"$TmpDir/null\"");
         if($?)
         { # cannot allocate memory (or other problems with "zip")
-            unlink($Path);
+            chdir($In::Opt{"OrigDir"});
             exitStatus("Error", "can't pack the API dump: ".$!);
         }
         chdir($In::Opt{"OrigDir"});
@@ -4325,15 +4577,14 @@ sub createArchive($$)
             exitStatus("Not_Found", "can't find \"gzip\"");
         }
         my $Pkg = abs_path($To)."/".$Name.".tar.gz";
-        unlink($Pkg);
-        chdir($From);
-        system($TarCmd, "-czf", $Pkg, $Name);
+        if(-e $Pkg) {
+            unlink($Pkg);
+        }
+        system($TarCmd, "-C", $From, "-czf", $Pkg, $Name);
         if($?)
         { # cannot allocate memory (or other problems with "tar")
-            unlink($Path);
             exitStatus("Error", "can't pack the API dump: ".$!);
         }
-        chdir($In::Opt{"OrigDir"});
         unlink($Path);
         return $To."/".$Name.".tar.gz";
     }
@@ -4767,6 +5018,8 @@ sub scenario()
         if(-f $ClientPath)
         {
             detectDefaultPaths("bin", undef);
+            loadModule("APIDump");
+            
             readArchive(0, $ClientPath)
         }
         else {
@@ -4784,7 +5037,8 @@ sub scenario()
         initAliases(1);
         
         my $Count = 0;
-        foreach my $Method (keys(%{$MethodInfo{1}})) {
+        foreach my $Method (keys(%{$MethodInfo{1}}))
+        {
             $Count += methodFilter($Method, 1);
         }
         
diff --git a/tools/japicc/modules/Internals/APIDump.pm b/tools/japicc/modules/Internals/APIDump.pm
index e7ecd40..579f423 100644
--- a/tools/japicc/modules/Internals/APIDump.pm
+++ b/tools/japicc/modules/Internals/APIDump.pm
@@ -134,9 +134,10 @@ sub readArchive($$)
         }
         
         my $ClassName = getFilename($ClassPath);
-        if($ClassName=~/\$\d/) {
+        if($ClassName=~/\$\d/ or $ClassName eq "module-info") {
             next;
         }
+        
         $ClassPath = cutPrefix($ClassPath, $ExtractPath); # javap decompiler accepts relative paths only
         
         my $ClassDir = getDirname($ClassPath);
@@ -219,9 +220,9 @@ sub sepParams($$$)
     return @Parts;
 }
 
-sub simpleDecl($)
+sub simpleDecl($$)
 {
-    my $Line = $_[0];
+    my ($Line, $LVer) = @_;
     
     my %B = ( "<"=>0, ">"=>0 );
     my @Chars = split("", $Line);
@@ -286,7 +287,7 @@ sub simpleDecl($)
     foreach my $R (@Replace)
     {
         if($Line=~s/([A-Za-z\d\?]+) extends \Q$R\E/$1/) {
-            $Tmpl{$1} = $R;
+            $Tmpl{$1} = registerType($R, $LVer);
         }
     }
     
@@ -316,7 +317,7 @@ sub readClasses($$$)
     my $Pid = open3(*IN, *OUT, *ERR, @Cmd);
     close(IN);
     
-    my (%TypeAttr, $CurrentMethod, $CurrentPackage, $CurrentClass) = ();
+    my (%TypeAttr, $CurrentMethod, $CurrentPackage, $CurrentClass, $CurrentClass_Short) = ();
     my ($InParamTable, $InVarTypeTable, $InExceptionTable, $InCode) = (0, 0, 0, 0);
     
     my $InAnnotations = undef;
@@ -487,7 +488,7 @@ sub readClasses($$$)
         { # <T extends java.lang.Object>
           # <KEYIN extends java.lang.Object ...
             if($LINE=~/<[A-Z\d\?]+ /i) {
-                ($LINE, $TmplP) = simpleDecl($LINE);
+                ($LINE, $TmplP) = simpleDecl($LINE, $LVer);
             }
         }
         
@@ -627,7 +628,7 @@ sub readClasses($$$)
                 $MethodAttr{"Access"} = "package-private";
             }
             $MethodAttr{"Class"} = registerType($TypeAttr{"Name"}, $LVer);
-            if($MethodAttr{"ShortName"}=~/\A(|(.+)\.)\Q$CurrentClass\E\Z/)
+            if($MethodAttr{"ShortName"}=~/\A(|(.+)\.)(\Q$CurrentClass\E|\Q$CurrentClass_Short\E)\Z/)
             {
                 if($2)
                 {
@@ -687,11 +688,17 @@ sub readClasses($$$)
             if(index($LINE_N, ": #")==-1
             and $LINE_N=~/(Signature|descriptor):\s*(.+?)\s*\Z/i)
             { # create run-time unique name ( java/io/PrintStream.println (Ljava/lang/String;)V )
+                my $SignParams = $2;
+                
+                # Generic classes
+                my $ShortClass = $CurrentClass;
+                $ShortClass=~s/<.*>//g;
+                
                 if($MethodAttr{"Constructor"}) {
-                    $CurrentMethod = $CurrentClass.".\"<init>\":".$2;
+                    $CurrentMethod = $ShortClass.".\"<init>\":".$SignParams;
                 }
                 else {
-                    $CurrentMethod = $CurrentClass.".".$MethodAttr{"ShortName"}.":".$2;
+                    $CurrentMethod = $ShortClass.".".$MethodAttr{"ShortName"}.":".$SignParams;
                 }
                 if(my $PackageName = getSFormat($CurrentPackage)) {
                     $CurrentMethod = $PackageName."/".$CurrentMethod;
@@ -831,10 +838,17 @@ sub readClasses($$$)
                 $CurrentClass = $TypeAttr{"Name"};
                 $CurrentPackage = "";
             }
+            
             if($CurrentClass=~s/#/./g)
             { # javax.swing.text.GlyphView.GlyphPainter <=> GlyphView$GlyphPainter
                 $TypeAttr{"Name"}=~s/#/./g;
             }
+            
+            $CurrentClass_Short = $CurrentClass;
+            if(index($CurrentClass_Short, "<")!=-1) {
+                $CurrentClass_Short=~s/<.+>//g;
+            }
+            
             if($LINE=~/(\A|\s+)(public|protected|private)\s+/) {
                 $TypeAttr{"Access"} = $2;
             }
@@ -884,6 +898,10 @@ sub readClasses($$$)
             if($LINE=~/(\A|\s+)static\s+/) {
                 $TypeAttr{"Static"} = 1;
             }
+            
+            if($TmplP) {
+                $TypeAttr{"GenericParam"} = $TmplP;
+            }
         }
         elsif(index($LINE, "Deprecated: true")!=-1
         or index($LINE, "Deprecated: length")!=-1)
@@ -918,6 +936,10 @@ sub readClasses($$$)
     waitpid($Pid, 0);
     chdir($In::Opt{"OrigDir"});
     
+    if(my $Err = $?>>8) {
+        exitStatus("Error", "failed to run javap");
+    }
+    
     if(not $NonEmpty) {
         exitStatus("Error", "internal error in parser");
     }
@@ -962,6 +984,14 @@ sub registerType($$)
             $TypeInfo{$LVer}{$Tid}{"Type"} = "array";
         }
     }
+    elsif($TName=~/(.+)\.\.\.\Z/)
+    {
+        if(my $BaseTypeId = registerType($1, $LVer))
+        {
+            $TypeInfo{$LVer}{$Tid}{"BaseType"} = $BaseTypeId;
+            $TypeInfo{$LVer}{$Tid}{"Type"} = "variable-arity";
+        }
+    }
     
     return $Tid;
 }
diff --git a/tools/japicc/modules/Internals/Basic.pm b/tools/japicc/modules/Internals/Basic.pm
index e5ea1c0..b10b24a 100644
--- a/tools/japicc/modules/Internals/Basic.pm
+++ b/tools/japicc/modules/Internals/Basic.pm
@@ -25,7 +25,7 @@ use Config;
 
 my %Cache;
 
-my $MD5_LEN = 8;
+my $MD5_LEN = 12;
 
 sub getOSgroup()
 {
diff --git a/tools/japicc/modules/Internals/Css/Report.css b/tools/japicc/modules/Internals/Css/Report.css
index 615df20..07a63be 100644
--- a/tools/japicc/modules/Internals/Css/Report.css
+++ b/tools/japicc/modules/Internals/Css/Report.css
@@ -43,7 +43,7 @@ span.sect_aff {
     color:#cc3300;
 }
 span.ext {
-    font-weight:100;
+    font-weight:normal;
 }
 span.jar {
     color:#cc3300;
@@ -88,7 +88,7 @@ span.sym_p span, span.sym_pd span {
 }
 span.attr {
     color:Black;
-    font-weight:100;
+    font-weight:normal;
 }
 span.deprecated {
     color:Red;
@@ -141,7 +141,7 @@ table.summary {
 }
 table.summary th {
     background-color:#eeeeee;
-    font-weight:100;
+    font-weight:normal;
     text-align:left;
     font-size:0.94em;
     white-space:nowrap;
@@ -176,7 +176,7 @@ span.focus_p {
     background-color:#DCDCDC;
 }
 span.ttype {
-    font-weight:100;
+    font-weight:normal;
 }
 span.nowrap {
     white-space:nowrap;
@@ -187,36 +187,36 @@ span.value {
 }
 .passed {
     background-color:#CCFFCC;
-    font-weight:100;
+    font-weight:normal;
 }
 .warning {
     background-color:#F4F4AF;
-    font-weight:100;
+    font-weight:normal;
 }
 .failed {
     background-color:#FFCCCC;
-    font-weight:100;
+    font-weight:normal;
 }
 .new {
     background-color:#C6DEFF;
-    font-weight:100;
+    font-weight:normal;
 }
 
 .compatible {
     background-color:#CCFFCC;
-    font-weight:100;
+    font-weight:normal;
 }
 .almost_compatible {
     background-color:#FFDAA3;
-    font-weight:100;
+    font-weight:normal;
 }
 .incompatible {
     background-color:#FFCCCC;
-    font-weight:100;
+    font-weight:normal;
 }
 .gray {
     background-color:#DCDCDC;
-    font-weight:100;
+    font-weight:normal;
 }
 
 .top_ref {
diff --git a/tools/japicc/modules/Internals/Filter.pm b/tools/japicc/modules/Internals/Filter.pm
index 0993adf..3352959 100644
--- a/tools/japicc/modules/Internals/Filter.pm
+++ b/tools/japicc/modules/Internals/Filter.pm
@@ -285,6 +285,13 @@ sub skipPackage($$)
         }
     }
     
+    if(my $Check = $In::Opt{"CheckPackages"})
+    {
+        if($Package!~/$Check/) {
+            return 1;
+        }
+    }
+    
     return 0;
 }
 
diff --git a/tools/japicc/modules/Internals/RegTests.pm b/tools/japicc/modules/Internals/RegTests.pm
index d7b58f2..b994fa8 100644
--- a/tools/japicc/modules/Internals/RegTests.pm
+++ b/tools/japicc/modules/Internals/RegTests.pm
@@ -79,23 +79,6 @@ sub testTool()
     writeFile($Path_v1."/BaseAbstractClass.java", $BaseAbstractClass);
     writeFile($Path_v2."/BaseAbstractClass.java", $BaseAbstractClass);
     
-    # Removed_Annotation
-    writeFile($Path_v1."/RemovedAnnotation.java",
-    "package $PackageName;
-    public \@interface RemovedAnnotation {
-    }");
-    
-    # Beta Annotation
-    writeFile($Path_v1."/Beta.java",
-    "package $PackageName;
-    public \@interface Beta {
-    }");
-    
-    writeFile($Path_v2."/Beta.java",
-    "package $PackageName;
-    public \@interface Beta {
-    }");
-    
     # BaseClass
     my $BaseClass = "package $PackageName;
     public class BaseClass {
@@ -141,47 +124,336 @@ sub testTool()
     writeFile($Path_v1."/BaseConstantInterface.java", $BaseConstantInterface);
     writeFile($Path_v2."/BaseConstantInterface.java", $BaseConstantInterface);
     
-    # Removed_Method (Beta method)
-    writeFile($Path_v1."/RemovedBetaMethod.java",
-    "package $PackageName;
-    public class RemovedBetaMethod
-    {
-        \@Beta
-        public Integer someMethod() {
-            return 0;
-        }
-    }");
-    writeFile($Path_v2."/RemovedBetaMethod.java",
-    "package $PackageName;
-    public class RemovedBetaMethod {
-    }");
-    
-    # Removed_Method (from Beta class)
-    writeFile($Path_v1."/RemovedMethodFromBetaClass.java",
-    "package $PackageName;
-    \@Beta
-    public class RemovedMethodFromBetaClass
+    if(cmpVersions($In::Opt{"CompilerVer"}, "1.5")>=0)
     {
-        public Integer someMethod() {
-            return 0;
+        # GenericClass1
+        writeFile($Path_v1."/GenericClass1.java",
+        "package $PackageName;
+        public class GenericClass1<T> {
+            public Integer method(T param) { return 0; }
+        }");
+        writeFile($Path_v2."/GenericClass1.java",
+        "package $PackageName;
+        public class GenericClass1<T> {
+            public Integer method(T param) { return 0; }
+        }");
+        
+        # GenericClass2
+        writeFile($Path_v1."/GenericClass2.java",
+        "package $PackageName;
+        public class GenericClass2<T> {
+            public void method() { }
+        }");
+        writeFile($Path_v2."/GenericClass2.java",
+        "package $PackageName;
+        public class GenericClass2<T> {
+            public void method() { }
+        }");
+        
+        # Class became generic
+        writeFile($Path_v1."/ClassBecameGeneric.java",
+        "package $PackageName;
+        public abstract class ClassBecameGeneric {
+            public ClassBecameGeneric() {}
+            public abstract ClassBecameGeneric doSomething();
+        }");
+        writeFile($Path_v2."/ClassBecameGeneric.java",
+        "package $PackageName;
+        public abstract class ClassBecameGeneric<T> {
+            public ClassBecameGeneric() {}
+            public abstract T doSomething();
+        }");
+        
+        writeFile($TestsPath."/Test_ClassBecameGeneric.java",
+        "import $PackageName.*;
+        class GenerifyingClassDerived extends ClassBecameGeneric {
+            public ClassBecameGeneric doSomething() { return new GenerifyingClassDerived(); }
+            public static void main(String[] args) { }
         }
-    }");
-    writeFile($Path_v2."/RemovedMethodFromBetaClass.java",
-    "package $PackageName;
-    \@Beta
-    public class RemovedMethodFromBetaClass {
-    }");
-    
-    # Removed_Class (Beta)
-    writeFile($Path_v1."/RemovedBetaClass.java",
-    "package $PackageName;
-    \@Beta
-    public class RemovedBetaClass
-    {
-        public Integer someMethod() {
-            return 0;
+        public class Test_ClassBecameGeneric
+        {
+            public static void main(String[] args) {
+                GenerifyingClassDerived X = new GenerifyingClassDerived();
+                ClassBecameGeneric Res = X.doSomething();
+            }
+        }");
+        
+        # Class became raw
+        writeFile($Path_v1."/ClassBecameRaw.java",
+        "package $PackageName;
+        public class ClassBecameRaw<T extends String> {
+            public void method(T param) { }
+        }");
+        writeFile($Path_v2."/ClassBecameRaw.java",
+        "package $PackageName;
+        public class ClassBecameRaw {
+            public void method(String param) { }
+        }");
+        
+        writeFile($TestsPath."/Test_ClassBecameRaw.java",
+        "import $PackageName.*;
+        public class Test_ClassBecameRaw
+        {
+            public static void main(String[] args) {
+                ClassBecameRaw<String> X = new ClassBecameRaw<String>();
+                X.method(\"XXX\");
+            }
+        }");
+        
+        # Interface became generic
+        writeFile($Path_v1."/InterfaceBecameGeneric.java",
+        "package $PackageName;
+        public interface InterfaceBecameGeneric {
+            public void method();
+        }");
+        writeFile($Path_v2."/InterfaceBecameGeneric.java",
+        "package $PackageName;
+        public interface InterfaceBecameGeneric<T> {
+            public void method();
+        }");
+        
+        # Interface became raw
+        writeFile($Path_v1."/InterfaceBecameRaw.java",
+        "package $PackageName;
+        public interface InterfaceBecameRaw<T> {
+            public void method();
+        }");
+        writeFile($Path_v2."/InterfaceBecameRaw.java",
+        "package $PackageName;
+        public interface InterfaceBecameRaw {
+            public void method();
+        }");
+        
+        writeFile($TestsPath."/Test_InterfaceBecameRaw.java",
+        "import $PackageName.*;
+        class InterfaceBecameRawDerived implements InterfaceBecameRaw<String> {
+            public void method() { }
+            public static void main(String[] args) { }
         }
-    }");
+        public class Test_InterfaceBecameRaw
+        {
+            public static void main(String[] args) {
+                InterfaceBecameRawDerived X = new InterfaceBecameRawDerived();
+                X.method();
+            }
+        }");
+        
+        # Changed generic super-class
+        writeFile($Path_v1."/GenericSuperClassChanged.java",
+        "package $PackageName;
+        public class GenericSuperClassChanged extends GenericClass1<String> {
+            public Integer method() { return 0; }
+        }");
+        writeFile($Path_v2."/GenericSuperClassChanged.java",
+        "package $PackageName;
+        public class GenericSuperClassChanged extends GenericClass1<Integer> {
+            public Integer method() { return 0; }
+        }");
+        
+        # Extending class with generic parameters
+        writeFile($Path_v1."/ExtendingClassWithGeneric.java",
+        "package $PackageName;
+        public class ExtendingClassWithGeneric {
+            public void method() { }
+        }");
+        writeFile($Path_v2."/ExtendingClassWithGeneric.java",
+        "package $PackageName;
+        public class ExtendingClassWithGeneric extends GenericClass2<String>
+        {
+        }");
+        
+        # Renamed generic parameter
+        writeFile($Path_v1."/RenamedGenericParameter.java",
+        "package $PackageName;
+        public class RenamedGenericParameter<A extends String> {
+            public void method(A param) { }
+        }");
+        writeFile($Path_v2."/RenamedGenericParameter.java",
+        "package $PackageName;
+        public class RenamedGenericParameter<B extends String> {
+            public void method(B param) { }
+        }");
+        
+        # Changed field type by introducing of a generic parameter
+        writeFile($Path_v1."/ChangedFieldTypeByGenericParam.java",
+        "package $PackageName;
+        public class ChangedFieldTypeByGenericParam {
+            public ChangedFieldTypeByGenericParam(String param) { f=param; }
+            public void method() { }
+            public String f;
+        }");
+        writeFile($Path_v2."/ChangedFieldTypeByGenericParam.java",
+        "package $PackageName;
+        public class ChangedFieldTypeByGenericParam<T> {
+            public ChangedFieldTypeByGenericParam(T param) { f=param; }
+            public void method() { }
+            public T f;
+        }");
+        
+        writeFile($Path_v1."/TestGeneric.java",
+        "package $PackageName;
+        public class TestGeneric {
+            public ChangedFieldTypeByGenericParam get1() { return new ChangedFieldTypeByGenericParam(\"XXX\"); }
+            public ChangedFieldTypeByGenericParam get2() { return new ChangedFieldTypeByGenericParam(\"XXX\"); }
+        }");
+        writeFile($Path_v2."/TestGeneric.java",
+        "package $PackageName;
+        public class TestGeneric {
+            public ChangedFieldTypeByGenericParam<String>  get1() { return new ChangedFieldTypeByGenericParam<String>(\"XXX\"); }
+            public ChangedFieldTypeByGenericParam<Integer> get2() { return new ChangedFieldTypeByGenericParam<Integer>(0); }
+        }");
+        
+        writeFile($TestsPath."/Test_ChangedFieldTypeByGenericParam.java",
+        "import $PackageName.*;
+        public class Test_ChangedFieldTypeByGenericParam
+        {
+            public static void main(String[] args)
+            {
+                TestGeneric X = new TestGeneric();
+                ChangedFieldTypeByGenericParam Res1 = X.get1();
+                ChangedFieldTypeByGenericParam Res2 = X.get2();
+                Res1.f = Res2.f;
+            }
+        }");
+        
+        # Changed constructor after generifying
+        writeFile($Path_v1."/ChangedCtorAfterGenerifying.java",
+        "package $PackageName;
+        public class ChangedCtorAfterGenerifying {
+            public ChangedCtorAfterGenerifying(String param) { }
+            public String f;
+        }");
+        writeFile($Path_v2."/ChangedCtorAfterGenerifying.java",
+        "package $PackageName;
+        public class ChangedCtorAfterGenerifying<T> {
+            public ChangedCtorAfterGenerifying(T param) { }
+            public T f;
+        }");
+        
+        writeFile($TestsPath."/Test_ChangedCtorAfterGenerifying.java",
+        "import $PackageName.*;
+        public class Test_ChangedCtorAfterGenerifying
+        {
+            public static void main(String[] args) {
+                ChangedCtorAfterGenerifying X = new ChangedCtorAfterGenerifying(\"XXX\");
+            }
+        }");
+        
+        # Array to variable arity
+        writeFile($Path_v1."/ArrayToVariableArity.java",
+        "package $PackageName;
+        public class ArrayToVariableArity {
+            public void method(Integer x, String[] y) { }
+        }");
+        writeFile($Path_v2."/ArrayToVariableArity.java",
+        "package $PackageName;
+        public class ArrayToVariableArity {
+            public void method(Integer x, String... y) { }
+        }");
+        
+        writeFile($TestsPath."/Test_ArrayToVariableArity.java",
+        "import $PackageName.*;
+        public class Test_ArrayToVariableArity
+        {
+            public static void main(String[] args) {
+                ArrayToVariableArity X = new ArrayToVariableArity();
+                X.method(0, new String[]{\"a\", \"b\"});
+            }
+        }");
+        
+        # Variable arity to array
+        writeFile($Path_v1."/VariableArityToArray.java",
+        "package $PackageName;
+        public class VariableArityToArray {
+            public void method(Integer x, String... y) { }
+        }");
+        writeFile($Path_v2."/VariableArityToArray.java",
+        "package $PackageName;
+        public class VariableArityToArray {
+            public void method(Integer x, String[] y) { }
+        }");
+        
+        writeFile($TestsPath."/Test_VariableArityToArray.java",
+        "import $PackageName.*;
+        public class Test_VariableArityToArray
+        {
+            public static void main(String[] args) {
+                VariableArityToArray X = new VariableArityToArray();
+                X.method(0, \"a\", \"b\");
+            }
+        }");
+        
+        # Removed_Annotation
+        writeFile($Path_v1."/RemovedAnnotation.java",
+        "package $PackageName;
+        public \@interface RemovedAnnotation {
+        }");
+        
+        writeFile($TestsPath."/Test_RemovedAnnotation.java",
+        "import $PackageName.*;
+        public class Test_RemovedAnnotation {
+            public static void main(String[] args) {
+                testMethod();
+            }
+            
+            \@RemovedAnnotation
+            static void testMethod() {
+            }
+        }");
+        
+        # Beta Annotation
+        writeFile($Path_v1."/Beta.java",
+        "package $PackageName;
+        public \@interface Beta {
+        }");
+        
+        writeFile($Path_v2."/Beta.java",
+        "package $PackageName;
+        public \@interface Beta {
+        }");
+        
+        # Removed_Method (Beta method)
+        writeFile($Path_v1."/RemovedBetaMethod.java",
+        "package $PackageName;
+        public class RemovedBetaMethod
+        {
+            \@Beta
+            public Integer someMethod() {
+                return 0;
+            }
+        }");
+        writeFile($Path_v2."/RemovedBetaMethod.java",
+        "package $PackageName;
+        public class RemovedBetaMethod {
+        }");
+        
+        # Removed_Method (from Beta class)
+        writeFile($Path_v1."/RemovedMethodFromBetaClass.java",
+        "package $PackageName;
+        \@Beta
+        public class RemovedMethodFromBetaClass
+        {
+            public Integer someMethod() {
+                return 0;
+            }
+        }");
+        writeFile($Path_v2."/RemovedMethodFromBetaClass.java",
+        "package $PackageName;
+        \@Beta
+        public class RemovedMethodFromBetaClass {
+        }");
+        
+        # Removed_Class (Beta)
+        writeFile($Path_v1."/RemovedBetaClass.java",
+        "package $PackageName;
+        \@Beta
+        public class RemovedBetaClass
+        {
+            public Integer someMethod() {
+                return 0;
+            }
+        }");
+    }
     
     # Abstract_Method_Added_Checked_Exception
     writeFile($Path_v1."/AbstractMethodAddedCheckedException.java",
@@ -275,16 +547,46 @@ sub testTool()
     writeFile($Path_v1."/ChangedMethodReturnFromVoid.java",
     "package $PackageName;
     public class ChangedMethodReturnFromVoid {
-        public void changedMethod(Integer param1, String[] param2) { }
+        public void changedMethod(Integer param1) { }
     }");
     writeFile($Path_v2."/ChangedMethodReturnFromVoid.java",
     "package $PackageName;
     public class ChangedMethodReturnFromVoid {
-        public Integer changedMethod(Integer param1, String[] param2){
+        public Integer changedMethod(Integer param1){
             return param1;
         }
     }");
     
+    writeFile($TestsPath."/Test_ChangedMethodReturnFromVoid.java",
+    "import $PackageName.*;
+    public class Test_ChangedMethodReturnFromVoid {
+        public static void main(String[] args) {
+            ChangedMethodReturnFromVoid X = new ChangedMethodReturnFromVoid();
+            X.changedMethod(1);
+        }
+    }");
+    
+    # Changed_Method_Return
+    writeFile($Path_v1."/ChangedMethodReturn.java",
+    "package $PackageName;
+    public class ChangedMethodReturn {
+        public Integer changedMethod(Integer param) { return 0; }
+    }");
+    writeFile($Path_v2."/ChangedMethodReturn.java",
+    "package $PackageName;
+    public class ChangedMethodReturn {
+        public String changedMethod(Integer param) { return \"XXX\"; }
+    }");
+    
+    writeFile($TestsPath."/Test_ChangedMethodReturn.java",
+    "import $PackageName.*;
+    public class Test_ChangedMethodReturn {
+        public static void main(String[] args) {
+            ChangedMethodReturn X = new ChangedMethodReturn();
+            Integer Res = X.changedMethod(0);
+        }
+    }");
+    
     # Added_Method
     writeFile($Path_v1."/AddedMethod.java",
     "package $PackageName;
@@ -361,18 +663,6 @@ sub testTool()
         }
     }");
     
-    writeFile($TestsPath."/Test_RemovedAnnotation.java",
-    "import $PackageName.*;
-    public class Test_RemovedAnnotation {
-        public static void main(String[] args) {
-            testMethod();
-        }
-        
-        \@RemovedAnnotation
-        static void testMethod() {
-        }
-    }");
-    
     # Removed_Constant_Field (Interface)
     writeFile($Path_v1."/InterfaceRemovedConstantField.java",
     "package $PackageName;
@@ -436,6 +726,15 @@ sub testTool()
         public Integer fieldName;
     }");
     
+    writeFile($TestsPath."/Test_ChangedFieldType.java",
+    "import $PackageName.*;
+    public class Test_ChangedFieldType {
+        public static void main(String[] args) {
+            ChangedFieldType X = new ChangedFieldType();
+            String R = X.fieldName;
+        }
+    }");
+    
     # Changed_Field_Access
     writeFile($Path_v1."/ChangedFieldAccess.java",
     "package $PackageName;
@@ -474,6 +773,15 @@ sub testTool()
         public static String fieldName;
     }");
     
+    writeFile($TestsPath."/Test_NonConstantFieldBecameStatic.java",
+    "import $PackageName.*;
+    public class Test_NonConstantFieldBecameStatic {
+        public static void main(String[] args) {
+            NonConstantFieldBecameStatic X = new NonConstantFieldBecameStatic();
+            String R = X.fieldName;
+        }
+    }");
+    
     # NonConstant_Field_Became_NonStatic
     writeFile($Path_v1."/NonConstantFieldBecameNonStatic.java",
     "package $PackageName;
@@ -536,6 +844,17 @@ sub testTool()
         public Integer field = 100;
     }");
     
+    # Removed protected method from final class
+    writeFile($Path_v1."/RemovedProtectedMethodFromFinalClass.java",
+    "package $PackageName;
+    public final class RemovedProtectedMethodFromFinalClass {
+        protected void removedMethod(Integer param) { }
+    }");
+    writeFile($Path_v2."/RemovedProtectedMethodFromFinalClass.java",
+    "package $PackageName;
+    public final class RemovedProtectedMethodFromFinalClass {
+    }");
+    
     # Removed_Method (move up to java.lang.Object)
     writeFile($Path_v1."/MoveUpToJavaLangObject.java",
     "package $PackageName;
@@ -585,6 +904,34 @@ sub testTool()
         public void someMethod(Integer param);
     }");
     
+    # Interface_Removed_Abstract_Method (Last)
+    writeFile($Path_v1."/InterfaceRemovedLastAbstractMethod.java",
+    "package $PackageName;
+    public interface InterfaceRemovedLastAbstractMethod {
+        public void removedMethod(Integer param);
+    }");
+    writeFile($Path_v2."/InterfaceRemovedLastAbstractMethod.java",
+    "package $PackageName;
+    public interface InterfaceRemovedLastAbstractMethod {
+    }");
+    
+    writeFile($TestsPath."/Test_InterfaceRemovedLastAbstractMethod.java",
+    "import $PackageName.*;
+    class InterfaceRemovedLastAbstractMethodDerived implements InterfaceRemovedLastAbstractMethod
+    {
+        public void removedMethod(Integer param) { }
+        public static void main(String[] args) { }
+    };
+    
+    public class Test_InterfaceRemovedLastAbstractMethod
+    {
+        public static void main(String[] args)
+        {
+            InterfaceRemovedLastAbstractMethod Obj = new InterfaceRemovedLastAbstractMethodDerived();
+            Obj.removedMethod(0);
+        }
+    }");
+    
     # Interface_Added_Abstract_Method
     writeFile($Path_v1."/InterfaceAddedAbstractMethod.java",
     "package $PackageName;
@@ -626,6 +973,7 @@ sub testTool()
     writeFile($TestsPath."/Test_MethodBecameNonDefault.java",
     "import $PackageName.*;
     class Class_MethodBecameNonDefault implements MethodBecameNonDefault {
+        public static void main(String[] args) { }
     };
     
     public class Test_MethodBecameNonDefault
@@ -637,18 +985,6 @@ sub testTool()
         }
     }");
     
-    # Variable_Arity_To_Array
-    writeFile($Path_v1."/VariableArityToArray.java",
-    "package $PackageName;
-    public class VariableArityToArray {
-        public void someMethod(Integer x, String... y) { };
-    }");
-    writeFile($Path_v2."/VariableArityToArray.java",
-    "package $PackageName;
-    public class VariableArityToArray {
-        public void someMethod(Integer x, String[] y) { };
-    }");
-    
     # Class_Became_Interface
     writeFile($Path_v1."/ClassBecameInterface.java",
     "package $PackageName;
@@ -878,7 +1214,7 @@ sub testTool()
     
     writeFile($TestsPath."/Test_RemovedFieldClass.java",
     "import $PackageName.*;
-    public class Test_RemovedFieldClass extends RemovedFieldClass
+    public class Test_RemovedFieldClass
     {
         public static void main(String[] args)
         {
@@ -1046,7 +1382,7 @@ sub testTool()
         public Integer someMethod(Integer param1, String[] param2) {
             return param1;
         };
-        public abstract Integer removedMethod(Integer param);
+        public abstract void removedMethod(Integer param);
     }");
     writeFile($Path_v2."/ClassRemovedAbstractMethod.java",
     "package $PackageName;
@@ -1056,6 +1392,23 @@ sub testTool()
         };
     }");
     
+    writeFile($TestsPath."/Test_ClassRemovedAbstractMethod.java",
+    "import $PackageName.*;
+    class ClassRemovedAbstractMethodDerived extends ClassRemovedAbstractMethod
+    {
+        public void removedMethod(Integer param) { }
+        public static void main(String[] args) { }
+    };
+    
+    public class Test_ClassRemovedAbstractMethod
+    {
+        public static void main(String[] args)
+        {
+            ClassRemovedAbstractMethod Obj = new ClassRemovedAbstractMethodDerived();
+            Obj.removedMethod(0);
+        }
+    }");
+    
     # Class_Method_Became_Abstract
     writeFile($Path_v1."/ClassMethodBecameAbstract.java",
     "package $PackageName;
@@ -1129,14 +1482,14 @@ sub testTool()
     }");
     
     # Static_Method_Became_Final
-    writeFile($Path_v1."/StaticMethodBecameFinal.java",
+    writeFile($Path_v2."/StaticMethodBecameFinal.java",
     "package $PackageName;
     public class StaticMethodBecameFinal {
         public static Integer someMethod(Integer param) {
             return param;
         };
     }");
-    writeFile($Path_v2."/StaticMethodBecameFinal.java",
+    writeFile($Path_v1."/StaticMethodBecameFinal.java",
     "package $PackageName;
     public class StaticMethodBecameFinal {
         public static final Integer someMethod(Integer param) {
@@ -1144,6 +1497,16 @@ sub testTool()
         };
     }");
     
+    writeFile($TestsPath."/Test_StaticMethodBecameFinal.java",
+    "import $PackageName.*;
+    public class Test_StaticMethodBecameFinal
+    {
+        public static void main(String[] args)
+        {
+            Integer R = StaticMethodBecameFinal.someMethod(0);
+        }
+    }");
+    
     # NonStatic_Method_Became_Final
     writeFile($Path_v1."/NonStaticMethodBecameFinal.java",
     "package $PackageName;
@@ -1314,6 +1677,10 @@ sub testTool()
         public Integer someMethod(AbstractClassAddedSuperInterfaceWithImplementedMethods param) {
             return 0;
         }
+        public Integer someMethod(InterfaceRemovedLastAbstractMethod param) {
+            return 0;
+        }
+        
     }");
     writeFile($Path_v2."/Use.java",
     "package $PackageName;
@@ -1340,6 +1707,9 @@ sub testTool()
         public Integer someMethod(AbstractClassAddedSuperInterfaceWithImplementedMethods param) {
             return param.method2(100);
         }
+        public Integer someMethod(InterfaceRemovedLastAbstractMethod param) {
+            return 0;
+        }
     }");
     
     # Added_Package
@@ -1402,6 +1772,8 @@ sub runTests($$$$)
 {
     my ($TestsPath, $PackageName, $Path_v1, $Path_v2) = @_;
     
+    printMsg("INFO", "Running tests ...");
+    
     # compile with old version of package
     my $JavacCmd = getCmdPath("javac");
     if(not $JavacCmd) {
@@ -1446,7 +1818,9 @@ sub runTests($$$$)
         $TEST_REPORT .= "\n";
     }
     
-    writeFile("$TestsPath/Journal.txt", $TEST_REPORT);
+    my $Journal = $TestsPath."/Journal.txt";
+    writeFile($Journal, $TEST_REPORT);
+    printMsg("INFO", "See journal with test results: $Journal");
 }
 
 sub compileJavaLib($$$)
diff --git a/tools/japicc/modules/Internals/SysFiles.pm b/tools/japicc/modules/Internals/SysFiles.pm
index 113e587..1699106 100644
--- a/tools/japicc/modules/Internals/SysFiles.pm
+++ b/tools/japicc/modules/Internals/SysFiles.pm
@@ -194,8 +194,10 @@ sub detectDefaultPaths($$)
         {
             if(my $Ver = `$JavacCmd -version 2>&1`)
             {
-                if($Ver=~/javac\s+(.+)/) {
+                if($Ver=~/javac\s+(.+)/)
+                {
                     printMsg("INFO", "Using Java ".$1);
+                    $In::Opt{"CompilerVer"} = $1;
                 }
             }
         }
diff --git a/tools/japicc/modules/Internals/TypeAttr.pm b/tools/japicc/modules/Internals/TypeAttr.pm
index c8910b0..b6693bf 100644
--- a/tools/japicc/modules/Internals/TypeAttr.pm
+++ b/tools/japicc/modules/Internals/TypeAttr.pm
@@ -94,4 +94,11 @@ sub getType($$)
     return $TypeInfo{$LVer}{$TypeId};
 }
 
+sub getGeneric($)
+{
+    my $Name = $_[0];
+    $Name=~s/<.*>//g;
+    return $Name;
+}
+
 return 1;
diff --git a/tools/japicc/modules/Internals/Utils.pm b/tools/japicc/modules/Internals/Utils.pm
index 6980d2b..8a0ac15 100644
--- a/tools/japicc/modules/Internals/Utils.pm
+++ b/tools/japicc/modules/Internals/Utils.pm
@@ -63,7 +63,9 @@ sub getMaxArg()
     }
     
     # Linux
-    return POSIX::sysconf(POSIX::_SC_ARG_MAX);
+    # return POSIX::sysconf(POSIX::_SC_ARG_MAX);
+    # javap failed on rt.jar (GC triggered before VM initialization completed)
+    return 10000;
 }
 
 sub divideArray($)
diff --git a/tools/japicc/modules/RulesBin.xml b/tools/japicc/modules/RulesBin.xml
index 30c583b..ca694c0 100644
--- a/tools/japicc/modules/RulesBin.xml
+++ b/tools/japicc/modules/RulesBin.xml
@@ -51,7 +51,43 @@
         Return value type has been changed from **void** to @new_value.
     </change>
     <effect>
-        This method has been removed because the return type is part of the method signature.
+        This method has been removed because the return type is part of the method signature. A client program may be interrupted by **NoSuchMethodError** exception.
+    </effect>
+</rule>
+
+<rule>
+    <id>
+        Changed_Method_Return
+    </id>
+    <severity>
+        High
+    </severity>
+    <kind>
+        Methods
+    </kind>
+    <change>
+        Return value type has been changed from @old_value to @new_value.
+    </change>
+    <effect>
+        This method has been removed because the return type is part of the method signature. A client program may be interrupted by **NoSuchMethodError** exception.
+    </effect>
+</rule>
+
+<rule>
+    <id>
+        Static_Method_Became_Final
+    </id>
+    <severity>
+        Safe
+    </severity>
+    <kind>
+        Methods
+    </kind>
+    <change>
+        Method became final.
+    </change>
+    <effect>
+        No effect.
     </effect>
 </rule>
 
@@ -300,11 +336,35 @@
         Variable_Arity_To_Array
     </id>
     <severity>
-        Low
+        Safe
+    </severity>
+    <kind>
+        Methods
+    </kind>
+    <change>
+        Type of parameter @param_name has been changed from @old_value to @new_value.
+    </change>
+    <effect>
+        No effect.
+    </effect>
+</rule>
+
+<rule>
+    <id>
+        Array_To_Variable_Arity
+    </id>
+    <severity>
+        Safe
     </severity>
     <kind>
         Methods
     </kind>
+    <change>
+        Type of parameter @param_name has been changed from @old_value to @new_value.
+    </change>
+    <effect>
+        No effect.
+    </effect>
 </rule>
 
 <rule>
@@ -802,7 +862,7 @@
         Changed_Super_Class
     </id>
     <severity>
-        Medium
+        Low
     </severity>
     <kind>
         Types
@@ -1160,6 +1220,78 @@
 
 <rule>
     <id>
+        Interface_Became_Generic
+    </id>
+    <severity>
+        Safe
+    </severity>
+    <kind>
+        Types
+    </kind>
+    <change>
+        This interface became **generic** (@new_value).
+    </change>
+    <effect>
+        No effect.
+    </effect>
+</rule>
+
+<rule>
+    <id>
+        Interface_Became_Raw
+    </id>
+    <severity>
+        Low
+    </severity>
+    <kind>
+        Types
+    </kind>
+    <change>
+        This interface became **raw**.
+    </change>
+    <effect>
+        No effect.
+    </effect>
+</rule>
+
+<rule>
+    <id>
+        Class_Became_Generic
+    </id>
+    <severity>
+        Safe
+    </severity>
+    <kind>
+        Types
+    </kind>
+    <change>
+        This class became **generic** (@new_value).
+    </change>
+    <effect>
+        No effect.
+    </effect>
+</rule>
+
+<rule>
+    <id>
+        Class_Became_Raw
+    </id>
+    <severity>
+        Low
+    </severity>
+    <kind>
+        Types
+    </kind>
+    <change>
+        This class became **raw**.
+    </change>
+    <effect>
+        No effect.
+    </effect>
+</rule>
+
+<rule>
+    <id>
         Class_Became_Final
     </id>
     <severity>
diff --git a/tools/japicc/modules/RulesSrc.xml b/tools/japicc/modules/RulesSrc.xml
index b49b47e..32eb577 100644
--- a/tools/japicc/modules/RulesSrc.xml
+++ b/tools/japicc/modules/RulesSrc.xml
@@ -39,6 +39,24 @@
 
 <rule>
     <id>
+        Changed_Method_Return
+    </id>
+    <severity>
+        Medium
+    </severity>
+    <kind>
+        Methods
+    </kind>
+    <change>
+        Return value type has been changed from @old_value to @new_value.
+    </change>
+    <effect>
+        Recompilation of a client program may be terminated with the message: incompatible types: @new_value cannot be converted to @old_value.
+    </effect>
+</rule>
+
+<rule>
+    <id>
         Static_Method_Became_Final
     </id>
     <severity>
@@ -261,6 +279,42 @@
 
 <rule>
     <id>
+        Variable_Arity_To_Array
+    </id>
+    <severity>
+        Medium
+    </severity>
+    <kind>
+        Methods
+    </kind>
+    <change>
+        Type of parameter @param_name has been changed from @old_value to @new_value.
+    </change>
+    <effect>
+        Recompilation of a client program may be terminated with the message: method @method_short in class @type_name cannot be applied to given types.
+    </effect>
+</rule>
+
+<rule>
+    <id>
+        Array_To_Variable_Arity
+    </id>
+    <severity>
+        Safe
+    </severity>
+    <kind>
+        Methods
+    </kind>
+    <change>
+        Type of parameter @param_name has been changed from @old_value to @new_value.
+    </change>
+    <effect>
+        No effect.
+    </effect>
+</rule>
+
+<rule>
+    <id>
         NonAbstract_Class_Added_Abstract_Method
     </id>
     <severity>
@@ -714,7 +768,7 @@
         Changed_Super_Class
     </id>
     <severity>
-        Medium
+        Low
     </severity>
     <kind>
         Types
@@ -946,6 +1000,42 @@
 
 <rule>
     <id>
+        Field_Became_NonFinal
+    </id>
+    <severity>
+        Safe
+    </severity>
+    <kind>
+        Fields
+    </kind>
+    <change>
+        Field @target became non-final.
+    </change>
+    <effect>
+        No effect.
+    </effect>
+</rule>
+
+<rule>
+    <id>
+        NonConstant_Field_Became_Static
+    </id>
+    <severity>
+        Safe
+    </severity>
+    <kind>
+        Fields
+    </kind>
+    <change>
+        Field @target became static.
+    </change>
+    <effect>
+        No effect.
+    </effect>
+</rule>
+
+<rule>
+    <id>
         NonConstant_Field_Became_NonStatic
     </id>
     <severity>
@@ -1018,6 +1108,78 @@
 
 <rule>
     <id>
+        Interface_Became_Generic
+    </id>
+    <severity>
+        Safe
+    </severity>
+    <kind>
+        Types
+    </kind>
+    <change>
+        This interface became **generic** (@new_value).
+    </change>
+    <effect>
+        No effect.
+    </effect>
+</rule>
+
+<rule>
+    <id>
+        Interface_Became_Raw
+    </id>
+    <severity>
+        Medium
+    </severity>
+    <kind>
+        Types
+    </kind>
+    <change>
+        This interface became **raw**.
+    </change>
+    <effect>
+        Recompilation of a client program may be terminated with the message: type @new_value does not take parameters.
+    </effect>
+</rule>
+
+<rule>
+    <id>
+        Class_Became_Generic
+    </id>
+    <severity>
+        Safe
+    </severity>
+    <kind>
+        Types
+    </kind>
+    <change>
+        This class became **generic** (@new_value).
+    </change>
+    <effect>
+        No effect.
+    </effect>
+</rule>
+
+<rule>
+    <id>
+        Class_Became_Raw
+    </id>
+    <severity>
+        Medium
+    </severity>
+    <kind>
+        Types
+    </kind>
+    <change>
+        This class became **raw**.
+    </change>
+    <effect>
+        Recompilation of a client program may be terminated with the message: type @new_value does not take parameters.
+    </effect>
+</rule>
+
+<rule>
+    <id>
         Class_Became_Final
     </id>
     <severity>
diff --git a/tools/pmd/josm-ruleset.xml b/tools/pmd/josm-ruleset.xml
index f436930..5f106ec 100644
--- a/tools/pmd/josm-ruleset.xml
+++ b/tools/pmd/josm-ruleset.xml
@@ -75,6 +75,7 @@
   <rule ref="rulesets/java/strictexception.xml">
   	<exclude name="ExceptionAsFlowControl"/>
   	<exclude name="AvoidCatchingGenericException"/>
+  	<exclude name="AvoidCatchingNPE"/>
   	<exclude name="AvoidRethrowingException"/>
   </rule>
   <rule ref="rulesets/java/strings.xml">
diff --git a/tools/findbugs/josm-filter.xml b/tools/spotbugs/josm-filter.xml
similarity index 100%
rename from tools/findbugs/josm-filter.xml
rename to tools/spotbugs/josm-filter.xml

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