[josm] 01/07: New upstream version 0.0.svn13265+dfsg

Bas Couwenberg sebastic at debian.org
Sun Dec 31 20:02:14 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 ffef1aff03b2d199ee32a29e34dae1a77cdf73a8
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date:   Sun Dec 31 20:20:54 2017 +0100

    New upstream version 0.0.svn13265+dfsg
---
 .travis.yml                                        |   25 +
 CONTRIBUTION                                       |    4 +-
 REVISION                                           |    6 +-
 appveyor.yml                                       |   29 +
 build.xml                                          |   55 +-
 data/defaultpresets.xml                            |   64 +-
 data/validator/deprecated.mapcss                   |    8 +
 data/validator/geometry.mapcss                     |    3 +-
 i18n/convmaps.pl                                   |    2 +
 i18n/po/af.po                                      |  470 ++++--
 i18n/po/am.po                                      |  470 ++++--
 i18n/po/ar.po                                      |  470 ++++--
 i18n/po/ast.po                                     |  526 ++++--
 i18n/po/az.po                                      |  470 ++++--
 i18n/po/be.po                                      |  581 +++++--
 i18n/po/bg.po                                      |  528 ++++--
 i18n/po/bn.po                                      |  470 ++++--
 i18n/po/br.po                                      |  470 ++++--
 i18n/po/bs.po                                      |  470 ++++--
 i18n/po/ca.po                                      |  574 +++++--
 i18n/po/ca at valencia.po                             |  492 ++++--
 i18n/po/cs.po                                      |  631 +++++--
 i18n/po/cy.po                                      |  470 ++++--
 i18n/po/da.po                                      |  700 +++++---
 i18n/po/de.po                                      |  636 +++++--
 i18n/po/de_DE.po                                   |  470 ++++--
 i18n/po/el.po                                      |  490 ++++--
 i18n/po/en_AU.po                                   |  492 ++++--
 i18n/po/en_CA.po                                   |  470 ++++--
 i18n/po/en_GB.po                                   | 1167 ++++++++-----
 i18n/po/eo.po                                      |  470 ++++--
 i18n/po/es.po                                      |  685 +++++---
 i18n/po/et.po                                      |  470 ++++--
 i18n/po/eu.po                                      |  470 ++++--
 i18n/po/fa.po                                      |  470 ++++--
 i18n/po/fi.po                                      |  492 ++++--
 i18n/po/fil.po                                     |  470 ++++--
 i18n/po/fo.po                                      |  470 ++++--
 i18n/po/fr.po                                      |  626 +++++--
 i18n/po/ga.po                                      |  470 ++++--
 i18n/po/gl.po                                      |  492 ++++--
 i18n/po/he.po                                      |  478 ++++--
 i18n/po/hi.po                                      |  470 ++++--
 i18n/po/hr.po                                      |  470 ++++--
 i18n/po/ht.po                                      |  470 ++++--
 i18n/po/hu.po                                      |  703 +++++---
 i18n/po/hy.po                                      |  470 ++++--
 i18n/po/ia.po                                      |  470 ++++--
 i18n/po/id.po                                      | 1267 ++++++++------
 i18n/po/is.po                                      |  486 ++++--
 i18n/po/it.po                                      |  574 +++++--
 i18n/po/ja.po                                      |  732 +++++---
 i18n/po/ka.po                                      |  470 ++++--
 i18n/po/km.po                                      |  489 ++++--
 i18n/po/ko.po                                      |  513 ++++--
 i18n/po/ku.po                                      |  470 ++++--
 i18n/po/ky.po                                      |  470 ++++--
 i18n/po/lb.po                                      |  470 ++++--
 i18n/po/lo.po                                      |  470 ++++--
 i18n/po/lt.po                                      |  577 +++++--
 i18n/po/lv.po                                      |  470 ++++--
 i18n/po/mk.po                                      |  470 ++++--
 i18n/po/mr.po                                      |  482 ++++--
 i18n/po/ms.po                                      |  470 ++++--
 i18n/po/nb.po                                      |  486 ++++--
 i18n/po/nds.po                                     |  470 ++++--
 i18n/po/nl.po                                      |  668 +++++---
 i18n/po/nn.po                                      |  470 ++++--
 i18n/po/oc.po                                      |  476 ++++--
 i18n/po/pa.po                                      |  470 ++++--
 i18n/po/pl.po                                      | 1703 ++++++++++++-------
 i18n/po/pt.po                                      |  678 +++++---
 i18n/po/pt_BR.po                                   | 1747 ++++++++++++--------
 i18n/po/rm.po                                      |  470 ++++--
 i18n/po/ro.po                                      |  470 ++++--
 i18n/po/ru.po                                      |  647 ++++++--
 i18n/po/sk.po                                      |  601 +++++--
 i18n/po/sl.po                                      |  474 ++++--
 i18n/po/sq.po                                      |  470 ++++--
 i18n/po/sr.po                                      |  470 ++++--
 i18n/po/sv.po                                      |  496 ++++--
 i18n/po/ta.po                                      |  470 ++++--
 i18n/po/te.po                                      |  470 ++++--
 i18n/po/th.po                                      |  470 ++++--
 i18n/po/tr.po                                      |  482 ++++--
 i18n/po/ug.po                                      |  470 ++++--
 i18n/po/uk.po                                      |  636 +++++--
 i18n/po/ur.po                                      |  470 ++++--
 i18n/po/vi.po                                      |  523 ++++--
 i18n/po/wae.po                                     |  470 ++++--
 i18n/po/zh_CN.po                                   |  601 +++++--
 i18n/po/zh_TW.po                                   |  495 ++++--
 images/presets/misc/angles.svg                     |   48 +
 src/javax/json/EmptyArray.java                     |  136 ++
 src/javax/json/EmptyObject.java                    |  126 ++
 src/javax/json/Json.java                           |  829 ++++++----
 src/javax/json/JsonArray.java                      |  563 ++++---
 src/javax/json/JsonArrayBuilder.java               |  862 +++++++---
 src/javax/json/JsonBuilderFactory.java             |  262 +--
 src/javax/json/JsonException.java                  |  160 +-
 src/javax/json/JsonMergePatch.java                 |   87 +
 src/javax/json/JsonNumber.java                     |  411 ++---
 src/javax/json/JsonObject.java                     |  548 +++---
 src/javax/json/JsonObjectBuilder.java              |  587 +++----
 src/javax/json/JsonPatch.java                      |  163 ++
 src/javax/json/JsonPatchBuilder.java               |  210 +++
 src/javax/json/JsonPointer.java                    |  140 ++
 src/javax/json/JsonReader.java                     |  297 ++--
 src/javax/json/JsonReaderFactory.java              |  232 ++-
 src/javax/json/JsonString.java                     |  176 +-
 src/javax/json/JsonStructure.java                  |  112 +-
 src/javax/json/JsonValue.java                      |  426 ++---
 .../json/{JsonString.java => JsonValueImpl.java}   |  196 ++-
 src/javax/json/JsonWriter.java                     |  278 ++--
 src/javax/json/JsonWriterFactory.java              |  238 ++-
 src/javax/json/package-info.java                   |  134 +-
 src/javax/json/spi/JsonProvider.java               |  778 ++++++---
 src/javax/json/spi/package-info.java               |  113 +-
 src/javax/json/stream/JsonCollectors.java          |  184 +++
 src/javax/json/stream/JsonGenerationException.java |  164 +-
 src/javax/json/stream/JsonGenerator.java           | 1101 ++++++------
 src/javax/json/stream/JsonGeneratorFactory.java    |  225 +--
 src/javax/json/stream/JsonLocation.java            |  172 +-
 src/javax/json/stream/JsonParser.java              |  858 ++++++----
 src/javax/json/stream/JsonParserFactory.java       |  261 +--
 src/javax/json/stream/JsonParsingException.java    |  194 ++-
 src/javax/json/stream/package-info.java            |  143 +-
 src/org/glassfish/json/BufferPoolImpl.java         |  196 +--
 src/org/glassfish/json/JsonArrayBuilderImpl.java   |  778 ++++++---
 src/org/glassfish/json/JsonBuilderFactoryImpl.java |  177 +-
 .../glassfish/json/JsonGeneratorFactoryImpl.java   |  188 +--
 src/org/glassfish/json/JsonGeneratorImpl.java      | 1440 ++++++++--------
 src/org/glassfish/json/JsonLocationImpl.java       |  161 +-
 src/org/glassfish/json/JsonMergePatchImpl.java     |  142 ++
 src/org/glassfish/json/JsonMessages.java           |  524 +++---
 src/org/glassfish/json/JsonNumberImpl.java         |  548 +++---
 src/org/glassfish/json/JsonObjectBuilderImpl.java  |  624 ++++---
 src/org/glassfish/json/JsonParserFactoryImpl.java  |  190 +--
 src/org/glassfish/json/JsonParserImpl.java         |  895 ++++++----
 src/org/glassfish/json/JsonPatchBuilderImpl.java   |  362 ++++
 src/org/glassfish/json/JsonPatchImpl.java          |  321 ++++
 src/org/glassfish/json/JsonPointerImpl.java        |  316 ++++
 .../glassfish/json/JsonPrettyGeneratorImpl.java    |  250 +--
 src/org/glassfish/json/JsonProviderImpl.java       |  502 +++---
 src/org/glassfish/json/JsonReaderFactoryImpl.java  |  166 +-
 src/org/glassfish/json/JsonReaderImpl.java         |  377 ++---
 src/org/glassfish/json/JsonStringImpl.java         |  261 +--
 src/org/glassfish/json/JsonStructureParser.java    |  606 ++++---
 src/org/glassfish/json/JsonTokenizer.java          | 1152 +++++++------
 src/org/glassfish/json/JsonUtil.java               |   99 ++
 src/org/glassfish/json/JsonWriterFactoryImpl.java  |  172 +-
 src/org/glassfish/json/JsonWriterImpl.java         |  360 ++--
 src/org/glassfish/json/MapUtil.java                |  115 ++
 src/org/glassfish/json/NodeReference.java          |  307 ++++
 .../json/UnicodeDetectingInputStream.java          |  377 +++--
 src/org/glassfish/json/api/BufferPool.java         |  134 +-
 src/org/glassfish/json/messages.properties         |  112 ++
 src/org/openstreetmap/josm/Main.java               |  485 ------
 .../josm/actions/AbstractMergeAction.java          |    2 +-
 .../josm/actions/AddImageryLayerAction.java        |    4 +-
 .../josm/actions/GpxExportAction.java              |   18 +
 .../josm/actions/ImageryAdjustAction.java          |    7 +-
 .../josm/actions/JoinAreasAction.java              |    2 +-
 .../josm/actions/MergeNodesAction.java             |   21 +-
 .../josm/actions/OpenLocationAction.java           |   37 +-
 .../openstreetmap/josm/actions/PurgeAction.java    |    2 +-
 .../openstreetmap/josm/actions/RestartAction.java  |    4 +-
 .../openstreetmap/josm/actions/SplitWayAction.java |  281 +---
 .../downloadtasks/AbstractDownloadTask.java        |    6 +-
 .../josm/actions/downloadtasks/DownloadTask.java   |    7 +
 .../josm/actions/mapmode/DrawAction.java           |   22 +-
 .../josm/actions/mapmode/MapMode.java              |   45 +-
 .../josm/actions/mapmode/SelectAction.java         |    4 +-
 .../relation/ExportRelationToGpxAction.java        |  249 +++
 .../josm/actions/search/SearchAction.java          |    2 +-
 src/org/openstreetmap/josm/command/AddCommand.java |   23 -
 .../josm/command/AddPrimitivesCommand.java         |   36 -
 .../openstreetmap/josm/command/ChangeCommand.java  |   16 -
 src/org/openstreetmap/josm/command/Command.java    |   77 +-
 .../openstreetmap/josm/command/DeleteCommand.java  |  143 --
 .../openstreetmap/josm/command/PurgeCommand.java   |   32 -
 .../openstreetmap/josm/command/SelectCommand.java  |   14 -
 .../josm/command/SequenceCommand.java              |   17 +-
 .../josm/command/SplitWayCommand.java              |    2 +-
 .../josm/command/conflict/ConflictAddCommand.java  |   13 -
 .../command/conflict/ConflictResolveCommand.java   |   20 -
 src/org/openstreetmap/josm/data/Bounds.java        |   31 -
 src/org/openstreetmap/josm/data/Preferences.java   |  543 +-----
 src/org/openstreetmap/josm/data/StructUtils.java   |    7 +-
 .../josm/data/cache/JCSCacheManager.java           |    5 +-
 .../josm/data/cache/JCSCachedTileLoaderJob.java    |   25 +-
 .../openstreetmap/josm/data/coor/Coordinate.java   |   16 -
 .../josm/data/coor/CoordinateFormat.java           |   94 --
 src/org/openstreetmap/josm/data/coor/ILatLon.java  |   14 -
 src/org/openstreetmap/josm/data/coor/LatLon.java   |  125 --
 src/org/openstreetmap/josm/data/gpx/GpxData.java   |  121 ++
 .../josm/data/gpx/ImmutableGpxTrack.java           |   16 +
 src/org/openstreetmap/josm/data/gpx/WayPoint.java  |    9 +
 .../josm/data/imagery/OffsetBookmark.java          |   96 +-
 .../josm/data/oauth/OAuthAccessTokenHolder.java    |   57 -
 .../josm/data/oauth/OAuthParameters.java           |   40 -
 src/org/openstreetmap/josm/data/osm/Changeset.java |   10 -
 src/org/openstreetmap/josm/data/osm/DataSet.java   |   67 +-
 src/org/openstreetmap/josm/data/osm/Filter.java    |    2 +-
 .../openstreetmap/josm/data/osm/FilterModel.java   |    3 +
 src/org/openstreetmap/josm/data/osm/Node.java      |   13 -
 src/org/openstreetmap/josm/data/osm/NodeData.java  |   11 -
 .../openstreetmap/josm/data/osm/OsmPrimitive.java  |   20 -
 .../josm/data/osm/OsmPrimitiveComparator.java      |    2 +-
 src/org/openstreetmap/josm/data/osm/Relation.java  |   11 +-
 src/org/openstreetmap/josm/data/osm/Way.java       |   10 +-
 .../josm/data/osm/event/SelectionEventManager.java |   20 +-
 .../josm/data/osm/visitor/AbstractVisitor.java     |   21 -
 .../josm/data/osm/visitor/Visitor.java             |   20 -
 .../data/osm/visitor/paint/MapRendererFactory.java |    4 -
 .../data/osm/visitor/paint/StyledMapRenderer.java  |   40 +-
 .../osm/visitor/paint/relations/Multipolygon.java  |    6 +-
 .../josm/data/preferences/CollectionProperty.java  |   35 -
 .../josm/data/projection/CustomProjection.java     |   29 -
 .../josm/data/projection/Projection.java           |    8 -
 .../josm/data/projection/ProjectionCLI.java        |    2 +-
 .../josm/data/projection/Projections.java          |   43 -
 .../datum/NTV2Proj4DirGridShiftFileSource.java     |   13 +-
 .../josm/data/tagging/ac/AutoCompletionItem.java   |   14 -
 .../validation/routines/InetAddressValidator.java  |    2 +-
 .../data/validation/tests/MapCSSTagChecker.java    |    3 +-
 .../josm/gui/JosmUserIdentityManager.java          |  197 ---
 .../openstreetmap/josm/gui/MainApplication.java    |   26 +-
 src/org/openstreetmap/josm/gui/MainPanel.java      |    5 -
 src/org/openstreetmap/josm/gui/MapFrame.java       |    6 +
 src/org/openstreetmap/josm/gui/MapSlider.java      |   13 +-
 src/org/openstreetmap/josm/gui/MapStatus.java      |   68 +-
 src/org/openstreetmap/josm/gui/MapView.java        |   15 -
 src/org/openstreetmap/josm/gui/MapViewState.java   |   17 +-
 .../josm/gui/NavigatableComponent.java             |   18 +-
 src/org/openstreetmap/josm/gui/SideButton.java     |   40 +-
 .../gui/datatransfer/PrimitiveTransferable.java    |    2 +-
 .../josm/gui/dialogs/DialogsPanel.java             |    3 +
 .../josm/gui/dialogs/InspectPrimitiveDataText.java |    2 +-
 .../josm/gui/dialogs/RelationListDialog.java       |   52 +-
 .../josm/gui/dialogs/ToggleDialog.java             |    6 +-
 .../josm/gui/dialogs/properties/TagEditHelper.java |   12 +-
 .../gui/dialogs/relation/ChildRelationBrowser.java |   23 +-
 .../josm/gui/dialogs/relation/MemberTable.java     |    2 +
 .../relation/ReferringRelationsBrowser.java        |   22 +-
 .../josm/gui/history/HistoryBrowserModel.java      |    4 +-
 .../josm/gui/io/CustomConfigurator.java            |   63 +-
 .../josm/gui/io/DownloadFileTask.java              |    6 +-
 .../josm/gui/io/SaveLayersDialog.java              |    2 +-
 .../josm/gui/io/TagSettingsPanel.java              |    3 +-
 .../josm/gui/io/importexport/NoteExporter.java     |    4 +-
 .../io/importexport/ValidatorErrorExporter.java    |    4 +-
 .../josm/gui/io/importexport/WMSLayerExporter.java |    6 +-
 .../josm/gui/io/importexport/WMSLayerImporter.java |    4 +-
 .../josm/gui/layer/AbstractTileSourceLayer.java    |   88 +-
 src/org/openstreetmap/josm/gui/layer/GpxLayer.java |  161 +-
 .../openstreetmap/josm/gui/layer/ImageryLayer.java |   91 +-
 src/org/openstreetmap/josm/gui/layer/Layer.java    |   12 -
 .../josm/gui/layer/MainLayerManager.java           |   28 +-
 .../openstreetmap/josm/gui/layer/NoteLayer.java    |    2 +-
 .../openstreetmap/josm/gui/layer/OsmDataLayer.java |   23 +-
 src/org/openstreetmap/josm/gui/layer/WMSLayer.java |    2 +-
 .../gui/layer/geoimage/CorrelateGpxWithImages.java |   23 +-
 .../josm/gui/layer/geoimage/GeoImageLayer.java     |   67 +-
 .../josm/gui/layer/geoimage/ImageDisplay.java      |  370 +++--
 .../josm/gui/layer/geoimage/ImageEntry.java        |   60 +-
 .../josm/gui/layer/geoimage/ImageViewerDialog.java |  293 ++--
 .../gui/layer/gpx/DownloadWmsAlongTrackAction.java |    2 +-
 .../josm/gui/layer/gpx/GpxDrawHelper.java          |    2 +-
 .../layer/imagery/TileSourceDisplaySettings.java   |    8 +-
 .../josm/gui/layer/markerlayer/Marker.java         |   33 +-
 .../josm/gui/layer/markerlayer/MarkerLayer.java    |    2 +-
 .../josm/gui/mappaint/RenderingCLI.java            |   27 +-
 .../gui/mappaint/styleelement/AreaElement.java     |    4 +-
 .../josm/gui/mappaint/styleelement/MapImage.java   |    2 +-
 .../josm/gui/oauth/AbstractAuthorizationUI.java    |   14 -
 .../gui/oauth/AdvancedOAuthPropertiesPanel.java    |   40 -
 .../gui/oauth/FullyAutomaticAuthorizationUI.java   |   27 -
 .../gui/oauth/OsmOAuthAuthorizationClient.java     |    5 +-
 .../gui/preferences/imagery/AddWMSLayerPanel.java  |    2 +-
 .../projection/AbstractProjectionChoice.java       |   36 +-
 .../projection/CodeProjectionChoice.java           |    2 +-
 .../projection/ProjectionPreference.java           |   25 +-
 .../projection/SingleProjectionChoice.java         |    7 +-
 .../projection/UTMProjectionChoice.java            |    6 +-
 .../server/OverpassServerPreference.java           |   20 -
 .../gui/tagging/ac/AutoCompletingComboBox.java     |   17 -
 .../gui/tagging/ac/AutoCompletingTextField.java    |    3 +-
 .../gui/tagging/ac/AutoCompletionItemPriority.java |  149 --
 .../josm/gui/tagging/ac/AutoCompletionList.java    |   73 +-
 .../gui/tagging/ac/AutoCompletionListItem.java     |  128 --
 .../josm/gui/tagging/ac/AutoCompletionManager.java |   34 +-
 .../josm/gui/tagging/presets/TaggingPreset.java    |    2 +-
 .../josm/gui/tagging/presets/items/Check.java      |    2 +-
 .../tagging/presets/items/ComboMultiSelect.java    |    2 +-
 .../josm/gui/tagging/presets/items/KeyedItem.java  |    2 +-
 .../josm/gui/tagging/presets/items/Text.java       |    2 +-
 .../josm/gui/util/AdvancedKeyPressDetector.java    |   39 -
 src/org/openstreetmap/josm/gui/util/GuiHelper.java |   19 -
 .../josm/gui/util/ModifierListener.java            |   18 -
 .../josm/gui/widgets/MultiSplitLayout.java         |    2 +
 .../josm/gui/widgets/NativeFileChooser.java        |    2 +-
 src/org/openstreetmap/josm/io/AbstractReader.java  |   17 +-
 .../openstreetmap/josm/io/CacheCustomContent.java  |   12 +-
 src/org/openstreetmap/josm/io/CachedFile.java      |    3 +-
 .../josm/io/ChangesetClosedException.java          |   18 +-
 src/org/openstreetmap/josm/io/Compression.java     |    7 +-
 src/org/openstreetmap/josm/io/FileWatcher.java     |   28 -
 src/org/openstreetmap/josm/io/GeoJSONWriter.java   |   12 -
 src/org/openstreetmap/josm/io/GpxReader.java       |   33 +-
 src/org/openstreetmap/josm/io/OsmApi.java          |    2 +-
 src/org/openstreetmap/josm/io/OsmReader.java       |   10 +-
 src/org/openstreetmap/josm/io/OsmWriter.java       |   11 -
 .../openstreetmap/josm/io/ProgressInputStream.java |   30 -
 .../openstreetmap/josm/io/imagery/WMSImagery.java  |   83 +-
 .../josm/io/remotecontrol/AddTagsDialog.java       |    9 +-
 .../remotecontrol/handler/LoadAndZoomHandler.java  |   15 +-
 .../io/remotecontrol/handler/RequestHandler.java   |   41 +-
 .../josm/io/session/SessionReader.java             |    8 +-
 .../josm/io/session/SessionWriter.java             |    7 +-
 src/org/openstreetmap/josm/plugins/Plugin.java     |    2 +
 .../openstreetmap/josm/plugins/PluginHandler.java  |   13 -
 .../josm/plugins/PluginInformation.java            |    7 +-
 .../plugins/ReadLocalPluginInformationTask.java    |    8 +-
 .../josm/tools/CheckParameterUtil.java             |   83 -
 src/org/openstreetmap/josm/tools/HiDPISupport.java |    2 +-
 src/org/openstreetmap/josm/tools/HttpClient.java   |    3 +-
 src/org/openstreetmap/josm/tools/I18n.java         |   10 +-
 .../openstreetmap/josm/tools/ImageProvider.java    |   44 +-
 src/org/openstreetmap/josm/tools/ListenerList.java |    2 +-
 src/org/openstreetmap/josm/tools/Logging.java      |    2 +
 .../josm/tools/PlatformHookUnixoid.java            |    4 +-
 .../josm/tools/PlatformHookWindows.java            |    7 +-
 .../josm/tools/RightAndLefthandTraffic.java        |   13 +-
 src/org/openstreetmap/josm/tools/Utils.java        |   43 -
 .../josm/tools/template_engine/Condition.java      |   10 -
 .../josm/tools/template_engine/TemplateParser.java |    2 +-
 styles/standard/elemstyles.mapcss                  |    8 +-
 test/data/regress/15634/drumlish.gpx               |  882 ++++++++++
 .../josm/data/imagery/ImageryCompareTestIT.java    |    2 +-
 .../josm/data/osm/KeyValuePerformanceTest.java     |   10 +-
 .../gui/mappaint/MapRendererPerformanceTest.java   |   18 +-
 test/unit/org/openstreetmap/josm/JOSMFixture.java  |   13 +-
 test/unit/org/openstreetmap/josm/MainTest.java     |   36 -
 .../downloadtasks/PostDownloadHandlerTest.java     |    5 +
 .../josm/data/cache/JCSCacheManagerTest.java       |    2 +-
 .../data/cache/JCSCachedTileLoaderJobTest.java     |   25 +
 .../openstreetmap/josm/data/gpx/GpxDataTest.java   |    3 +-
 .../josm/data/oauth/OAuthParametersTest.java       |   11 -
 .../validation/tests/MapCSSTagCheckerTest.java     |   12 +
 .../josm/gui/MainApplicationTest.java              |   10 -
 .../josm/gui/dialogs/MinimapDialogTest.java        |  248 ++-
 .../josm/gui/help/HelpContentReaderTest.java       |    2 +-
 .../io/AsynchronousUploadPrimitivesTaskTest.java   |   15 +-
 .../openstreetmap/josm/gui/layer/GpxLayerTest.java |   22 +-
 .../josm/gui/layer/OsmDataLayerTest.java           |   98 +-
 .../josm/gui/layer/ValidatorLayerTest.java         |   37 +-
 .../layer/geoimage/CorrelateGpxWithImagesTest.java |   29 +-
 .../gui/oauth/OsmOAuthAuthorizationClientTest.java |    2 +-
 .../openstreetmap/josm/io/GeoJSONWriterTest.java   |   38 +-
 .../org/openstreetmap/josm/io/GpxReaderTest.java   |   13 +
 .../josm/io/session/SessionReaderTest.java         |    6 +-
 .../josm/testutils/ImagePatternMatching.java       |  317 ++++
 tools/checkstyle/META-INF/MANIFEST.MF              |    2 +-
 tools/checkstyle/josm_checks.xml                   |   15 +-
 tools/checkstyle/josm_filters.xml                  |    1 -
 tools/pmd/designer.bat                             |    4 +-
 tools/pmd/josm-ruleset.xml                         |  231 ++-
 tools/spotbugs/josm-filter.xml                     |  119 +-
 369 files changed, 51836 insertions(+), 26601 deletions(-)

diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..d897c54
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,25 @@
+language: java
+os:
+  - linux
+  - osx
+matrix:
+  include:
+    - os: linux
+      dist: trusty
+      sudo: required
+      jdk:
+        - oraclejdk9
+        - oraclejdk8
+        - openjdk8
+    - os: osx
+      osx_image: xcode9.2
+before_install:
+  - >
+    case "${TRAVIS_OS_NAME:-linux}" in
+    linux)
+      ;;
+    osx)
+      brew update
+      brew install ant
+      ;;
+    esac;
diff --git a/CONTRIBUTION b/CONTRIBUTION
index 0f66c84..c000231 100644
--- a/CONTRIBUTION
+++ b/CONTRIBUTION
@@ -62,8 +62,8 @@ is from Stuart D. Gathman and licensed with GPL.
 The Ellipsoid code (http://www.i3s.unice.fr/~johan/gps/)
 is from Johan Montagnat and licensed with GPL.
 
-The JSON code (https://java.net/projects/jsonp/)
-is from Oracle (RI for JSR 353: Java API for JSON Processing) 
+The JSON code (https://javaee.github.io/jsonp/)
+is from Oracle (RI for JSR 374: Java API for JSON Processing) 
 and licensed with GPL / classpath exception.
 
 The opening hour validation uses code from opening_hour.js
diff --git a/REVISION b/REVISION
index c7484ec..15598d7 100644
--- a/REVISION
+++ b/REVISION
@@ -2,7 +2,7 @@
 <info>
 <entry
    path="trunk"
-   revision="13170"
+   revision="13265"
    kind="dir">
 <url>https://josm.openstreetmap.de/svn/trunk</url>
 <relative-url>^/trunk</relative-url>
@@ -11,9 +11,9 @@
 <uuid>0c6e7542-c601-0410-84e7-c038aed88b3b</uuid>
 </repository>
 <commit
-   revision="13170">
+   revision="13265">
 <author>Don-vip</author>
-<date>2017-11-26T13:31:59.499887Z</date>
+<date>2017-12-31T02:09:43.768156Z</date>
 </commit>
 </entry>
 </info>
diff --git a/appveyor.yml b/appveyor.yml
new file mode 100644
index 0000000..132b277
--- /dev/null
+++ b/appveyor.yml
@@ -0,0 +1,29 @@
+version: '{build}'
+branches:
+  only:
+    - mirror
+image: Visual Studio 2017
+install:
+  - cinst ant
+  - refreshenv
+build_script:
+  - ant compile javadoc dist distmac checkstyle pmd spotbugs
+test_script:
+  - ant test
+after_test:
+  - ps: |
+        $wc = New-Object 'System.Net.WebClient'
+        Get-ChildItem . -Name -Recurse 'TEST-*.xml'  |
+        Foreach-Object {
+            $wc.UploadFile("https://ci.appveyor.com/api/testresults/junit/$($env:APPVEYOR_JOB_ID)", (Resolve-Path $_))
+        }
+artifacts:
+  - path: dist\josm-custom.*
+  - path: checkstyle-josm.xml
+  - path: pmd-josm.xml
+  - path: spotbugs-josm.xml
+  - path: javadoc
+    type: zip
+  - path: test\report
+    type: zip
+  - path: hs_err_pid*.log
diff --git a/build.xml b/build.xml
index aac6f32..1d9034d 100644
--- a/build.xml
+++ b/build.xml
@@ -20,13 +20,17 @@
         <property name="src.dir" location="${base.dir}/src"/>
         <property name="build.dir" location="${base.dir}/build"/>
         <property name="dist.dir" location="${base.dir}/dist"/>
-        <property name="javacc.home" location="${base.dir}/tools"/>
+        <property name="tools.dir" location="${base.dir}/tools"/>
+        <property name="pmd.dir" location="${tools.dir}/pmd"/>
+        <property name="checkstyle.dir" location="${tools.dir}/checkstyle"/>
+        <property name="spotbugs.dir" location="${tools.dir}/spotbugs"/>
+        <property name="javacc.home" location="${tools.dir}"/>
         <property name="mapcss.dir" location="${src.dir}/org/openstreetmap/josm/gui/mappaint/mapcss"/>
         <property name="proj-build.dir" location="${base.dir}/build2"/>
         <property name="checkstyle-build.dir" location="${base.dir}/build2"/>
         <property name="epsg.output" location="${base.dir}/data/projection/custom-epsg"/>
-        <property name="groovy.jar" location="${base.dir}/tools/groovy-all.jar"/>
-        <property name="error_prone_ant.jar" location="${base.dir}/tools/error_prone_ant.jar"/>
+        <property name="groovy.jar" location="${tools.dir}/groovy-all.jar"/>
+        <property name="error_prone_ant.jar" location="${tools.dir}/error_prone_ant.jar"/>
         <property name="dist.jar" location="${dist.dir}/josm-custom.jar"/>
         <property name="dist-optimized.jar" location="${dist.dir}/josm-custom-optimized.jar"/>
         <property name="javac.compiler" value="com.google.errorprone.ErrorProneAntCompilerAdapter" />
@@ -50,10 +54,10 @@
             </fileset>
             <pathelement path="${dist.jar}"/>
             <pathelement path="${groovy.jar}"/>
-            <pathelement path="tools/spotbugs/spotbugs-annotations.jar"/>
+            <pathelement path="${spotbugs.dir}/spotbugs-annotations.jar"/>
         </path>
         <path id="pmd.classpath">
-            <fileset dir="${base.dir}/tools/pmd/">
+            <fileset dir="${pmd.dir}">
                 <include name="*.jar"/>
             </fileset>
         </path>
@@ -165,7 +169,7 @@ Build-Date: ${build.tstamp}
     <!-- Mac OS X target -->
     <target name="mac" depends="init-properties">
         <!-- Using https://bitbucket.org/infinitekind/appbundler to create mac application bundle -->
-        <taskdef name="bundleapp" classname="com.oracle.appbundler.AppBundlerTask" classpath="tools/appbundler-1.0ea.jar"/>
+        <taskdef name="bundleapp" classname="com.oracle.appbundler.AppBundlerTask" classpath="${tools.dir}/appbundler-1.0ea.jar"/>
         <!-- create MacOS X application bundle -->
         <bundleapp outputdirectory="${bundle.outdir}" name="JOSM" displayname="JOSM" executablename="JOSM" identifier="org.openstreetmap.josm"
                    mainclassname="org.openstreetmap.josm.gui.MainApplication"
@@ -195,7 +199,7 @@ Build-Date: ${build.tstamp}
         </bundleapp>
 
         <!-- appbundler lacks the possibility of defining our own keys or using a template, so update the .plist manually -->
-        <taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask" classpath="tools/xmltask.jar"/>
+        <taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask" classpath="${tools.dir}/xmltask.jar"/>
 
         <xmltask source="${bundle.outdir}/JOSM.app/Contents/Info.plist" dest="${bundle.outdir}/JOSM.app/Contents/Info.plist" indent="false">
             <!-- remove empty CFBundleDocumentTypes definition -->
@@ -317,7 +321,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/**,gnu/**"
+            excludes="com/**,javax/**,gnu/**,oauth/**,org/apache/commons/**,org/glassfish/**,org/openstreetmap/gui/jmapviewer/**"
             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}"/>
@@ -387,6 +391,7 @@ Build-Date: ${build.tstamp}
         <delete file="${src.dir}/org/w3/_2001/xmlschema/Adapter1.java"/>
         <delete dir="${src.dir}/org/openstreetmap/josm/data/imagery/types"/>
         <delete file="${epsg.output}"/>
+        <delete file="${pmd.dir}/cache"/>
     </target>
     <macrodef name="init-test-preferences">
         <attribute name="testfamily"/>
@@ -405,7 +410,7 @@ Build-Date: ${build.tstamp}
         <init-test-preferences testfamily="unit"/>
         <init-test-preferences testfamily="functional"/>
         <init-test-preferences testfamily="performance"/>
-        <taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml" classpath="tools/jacocoant.jar" />
+        <taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml" classpath="${tools.dir}/jacocoant.jar" />
     </target>
     <target name="test-clean" depends="init-properties">
         <delete dir="${test.dir}/build"/>
@@ -543,7 +548,7 @@ Build-Date: ${build.tstamp}
         </jacoco:report>
     </target>
     <target name="dist-optimized" depends="dist">
-        <taskdef resource="proguard/ant/task.properties" classpath="tools/proguard.jar"/>
+        <taskdef resource="proguard/ant/task.properties" classpath="${tools.dir}/proguard.jar"/>
         <proguard>
         -injars ${dist.jar}
         -outjars ${dist-optimized.jar}
@@ -598,7 +603,7 @@ Build-Date: ${build.tstamp}
     <target name="dist-optimized-report" depends="dist-optimized" unless="isJava9">
         <!-- generate difference report between optimized jar and normal one -->
         <exec executable="perl" dir="${basedir}">
-            <arg value="tools/japicc/japi-compliance-checker.pl"/>
+            <arg value="${tools.dir}/japicc/japi-compliance-checker.pl"/>
             <arg value="--lib=JOSM"/>
             <arg value="--keep-internal"/>
             <arg value="--v1=${version.entry.commit.revision}"/>
@@ -613,7 +618,7 @@ Build-Date: ${build.tstamp}
         <local name="plugins"/>
         <property name="dir" value="plugin-check"/>
         <typedef uri="antlib:org.codehaus.mojo.animal_sniffer">
-            <classpath path="tools/animal-sniffer-ant-tasks.jar"/>
+            <classpath path="${tools.dir}/animal-sniffer-ant-tasks.jar"/>
         </typedef>
         <mkdir dir="${dir}"/>
         <!-- List of deprecated plugins -->
@@ -744,7 +749,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/spotbugs/spotbugs-annotations.jar">
+            <groovy src="${taginfoextract}" classpath="${dist.jar}:${spotbugs.dir}/spotbugs-annotations.jar">
                 <arg value="-t"/>
                 <arg value="@{type}"/>
                 <arg value="--noexit"/>
@@ -758,7 +763,7 @@ Build-Date: ${build.tstamp}
     </macrodef>
 
     <target name="taginfo" depends="dist">
-        <taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" classpath="${groovy.jar};tools/commons-cli-1.3.1.jar"/>
+        <taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" classpath="${groovy.jar};${tools.dir}/commons-cli-1.3.1.jar"/>
         <property name="taginfoextract" value="scripts/TagInfoExtract.groovy"/>
         <property name="imgurlprefix" value="http://josm.openstreetmap.de/download/taginfo/taginfo-img"/>
         <_taginfo type="mappaint" output="taginfo_style.json"/>
@@ -767,7 +772,7 @@ Build-Date: ${build.tstamp}
     </target>
 
     <target name="imageryindex" depends="init-properties">
-        <taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" classpath="${groovy.jar};tools/commons-cli-1.3.1.jar"/>
+        <taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" classpath="${groovy.jar};${tools.dir}/commons-cli-1.3.1.jar"/>
         <echo message="Checking editor imagery difference"/>
         <groovy src="scripts/SyncEditorLayerIndex.groovy" classpath="${dist.jar}">
                 <arg value="-noeli"/>
@@ -802,16 +807,16 @@ Build-Date: ${build.tstamp}
 
     <target name="checkstyle-compile" depends="init-properties">
         <mkdir dir="${checkstyle-build.dir}"/>
-        <javac sourcepath="" srcdir="${base.dir}/tools/checkstyle/src" failonerror="true"
+        <javac sourcepath="" srcdir="${checkstyle.dir}/src" failonerror="true"
             destdir="${checkstyle-build.dir}" target="${java.lang.version}" source="${java.lang.version}" debug="on"
             includeantruntime="false" createMissingPackageInfoClass="false"
-            encoding="UTF-8" classpath="tools/checkstyle/checkstyle-all.jar">
+            encoding="UTF-8" classpath="${checkstyle.dir}/checkstyle-all.jar">
         </javac>
     </target>
     <target name="checkstyle" depends="checkstyle-compile">
         <taskdef resource="com/puppycrawl/tools/checkstyle/ant/checkstyle-ant-task.properties"
-             classpath="tools/checkstyle/checkstyle-all.jar:${checkstyle-build.dir}"/>
-        <checkstyle config="tools/checkstyle/josm_checks.xml">
+             classpath="${checkstyle.dir}/checkstyle-all.jar:${checkstyle-build.dir}"/>
+        <checkstyle config="${checkstyle.dir}/josm_checks.xml">
             <fileset dir="${base.dir}/src/org/openstreetmap/josm" includes="**/*.java"
                 excludes="gui/mappaint/mapcss/parsergen/*.java"/>
             <fileset dir="${base.dir}/test" includes="**/*.java"/>
@@ -821,9 +826,9 @@ Build-Date: ${build.tstamp}
     </target>
 
     <target name="spotbugs" depends="dist">
-        <taskdef name="spotbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask" classpath="tools/spotbugs/spotbugs-ant.jar"/>
+        <taskdef name="spotbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask" classpath="${spotbugs.dir}/spotbugs-ant.jar"/>
         <path id="spotbugs-classpath">
-            <fileset dir="${base.dir}/tools/spotbugs/">
+            <fileset dir="${spotbugs.dir}">
                 <include name="*.jar"/>
             </fileset>
         </path>
@@ -832,7 +837,7 @@ Build-Date: ${build.tstamp}
                 outputFile="spotbugs-josm.xml"
                 classpath="${spotbugs-classpath}"
                 pluginList=""
-                excludeFilter="tools/spotbugs/josm-filter.xml"
+                excludeFilter="${spotbugs.dir}/josm-filter.xml"
                 effort="max"
                 reportLevel="low"
                 >
@@ -843,9 +848,9 @@ Build-Date: ${build.tstamp}
 
     <target name="pmd" depends="init-properties">
         <taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask" classpath="${toString:pmd.classpath}"/>
-        <pmd shortFilenames="true" encoding="UTF-8">
+        <pmd shortFilenames="true" cacheLocation="${pmd.dir}/cache" encoding="UTF-8">
             <sourceLanguage name="java" version="${java.lang.version}" />
-            <ruleset>${base.dir}/tools/pmd/josm-ruleset.xml</ruleset>
+            <ruleset>${pmd.dir}/josm-ruleset.xml</ruleset>
             <formatter type="text" toConsole="true" />
             <formatter type="xml" toFile="pmd-josm.xml">
                 <param name="encoding" value="UTF-8" />
@@ -881,7 +886,7 @@ Build-Date: ${build.tstamp}
       ** generate projection list.
     -->
     <target name="epsg" depends="epsg-compile">
-        <touch file="${epsg.output}"/>
+        <touch file="${epsg.output}" mkdirs="true"/>
         <java classname="BuildProjectionDefinitions" failonerror="true" fork="true">
             <sysproperty key="java.awt.headless" value="true"/>
             <classpath>
diff --git a/data/defaultpresets.xml b/data/defaultpresets.xml
index a0864b6..3942f8b 100644
--- a/data/defaultpresets.xml
+++ b/data/defaultpresets.xml
@@ -730,7 +730,8 @@
                   pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:highway=residential"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:highway=residential"
                   uk.href="http://wiki.openstreetmap.org/wiki/Uk:Tag:highway=residential"
-                  vi.href="http://wiki.openstreetmap.org/wiki/Vi:Tag:highway=residential" />
+                  vi.href="http://wiki.openstreetmap.org/wiki/Vi:Tag:highway=residential"
+                  zh_CN.href="http://wiki.openstreetmap.org/wiki/Zh-hans:Tag:highway=residential" />
             <space />
             <key key="highway" value="residential" />
             <text key="name" text="Name" />
@@ -1723,6 +1724,7 @@
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:barrier=bollard"
                   nl.href="http://wiki.openstreetmap.org/wiki/NL:Tag:barrier=bollard"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:barrier=bollard"
+                  pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:barrier=bollard"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:barrier=bollard" />
             <space />
             <key key="barrier" value="bollard" />
@@ -1832,7 +1834,8 @@
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:barrier=guard_rail"
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:barrier=guard_rail"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:barrier=guard_rail"
-                  pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:barrier=guard_rail" />
+                  pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:barrier=guard_rail"
+                  pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:barrier=guard_rail" />
             <key key="barrier" value="guard_rail" />
             <reference ref="optional_height" />
         </item> <!-- Guard Rail -->
@@ -1907,6 +1910,7 @@
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:barrier=kerb"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:barrier=kerb"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:barrier=kerb"
+                  pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:barrier=kerb"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:barrier=kerb" />
             <key key="barrier" value="kerb" />
             <reference ref="optional_height" />
@@ -1968,7 +1972,8 @@
         </item> <!-- Swing Gate -->
         <item name="Hampshire Gate" type="node" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:barrier=hampshire_gate"
-                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:barrier=hampshire_gate" />
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:barrier=hampshire_gate"
+                  pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:barrier=hampshire_gate" />
             <key key="barrier" value="hampshire_gate" />
             <reference ref="barrier_5" />
             <reference ref="optional_maxwidth" />
@@ -2782,7 +2787,8 @@
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:railway=disused"
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:railway=disused"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:railway=disused"
-                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:railway=disused" />
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:railway=disused"
+                  pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:railway=disused" />
             <key key="railway" value="disused" />
             <optional>
                 <reference ref="railway_service" />
@@ -2794,6 +2800,7 @@
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:railway=abandoned"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:railway=abandoned"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:railway=abandoned"
+                  pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:railway=abandoned"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:railway=abandoned" />
             <key key="railway" value="abandoned" />
             <optional>
@@ -2860,6 +2867,7 @@
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:railway=buffer_stop"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:railway=buffer_stop"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:railway=buffer_stop"
+                  pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:railway=buffer_stop"
                   pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:railway=buffer_stop" />
             <key key="railway" value="buffer_stop" />
         </item> <!-- Buffer Stop -->
@@ -3059,9 +3067,11 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=parking_space"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:amenity=parking_space"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=parking_space"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:amenity=parking_space"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:amenity=parking_space"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:amenity=parking_space"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:amenity=parking_space"
+                  pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:amenity=parking_space"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:amenity=parking_space" />
             <space />
             <key key="amenity" value="parking_space" />
@@ -3152,6 +3162,7 @@
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=charging_station"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:amenity=charging_station"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:amenity=charging_station"
+                  pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:amenity=charging_station"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:amenity=charging_station" />
             <space />
             <key key="amenity" value="charging_station" />
@@ -3273,7 +3284,8 @@
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:shop=tyres"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:shop=tyres"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:shop=tyres"
-                  pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:shop=tyres" />
+                  pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:shop=tyres"
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:shop=tyres" />
             <space />
             <key key="shop" value="tyres" />
             <reference ref="name_brand_operator_oh_wheelchair" />
@@ -3321,6 +3333,7 @@
                   el.href="http://wiki.openstreetmap.org/wiki/El:Tag:amenity=motorcycle_parking"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:amenity=motorcycle_parking"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:amenity=motorcycle_parking"
+                  pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:amenity=motorcycle_parking"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:amenity=motorcycle_parking" />
             <space />
             <key key="amenity" value="motorcycle_parking" />
@@ -3431,6 +3444,7 @@
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:amenity=bicycle_repair_station"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=bicycle_repair_station"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:amenity=bicycle_repair_station"
+                  pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:amenity=bicycle_repair_station"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:amenity=bicycle_repair_station" />
             <space />
             <key key="amenity" value="bicycle_repair_station" />
@@ -3829,6 +3843,7 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:aeroway=apron"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:aeroway=apron"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:aeroway=apron"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:aeroway=apron"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:aeroway=apron"
                   pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:aeroway=apron"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:aeroway=apron" />
@@ -4153,6 +4168,7 @@
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:amenity=restaurant"
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:amenity=restaurant"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:amenity=restaurant"
+                  pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:amenity=restaurant"
                   pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:amenity=restaurant"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:amenity=restaurant" />
             <space />
@@ -4361,6 +4377,8 @@
             <key key="tourism" value="viewpoint" />
             <text key="name" text="Name" />
             <combo key="direction" text="Direction" delimiter="|" values="N|E|S|W|NE|NNE-S|180|90-270|270-90|0-360|70-110;250-290" values_no_i18n="true" values_sort="false" />
+            <space />
+            <label text="" icon="presets/misc/angles.svg" icon_size="300" />
             <!--<check key="man_made" value="tower" text="Look-Out Tower" />-->
         </item> <!-- Viewpoint -->
         <separator/>
@@ -4781,6 +4799,7 @@
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=casino"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:amenity=casino"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:amenity=casino"
+                  pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:amenity=casino"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:amenity=casino" />
             <space />
             <key key="amenity" value="casino" />
@@ -5318,6 +5337,7 @@
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:amenity=driving_school"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:amenity=driving_school"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:amenity=driving_school"
+                  pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:amenity=driving_school"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:amenity=driving_school" />
             <space />
             <key key="amenity" value="driving_school" />
@@ -5792,7 +5812,8 @@
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:amenity=internet_cafe"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=internet_cafe"
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:amenity=internet_cafe"
-                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:amenity=internet_cafe" />
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:amenity=internet_cafe"
+                  pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:amenity=internet_cafe" />
             <space />
             <key key="amenity" value="internet_cafe" />
             <reference ref="name_operator_oh_wheelchair" />
@@ -5930,6 +5951,7 @@
                   pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:amenity=waste_basket"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:amenity=waste_basket" />
             <key key="amenity" value="waste_basket" />
+            <combo key="waste" text="Waste" values="trash,dog_excrement" />
         </item> <!-- Waste Basket/Trash Can -->
         <item name="Waste Disposal/Dumpster" icon="presets/service/recycling/waste_disposal.svg" type="node" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=waste_disposal"
@@ -5941,6 +5963,7 @@
                   pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:amenity=waste_disposal"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:amenity=waste_disposal" />
             <key key="amenity" value="waste_disposal" />
+            <combo key="waste" text="Waste" values="trash" />
         </item> <!-- Waste Disposal/Dumpster -->
         <item name="Sanitary Dump Station" icon="presets/service/recycling/sanitary_dump_station.svg" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Toilet_Holding_Tank_Disposal"
@@ -6048,6 +6071,7 @@
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:amenity=water_point"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:amenity=water_point"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:amenity=water_point"
+                  pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:amenity=water_point"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:amenity=water_point" />
             <space />
             <key key="amenity" value="water_point" />
@@ -6818,7 +6842,7 @@
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Key:building"
                   uk.href="http://wiki.openstreetmap.org/wiki/Uk:Key:building" />
             <space />
-            <combo key="building" text="Building" values="yes,residential,apartments,house,hotel,hut,bungalow,dormitory,terrace,detached,farm,roof" default="residential" match="keyvalue!" values_context="building" values_searchable="true" />
+            <combo key="building" text="Building" values="yes,residential,apartments,house,hotel,hut,bungalow,dormitory,terrace,detached,farm" default="residential" match="keyvalue!" values_context="building" values_searchable="true" />
             <optional>
                 <text key="name" text="Name" />
                 <combo key="building:levels" text="Levels" values="1,2,3,4,5,6,7,8,9,10,11" text_context="building" />
@@ -6902,6 +6926,7 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:man_made=cross"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:man_made=cross"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:man_made=cross"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:man_made=cross"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:man_made=cross"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:man_made=cross" />
             <key key="man_made" value="cross" />
@@ -7227,6 +7252,7 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:man_made=monitoring_station"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:man_made=monitoring_station"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:man_made=monitoring_station"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:man_made=monitoring_station"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:man_made=monitoring_station"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:man_made=monitoring_station"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:man_made=monitoring_station"
@@ -8291,7 +8317,8 @@
                   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" />
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Key:organic"
+                  pl.href="http://wiki.openstreetmap.org/wiki/Pl:Key:organic" />
             <space />
             <combo text="Organic/Bio" key="organic" values="only,yes,no" match="key" />
         </item> <!-- Organic -->
@@ -8300,7 +8327,8 @@
                   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"
-                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Key:fair_trade" />
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Key:fair_trade"
+                  pl.href="http://wiki.openstreetmap.org/wiki/Pl:Key:fair_trade" />
             <space />
             <combo text="Fair Trade" key="fair_trade" values="no,yes,only" match="key" />
         </item> <!-- Fair Trade -->
@@ -8627,6 +8655,7 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=pawnbroker"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:shop=pawnbroker"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=pawnbroker"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:shop=pawnbroker"
                   id.href="http://wiki.openstreetmap.org/wiki/Id:Tag:shop=pawnbroker"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:shop=pawnbroker"
                   pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:shop=pawnbroker"
@@ -9190,6 +9219,7 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=bookmaker"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:shop=bookmaker"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=bookmaker"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:shop=bookmaker"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:shop=bookmaker" />
             <space />
             <key key="shop" value="bookmaker" />
@@ -9212,6 +9242,7 @@
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:shop=bag"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=bag"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:shop=bag"
+                  pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:shop=bag"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:shop=bag" />
             <space />
             <key key="shop" value="bag" />
@@ -9363,7 +9394,8 @@
     <item name="Advertising agency" icon="presets/office/advertising_agency.svg" name_context="office" type="node,closedway,multipolygon" preset_name_label="true">
         <link href="http://wiki.openstreetmap.org/wiki/Tag:office=advertising_agency"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:office=advertising_agency"
-                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:office=advertising_agency" />
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:office=advertising_agency"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:office=advertising_agency" />
         <space />
         <key key="office" value="advertising_agency" />
         <reference ref="name_operator_oh_wheelchair" />
@@ -9532,6 +9564,7 @@
     <item name="Non-governmental organisation (NGO)" icon="presets/office/ong.svg" name_context="office" type="node,closedway,multipolygon" preset_name_label="true">
         <link href="http://wiki.openstreetmap.org/wiki/Tag:office=ngo"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:office=ngo"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:office=ngo"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:office=ngo"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:office=ngo"
                   pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:office=ngo"
@@ -9544,7 +9577,8 @@
     </item> <!-- Non-governmental organisation (NGO) -->
     <item name="Notary" icon="presets/office/notary.svg" name_context="office" type="node,closedway,multipolygon" preset_name_label="true">
         <link href="http://wiki.openstreetmap.org/wiki/Tag:office=notary"
-                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:office=notary" />
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:office=notary"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:office=notary" />
         <space />
         <key key="office" value="notary" />
         <reference ref="name_oh_wheelchair" />
@@ -9871,7 +9905,8 @@
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:craft=stonemason"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:craft=stonemason"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:craft=stonemason"
-                  pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:craft=stonemason" />
+                  pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:craft=stonemason"
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:craft=stonemason" />
         <space />
         <key key="craft" value="stonemason" />
         <reference ref="name_operator_oh_wheelchair" />
@@ -9880,6 +9915,7 @@
     <item name="Blacksmith" type="node,closedway,multipolygon" preset_name_label="true">
         <link href="http://wiki.openstreetmap.org/wiki/Tag:craft=blacksmith"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:craft=blacksmith"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:craft=blacksmith"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:craft=blacksmith"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:craft=blacksmith"
                   pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:craft=blacksmith"
@@ -11047,7 +11083,8 @@
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Key:name"
                   sv.href="http://wiki.openstreetmap.org/wiki/Sv:Key:name"
                   uk.href="http://wiki.openstreetmap.org/wiki/Uk:Key:name"
-                  zh_CN.href="http://wiki.openstreetmap.org/wiki/Zh-hans:Key:name" />
+                  zh_CN.href="http://wiki.openstreetmap.org/wiki/Zh-hans:Key:name"
+                  zh_TW.href="http://wiki.openstreetmap.org/wiki/Zh-hant:Key:name" />
             <space />
             <text key="name" text="Name" />
             <optional>
@@ -11521,6 +11558,7 @@
                 <link href="http://wiki.openstreetmap.org/wiki/Tag:route=railway"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:route=railway"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:route=railway"
+                  it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:route=railway"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:route=railway"
                   pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:route=railway"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:route=railway" />
diff --git a/data/validator/deprecated.mapcss b/data/validator/deprecated.mapcss
index a5446fa..b43ae01 100644
--- a/data/validator/deprecated.mapcss
+++ b/data/validator/deprecated.mapcss
@@ -1162,4 +1162,12 @@ way[direction=down][incline][incline!=down] {
   throwWarning: tr("{0} is deprecated", "{0.tag}");
   suggestAlternative: "incline";
   group: tr("deprecated tagging");
+}
+
+way[building=y],
+way[building=1] {
+  throwError: tr("{0}", "{0.tag}");
+  suggestAlternative: "building=yes";
+  group: tr("misspelled value");
+  fixAdd: "building=yes";
 }
\ No newline at end of file
diff --git a/data/validator/geometry.mapcss b/data/validator/geometry.mapcss
index f667b1c..b3040d7 100644
--- a/data/validator/geometry.mapcss
+++ b/data/validator/geometry.mapcss
@@ -111,7 +111,8 @@ way[highway=motorway_junction] {
   throwWarning: tr("{0} on a way. Should be used on a node.", "{0.tag}"); 
 }
 
-/* {0} on a way, should be a relation; see #10252, #14288 */
+/* {0} on a way, should be a relation; see #15642, #10252, #14288 */
+way[restriction][restriction =~ /^(no_right_turn|no_left_turn|no_u_turn|no_straight_on|only_right_turn|only_left_turn|only_straight_on|no_entry|no_exit)$/],
 way[type=multipolygon],
 way[route=bus] {
   throwError: tr("{0} on a way. Should be used in a relation", "{0.tag}"); 
diff --git a/i18n/convmaps.pl b/i18n/convmaps.pl
index 40075b6..ea2ab41 100644
--- a/i18n/convmaps.pl
+++ b/i18n/convmaps.pl
@@ -38,12 +38,14 @@ for my $line (@lines)
   {
     my $val = $1;
     $val =~ s/&/&/g;
+    $val =~ s/"/\\"/g;
     print "tr(\"$val\"); /* $line */\n";
   }
   elsif($line =~ /<description +lang=['"]en['"]>(.*)<\/description>/)
   {
     my $val = $1;
     $val =~ s/&/&/g;
+    $val =~ s/"/\\"/g;
     print "tr(\"$val\"); /* $line */\n";
   }
   elsif($line =~ /^[ \t]*$/)
diff --git a/i18n/po/af.po b/i18n/po/af.po
index 7e4bfef..ff894be 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 04:33+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:33+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: af\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -953,6 +953,12 @@ msgstr ""
 msgid "Select if the data should be downloaded into a new layer"
 msgstr ""
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr ""
 
@@ -2225,6 +2231,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3028,18 +3059,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr ""
@@ -3056,9 +3075,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8231,12 +8262,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9730,6 +9755,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9834,8 +9865,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9845,6 +9876,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9858,14 +9892,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr ""
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9908,6 +9965,16 @@ msgstr ""
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10236,40 +10303,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13356,8 +13423,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14020,6 +14087,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19448,6 +19521,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23423,6 +23502,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23743,7 +23828,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24166,6 +24252,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24252,9 +24344,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24282,10 +24371,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24684,18 +24773,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24719,7 +24796,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24781,10 +25008,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24793,118 +25020,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25041,6 +25277,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27569,15 +27817,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27636,13 +27881,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27678,15 +27917,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27819,6 +28055,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32245,6 +32486,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33725,9 +33970,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/am.po b/i18n/po/am.po
index 9dfacc3..db87dec 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 04:34+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:34+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: am\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -953,6 +953,12 @@ msgstr ""
 msgid "Select if the data should be downloaded into a new layer"
 msgstr ""
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr ""
 
@@ -2225,6 +2231,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3028,18 +3059,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr ""
@@ -3056,9 +3075,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8231,12 +8262,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9730,6 +9755,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9834,8 +9865,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9845,6 +9876,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9858,14 +9892,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr ""
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9908,6 +9965,16 @@ msgstr ""
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10236,40 +10303,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13356,8 +13423,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14020,6 +14087,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19448,6 +19521,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23423,6 +23502,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23743,7 +23828,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24166,6 +24252,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24252,9 +24344,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24282,10 +24371,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24684,18 +24773,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24719,7 +24796,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24781,10 +25008,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24793,118 +25020,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25041,6 +25277,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27569,15 +27817,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27636,13 +27881,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27678,15 +27917,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27819,6 +28055,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32245,6 +32486,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33725,9 +33970,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/ar.po b/i18n/po/ar.po
index caf7f7b..499c773 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 04:34+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:34+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: ar\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -967,6 +967,12 @@ msgstr "طبقة منفصلة"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "إختار إذا يجب تحميل البيانات إلى طبقة جديدة"
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr "موقع التنزيل"
 
@@ -2243,6 +2249,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3047,18 +3078,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr "درجات عشرية"
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr "ج."
@@ -3075,9 +3094,21 @@ msgctxt "compass"
 msgid "E"
 msgstr "ش."
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr "درجات عشرية"
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8269,12 +8300,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9771,6 +9796,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9875,8 +9906,8 @@ msgstr "الإسم: {0}"
 msgid "Description: {0}"
 msgstr "الوصف: {0}"
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9886,6 +9917,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9899,14 +9933,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr "إحفظ ملف GPX"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9949,6 +10006,16 @@ msgstr "إحفظ الطبقة"
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10277,40 +10344,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13407,8 +13474,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14071,6 +14138,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr "هل تريد السماح بذلك ؟"
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19499,6 +19572,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23474,6 +23553,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23794,7 +23879,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24217,6 +24303,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24303,9 +24395,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24333,10 +24422,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24735,18 +24824,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24770,7 +24847,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24832,10 +25059,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24844,118 +25071,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25092,6 +25328,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27620,15 +27868,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27687,13 +27932,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27729,15 +27968,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27870,6 +28106,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32296,6 +32537,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33776,9 +34021,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/ast.po b/i18n/po/ast.po
index 38d122e..9366c5e 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\n"
 "PO-Revision-Date: 2017-11-12 10:06+0000\n"
 "Last-Translator: Don-vip <Unknown>\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-11-26 04:35+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:35+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: ast\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1035,6 +1035,12 @@ msgstr "Capa separada"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "Seleicionar si los datos tienen de descargase nuna capa nueva"
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr "Llugar de descarga"
 
@@ -2425,6 +2431,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr "Confirmación"
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr "Llista de rellaciones recién"
 
@@ -3306,18 +3337,6 @@ msgstr "Falta l''arquivu de revisión ''/REVISION''."
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr "Yá se rexistró un conflictu pa la primitiva «{0}»."
 
-msgid "Decimal Degrees"
-msgstr "Grados decimales"
-
-msgid "deg° min'' sec\""
-msgstr "gradº min'' seg''"
-
-msgid "deg° min'' (Nautical)"
-msgstr "gradº min'' (Naútica)"
-
-msgid "Projected Coordinates"
-msgstr "Coordenaes proyectaes"
-
 msgctxt "compass"
 msgid "S"
 msgstr "S"
@@ -3334,9 +3353,21 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
+msgid "deg° min'' sec\""
+msgstr "gradº min'' seg''"
+
+msgid "Decimal Degrees"
+msgstr "Grados decimales"
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr "Nun pudo analizase como valor de coordenada: ''{0}''"
 
+msgid "deg° min'' (Nautical)"
+msgstr "gradº min'' (Naútica)"
+
+msgid "Projected Coordinates"
+msgstr "Coordenaes proyectaes"
+
 msgid "Date of imagery: {0}"
 msgstr "Data de les imaxes: {0}"
 
@@ -8916,12 +8947,6 @@ msgstr ""
 "que s''empecipia JOSM.<br>Puede abrir manualmente del menú Archivo o dende "
 "la barra de ferramientes.</html>"
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -10611,6 +10636,12 @@ msgstr "Metadatos "
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr "Falló la creación d’una fonte de cuadros"
 
@@ -10716,10 +10747,10 @@ msgstr "Nome: {0}"
 msgid "Description: {0}"
 msgstr "Descripción: {0}"
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
-msgstr[0] "{0} pista"
-msgstr[1] "{0} pistas"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Timespan"
 msgstr "Intervalu de tiempu"
@@ -10727,6 +10758,9 @@ msgstr "Intervalu de tiempu"
 msgid "Length"
 msgstr "Llargor"
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr "Llargor: {0}"
 
@@ -10740,14 +10774,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] "{0} nodo de vía"
 msgstr[1] "{0} nodos de vía"
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
-msgstr[0] "{0} pista, "
-msgstr[1] "{0} pistes, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] "{0} pista"
+msgstr[1] "{0} pistas"
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr "Guardar ficheru GPX"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr "Id"
 
@@ -10790,6 +10847,16 @@ msgstr "Guardar capa"
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -11138,29 +11205,20 @@ msgstr "Erru n´arquivu {0}"
 msgid "Display geotagged images"
 msgstr "Amosar imaxes xeolocalizaes"
 
-msgid "Previous"
-msgstr "Anterior"
+msgid "Next"
+msgstr "Siguiente"
 
-msgid "Show previous Image"
-msgstr "Amosar imaxe previa"
+msgid "Show next Image"
+msgstr "Amosar imaxe siguiente"
 
 msgid "Geoimage: {0}"
 msgstr "Xeoimaxe: {0}"
 
-msgid "Remove photo from layer"
-msgstr "Esaniciar semeya de la capa"
-
-msgid "Delete File from disk"
-msgstr "Borrar arquivu del discu"
-
-msgid "Copy image path"
-msgstr "Copiar camin de la imaxe"
-
-msgid "Next"
-msgstr "Siguiente"
+msgid "Previous"
+msgstr "Anterior"
 
-msgid "Show next Image"
-msgstr "Amosar imaxe siguiente"
+msgid "Show previous Image"
+msgstr "Amosar imaxe previa"
 
 msgid "Show first Image"
 msgstr "Amosar primer imaxe"
@@ -11174,6 +11232,15 @@ msgstr "Centrar vista"
 msgid "Zoom best fit and 1:1"
 msgstr "Zoom a meyor axuste y 1:1"
 
+msgid "Remove photo from layer"
+msgstr "Esaniciar semeya de la capa"
+
+msgid "Delete File from disk"
+msgstr "Borrar arquivu del discu"
+
+msgid "Copy image path"
+msgstr "Copiar camin de la imaxe"
+
 msgid "Move dialog to the side pane"
 msgstr "Mover diálogu al panel llateral"
 
@@ -14625,11 +14692,9 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr "El nodo borráu {0} ye parte de la vía {1}"
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
-"La vía {0} con {1} nodos tien nodos incompletos porque falta a lo menos un "
-"nodo nos datos cargaos."
 
 msgid ""
 "Relation with external id ''{0}'' refers to a missing primitive with "
@@ -15369,6 +15434,12 @@ msgstr "Control Remotu recibió un pidimientu d''abrir un arquivu local"
 msgid "Do you want to allow this?"
 msgstr "¿Deseya permitir esto?"
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr "Confirmar l''acción del control remotu"
 
@@ -21047,6 +21118,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr "Contenedor de borrafes"
 
@@ -25048,6 +25125,12 @@ msgstr "Tresporte Públicu (ÖPNV)"
 msgid "Hike & Bike"
 msgstr "Hike & Bike"
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr "skobbler"
 
@@ -25368,7 +25451,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -25791,6 +25875,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -25879,9 +25969,6 @@ msgstr ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
 
-msgid "Hamburg (40 cm)"
-msgstr "Hamburg (40 cm)"
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -25909,10 +25996,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -26312,18 +26399,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Niger Delta Oct 2012 Landsat"
 
@@ -26347,7 +26422,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -26409,10 +26634,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
-msgstr "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -26421,118 +26646,127 @@ msgstr "Geoportal 2: PRNG (geo names)"
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
-msgstr "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
+msgstr ""
+
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
+msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
-msgstr "Będzin: Budynki (buildings)"
+msgid "Będzin: Buildings"
+msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
-msgstr "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
+msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
-msgstr "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
-msgstr "Chorzów: Budynki (buildings)"
+msgid "Chorzów: Buildings"
+msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
+msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
-msgstr "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
+msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
-msgstr "Gliwice: Budynki (buildings)"
+msgid "Gliwice: Buildings"
+msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
-msgstr "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
-msgstr "Łódź: Ortofotomapa (aerial image)"
+msgid "Łódź: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
-msgstr "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
-msgstr "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
-msgstr "Rzeszów: Budynki (buildings)"
+msgid "Rzeszów: Buildings"
+msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
-msgstr "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
+msgstr ""
+
+msgid "Siemianowice Śląskie: Buildings"
+msgstr ""
+
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
+msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
+msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
-msgstr "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -26669,6 +26903,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr "Kanton Aargau 25cm (AGIS 2011)"
 
@@ -29351,15 +29597,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -29418,13 +29661,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -29460,15 +29697,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -29601,6 +29835,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -34396,6 +34635,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr "¡Non pudo desaniciar el ficheru!"
 
@@ -35927,9 +36170,6 @@ msgstr "Esportar datos de tráficu a arquivu de rede SUMU."
 msgid "SUMO Export"
 msgstr "Esportar a SUMU"
 
-msgid "Export"
-msgstr "Esportar"
-
 msgid "AutoSave LiveData"
 msgstr "Autograbar LiveData"
 
diff --git a/i18n/po/az.po b/i18n/po/az.po
index c1ecde3..db01d5b 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 04:36+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:36+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
 msgstr ""
@@ -952,6 +952,12 @@ msgstr ""
 msgid "Select if the data should be downloaded into a new layer"
 msgstr ""
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr ""
 
@@ -2224,6 +2230,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3027,18 +3058,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr ""
@@ -3055,9 +3074,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8230,12 +8261,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9729,6 +9754,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9833,8 +9864,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9844,6 +9875,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9857,14 +9891,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr ""
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9907,6 +9964,16 @@ msgstr ""
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10235,40 +10302,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13355,8 +13422,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14019,6 +14086,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19447,6 +19520,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23422,6 +23501,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23742,7 +23827,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24165,6 +24251,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24251,9 +24343,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24281,10 +24370,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24683,18 +24772,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24718,7 +24795,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24780,10 +25007,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24792,118 +25019,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25040,6 +25276,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27568,15 +27816,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27635,13 +27880,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27677,15 +27916,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27818,6 +28054,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32244,6 +32485,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33724,9 +33969,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/be.po b/i18n/po/be.po
index e25eb96..1d47ee1 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 04:37+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:37+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: be\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1049,6 +1049,12 @@ msgstr "Асобны пласт"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "Ці трэба каб дадзеныя былі запампаваны на асобны пласт"
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr "Знаходжанне запампоўкі"
 
@@ -2465,6 +2471,31 @@ msgstr[2] ""
 msgid "Confirmation"
 msgstr "Пацверджанне"
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr "Спіс апошніх дачыненняў"
 
@@ -3356,18 +3387,6 @@ msgstr "Файл рэвізій ''/REVISION'' адсутнічае."
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr "Канфлікт ужо зарэгістраваны для элемента ''{0}''"
 
-msgid "Decimal Degrees"
-msgstr "Дзесятковыя градусы"
-
-msgid "deg° min'' sec\""
-msgstr "град° мін'' сек\""
-
-msgid "deg° min'' (Nautical)"
-msgstr "град° мін'' (марскі фармат)"
-
-msgid "Projected Coordinates"
-msgstr "Прагназуемыя Каардынаты"
-
 msgctxt "compass"
 msgid "S"
 msgstr "Пд"
@@ -3384,9 +3403,21 @@ msgctxt "compass"
 msgid "E"
 msgstr "У"
 
+msgid "deg° min'' sec\""
+msgstr "град° мін'' сек\""
+
+msgid "Decimal Degrees"
+msgstr "Дзесятковыя градусы"
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr "град° мін'' (марскі фармат)"
+
+msgid "Projected Coordinates"
+msgstr "Прагназуемыя Каардынаты"
+
 msgid "Date of imagery: {0}"
 msgstr "Дата здымка: {0}"
 
@@ -8986,12 +9017,6 @@ msgstr ""
 "<html>Аўтаматычна адкрываць дыялог «Запампаваць з OSM» пры кожным запуску "
 "JOSM.<br>Яго можна адкрыць уручную з меню «Файл» ці панэлі прылад.</html>"
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -10710,6 +10735,12 @@ msgstr "Метададзеныя "
 msgid "Load tile"
 msgstr "Запампаваць квадрат"
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr "Не атрымалася стварыць крыніцу тайлаў"
 
@@ -10818,11 +10849,10 @@ msgstr "Назва: {0}"
 msgid "Description: {0}"
 msgstr "Апісанне: {0}"
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
-msgstr[0] "{0} трэк"
-msgstr[1] "{0} трэка"
-msgstr[2] "{0} трэкаў"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Timespan"
 msgstr "Перыяд"
@@ -10830,6 +10860,9 @@ msgstr "Перыяд"
 msgid "Length"
 msgstr "Даўжыня"
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr "Даўжыня: {0}"
 
@@ -10845,15 +10878,38 @@ msgstr[0] "{0} шляхавы пункт"
 msgstr[1] "{0} шляхавыя пункты"
 msgstr[2] "{0} шляхавых пунктаў"
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
-msgstr[0] "{0} дарожка, "
-msgstr[1] "{0} дарожкі, "
-msgstr[2] "{0} дарожак, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] "{0} трэк"
+msgstr[1] "{0} трэка"
+msgstr[2] "{0} трэкаў"
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr "Запісаць файл GPX"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr "Ідэнтыфікатар"
 
@@ -10896,6 +10952,16 @@ msgstr "Захаваць пласт"
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] "{0} нататка"
@@ -11245,29 +11311,20 @@ msgstr "Памылка ў файле {0}"
 msgid "Display geotagged images"
 msgstr "Паказаць выявы з геатэгамі"
 
-msgid "Previous"
-msgstr "Папярэдняе"
+msgid "Next"
+msgstr "Наступнае"
 
-msgid "Show previous Image"
-msgstr "Паказаць папярэдні малюнак"
+msgid "Show next Image"
+msgstr "Паказаць наступны малюнак"
 
 msgid "Geoimage: {0}"
 msgstr "Геавыява: {0}"
 
-msgid "Remove photo from layer"
-msgstr "Выдаліць фота з пласта"
-
-msgid "Delete File from disk"
-msgstr "Выдаліць файл з дыска"
-
-msgid "Copy image path"
-msgstr "Капіяваць шлях да малюнка"
-
-msgid "Next"
-msgstr "Наступнае"
+msgid "Previous"
+msgstr "Папярэдняе"
 
-msgid "Show next Image"
-msgstr "Паказаць наступны малюнак"
+msgid "Show previous Image"
+msgstr "Паказаць папярэдні малюнак"
 
 msgid "Show first Image"
 msgstr "Паказаць першы малюнак"
@@ -11281,6 +11338,15 @@ msgstr "Цэнтраваць выгляд"
 msgid "Zoom best fit and 1:1"
 msgstr "Маштабаваць, каб упісаць з суадносінамі бакоў 1:1"
 
+msgid "Remove photo from layer"
+msgstr "Выдаліць фота з пласта"
+
+msgid "Delete File from disk"
+msgstr "Выдаліць файл з дыска"
+
+msgid "Copy image path"
+msgstr "Капіяваць шлях да малюнка"
+
 msgid "Move dialog to the side pane"
 msgstr "Перасунуць дыялог на бакавую панэль"
 
@@ -14710,11 +14776,9 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr "Выдалены пункт {0} гэта частка лініі {1}"
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
-"Лінія {0} з {1} пунктамі ўтрымоўвае незавершаныя пункты, таму што, прынамсі, "
-"адзін пункт адсутнічала ў дадзеных, загружаных з сервера."
 
 msgid ""
 "Relation with external id ''{0}'' refers to a missing primitive with "
@@ -15464,6 +15528,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr "Дазволіць дзеянне?"
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr "Пацвярджаць дзеянні Дыстанцыйнага кіравання"
 
@@ -21185,6 +21255,12 @@ msgstr "Адыходы"
 msgid "Recycling Centre"
 msgstr "Пункт прыёму перапрацоўваемых адкідаў"
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr "Смеццевы бак"
 
@@ -25181,6 +25257,12 @@ msgstr "Грамадскі транспарт (ÖPNV)"
 msgid "Hike & Bike"
 msgstr "Hike & Bike"
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr "skobbler"
 
@@ -25502,7 +25584,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr "basemap.at артафота"
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -25926,6 +26009,12 @@ msgstr "Эстонія кадастр (Maaamet)"
 msgid "Estonia Forestry (Maaamet)"
 msgstr "Эстонія лясы (Maaamet)"
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr "BANO"
 
@@ -26012,9 +26101,6 @@ msgid ""
 "- 1 m"
 msgstr "Веркор - запаведнік горнага масіва Веркор - артафота 1999 - 1 м"
 
-msgid "Hamburg (40 cm)"
-msgstr "Гамбург (40 см)"
-
 msgid "Hamburg (20 cm)"
 msgstr "Гамбург (20 см)"
 
@@ -26042,10 +26128,10 @@ msgstr "Берлін - аэрафотаздымка 2016"
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -26451,18 +26537,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr "Люксембург Inspire Чыгунка"
-
-msgid "Luxembourg Inspire Roads"
-msgstr "Люксембург Inspire Дарогі"
-
-msgid "Luxembourg Inspire Water"
-msgstr "Люксембург Inspire Воды"
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Дэльта Нігера, кастрычнік 2012 Landsat"
 
@@ -26486,8 +26560,158 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
-msgstr "Шпіцберген - артафота 2009/2011 EPSG: 25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
+msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
 msgstr ""
@@ -26550,11 +26774,11 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
-msgstr "Geoportal 2: артафота"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
-msgstr "Геапартал 2: артафотакарта (аэрафотаздымкі) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
+msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr "Geoportal 2: PRNG (тапонімы)"
@@ -26562,119 +26786,128 @@ msgstr "Geoportal 2: PRNG (тапонімы)"
 msgid "Geoportal 2: ISOK hillshade"
 msgstr "Геапартал 2: рэльеф ISOK"
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
-msgstr "Бэндзін: Ortofotomapa 2013 (аэрафотаздымкі)"
+msgid "polska.e-mapa.net: Buildings"
+msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
-msgstr "Бэндзін: будынкі"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
+msgstr ""
+
+msgid "Będzin: Buildings"
+msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
-msgstr "Бытам: артафота 2012"
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
+msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr "Бытам: фотаплан 2014"
 
-msgid "Bytom: Budynki (buildings)"
-msgstr "Бытам: будынкі"
+msgid "Bytom: Buildings"
+msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
-msgstr "Хожаў: будынкі"
+msgid "Chorzów: Buildings"
+msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
-msgstr "Чэнстахова: Будынкі"
+msgid "Częstochowa: Buildings"
+msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
-msgstr "Чэнстахова: артафота 2011"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
+msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
-msgstr "Чэнстахова: артафотакарта 2013"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
+msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
-msgstr "Чэнстахова: артафотакарта 2014"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
+msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
-msgstr "Глівіцы: артафота 2013"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
+msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
-msgstr "Глівіцэ: будынкі"
+msgid "Gliwice: Buildings"
+msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
-msgstr "Катавіцы: артафота"
+msgid "Katowice: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
-msgstr "Катовіцэ: Будынкі"
+msgid "Katowice: Buildings"
+msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
-msgstr "Лодзь: будынкі"
+msgid "Łódź: Buildings"
+msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
-msgstr "Лодзь: артафота"
+msgid "Łódź: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
-msgstr "Дэмбіцкі павет: будынкі"
+msgid "Powiat dębicki: Buildings"
+msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
-msgstr "Любачаўскі павет: Будинки"
+msgid "Powiat lubaczowski: Buildings"
+msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
-msgstr "Ланцуцкі павет: будынкі"
+msgid "Powiat łańcucki: Buildings"
+msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
-msgstr "Познанскі павет: будынкі"
+msgid "Powiat poznański: Buildings"
+msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
-msgstr "Познаньскі павет: артафотакарта"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
-msgstr "Ропчыцка-Сяндзішаўскі павет: будынкі"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
+msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
-msgstr "Жэшаўскі павет: будынкі"
+msgid "Powiat rzeszowski: Buildings"
+msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
-msgstr "Жэшаўскі павет: артафотакарта"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
-msgstr "Сталёвавольскі павет: будынкі"
+msgid "Powiat stalowowolski: Buildings"
+msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
-msgstr "Познань: артафотакарта 2014 (аэрафотаздымак)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
+msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
-msgstr "Пшэмысль: будынкі"
+msgid "Przemyśl: Buildings"
+msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
-msgstr "Пшэмысль: артафотакарта"
+msgid "Przemyśl: Ortophotomap (aerial image)"
+msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
-msgstr "Руда-Слёнска: артафота"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
+msgstr ""
+
+msgid "Rzeszów: Orthophotomap (aerial image)"
+msgstr ""
+
+msgid "Rzeszów: Buildings"
+msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
-msgstr "Жэшаў: артафота"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
-msgstr "Жэшаў: будынкі"
+msgid "Siemianowice Śląskie: Buildings"
+msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
-msgstr "Семяновіцы-Слёнскія: артафота"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
+msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
-msgstr "Семяновіцы-Слёнскія: будынкі"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
+msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
-msgstr "Свентахлавіцы: артафотакарта 2008"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
+msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
-msgstr "Свентахлавіцы: артафота2009"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
+msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
-msgstr "Свентахлавіцы: артафотакарта 2012"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
+msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
-msgstr "Забжэ: артафота 2011"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
-msgstr "Вроцлаў: артафота 2015 (аэрафотаздымкі)"
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
+msgstr ""
 
 msgid "ScanEx IRS"
 msgstr "ScanEx IRS"
@@ -26810,6 +27043,18 @@ msgstr "Здымкі з imagico.de: Адамаў Мост"
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr "Кантон Аргаў 25 см (AGIS 2011)"
 
@@ -29550,15 +29795,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
-msgstr "Запусціць пласт Mapillary"
+msgid "Open Mapillary layer"
+msgstr ""
 
 msgid "Mapillary"
 msgstr "Mapillary"
 
-msgid "Create Mapillary layer"
-msgstr "Стварыць пласт Mapillary"
-
 msgid "Download Mapillary images in current view"
 msgstr "Сцягнуць здымкі Mapillary для бягучага віду"
 
@@ -29623,14 +29865,8 @@ msgstr ""
 "Даведка. Калі гэта паведамленне з''явілася ўпершыню, проста паспрабуйце яшчэ "
 "раз: магчыма гэта была праблема з падлучэннем да Інтэрнэту."
 
-msgid "Upload pictures"
-msgstr "Адаслаць выявы"
-
-msgid "Upload Mapillary pictures"
-msgstr "Адаслаць выявы Mapillary"
-
-msgid "Upload pictures."
-msgstr "Адаслаць выявы."
+msgid "Upload Mapillary images"
+msgstr ""
 
 msgid "Walk mode"
 msgstr "Пешаходны рэжым"
@@ -29665,15 +29901,12 @@ msgstr "Экспартаваць выдзеленыя здымкі"
 msgid "Rewrite imported images"
 msgstr "Перазапісаць імпартаваныя выявы"
 
-msgid "Select a folder"
-msgstr "Абярыце каталог"
+msgid "Select a directory"
+msgstr "Выберыце каталог"
 
 msgid "Explore"
 msgstr "Агляд"
 
-msgid "Select a directory"
-msgstr "Выберыце каталог"
-
 msgid "Speed limit"
 msgstr "Абмежаванне хуткасці"
 
@@ -29807,6 +30040,11 @@ msgstr "Перадпрагляд выявы пры навядзенні на я
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -34593,6 +34831,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr "Файл не можа быць выдалены!"
 
@@ -36130,9 +36372,6 @@ msgstr "Экспартаваць дадзеныя пра трафік у network
 msgid "SUMO Export"
 msgstr "Экспарт у SUMO"
 
-msgid "Export"
-msgstr "Экпарт"
-
 msgid "AutoSave LiveData"
 msgstr "Аўтазахаванне дадзеных пазіцыянавання"
 
diff --git a/i18n/po/bg.po b/i18n/po/bg.po
index 39a6dfe..cbe3deb 100644
--- a/i18n/po/bg.po
+++ b/i18n/po/bg.po
@@ -7,16 +7,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-11-26 00:06+0100\n"
-"PO-Revision-Date: 2017-07-15 21:07+0000\n"
-"Last-Translator: pl <Unknown>\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\n"
+"PO-Revision-Date: 2017-12-28 17:16+0000\n"
+"Last-Translator: Alexander Avtanski <Unknown>\n"
 "Language-Team: Bulgarian <bg at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2017-11-26 04:39+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:39+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: bg\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -57,7 +57,7 @@ msgstr ""
 "Отварянето на връзката не се поддържа на текущата платформа (''{0}'')"
 
 msgid "Failed to save default preferences."
-msgstr ""
+msgstr "Неуспешен запис на потребителските предпочитания."
 
 msgid "About"
 msgstr "За програмата"
@@ -108,10 +108,10 @@ msgid "Report bug"
 msgstr "Докладване за грешка"
 
 msgid "Failed to locate resource ''{0}''."
-msgstr ""
+msgstr "Ресурс \"{0}\" не може да бъде намерен."
 
 msgid "Failed to load resource ''{0}'', error is {1}."
-msgstr ""
+msgstr "Ресурс  \"{0}\" не може да бъде зареден, грешка: {1}."
 
 msgid ""
 "You are about to launch {0} browser window.<br>This may both clutter your "
@@ -500,7 +500,7 @@ msgid "Duplicate"
 msgstr "Дублиране"
 
 msgid "Duplicate selection."
-msgstr ""
+msgstr "Дублиране на избраните елементи."
 
 msgid "Exit"
 msgstr "Изход"
@@ -1004,6 +1004,12 @@ msgstr "На отделен слой"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "Изберете дали данните да бъдат свалени в нов слой"
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr "Местоположение на изтеглянето"
 
@@ -2335,6 +2341,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr "Потвърждение"
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3153,18 +3184,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr "вече регистриран конфликт за примитив ''{0}''"
 
-msgid "Decimal Degrees"
-msgstr "Десетични градуси"
-
-msgid "deg° min'' sec\""
-msgstr "град° мин'' сек\""
-
-msgid "deg° min'' (Nautical)"
-msgstr "град° мин'' (морски)"
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr "Ю"
@@ -3181,9 +3200,21 @@ msgctxt "compass"
 msgid "E"
 msgstr "И"
 
+msgid "deg° min'' sec\""
+msgstr "град° мин'' сек\""
+
+msgid "Decimal Degrees"
+msgstr "Десетични градуси"
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr "град° мин'' (морски)"
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8390,12 +8421,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9926,6 +9951,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -10030,8 +10061,8 @@ msgstr "Название: {0}"
 msgid "Description: {0}"
 msgstr "Описание: {0}"
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -10041,6 +10072,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -10054,14 +10088,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] "{0} точка на интерес"
 msgstr[1] "{0} точки на интерес"
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
-msgstr[0] "{0} следа, "
-msgstr[1] "{0} следи, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr "Съхраняване GPX файл"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr "Id"
 
@@ -10104,6 +10161,16 @@ msgstr "Запис на слой"
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] "{0} бележка"
@@ -10439,28 +10506,19 @@ msgstr "Грешка във файла {0}"
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
-msgstr "Предишен"
+msgid "Next"
+msgstr "Следващ"
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
-msgstr "Премахване на снимка от слой"
-
-msgid "Delete File from disk"
-msgstr ""
-
-msgid "Copy image path"
-msgstr ""
-
-msgid "Next"
-msgstr "Следващ"
+msgid "Previous"
+msgstr "Предишен"
 
-msgid "Show next Image"
+msgid "Show previous Image"
 msgstr ""
 
 msgid "Show first Image"
@@ -10475,6 +10533,15 @@ msgstr "Центриране на изгледа"
 msgid "Zoom best fit and 1:1"
 msgstr "Показване на най-доброто оразмеряване и 1:1"
 
+msgid "Remove photo from layer"
+msgstr "Премахване на снимка от слой"
+
+msgid "Delete File from disk"
+msgstr ""
+
+msgid "Copy image path"
+msgstr ""
+
 msgid "Move dialog to the side pane"
 msgstr ""
 
@@ -13618,8 +13685,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14286,6 +14353,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr "Желаете ли да разрешите това?"
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr "Потвърждение на действието на дистанционното управление"
 
@@ -19727,6 +19800,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23704,6 +23783,12 @@ msgstr "Public Transport (ÖPNV)"
 msgid "Hike & Bike"
 msgstr "Hike & Bike"
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr "skobbler"
 
@@ -24024,7 +24109,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24447,6 +24533,12 @@ msgstr "Estonia Cadastre (Maaamet)"
 msgid "Estonia Forestry (Maaamet)"
 msgstr "Estonia Forestry (Maaamet)"
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24535,9 +24627,6 @@ msgstr ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
 
-msgid "Hamburg (40 cm)"
-msgstr "Hamburg (40 cm)"
-
 msgid "Hamburg (20 cm)"
 msgstr "Hamburg (20 cm)"
 
@@ -24565,10 +24654,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24967,18 +25056,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr "Luxembourg Inspire Railway"
-
-msgid "Luxembourg Inspire Roads"
-msgstr "Luxembourg Inspire Roads"
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Niger Delta Oct 2012 Landsat"
 
@@ -25002,7 +25079,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -25064,10 +25291,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
-msgstr "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -25076,118 +25303,127 @@ msgstr "Geoportal 2: PRNG (geo names)"
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
-msgstr "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
+msgstr ""
+
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
+msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
-msgstr "Będzin: Budynki (buildings)"
+msgid "Będzin: Buildings"
+msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
-msgstr "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
+msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
-msgstr "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
-msgstr "Chorzów: Budynki (buildings)"
+msgid "Chorzów: Buildings"
+msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
+msgstr ""
+
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
+msgstr ""
+
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
+msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
-msgstr "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Katowice: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
-msgstr "Gliwice: Budynki (buildings)"
+msgid "Katowice: Buildings"
+msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
-msgstr "Katowice: Ortofotomapa (aerial image)"
+msgid "Łódź: Buildings"
+msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
-msgstr "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat lubaczowski: Buildings"
+msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
-msgstr "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
+msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
-msgstr "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
-msgstr "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Buildings"
+msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
-msgstr "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
+msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
+msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
-msgstr "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25324,6 +25560,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr "Kanton Aargau 25cm (AGIS 2011)"
 
@@ -27869,15 +28117,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27936,13 +28181,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27978,15 +28217,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -28119,6 +28355,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32587,6 +32828,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -34067,9 +34312,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr "Автоматичен запис на данни на живо"
 
diff --git a/i18n/po/bn.po b/i18n/po/bn.po
index 76f057e..c9e31ae 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 04:37+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:37+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: bn\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -956,6 +956,12 @@ msgstr ""
 msgid "Select if the data should be downloaded into a new layer"
 msgstr ""
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr ""
 
@@ -2228,6 +2234,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3031,18 +3062,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr ""
@@ -3059,9 +3078,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8234,12 +8265,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9733,6 +9758,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9837,8 +9868,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9848,6 +9879,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9861,14 +9895,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr ""
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9911,6 +9968,16 @@ msgstr ""
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10239,40 +10306,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13359,8 +13426,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14023,6 +14090,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19451,6 +19524,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23426,6 +23505,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23746,7 +23831,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24169,6 +24255,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24255,9 +24347,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24285,10 +24374,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24687,18 +24776,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24722,7 +24799,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24784,10 +25011,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24796,118 +25023,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25044,6 +25280,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27572,15 +27820,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27639,13 +27884,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27681,15 +27920,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27822,6 +28058,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32248,6 +32489,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33728,9 +33973,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/br.po b/i18n/po/br.po
index 52b6b61..f018ed8 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 04:38+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:38+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: br\n"
 
 msgid "License"
@@ -953,6 +953,12 @@ msgstr ""
 msgid "Select if the data should be downloaded into a new layer"
 msgstr ""
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr ""
 
@@ -2225,6 +2231,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3028,18 +3059,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr ""
@@ -3056,9 +3075,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8231,12 +8262,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9730,6 +9755,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9834,8 +9865,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9845,6 +9876,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9858,14 +9892,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr ""
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9908,6 +9965,16 @@ msgstr ""
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10236,40 +10303,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13356,8 +13423,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14020,6 +14087,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19448,6 +19521,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23423,6 +23502,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23743,7 +23828,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24166,6 +24252,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24252,9 +24344,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24282,10 +24371,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24684,18 +24773,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24719,7 +24796,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24781,10 +25008,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24793,118 +25020,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25041,6 +25277,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27569,15 +27817,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27636,13 +27881,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27678,15 +27917,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27819,6 +28055,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32245,6 +32486,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33725,9 +33970,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/bs.po b/i18n/po/bs.po
index 79b6692..b9e6f03 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 04:38+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:38+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: bs\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -956,6 +956,12 @@ msgstr ""
 msgid "Select if the data should be downloaded into a new layer"
 msgstr ""
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr ""
 
@@ -2228,6 +2234,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3031,18 +3062,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr ""
@@ -3059,9 +3078,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8234,12 +8265,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9733,6 +9758,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9837,8 +9868,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9848,6 +9879,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9861,14 +9895,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr ""
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9911,6 +9968,16 @@ msgstr ""
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10239,40 +10306,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13359,8 +13426,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14023,6 +14090,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19451,6 +19524,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23426,6 +23505,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23746,7 +23831,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24169,6 +24255,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24255,9 +24347,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24285,10 +24374,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24687,18 +24776,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24722,7 +24799,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24784,10 +25011,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24796,118 +25023,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25044,6 +25280,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27572,15 +27820,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27639,13 +27884,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27681,15 +27920,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27822,6 +28058,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32248,6 +32489,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33728,9 +33973,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/ca.po b/i18n/po/ca.po
index 2c4cd54..0c46c75 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\n"
 "PO-Revision-Date: 2017-10-16 08:35+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-11-26 04:39+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:39+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: ca\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1036,6 +1036,12 @@ msgstr "Capa separada"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "Seleccioneu si les dades haurien de baixar-se en una capa nova"
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr "Ubicació de baixada"
 
@@ -2444,6 +2450,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr "Confirmació"
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr "Llista de relacions recents"
 
@@ -3320,18 +3351,6 @@ msgstr "Manca el fitxer de revisió ''/REVISION''."
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr "Ja ha estat enregistrat un conflicte per l''objecte ''{0}''"
 
-msgid "Decimal Degrees"
-msgstr "Graus decimals"
-
-msgid "deg° min'' sec\""
-msgstr "grau° minut'' segon\""
-
-msgid "deg° min'' (Nautical)"
-msgstr "grau° minut'' (Nàutics)"
-
-msgid "Projected Coordinates"
-msgstr "Coordenades projectades"
-
 msgctxt "compass"
 msgid "S"
 msgstr "S"
@@ -3348,9 +3367,21 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
+msgid "deg° min'' sec\""
+msgstr "grau° minut'' segon\""
+
+msgid "Decimal Degrees"
+msgstr "Graus decimals"
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr "grau° minut'' (Nàutics)"
+
+msgid "Projected Coordinates"
+msgstr "Coordenades projectades"
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8970,12 +9001,6 @@ msgstr ""
 "s''inicia.<br>El podeu obrir manualment utilitzant el menú Fitxer o la barra "
 "d''eines.</html>"
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -10658,6 +10683,12 @@ msgstr "Metadades "
 msgid "Load tile"
 msgstr "Carrega la tessel·la"
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr "Ha fallat la creació d''una font de tessel·les"
 
@@ -10769,10 +10800,10 @@ msgstr "Nom: {0}"
 msgid "Description: {0}"
 msgstr "Descripció: {0}"
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
-msgstr[0] "{0} track"
-msgstr[1] "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Timespan"
 msgstr "Durada"
@@ -10780,6 +10811,9 @@ msgstr "Durada"
 msgid "Length"
 msgstr "Longitud"
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr "Longitud: {0}"
 
@@ -10793,14 +10827,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] "{0} fita"
 msgstr[1] "{0} fites"
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
-msgstr[0] "{0} track, "
-msgstr[1] "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] "{0} track"
+msgstr[1] "{0} tracks"
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr "Desa-ho en format GPX"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr "Id"
 
@@ -10843,6 +10900,16 @@ msgstr "Desa la capa"
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -11190,29 +11257,20 @@ msgstr "S''ha produït un error al fitxer {0}"
 msgid "Display geotagged images"
 msgstr "Mostra imatges geoetiquetades"
 
-msgid "Previous"
-msgstr "Anterior"
+msgid "Next"
+msgstr "Següent"
 
-msgid "Show previous Image"
-msgstr "Mostrar la imatge anterior"
+msgid "Show next Image"
+msgstr "Mostrar la imatge següent"
 
 msgid "Geoimage: {0}"
 msgstr "Geoimatge: {0}"
 
-msgid "Remove photo from layer"
-msgstr "Elimina foto de la capa"
-
-msgid "Delete File from disk"
-msgstr "Suprimir el fitxer al disc"
-
-msgid "Copy image path"
-msgstr "Copia el camí de la imatge"
-
-msgid "Next"
-msgstr "Següent"
+msgid "Previous"
+msgstr "Anterior"
 
-msgid "Show next Image"
-msgstr "Mostrar la imatge següent"
+msgid "Show previous Image"
+msgstr "Mostrar la imatge anterior"
 
 msgid "Show first Image"
 msgstr "Mostra la primera imatge"
@@ -11226,6 +11284,15 @@ msgstr "Centrar la vista"
 msgid "Zoom best fit and 1:1"
 msgstr "Amplia a la millor relació i 1:1"
 
+msgid "Remove photo from layer"
+msgstr "Elimina foto de la capa"
+
+msgid "Delete File from disk"
+msgstr "Suprimir el fitxer al disc"
+
+msgid "Copy image path"
+msgstr "Copia el camí de la imatge"
+
 msgid "Move dialog to the side pane"
 msgstr "Mou la finestra al quadre lateral"
 
@@ -14696,11 +14763,9 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr "El node esborrat {0} és part de la via {1}"
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
-"La via {0} te {1} nodes i no està completa perquè com a mínim un dels seus "
-"nodes manca a les dades carregades."
 
 msgid ""
 "Relation with external id ''{0}'' refers to a missing primitive with "
@@ -15454,6 +15519,12 @@ msgstr "El control remot ha demanat d''obrir un fitxer local."
 msgid "Do you want to allow this?"
 msgstr "Voleu permetre això?"
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr "Confirmar l''acció del control remot"
 
@@ -21159,6 +21230,12 @@ msgstr "Deixalles"
 msgid "Recycling Centre"
 msgstr "Centre de reciclatge"
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr "Contenidor de residus"
 
@@ -25157,6 +25234,12 @@ msgstr "Transport públic (ÖPNV)"
 msgid "Hike & Bike"
 msgstr "A peu i en bici"
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr "skobbler"
 
@@ -25477,7 +25560,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr "basemap.at Ortofoto"
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -25900,6 +25984,12 @@ msgstr "Estònia Cadastre (Maaamet)"
 msgid "Estonia Forestry (Maaamet)"
 msgstr "Estònia Silvicultura (Maaamet)"
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr "BANO"
 
@@ -25988,9 +26078,6 @@ msgstr ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
 
-msgid "Hamburg (40 cm)"
-msgstr "Hamburg (40 cm)"
-
 msgid "Hamburg (20 cm)"
 msgstr "Hamburg (20 cm)"
 
@@ -26018,10 +26105,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -26421,18 +26508,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr "Luxemburg Inspire Ferrocarrils"
-
-msgid "Luxembourg Inspire Roads"
-msgstr "Luxemburg Inspire Carreteres"
-
-msgid "Luxembourg Inspire Water"
-msgstr "Luxembourg Inspire Water"
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Delta del Níger Oct 2012 Landsat"
 
@@ -26456,8 +26531,158 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
-msgstr "Ortofoto Svalbard 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
+msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
 msgstr ""
@@ -26518,11 +26743,11 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
-msgstr "Geoportal 2: Ortofotomapa (imatgeria aèria)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
-msgstr "Geoportal 2: Ortofotomapa (imatgeria aèria) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
+msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr "Geoportal 2: PRNG (noms)"
@@ -26530,119 +26755,128 @@ msgstr "Geoportal 2: PRNG (noms)"
 msgid "Geoportal 2: ISOK hillshade"
 msgstr "Geoportal 2: ISOK hillshade"
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
-msgstr "Będzin: Ortofotomapa 2013 (imatgeria aèria)"
+msgid "polska.e-mapa.net: Buildings"
+msgstr ""
+
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
+msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
-msgstr "Będzin: Budynki (edificis)"
+msgid "Będzin: Buildings"
+msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
-msgstr "Bytom: Ortofotomapa 2012 (imatgeria aèria)"
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
+msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr "Bytom: Fotoplan 2014 (imatgeria aèria)"
 
-msgid "Bytom: Budynki (buildings)"
-msgstr "Bytom: Budynki (edificis)"
+msgid "Bytom: Buildings"
+msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
-msgstr "Chorzów: Budynki (edificis)"
+msgid "Chorzów: Buildings"
+msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
-msgstr "Częstochowa: Budynki (edificis)"
+msgid "Częstochowa: Buildings"
+msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2011 (imatgeria aèria)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
+msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2013 (imatgeria aèria)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
+msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2014 (imatgeria aèria)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
+msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
-msgstr "Gliwice: Ortofotomapa 2013 (imatgeria aèria)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
+msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
-msgstr "Gliwice: Budynki (edificis)"
+msgid "Gliwice: Buildings"
+msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
-msgstr "Katowice: Ortofotomapa (imatgeria aèria)"
+msgid "Katowice: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
-msgstr "Katowice: Budynki (edificis)"
+msgid "Katowice: Buildings"
+msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
-msgstr "Łódź: Budynki (edificacions)"
+msgid "Łódź: Buildings"
+msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
-msgstr "Łódź: Ortofotomapa (imatgeria aèria)"
+msgid "Łódź: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
-msgstr "Powiat dębicki: Budynki (edificacions)"
+msgid "Powiat dębicki: Buildings"
+msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
-msgstr "Powiat lubaczowski: Budynki (edificacions)"
+msgid "Powiat lubaczowski: Buildings"
+msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
-msgstr "Powiat łańcucki: Budynki (edificacions)"
+msgid "Powiat łańcucki: Buildings"
+msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
-msgstr "Powiat poznański: Budynki (edificacions)"
+msgid "Powiat poznański: Buildings"
+msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
-msgstr "Powiat poznański: Ortofotomapa (imatgeria aèria)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
-msgstr "Powiat rzeszowski: Budynki (edificacions)"
+msgid "Powiat rzeszowski: Buildings"
+msgstr ""
+
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
+msgstr ""
+
+msgid "Powiat stalowowolski: Buildings"
+msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
-msgstr "Powiat rzeszowski: Ortofotomapa (imatgeria aèria)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
+msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
-msgstr "Powiat stalowowolski: Budynki (edificacions)"
+msgid "Przemyśl: Buildings"
+msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
-msgstr "Przemyśl: Budynki (edificacions)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
-msgstr "Przemyśl: Ortofotomapa (imatgeria aèria)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
-msgstr "Ruda Śląska: Ortofotomapa (imatgeria aèria)"
+msgid "Rzeszów: Buildings"
+msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
-msgstr "Rzeszów: Ortofotomapa (imatgeria aèria)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
-msgstr "Rzeszów: Budynki (edificis)"
+msgid "Siemianowice Śląskie: Buildings"
+msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
-msgstr "Siemianowice Śląskie: Ortofotomapa (imatgeria aèria)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
+msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
-msgstr "Siemianowice Śląskie: Budynki (edificis)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
+msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2008 (imatgeria aèria)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
+msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2009 (imatgeria aèria)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
+msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2012 (imatgeria aèria)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
+msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
-msgstr "Zabrze: Ortofotomapa 2011 (imatgeria aèria)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
-msgstr "Wrocław: Ortofotogarfia 2015 (imatgeria aèria)"
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
+msgstr ""
 
 msgid "ScanEx IRS"
 msgstr "ScanEx IRS"
@@ -26778,6 +27012,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr "Kanton Aargau 25cm (AGIS 2011)"
 
@@ -29498,15 +29744,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
-msgstr "Inicia una capa de Mapillary"
+msgid "Open Mapillary layer"
+msgstr ""
 
 msgid "Mapillary"
 msgstr "Mapillary"
 
-msgid "Create Mapillary layer"
-msgstr "Crea una capa de Mapillary"
-
 msgid "Download Mapillary images in current view"
 msgstr "Descarrega imatges de Mapillary a la vista actual"
 
@@ -29565,14 +29808,8 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr "Puja fotografies"
-
-msgid "Upload Mapillary pictures"
-msgstr "Puja fotografies de Mapillary"
-
-msgid "Upload pictures."
-msgstr "Puja fotografies."
+msgid "Upload Mapillary images"
+msgstr ""
 
 msgid "Walk mode"
 msgstr "Mode caminant"
@@ -29607,15 +29844,12 @@ msgstr "Exporta les imatges seleccionades"
 msgid "Rewrite imported images"
 msgstr "Reescriu les imatges importades"
 
-msgid "Select a folder"
-msgstr "Seleccioneu una carpeta"
+msgid "Select a directory"
+msgstr "Seleccioneu un directori"
 
 msgid "Explore"
 msgstr "Explora"
 
-msgid "Select a directory"
-msgstr "Seleccioneu un directori"
-
 msgid "Speed limit"
 msgstr "Límit de velocitat"
 
@@ -29748,6 +29982,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -34590,6 +34829,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr "El fitxer no pot ser esborrat!"
 
@@ -36128,9 +36371,6 @@ msgstr "Exporta dades de trànsit a un fitxer SUMO"
 msgid "SUMO Export"
 msgstr "Exportació SUMO"
 
-msgid "Export"
-msgstr "Exporta"
-
 msgid "AutoSave LiveData"
 msgstr "Desament automàtic de LiveData"
 
diff --git a/i18n/po/ca at valencia.po b/i18n/po/ca at valencia.po
index 58a8ffd..8d1a593 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 05:14+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 05:11+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: ca at valencia\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1028,6 +1028,12 @@ msgstr "Capa separada"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "Seleccioneu si les dades haurien de baixar-se en una capa nova"
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr "Ubicació de descàrrega"
 
@@ -2415,6 +2421,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3284,18 +3315,6 @@ msgstr "Manca el fitxer de revisió ''/REVISION''."
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr "Ja ha estat enregistrat un conflicte per l''objecte ''{0}''"
 
-msgid "Decimal Degrees"
-msgstr "Graus decimals"
-
-msgid "deg° min'' sec\""
-msgstr "grau° minut'' segon\""
-
-msgid "deg° min'' (Nautical)"
-msgstr "grau° minut'' (Nàutics)"
-
-msgid "Projected Coordinates"
-msgstr "Coordenades projectades"
-
 msgctxt "compass"
 msgid "S"
 msgstr "S"
@@ -3312,9 +3331,21 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
+msgid "deg° min'' sec\""
+msgstr "grau° minut'' segon\""
+
+msgid "Decimal Degrees"
+msgstr "Graus decimals"
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr "grau° minut'' (Nàutics)"
+
+msgid "Projected Coordinates"
+msgstr "Coordenades projectades"
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8802,12 +8833,6 @@ msgstr ""
 "s''inicia.<br>El podeu obrir manualment utilitzant el menú Fitxer o la barra "
 "d''eines.</html>"
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -10493,6 +10518,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -10601,10 +10632,10 @@ msgstr "Nom: {0}"
 msgid "Description: {0}"
 msgstr "Descripció: {0}"
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
-msgstr[0] "{0} track"
-msgstr[1] "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Timespan"
 msgstr "Durada"
@@ -10612,6 +10643,9 @@ msgstr "Durada"
 msgid "Length"
 msgstr "Longitud"
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr "Longitud: {0}"
 
@@ -10625,14 +10659,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] "{0} fita"
 msgstr[1] "{0} fites"
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
-msgstr[0] "{0} track, "
-msgstr[1] "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] "{0} track"
+msgstr[1] "{0} tracks"
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr "Guarda-ho en format GPX"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr "Id"
 
@@ -10675,6 +10732,16 @@ msgstr "Guarda la capa"
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -11022,29 +11089,20 @@ msgstr "S''ha produït un error al fitxer {0}"
 msgid "Display geotagged images"
 msgstr "Mostra imatges geoetiquetades"
 
-msgid "Previous"
-msgstr "Anterior"
+msgid "Next"
+msgstr "Següent"
 
-msgid "Show previous Image"
-msgstr "Mostrar la imatge anterior"
+msgid "Show next Image"
+msgstr "Mostrar la imatge següent"
 
 msgid "Geoimage: {0}"
 msgstr "Geoimatge: {0}"
 
-msgid "Remove photo from layer"
-msgstr "Elimina foto de la capa"
-
-msgid "Delete File from disk"
-msgstr "Suprimir el fitxer al disc"
-
-msgid "Copy image path"
-msgstr ""
-
-msgid "Next"
-msgstr "Següent"
+msgid "Previous"
+msgstr "Anterior"
 
-msgid "Show next Image"
-msgstr "Mostrar la imatge següent"
+msgid "Show previous Image"
+msgstr "Mostrar la imatge anterior"
 
 msgid "Show first Image"
 msgstr ""
@@ -11058,6 +11116,15 @@ msgstr "Centrar la vista"
 msgid "Zoom best fit and 1:1"
 msgstr "Amplia a la millor relació i 1:1"
 
+msgid "Remove photo from layer"
+msgstr "Elimina foto de la capa"
+
+msgid "Delete File from disk"
+msgstr "Suprimir el fitxer al disc"
+
+msgid "Copy image path"
+msgstr ""
+
 msgid "Move dialog to the side pane"
 msgstr "Mou la finestra al quadre lateral"
 
@@ -14509,11 +14576,9 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr "El node esborrat {0} és part de la via {1}"
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
-"La via {0} te {1} nodes i no està completa perquè com a mínim un dels seus "
-"nodes manca a les dades carregades."
 
 msgid ""
 "Relation with external id ''{0}'' refers to a missing primitive with "
@@ -15260,6 +15325,12 @@ msgstr "El control remot ha demanat d''obrir un fitxer local."
 msgid "Do you want to allow this?"
 msgstr "Voleu permetre això?"
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr "Confirmar l''acció del control remot"
 
@@ -20935,6 +21006,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -24910,6 +24987,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -25230,7 +25313,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -25653,6 +25737,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -25739,9 +25829,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -25769,10 +25856,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -26171,18 +26258,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -26206,7 +26281,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -26268,10 +26493,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -26280,118 +26505,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
+msgstr ""
+
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Buildings"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
+msgstr ""
+
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -26528,6 +26762,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -29174,15 +29420,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -29241,13 +29484,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -29283,15 +29520,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -29424,6 +29658,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -34234,6 +34473,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr "El fitxer no pot ser esborrat!"
 
@@ -35766,9 +36009,6 @@ msgstr "Exporta dades de trànsit a un fitxer SUMO"
 msgid "SUMO Export"
 msgstr "Exportació SUMO"
 
-msgid "Export"
-msgstr "Exporta"
-
 msgid "AutoSave LiveData"
 msgstr "Desament automàtic de LiveData"
 
diff --git a/i18n/po/cs.po b/i18n/po/cs.po
index a5b0b4a..1947a5f 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-11-26 00:06+0100\n"
-"PO-Revision-Date: 2017-11-24 12:58+0000\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\n"
+"PO-Revision-Date: 2017-12-18 10:20+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-11-26 04:40+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:39+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: cs\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1041,6 +1041,12 @@ msgstr "Do samostatné vrstvy"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "Zvolte, pokud mají být data stažena do nové vrstvy"
 
+msgid "Zoom to downloaded data"
+msgstr "Zvětšit na stažená data"
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr "Vyberte pro zobrazení celých nově stažených dat."
+
 msgid "Download Location"
 msgstr "Stáhnout data z URL"
 
@@ -2446,6 +2452,35 @@ msgstr[2] ""
 msgid "Confirmation"
 msgstr "Potvrzení"
 
+msgid "Export GPX file starting from first member"
+msgstr "Exportovat soubor GPS počínaje prvním členem"
+
+msgid "Export GPX file starting from last member"
+msgstr "Exportovat soubor GPS počínaje posledním členem"
+
+msgid "Convert to GPX layer starting from first member"
+msgstr "Převést na vrstvu GPX počínaje prvním členem"
+
+msgid "Convert to GPX layer starting from last member"
+msgstr "Převést na vrstvu GPX počínaje posledním členem"
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+"Rekurzivně zploštit tuto relaci do jediné stopy GPX, počínaje prvním členem, "
+"postupně pokračujíc k poslednímu."
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+"Rekurzivně zploštit tuto relaci do jediné stopy GPX, počínaje posledním "
+"členem, postupně pokračujíc k prvnímu."
+
+msgid "Selected Relations"
+msgstr "Zvolené relace"
+
 msgid "List of recent relations"
 msgstr "Seznam dřívějších relací"
 
@@ -3335,18 +3370,6 @@ msgstr "Soubor revizí  ''/REVISION'' chybí."
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr "Již je registrován konflikt prvku ''{0}''."
 
-msgid "Decimal Degrees"
-msgstr "Desetinné stupně"
-
-msgid "deg° min'' sec\""
-msgstr "stupně° min'' sek\""
-
-msgid "deg° min'' (Nautical)"
-msgstr "stupně° min'' (Námořní)"
-
-msgid "Projected Coordinates"
-msgstr "Souřadnice v projekci"
-
 msgctxt "compass"
 msgid "S"
 msgstr "J"
@@ -3363,9 +3386,21 @@ msgctxt "compass"
 msgid "E"
 msgstr "V"
 
+msgid "deg° min'' sec\""
+msgstr "stupně° min'' sek\""
+
+msgid "Decimal Degrees"
+msgstr "Desetinné stupně"
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr "Nelze parsovat hodnotu souřadnic: ''{0}''"
 
+msgid "deg° min'' (Nautical)"
+msgstr "stupně° min'' (Námořní)"
+
+msgid "Projected Coordinates"
+msgstr "Souřadnice v projekci"
+
 msgid "Date of imagery: {0}"
 msgstr "Datum mapového podkladu: {0}"
 
@@ -8924,12 +8959,6 @@ msgstr ""
 "JOSM.<br>Dialog můžete otevřít i ručně z menu Soubor nebo z nástrojové "
 "lišty.</html>"
 
-msgid "Zoom to downloaded data"
-msgstr "Zvětšit na stažená data"
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr "Vyberte pro zobrazení celých nově stažených dat."
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -10641,6 +10670,12 @@ msgstr "Metadata "
 msgid "Load tile"
 msgstr "Načíst dlaždici"
 
+msgid "Get tile status"
+msgstr "Stav získání dlaždice"
+
+msgid "Force tile rendering"
+msgstr "Vynutit vykreslení dlaždice"
+
 msgid "Failed to create tile source"
 msgstr "Selhalo vytvoření zdroje dlaždice"
 
@@ -10751,11 +10786,11 @@ msgstr "Jméno: {0}"
 msgid "Description: {0}"
 msgstr "Popis: {0}"
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
-msgstr[0] "{0} stopa"
-msgstr[1] "{0} stopy"
-msgstr[2] "{0} stop"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
+msgstr[0] "{0} stopa, {1} segmentů stopy"
+msgstr[1] "{0} stopy, {1} segmentů stopy"
+msgstr[2] "{0} stop, {1} segmentů stopy"
 
 msgid "Timespan"
 msgstr "Časový interval"
@@ -10763,6 +10798,9 @@ msgstr "Časový interval"
 msgid "Length"
 msgstr "Délka"
 
+msgid "Number of<br/>Segments"
+msgstr "Počet<br/>segmentů"
+
 msgid "Length: {0}"
 msgstr "Délka: {0}"
 
@@ -10778,15 +10816,39 @@ msgstr[0] "{0} trasový bod"
 msgstr[1] "{0} trasové body"
 msgstr[2] "{0} trasových bodů"
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
-msgstr[0] "{0} cest, "
-msgstr[1] "{0} cesta, "
-msgstr[2] "{0} cesty, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] "{0} stopa"
+msgstr[1] "{0} stopy"
+msgstr[2] "{0} stop"
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
+msgstr[0] " ({0} segment)"
+msgstr[1] " ({0} segmenty)"
+msgstr[2] " ({0} segmentů)"
 
 msgid "Save GPX file"
 msgstr "Uložit GPX soubor"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr "Shromáždit segmenty všech stop a sloučit je do jediné stopy."
+
+msgid "Combine tracks of this layer"
+msgstr "Sloučit stopy této vrstvy"
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr "Rozdělí více segmentů jedné stopy do několika stop."
+
+msgid "Split track segments to tracks"
+msgstr "Rozdělit segmenty stopy na stopy"
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr "Rozdělí stopy v této vrstvě každou do nové vrstvy"
+
+msgid "Split tracks to new layers"
+msgstr "Rozdělit stopy do nových vrstev"
+
 msgid "Id"
 msgstr "Id"
 
@@ -10829,6 +10891,20 @@ msgstr "Ulož vrstvu"
 msgid "Trying to set a read only data layer as edit layer"
 msgstr "Pokouším se nastavit vrstvu jen pro čtení jako editační vrstvu"
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+"Snažíte se smazat vrstvy, která se na pozadí nahrává na server. Počkejte, "
+"prosím, až nahrávání skončí."
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+"V pozadí probíhá nahrávání na server. Nelze resetovat stav, dokud se "
+"nahrávání nedokončí."
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] "{0} poznámka"
@@ -11179,29 +11255,20 @@ msgstr "Chyba v souboru {0}"
 msgid "Display geotagged images"
 msgstr "Zobrazit obrázky s GPS souřadnicemi"
 
-msgid "Previous"
-msgstr "Předchozí"
+msgid "Next"
+msgstr "Další"
 
-msgid "Show previous Image"
-msgstr "Zobrazit předchozí obrázek"
+msgid "Show next Image"
+msgstr "Zobrazit další obrázek"
 
 msgid "Geoimage: {0}"
 msgstr "Geoobrázek: {0}"
 
-msgid "Remove photo from layer"
-msgstr "Odebrat fotografii z vrstvy"
-
-msgid "Delete File from disk"
-msgstr "Smazat soubor z disku"
-
-msgid "Copy image path"
-msgstr "Zkopírovat cestu k obrázku"
-
-msgid "Next"
-msgstr "Další"
+msgid "Previous"
+msgstr "Předchozí"
 
-msgid "Show next Image"
-msgstr "Zobrazit další obrázek"
+msgid "Show previous Image"
+msgstr "Zobrazit předchozí obrázek"
 
 msgid "Show first Image"
 msgstr "Ukázat první obrázek"
@@ -11215,6 +11282,15 @@ msgstr "Centrovat pohled"
 msgid "Zoom best fit and 1:1"
 msgstr "Nejvhodnější zvětšení a 1:1"
 
+msgid "Remove photo from layer"
+msgstr "Odebrat fotografii z vrstvy"
+
+msgid "Delete File from disk"
+msgstr "Smazat soubor z disku"
+
+msgid "Copy image path"
+msgstr "Zkopírovat cestu k obrázku"
+
 msgid "Move dialog to the side pane"
 msgstr "Přesunout dialog do postranního panelu"
 
@@ -14638,11 +14714,11 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr "Smazaný uzel {0} je součástí cesty {1}"
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
-"Cesta {0} s {1} uzly má nekompletní uzly, protože alespoň jeden uzel v "
-"nahraných datech chybí."
+"Cesta {0} s {1} uzly není kompletní, protože v načtených datech alespoň "
+"jeden uzel scházel."
 
 msgid ""
 "Relation with external id ''{0}'' refers to a missing primitive with "
@@ -15371,6 +15447,12 @@ msgstr "Vzdálené ovládání bylo požádáno o otevření místního souboru.
 msgid "Do you want to allow this?"
 msgstr "Chcete toto povolit?"
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr "Potvrdit akci vzdáleného ovládání"
 
@@ -21085,6 +21167,12 @@ msgstr "Odpad"
 msgid "Recycling Centre"
 msgstr "Recyklační centrum"
 
+msgid "trash"
+msgstr "odpad"
+
+msgid "dog_excrement"
+msgstr "psí exkrementy"
+
 msgid "Waste Disposal/Dumpster"
 msgstr "Odpadkový kontejner"
 
@@ -25088,6 +25176,12 @@ msgstr "Veřejná doprava (ÖPNV)"
 msgid "Hike & Bike"
 msgstr "Hike & Bike"
 
+msgid "OpenSnowMap overlay"
+msgstr "OpenSnowMap overlay"
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr "Overlay imagery for piste mapping in OSM. Updated daily."
+
 msgid "skobbler"
 msgstr "skobbler"
 
@@ -25417,8 +25511,10 @@ msgstr "Základní mapa Rakouska založená na vládních datech."
 msgid "basemap.at Orthofoto"
 msgstr "basemap.at Orthofoto"
 
-msgid "Orthofoto layer provided by basemap.at. "
-msgstr "Vrstva ortofoto poskytnutá basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
+msgstr ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 
 msgid "Geoimage.at MaxRes"
 msgstr "Geoimage.at MaxRes"
@@ -25854,6 +25950,12 @@ msgstr "Estonia Cadastre (Maaamet)"
 msgid "Estonia Forestry (Maaamet)"
 msgstr "Estonia Forestry (Maaamet)"
 
+msgid "Nordic snowmobile overlay"
+msgstr "Nordic snowmobile overlay"
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+
 msgid "BANO"
 msgstr "BANO"
 
@@ -25942,9 +26044,6 @@ msgstr ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
 
-msgid "Hamburg (40 cm)"
-msgstr "Hamburg (40 cm)"
-
 msgid "Hamburg (20 cm)"
 msgstr "Hamburg (20 cm)"
 
@@ -25972,12 +26071,12 @@ 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"
-
 msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr "Deutsche Bahn VzG lines Nov 2015"
 
+msgid "Deutsche Bahn VzG lines January 2017"
+msgstr "Deutsche Bahn VzG lines January 2017"
+
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
 msgstr "Erlangen aerial imagery (2016 5.0 cm)"
 
@@ -26359,7 +26458,7 @@ msgid "Japan GSI ortho Imagery"
 msgstr "Japan GSI ortho Imagery"
 
 msgid "Japan GSI Standard Map"
-msgstr ""
+msgstr "Japan GSI Standard Map"
 
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr "imagico.de OSM images for mapping: Aral Sea (low water level)"
@@ -26393,7 +26492,7 @@ msgid "20cm ortho - Latvia - Coastline"
 msgstr "20cm ortho - Latvia - Coastline"
 
 msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
-msgstr ""
+msgstr "Orthophoto 1st cycle (1994-1999) - Latvia"
 
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Lithuania)"
@@ -26404,18 +26503,6 @@ msgstr "geoportail.lu all layers"
 msgid "geoportail.lu ortho latest"
 msgstr "geoportail.lu ortho latest"
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr "Luxembourg Inspire Railway"
-
-msgid "Luxembourg Inspire Roads"
-msgstr "Luxembourg Inspire Roads"
-
-msgid "Luxembourg Inspire Water"
-msgstr "Luxembourg Inspire Water"
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Niger Delta Oct 2012 Landsat"
 
@@ -26441,8 +26528,183 @@ msgstr "LINZ NZ Aerial Imagery"
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr "LINZ NZ Topo50 Gridless Maps"
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
-msgstr "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr "Kartverket N50 topo"
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+
+msgid "Kartverket Hillshade overlay"
+msgstr "Kartverket Hillshade overlay"
+
+msgid "Hillshade for Norway"
+msgstr "Hillshade for Norway"
+
+msgid "Kartverket Nautical Charts"
+msgstr "Kartverket Nautical Charts"
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+
+msgid "Kartverket Road Network overlay"
+msgstr "Kartverket Road Network overlay"
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+
+msgid "Kartverket Trails overlay"
+msgstr "Kartverket Trails overlay"
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+
+msgid "Kartverket Place Names overlay"
+msgstr "Kartverket Place Names overlay"
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+
+msgid "MTBmap.no"
+msgstr "MTBmap.no"
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr "Kartverket DTM Digital Terrain Model"
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr "Kartverket DOM Digital Surface Model"
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+
+msgid "Kartverket Historic maps"
+msgstr "Kartverket Historic maps"
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr "Kartverket Administrative Boundaries overlay"
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr "Kartverket Cadastral overlay"
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr "NVE Electricity Network overlay"
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+
+msgid "NVE Hydropower Plants overlay"
+msgstr "NVE Hydropower Plants overlay"
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+
+msgid "NVE Wind Power Plants overlay"
+msgstr "NVE Wind Power Plants overlay"
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr "Miljødirektoratet Protected Areas overlay"
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+
+msgid "NP Svalbard Orthophoto"
+msgstr "NP Svalbard Orthophoto"
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
+msgstr ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
 msgstr "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -26508,11 +26770,11 @@ msgstr "Poor and outdated imagery in other sources (true color)"
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr "Pangasinán/Bulacan (Philippines HiRes)"
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
-msgstr "Geoportal 2: Ortofotomapa (letecké snímky)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
+msgstr "Geoportal 2: Orthophotomap (aerial image)"
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
-msgstr "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
+msgstr "Geoportal 2: Orthophotomap (aerial image) WMTS"
 
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr "Geoportal 2: PRNG (geo names)"
@@ -26520,119 +26782,128 @@ msgstr "Geoportal 2: PRNG (geo names)"
 msgid "Geoportal 2: ISOK hillshade"
 msgstr "Geoportal 2: ISOK hillshade"
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
-msgstr "Będzin: Ortofotomapa 2013 (letecké snímky)"
+msgid "polska.e-mapa.net: Buildings"
+msgstr ""
+
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
+msgstr "Będzin: Orthophotomap 2013 (aerial image)"
 
-msgid "Będzin: Budynki (buildings)"
-msgstr "Będzin: Budynki (budovy)"
+msgid "Będzin: Buildings"
+msgstr "Będzin: Buildings"
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
-msgstr "Bytom: Ortofotomapa 2012 (letecké snímky)"
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
+msgstr "Bytom: Orthophotomap 2012 (aerial image)"
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr "Bytom: Fotoplan 2014 (aerial image)"
 
-msgid "Bytom: Budynki (buildings)"
-msgstr "Bytom: Budynki (budovy)"
+msgid "Bytom: Buildings"
+msgstr "Bytom: Buildings"
 
-msgid "Chorzów: Budynki (buildings)"
-msgstr "Chorzów: Budynki (budovy)"
+msgid "Chorzów: Buildings"
+msgstr "Chorzów: Buildings"
 
-msgid "Częstochowa: Budynki (buildings)"
-msgstr "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
+msgstr "Częstochowa: Buildings"
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2011 (letecké snímky)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
+msgstr "Częstochowa: Orthophotomap 2011 (aerial image)"
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
+msgstr "Częstochowa: Orthophotomap 2013 (aerial image)"
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
+msgstr "Częstochowa: Orthophotomap 2014 (aerial image)"
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
-msgstr "Gliwice: Ortofotomapa 2013 (letecké snímky)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
+msgstr "Gliwice: Orthophotomap 2013 (aerial image)"
 
-msgid "Gliwice: Budynki (buildings)"
-msgstr "Gliwice: Budynki (budovy)"
+msgid "Gliwice: Buildings"
+msgstr "Gliwice: Buildings"
 
-msgid "Katowice: Ortofotomapa (aerial image)"
-msgstr "Katowice: Ortofotomapa (letecké snímky)"
+msgid "Katowice: Orthophotomap (aerial image)"
+msgstr "Katowice: Orthophotomap (aerial image)"
 
-msgid "Katowice: Budynki (buildings)"
-msgstr "Katowice: Budynki (buildings)"
+msgid "Katowice: Buildings"
+msgstr "Katowice: Buildings"
 
-msgid "Łódź: Budynki (buildings)"
-msgstr "Łódź: Budynki (buildings)"
+msgid "Łódź: Buildings"
+msgstr "Łódź: Buildings"
 
-msgid "Łódź: Ortofotomapa (aerial image)"
-msgstr "Łódź: Ortofotomapa (letecké snímky)"
+msgid "Łódź: Orthophotomap (aerial image)"
+msgstr "Łódź: Orthophotomap (aerial image)"
 
-msgid "Powiat dębicki: Budynki (buildings)"
-msgstr "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat dębicki: Buildings"
+msgstr "Powiat dębicki: Buildings"
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
-msgstr "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
+msgstr "Powiat lubaczowski: Buildings"
 
-msgid "Powiat łańcucki: Budynki (buildings)"
-msgstr "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
+msgstr "Powiat łańcucki: Buildings"
 
-msgid "Powiat poznański: Budynki (buildings)"
-msgstr "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
+msgstr "Powiat poznański: Buildings"
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
-msgstr "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
+msgstr "Powiat poznański: Orthophotomap (aerial image)"
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
-msgstr "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
+msgstr "Powiat ropczycko-sędziszowski: Buildings"
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
-msgstr "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
+msgstr "Powiat rzeszowski: Buildings"
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
-msgstr "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
+msgstr "Powiat rzeszowski: Orthophotomap (aerial image)"
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
-msgstr "Powiat stalowowolski: Budynki (buildings)"
+msgid "Powiat stalowowolski: Buildings"
+msgstr "Powiat stalowowolski: Buildings"
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
-msgstr "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
+msgstr "Poznań: Orthophotomap 2014 (aerial image)"
 
-msgid "Przemyśl: Budynki (buildings)"
-msgstr "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Buildings"
+msgstr "Przemyśl: Buildings"
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
-msgstr "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
+msgstr "Przemyśl: Ortophotomap (aerial image)"
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
-msgstr "Ruda Śląska: Ortofotomapa (letecké snímky)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
+msgstr "Ruda Śląska: Orthophotomap (aerial image)"
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
-msgstr "Rzeszów: Ortofotomapa (letecké snímky)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
+msgstr "Rzeszów: Orthophotomap (aerial image)"
 
-msgid "Rzeszów: Budynki (buildings)"
-msgstr "Rzeszów: Budynki (budovy)"
+msgid "Rzeszów: Buildings"
+msgstr "Rzeszów: Buildings"
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
-msgstr "Siemianowice Śląskie: Ortofotomapa (letecké snímky)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
+msgstr "Siemianowice Śląskie: Orthophotomap (aerial image)"
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
-msgstr "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Buildings"
+msgstr "Siemianowice Śląskie: Buildings"
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
+msgstr "Świętochłowice: Orthophotomap 2008 (aerial image)"
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2009 (letecké snímky)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
+msgstr "Świętochłowice: Orthophotomap 2009 (aerial image)"
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
+msgstr "Świętochłowice: Orthophotomap 2012 (aerial image)"
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
-msgstr "Zabrze: Ortofotomapa 2011 (letecké snímky)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
+msgstr "Zabrze: Orthophotomap 2011 (aerial image)"
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
-msgstr "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
+msgstr "Wrocław: Orthophotomap 2015 (aerial image)"
+
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr "Ortofotos DGRF 2004-2006 (WMS)"
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
+msgstr "Ortofotos Litoral DGT 2014-2015 (WMS)"
 
 msgid "ScanEx IRS"
 msgstr "ScanEx IRS"
@@ -26777,6 +27048,18 @@ msgstr "imagico.de OSM images for mapping: Adams Bridge"
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr "Supplementing incomplete coverage in other sources (true color)"
 
+msgid "Economic Maps (historic)"
+msgstr "Economic Maps (historic)"
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr "Scan of ´Economic maps´ ca 1950-1980"
+
+msgid "Snowmobile map Sweden"
+msgstr "Snowmobile map Sweden"
+
+msgid "Snowmobile trails"
+msgstr "Snowmobile trails"
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr "Kanton Aargau 25cm (AGIS 2011)"
 
@@ -29685,15 +29968,12 @@ 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 "Open Mapillary layer"
+msgstr "Otevřená vrstva Mapillary"
 
 msgid "Mapillary"
 msgstr "Mapillary"
 
-msgid "Create Mapillary layer"
-msgstr "Vytvořit vrstvu Mapillary"
-
 msgid "Download Mapillary images in current view"
 msgstr "Stáhnout obrázky Mapillary v aktuálním zobrazení"
 
@@ -29756,14 +30036,8 @@ msgstr ""
 "tuto zprávu vidíte poprvé, tak to prostě zkuste udělat znovu. Může se jednat "
 "o problém s připojením k Internetu."
 
-msgid "Upload pictures"
-msgstr "Nahrát obrázky na server"
-
-msgid "Upload Mapillary pictures"
-msgstr "Nahrát obrázky Mapillary na server"
-
-msgid "Upload pictures."
-msgstr "Nahrát obrázky na server."
+msgid "Upload Mapillary images"
+msgstr "Nahrát na server obrázky Mapillary"
 
 msgid "Walk mode"
 msgstr "Režim chůze"
@@ -29798,15 +30072,12 @@ msgstr "Exportovat zvolené obrázky"
 msgid "Rewrite imported images"
 msgstr "Přepsat importované obrázky"
 
-msgid "Select a folder"
-msgstr "Zvolte složku"
+msgid "Select a directory"
+msgstr "Zvolte adresář"
 
 msgid "Explore"
 msgstr "Prozkoumat"
 
-msgid "Select a directory"
-msgstr "Zvolte adresář"
-
 msgid "Speed limit"
 msgstr "Omezení rychlosti"
 
@@ -29939,6 +30210,13 @@ msgstr "Nahlédnout obrázek při ukázání na jeho ikonu"
 msgid "Cut off sequences at download bounds"
 msgstr "Useknout sekvence na hranicích stahování"
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+"Při otevírání obrázku Mapillary v internetovém prohlížeči zobrazit namísto "
+"prohlížeče obrázků editor rozmazání."
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr "Povolit experimentální beta-funkce (může být nestabilní)"
 
@@ -34768,6 +35046,10 @@ msgstr "Opakovat"
 msgid "Unable to process file ''{0}'':"
 msgstr "Nelze zpracovat soubor ''{0}'':"
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr "Soubor nemohl být smazán!"
 
@@ -36306,9 +36588,6 @@ msgstr "Exportovat dat o dopravním provozu do souboru sítě SUMO."
 msgid "SUMO Export"
 msgstr "SUMO Export"
 
-msgid "Export"
-msgstr "Export"
-
 msgid "AutoSave LiveData"
 msgstr "Automatické ukládání LiveData"
 
diff --git a/i18n/po/cy.po b/i18n/po/cy.po
index 2df211a..2dc6849 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 05:09+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 05:06+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: cy\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -954,6 +954,12 @@ msgstr ""
 msgid "Select if the data should be downloaded into a new layer"
 msgstr ""
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr ""
 
@@ -2226,6 +2232,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3029,18 +3060,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr ""
@@ -3057,9 +3076,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8232,12 +8263,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9731,6 +9756,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9835,8 +9866,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9846,6 +9877,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9859,14 +9893,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr ""
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9909,6 +9966,16 @@ msgstr ""
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10237,40 +10304,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13357,8 +13424,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14021,6 +14088,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19449,6 +19522,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23424,6 +23503,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23744,7 +23829,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24167,6 +24253,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24253,9 +24345,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24283,10 +24372,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24685,18 +24774,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24720,7 +24797,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24782,10 +25009,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24794,118 +25021,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25042,6 +25278,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27570,15 +27818,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27637,13 +27882,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27679,15 +27918,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27820,6 +28056,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32246,6 +32487,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33726,9 +33971,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/da.po b/i18n/po/da.po
index f95a1de..851b269 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-11-26 00:06+0100\n"
-"PO-Revision-Date: 2017-11-14 15:29+0000\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\n"
+"PO-Revision-Date: 2017-12-30 16:17+0000\n"
 "Last-Translator: Jørn <joern.map at gmail.com>\n"
 "Language-Team: Dansk <kde-i18n-doc at kde.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2017-11-26 04:40+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:40+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: da_DK\n"
 "X-Poedit-SourceCharset: utf-8\n"
 
@@ -453,7 +453,7 @@ msgid "Delete the active layer. Does not delete the associated file."
 msgstr "Slet det aktive lag. Sletter ikke den tilknyttede fil."
 
 msgid "Dialogs panel"
-msgstr ""
+msgstr "Dialog panel"
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Vis/skjul dialog panel, maksimer kortvisning"
@@ -1027,6 +1027,12 @@ msgstr "Separat lag"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "Vælg om dataene skal hentes som et nyt lag"
 
+msgid "Zoom to downloaded data"
+msgstr "Zoom til downloadede data"
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr "Vælg for at zoome til alle nye downloadede data."
+
 msgid "Download Location"
 msgstr "Download sted"
 
@@ -1727,7 +1733,7 @@ msgid "Wireframe View"
 msgstr "Trådnet-visning"
 
 msgid "Enable/disable rendering the map as wireframe only"
-msgstr "Slå rendering af kortet kun som trådgitter til/fra"
+msgstr "Aktiver/deaktiver tegning af kortet kun som trådgitter"
 
 msgid "Toggle Wireframe view"
 msgstr "Slå trådnet-visning til/fra"
@@ -2406,6 +2412,35 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr "Bekræftelse"
 
+msgid "Export GPX file starting from first member"
+msgstr "Eksporter GPX-fil startende fra første medlem"
+
+msgid "Export GPX file starting from last member"
+msgstr "Eksporter GPX-fil startende fra sidste medlem"
+
+msgid "Convert to GPX layer starting from first member"
+msgstr "Konverter til GPX-lag startende fra første medlem"
+
+msgid "Convert to GPX layer starting from last member"
+msgstr "Konverter til GPX-lag startende fra sidste medlem"
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+"Udjævner denne relation til et enkelt gpx-spor rekursivt, startende med det "
+"første medlem(er), fortsættende successivt til det sidste."
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+"Udjævner denne relation til et enkelt gpx-spor rekursivt, startende med det "
+"sidste medlem(er), fortsættende successivt til det første."
+
+msgid "Selected Relations"
+msgstr "Valgte relationer"
+
 msgid "List of recent relations"
 msgstr "Liste over seneste relationer"
 
@@ -3275,18 +3310,6 @@ msgstr "Revistionsfilen ''/REVISION'' mangler."
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr "Har allerede registreret en konflikt for primitiv \"{0}\"."
 
-msgid "Decimal Degrees"
-msgstr "decimalgrader"
-
-msgid "deg° min'' sec\""
-msgstr "grad° min'' sek\""
-
-msgid "deg° min'' (Nautical)"
-msgstr "grd ° min''(Nautisk)"
-
-msgid "Projected Coordinates"
-msgstr "Projekterede koordinater"
-
 msgctxt "compass"
 msgid "S"
 msgstr "S"
@@ -3303,9 +3326,21 @@ msgctxt "compass"
 msgid "E"
 msgstr "Ø"
 
+msgid "deg° min'' sec\""
+msgstr "grad° min'' sek\""
+
+msgid "Decimal Degrees"
+msgstr "decimalgrader"
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr "Kan ikke fortolkes som koordinatværdi: ''{0}''"
 
+msgid "deg° min'' (Nautical)"
+msgstr "grd ° min''(Nautisk)"
+
+msgid "Projected Coordinates"
+msgstr "Projekterede koordinater"
+
 msgid "Date of imagery: {0}"
 msgstr "Dato for billedlag: {0}"
 
@@ -5000,7 +5035,7 @@ msgid "Has key ''source''"
 msgstr "Har nøglen \"source\""
 
 msgid "Untagged, empty and one node ways"
-msgstr "Utaggede, tomme og ét-punkts veje"
+msgstr "Utaggede, tomme og et-punkts veje"
 
 msgid "This test checks for untagged, empty and one node ways."
 msgstr ""
@@ -5183,7 +5218,7 @@ msgid "Would you like to update now ?"
 msgstr "Vil du opdatere nu?"
 
 msgid "Starting file watcher"
-msgstr "Start fil overvågning"
+msgstr "Starter fil overvågning"
 
 msgid "Executing platform startup hook"
 msgstr "Afvikler tilføjelse til opstart af platform"
@@ -7466,7 +7501,7 @@ msgid "Fix the selected issue."
 msgstr "Ret det markerede problem."
 
 msgid "Ignore the selected issue next time."
-msgstr "Ignorér det markerede problem næste gang."
+msgstr "Ignorer det markerede problem næste gang."
 
 msgid "Whole group"
 msgstr "Hele gruppen"
@@ -7478,7 +7513,7 @@ msgid "Nothing"
 msgstr "Intet"
 
 msgid "Ignore whole group or individual elements?"
-msgstr "Ignorér hele gruppen eller enkelte elementer?"
+msgstr "Ignorer hele gruppen eller enkelte elementer?"
 
 msgid "Ignoring elements"
 msgstr "Ignorerer elementer"
@@ -8014,7 +8049,7 @@ msgid "Delete the selected layers."
 msgstr "Slet de markerede lag."
 
 msgid "Duplicate this layer"
-msgstr "Duplikér dette lag"
+msgstr "Dupliker dette lag"
 
 msgid "Copy of {0}"
 msgstr "Kopi af {0}"
@@ -8848,12 +8883,6 @@ msgstr ""
 "<html>Autostart ''Download fra OSM'' dialogen hver gang JOSM startes.<br>Du "
 "kan åbne den manuelt fra menuen Filer eller værktøjslinjen.</html>"
 
-msgid "Zoom to downloaded data"
-msgstr "Zoom til downloadede data"
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr "Vælg for at zoome til alle nye downloadede data."
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9400,7 +9429,7 @@ msgid "Synchronize relation {0} only"
 msgstr "Synkroniser kun relation {0}"
 
 msgid "Synchronize entire dataset"
-msgstr "Synkronisér hele datasættet"
+msgstr "Synkroniser hele datasættet"
 
 msgid ""
 "<html>Uploading <strong>failed</strong> because the server has a newer "
@@ -9487,6 +9516,8 @@ msgid ""
 "A background upload is already in progress. Kindly wait for it to finish "
 "before uploading new changes"
 msgstr ""
+"En baggrunds upload er allerede i gang. Vent på at den er færdig, inden "
+"upload af nye ændringer"
 
 msgid "I would like someone to review my edits."
 msgstr "Jeg vil gerne have nogen til at gennemgå mine redigeringer."
@@ -9955,7 +9986,7 @@ msgid "Manage open changesets and select a changeset to upload to"
 msgstr "Administrer åbne rettesæt og vælg et rettesæt at uploade til"
 
 msgid "Configure advanced settings"
-msgstr "Konfigurér avancerede indstillinger"
+msgstr "Konfigurer avancerede indstillinger"
 
 msgid "Upload to ''{0}''"
 msgstr "Upload til ''{0}''"
@@ -10070,7 +10101,7 @@ msgstr ""
 "Rettesættet vil blive <strong>efterladt åbent</strong> efter denne upload"
 
 msgid "configure changeset"
-msgstr "konfigurér rettesæt"
+msgstr "konfigurer rettesæt"
 
 msgid "Uploading <strong>{0} object</strong> to <strong>1 changeset</strong>"
 msgid_plural ""
@@ -10529,6 +10560,12 @@ msgstr "Metadata "
 msgid "Load tile"
 msgstr "Hent tern"
 
+msgid "Get tile status"
+msgstr "Få tern status"
+
+msgid "Force tile rendering"
+msgstr "Gennemtving tern tegning"
+
 msgid "Failed to create tile source"
 msgstr "Kunne ikke oprette tern kilde"
 
@@ -10637,10 +10674,10 @@ msgstr "Navn: {0}"
 msgid "Description: {0}"
 msgstr "Beskrivelse: {0}"
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
-msgstr[0] "{0} spor"
-msgstr[1] "{0} spor"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
+msgstr[0] "{0} spor, {1} sporsegmenter"
+msgstr[1] "{0} spor, {1} sporsegmenter"
 
 msgid "Timespan"
 msgstr "Tidsrum"
@@ -10648,6 +10685,9 @@ msgstr "Tidsrum"
 msgid "Length"
 msgstr "Længde"
 
+msgid "Number of<br/>Segments"
+msgstr "Antal af<br/>segmenter"
+
 msgid "Length: {0}"
 msgstr "Længde: {0}"
 
@@ -10661,14 +10701,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] "{0} waypoint"
 msgstr[1] "{0} waypoints"
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
-msgstr[0] "{0} spor, "
-msgstr[1] "{0} spor, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] "{0} spor"
+msgstr[1] "{0} spor"
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
+msgstr[0] " ({0} segment)"
+msgstr[1] " ({0} segmenter)"
 
 msgid "Save GPX file"
 msgstr "Gem GPX-fil"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr "Samler segmenter af alle spor og kombinerer til et enkelt spor."
+
+msgid "Combine tracks of this layer"
+msgstr "Kombinerer spor på dette lag"
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr "Opdel flere sporssegmenter fra et spor til flere spor."
+
+msgid "Split track segments to tracks"
+msgstr "Opdel sporsegmenter til spor"
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr "Opdel sporene på dette lag til hvert sit nye lag."
+
+msgid "Split tracks to new layers"
+msgstr "Opdel spor til nye lag"
+
 msgid "Id"
 msgstr "Id"
 
@@ -10709,7 +10772,20 @@ msgid "Save Layer"
 msgstr "Gem lag"
 
 msgid "Trying to set a read only data layer as edit layer"
+msgstr "Forsøger at sætte et skrivebeskyttet datalag som redigeringslag"
+
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
 msgstr ""
+"Forsøger at slette laget med baggrundsupload. Vent indtil uploaden er færdig."
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+"En baggrundsupload er allerede i gang. Kan ikke nulstille tilstand førend "
+"uploaden er færdig."
 
 msgid "{0} note"
 msgid_plural "{0} notes"
@@ -10874,7 +10950,7 @@ msgid "Open another photo"
 msgstr "Åbn et andet foto"
 
 msgid "Synchronize time from a photo of the GPS receiver"
-msgstr "Synkronisér tiden fra et billede på GPS-modtageren"
+msgstr "Synkroniser tiden fra et billede på GPS-modtageren"
 
 msgid ""
 "Error while parsing the date.\n"
@@ -10994,7 +11070,7 @@ msgid "Extracting GPS locations from EXIF"
 msgstr "Trækker GPS-lokaliteter ud fra EXIF"
 
 msgid "Starting directory scan"
-msgstr "Begynder scanning af mappe"
+msgstr "Starter scanning af mappe"
 
 msgid "Read photos..."
 msgstr "Indlæs billeder..."
@@ -11054,29 +11130,20 @@ msgstr "Fejl i fil {0}"
 msgid "Display geotagged images"
 msgstr "Vis geo-taggede billeder"
 
-msgid "Previous"
-msgstr "Forrige"
+msgid "Next"
+msgstr "Næste"
 
-msgid "Show previous Image"
-msgstr "Vis foregående billede"
+msgid "Show next Image"
+msgstr "Vis næste billede"
 
 msgid "Geoimage: {0}"
 msgstr "Geobillede: {0}"
 
-msgid "Remove photo from layer"
-msgstr "Fjern foto fra lag"
-
-msgid "Delete File from disk"
-msgstr "Slet fil fra disk"
-
-msgid "Copy image path"
-msgstr "Kopier billede sti"
-
-msgid "Next"
-msgstr "Næste"
+msgid "Previous"
+msgstr "Forrige"
 
-msgid "Show next Image"
-msgstr "Vis næste billede"
+msgid "Show previous Image"
+msgstr "Vis foregående billede"
 
 msgid "Show first Image"
 msgstr "Vis første billede"
@@ -11090,6 +11157,15 @@ msgstr "Centrer synsfelt"
 msgid "Zoom best fit and 1:1"
 msgstr "Zoom best fit og 1:1"
 
+msgid "Remove photo from layer"
+msgstr "Fjern foto fra lag"
+
+msgid "Delete File from disk"
+msgstr "Slet fil fra disk"
+
+msgid "Copy image path"
+msgstr "Kopier billede sti"
+
 msgid "Move dialog to the side pane"
 msgstr "Flyt dialog til sidepanelet"
 
@@ -11174,7 +11250,7 @@ msgid "Show selected only"
 msgstr "Vis kun valgte"
 
 msgid "Convert to data layer"
-msgstr "Konvertér til datalag"
+msgstr "Konverter til datalag"
 
 msgid ""
 "<html>Upload of unprocessed GPS data as map data is considered "
@@ -11377,7 +11453,7 @@ msgid "Toggle visible state of the marker text and icons."
 msgstr "Slå synlighed af markørtekst og -ikoner til/fra"
 
 msgid "Synchronize Audio"
-msgstr "Synkronisér lyd"
+msgstr "Synkroniser lyd"
 
 msgid ""
 "You need to pause audio at the moment when you hear your synchronization cue."
@@ -12689,7 +12765,7 @@ msgid "Local files"
 msgstr "Lokale filer"
 
 msgid "Force lines if no segments imported"
-msgstr "Gennemtving linjer hvis der ikke imporeret nogen segmenter"
+msgstr "Gennemtving linjer når der ikke er importeret segmenter"
 
 msgid "Draw large GPS points"
 msgstr "Tegn store GPS punkter"
@@ -12801,7 +12877,7 @@ msgstr "Maksimal længde (meter)"
 msgid ""
 "Force drawing of lines if the imported data contain no line information."
 msgstr ""
-"Gennemtving tegning af linjer hvis de importerede data ikke indeholder linje "
+"Gennemtving tegning af linjer når de importerede data ikke indeholder linje "
 "information."
 
 msgid "Draw direction arrows for lines, connecting GPS points."
@@ -12923,7 +12999,7 @@ msgid "Show object ID in selection lists"
 msgstr "Vis objekt-ID i markeringslister"
 
 msgid "Show node coordinates in selection lists"
-msgstr ""
+msgstr "Vis punkt koordinater i markeringslister"
 
 msgid "Show localized name in selection lists"
 msgstr "Vis lokaliseret navn i markeringslister"
@@ -14505,11 +14581,11 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr "Slettet punkt {0} er en del af vej {1}"
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
-"Vejen {0} med {1} punkter har ufuldstændige punkter da mindst et punkt "
-"manglede i de downloade data."
+"Vej {0} med {1} punkter er ufuldstændig, fordi der manglede mindst et punkt "
+"i de indlæste data."
 
 msgid ""
 "Relation with external id ''{0}'' refers to a missing primitive with "
@@ -15227,6 +15303,12 @@ msgstr "Fjernstyring er blevet bedt om at åbne en lokal fil."
 msgid "Do you want to allow this?"
 msgstr "Vil du tillade dette?"
 
+msgid "Yes, always"
+msgstr "Ja altid"
+
+msgid "Yes, once"
+msgstr "Ja, en gang"
+
 msgid "Confirm Remote Control action"
 msgstr "Bekræft Fjernstyrings-handling"
 
@@ -17098,16 +17180,16 @@ msgid "korean"
 msgstr "koreansk"
 
 msgid "donut"
-msgstr ""
+msgstr "donut"
 
 msgid "mediterranean"
-msgstr ""
+msgstr "middelhavet"
 
 msgid "friture"
-msgstr ""
+msgstr "friture"
 
 msgid "crepe"
-msgstr ""
+msgstr "pandekager"
 
 msgid "Internet access"
 msgstr "Internetadgang"
@@ -19980,16 +20062,16 @@ msgid "Tents allowed"
 msgstr "Telte tilladt"
 
 msgid "Campsite"
-msgstr ""
+msgstr "Campingplads"
 
 msgid "Caravans allowed"
-msgstr ""
+msgstr "Campingvogne tilladt"
 
 msgid "Backcountry"
-msgstr ""
+msgstr "Ødemark"
 
 msgid "Group only access"
-msgstr ""
+msgstr "Kun grupper"
 
 msgid "Food+Drinks"
 msgstr "Mad og drikke"
@@ -20906,6 +20988,12 @@ msgstr "Affald"
 msgid "Recycling Centre"
 msgstr "Genbrugsplads"
 
+msgid "trash"
+msgstr "affald"
+
+msgid "dog_excrement"
+msgstr "hunde ekskrementer"
+
 msgid "Waste Disposal/Dumpster"
 msgstr "Skraldespand/container"
 
@@ -24912,6 +25000,12 @@ msgstr "Public Transport (ÖPNV)"
 msgid "Hike & Bike"
 msgstr "Hike & Bike"
 
+msgid "OpenSnowMap overlay"
+msgstr "OpenSnowMap overlay"
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr "Overlay imagery for piste mapping in OSM. Updated daily."
+
 msgid "skobbler"
 msgstr "skobbler"
 
@@ -25241,8 +25335,10 @@ msgstr "Basemap of Austria, based on goverment data."
 msgid "basemap.at Orthofoto"
 msgstr "basemap.at Orthofoto"
 
-msgid "Orthofoto layer provided by basemap.at. "
-msgstr "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
+msgstr ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 
 msgid "Geoimage.at MaxRes"
 msgstr "Geoimage.at MaxRes"
@@ -25677,6 +25773,12 @@ msgstr "Estonia Cadastre (Maaamet)"
 msgid "Estonia Forestry (Maaamet)"
 msgstr "Estonia Forestry (Maaamet)"
 
+msgid "Nordic snowmobile overlay"
+msgstr "Nordic snowmobile overlay"
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+
 msgid "BANO"
 msgstr "BANO"
 
@@ -25765,9 +25867,6 @@ msgstr ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
 
-msgid "Hamburg (40 cm)"
-msgstr "Hamburg (40 cm)"
-
 msgid "Hamburg (20 cm)"
 msgstr "Hamburg (20 cm)"
 
@@ -25795,12 +25894,12 @@ 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"
-
 msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr "Deutsche Bahn VzG lines Nov 2015"
 
+msgid "Deutsche Bahn VzG lines January 2017"
+msgstr "Deutsche Bahn VzG lines January 2017"
+
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
 msgstr "Erlangen aerial imagery (2016 5.0 cm)"
 
@@ -26182,7 +26281,7 @@ msgid "Japan GSI ortho Imagery"
 msgstr "Japan GSI ortho Imagery"
 
 msgid "Japan GSI Standard Map"
-msgstr ""
+msgstr "Japan GSI Standard Map"
 
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr "imagico.de OSM images for mapping: Aral Sea (low water level)"
@@ -26216,7 +26315,7 @@ msgid "20cm ortho - Latvia - Coastline"
 msgstr "20cm ortho - Latvia - Coastline"
 
 msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
-msgstr ""
+msgstr "Orthophoto 1st cycle (1994-1999) - Latvia"
 
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Lithuania)"
@@ -26225,19 +26324,7 @@ msgid "geoportail.lu all layers"
 msgstr "geoportail.lu all layers"
 
 msgid "geoportail.lu ortho latest"
-msgstr ""
-
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr "Luxembourg Inspire Railway"
-
-msgid "Luxembourg Inspire Roads"
-msgstr "Luxembourg Inspire Roads"
-
-msgid "Luxembourg Inspire Water"
-msgstr "Luxembourg Inspire Water"
+msgstr "geoportail.lu ortho latest"
 
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Niger Delta Oct 2012 Landsat"
@@ -26264,8 +26351,191 @@ msgstr "LINZ NZ Aerial Imagery"
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr "LINZ NZ Topo50 Gridless Maps"
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
-msgstr "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr "Kartverket N50 topo"
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+
+msgid "Kartverket Hillshade overlay"
+msgstr "Kartverket Hillshade overlay"
+
+msgid "Hillshade for Norway"
+msgstr "Hillshade for Norway"
+
+msgid "Kartverket Nautical Charts"
+msgstr "Kartverket Nautical Charts"
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+
+msgid "Kartverket Road Network overlay"
+msgstr "Kartverket Road Network overlay"
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+
+msgid "Kartverket Trails overlay"
+msgstr "Kartverket Trails overlay"
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+
+msgid "Kartverket Place Names overlay"
+msgstr "Kartverket Place Names overlay"
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+
+msgid "MTBmap.no"
+msgstr "MTBmap.no"
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr "Kartverket DTM Digital Terrain Model"
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr "Kartverket DOM Digital Surface Model"
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+
+msgid "Kartverket Historic maps"
+msgstr "Kartverket Historic maps"
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr "Kartverket Economic Maps (historic)"
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr "Kartverket Administrative Boundaries overlay"
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+
+msgid "Kartverket Cadastral overlay"
+msgstr "Kartverket Cadastral overlay"
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr "Kartverket Aviation Obstructions overlay"
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+
+msgid "NVE Electricity Network overlay"
+msgstr "NVE Electricity Network overlay"
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+
+msgid "NVE Hydropower Plants overlay"
+msgstr "NVE Hydropower Plants overlay"
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+
+msgid "NVE Wind Power Plants overlay"
+msgstr "NVE Wind Power Plants overlay"
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+
+msgid "NPD Offshore Installations overlay"
+msgstr "NPD Offshore Installations overlay"
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr "Miljødirektoratet Protected Areas overlay"
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+
+msgid "NP Svalbard Orthophoto"
+msgstr "NP Svalbard Orthophoto"
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
+msgstr ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
 msgstr "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -26331,11 +26601,11 @@ msgstr "Poor and outdated imagery in other sources (true color)"
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr "Pangasinán/Bulacan (Philippines HiRes)"
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
-msgstr "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
+msgstr "Geoportal 2: Orthophotomap (aerial image)"
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
-msgstr "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
+msgstr "Geoportal 2: Orthophotomap (aerial image) WMTS"
 
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr "Geoportal 2: PRNG (geo names)"
@@ -26343,119 +26613,128 @@ msgstr "Geoportal 2: PRNG (geo names)"
 msgid "Geoportal 2: ISOK hillshade"
 msgstr "Geoportal 2: ISOK hillshade"
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
-msgstr "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
+msgstr "polska.e-mapa.net: Buildings"
 
-msgid "Będzin: Budynki (buildings)"
-msgstr "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
+msgstr "Będzin: Orthophotomap 2013 (aerial image)"
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
-msgstr "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr "Będzin: Buildings"
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
+msgstr "Bytom: Orthophotomap 2012 (aerial image)"
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr "Bytom: Fotoplan 2014 (aerial image)"
 
-msgid "Bytom: Budynki (buildings)"
-msgstr "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr "Bytom: Buildings"
+
+msgid "Chorzów: Buildings"
+msgstr "Chorzów: Buildings"
 
-msgid "Chorzów: Budynki (buildings)"
-msgstr "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
+msgstr "Częstochowa: Buildings"
 
-msgid "Częstochowa: Budynki (buildings)"
-msgstr "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
+msgstr "Częstochowa: Orthophotomap 2011 (aerial image)"
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
+msgstr "Częstochowa: Orthophotomap 2013 (aerial image)"
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
+msgstr "Częstochowa: Orthophotomap 2014 (aerial image)"
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
+msgstr "Gliwice: Orthophotomap 2013 (aerial image)"
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
-msgstr "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
+msgstr "Gliwice: Buildings"
 
-msgid "Gliwice: Budynki (buildings)"
-msgstr "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
+msgstr "Katowice: Orthophotomap (aerial image)"
 
-msgid "Katowice: Ortofotomapa (aerial image)"
-msgstr "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
+msgstr "Katowice: Buildings"
 
-msgid "Katowice: Budynki (buildings)"
-msgstr "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
+msgstr "Łódź: Buildings"
 
-msgid "Łódź: Budynki (buildings)"
-msgstr "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
+msgstr "Łódź: Orthophotomap (aerial image)"
 
-msgid "Łódź: Ortofotomapa (aerial image)"
-msgstr "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
+msgstr "Powiat dębicki: Buildings"
 
-msgid "Powiat dębicki: Budynki (buildings)"
-msgstr "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
+msgstr "Powiat lubaczowski: Buildings"
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
-msgstr "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
+msgstr "Powiat łańcucki: Buildings"
 
-msgid "Powiat łańcucki: Budynki (buildings)"
-msgstr "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
+msgstr "Powiat poznański: Buildings"
 
-msgid "Powiat poznański: Budynki (buildings)"
-msgstr "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
+msgstr "Powiat poznański: Orthophotomap (aerial image)"
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
-msgstr "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
+msgstr "Powiat ropczycko-sędziszowski: Buildings"
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
-msgstr "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
+msgstr "Powiat rzeszowski: Buildings"
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
-msgstr "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
+msgstr "Powiat rzeszowski: Orthophotomap (aerial image)"
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
-msgstr "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
+msgstr "Powiat stalowowolski: Buildings"
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
-msgstr "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
+msgstr "Poznań: Orthophotomap 2014 (aerial image)"
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
-msgstr "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
+msgstr "Przemyśl: Buildings"
 
-msgid "Przemyśl: Budynki (buildings)"
-msgstr "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
+msgstr "Przemyśl: Ortophotomap (aerial image)"
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
-msgstr "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
+msgstr "Ruda Śląska: Orthophotomap (aerial image)"
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
-msgstr "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
+msgstr "Rzeszów: Orthophotomap (aerial image)"
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
-msgstr "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
+msgstr "Rzeszów: Buildings"
 
-msgid "Rzeszów: Budynki (buildings)"
-msgstr "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
+msgstr "Siemianowice Śląskie: Orthophotomap (aerial image)"
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
-msgstr "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
+msgstr "Siemianowice Śląskie: Buildings"
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
-msgstr "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
+msgstr "Świętochłowice: Orthophotomap 2008 (aerial image)"
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
+msgstr "Świętochłowice: Orthophotomap 2009 (aerial image)"
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
+msgstr "Świętochłowice: Orthophotomap 2012 (aerial image)"
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
+msgstr "Zabrze: Orthophotomap 2011 (aerial image)"
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
-msgstr "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
+msgstr "Wrocław: Orthophotomap 2015 (aerial image)"
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
-msgstr "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr "Ortofotos DGRF 2004-2006 (WMS)"
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
+msgstr "Ortofotos Litoral DGT 2014-2015 (WMS)"
 
 msgid "ScanEx IRS"
 msgstr "ScanEx IRS"
@@ -26600,6 +26879,18 @@ msgstr "imagico.de OSM images for mapping: Adams Bridge"
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr "Supplementing incomplete coverage in other sources (true color)"
 
+msgid "Economic Maps (historic)"
+msgstr "Economic Maps (historic)"
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr "Scan of ´Economic maps´ ca 1950-1980"
+
+msgid "Snowmobile map Sweden"
+msgstr "Snowmobile map Sweden"
+
+msgid "Snowmobile trails"
+msgstr "Snowmobile trails"
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr "Kanton Aargau 25cm (AGIS 2011)"
 
@@ -27923,7 +28214,7 @@ msgid "{0} on a node. Should be used on a way."
 msgstr "{0} på et punkt. Bør bruges på en vej."
 
 msgid "{0} on a node. Should be used on a way or relation."
-msgstr ""
+msgstr "{0} på et punkt. Bør bruges på en vej eller relation."
 
 msgid "{0} on a node. Should be drawn as an area."
 msgstr "{0} på et punkt. Bør tegnes som et område."
@@ -29098,19 +29389,19 @@ msgid "Importing..."
 msgstr "Importerer..."
 
 msgid "Shape is started incorrectly"
-msgstr ""
+msgstr "Form er startet forkert"
 
 msgid "Can''t load SVG diagram"
-msgstr ""
+msgstr "Kan ikke load SVG diagram"
 
 msgid "Can''t find root SVG element"
-msgstr ""
+msgstr "Kan ikke finde rod SVG element"
 
 msgid "Import primitives"
-msgstr ""
+msgstr "Import primitiver"
 
 msgid "Cannot find configuration file!"
-msgstr ""
+msgstr "Kan ikke finde konfigurationsfil!"
 
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr "DXF filer [ImportDxf udvidelse] (*.dxf)"
@@ -29513,15 +29804,12 @@ 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 "Open Mapillary layer"
+msgstr "Åben Mapillary lag"
 
 msgid "Mapillary"
 msgstr "Mapillary"
 
-msgid "Create Mapillary layer"
-msgstr "Opret Mapillary lag"
-
 msgid "Download Mapillary images in current view"
 msgstr "Download Mapillary billeder i den aktuelle visning"
 
@@ -29584,15 +29872,9 @@ msgstr ""
 "denne meddelelse vises for første gang, så prøv igen. Der kan have været et "
 "problem med internetforbindelsen."
 
-msgid "Upload pictures"
-msgstr "Upload billeder"
-
-msgid "Upload Mapillary pictures"
+msgid "Upload Mapillary images"
 msgstr "Upload Mapillary billeder"
 
-msgid "Upload pictures."
-msgstr "Upload billeder."
-
 msgid "Walk mode"
 msgstr "Gå tilstand"
 
@@ -29626,15 +29908,12 @@ msgstr "Eksporter valgte billeder"
 msgid "Rewrite imported images"
 msgstr "Genskriv importerede billeder"
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr "Vælg en mappe"
 
 msgid "Explore"
 msgstr "Filstyringsprogram"
 
-msgid "Select a directory"
-msgstr "Vælg en mappe"
-
 msgid "Speed limit"
 msgstr "Hastighedsbegrænsning"
 
@@ -29767,6 +30046,13 @@ msgstr "Forhåndsvis billeder når markør er over dets ikon"
 msgid "Cut off sequences at download bounds"
 msgstr "Afskær sekvenser ved download grænse"
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+"Ved åbning af Mapillary billede i webbrowser, vis sløringseditoren i stedet "
+"for billedviseren"
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr "Aktiver eksperimentelle beta-funktioner (muligvis ustabil)"
 
@@ -34556,6 +34842,11 @@ msgstr "Prøv igen"
 msgid "Unable to process file ''{0}'':"
 msgstr "Kan ikke behandle fil ''{0}'':"
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+"Skriver positionsoplysninger til billedfiler... Anslået tid tilbage: {0}"
+
 msgid "File could not be deleted!"
 msgstr "Fil kunne ikke slettes!"
 
@@ -36092,9 +36383,6 @@ msgstr "Eksporter trafikdata til SUMO netværks fil."
 msgid "SUMO Export"
 msgstr "SUMO eksport"
 
-msgid "Export"
-msgstr "Eksporter"
-
 msgid "AutoSave LiveData"
 msgstr "AutoGem LiveData"
 
@@ -38268,7 +38556,7 @@ msgstr[0] "Overskriv ''{0}'' tag {1} fra {2} med ny værdi ''{3}''?"
 msgstr[1] "Overskriv ''{0}'' tags {1} fra {2} med ny værdi ''{3}''?"
 
 msgid "Download from Sophox API"
-msgstr ""
+msgstr "Download fra Sophox API"
 
 msgid ""
 "Find places of education at least 2km, and at most 3km from the center of "
@@ -38277,7 +38565,7 @@ msgstr ""
 "Find uddannelsessteder mindst 2 km og højst 3 km fra centrum af udvælgelsen"
 
 msgid "Show/hide Sophox snippet list"
-msgstr ""
+msgstr "Vis/skjul Sophox uddragsliste"
 
 msgid "help"
 msgstr "hjælp"
diff --git a/i18n/po/de.po b/i18n/po/de.po
index 42b724f..f499f37 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-11-26 00:06+0100\n"
-"PO-Revision-Date: 2017-11-25 21:53+0000\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\n"
+"PO-Revision-Date: 2017-12-28 20:52+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-11-26 04:44+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:44+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: de\n"
 "X-Poedit-SearchPath-0: .\n"
 "X-Poedit-Basepath: /home/simon/src/josm.all/i18n\n"
@@ -1061,6 +1061,12 @@ msgid "Select if the data should be downloaded into a new layer"
 msgstr ""
 "Auswählen, ob die Daten in eine neue Ebene heruntergeladen werden sollen"
 
+msgid "Zoom to downloaded data"
+msgstr "Auf heruntergeladene Daten zoomen"
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr "Auswählen, um auf alle neu heruntergeladenen Daten zu zoomen."
+
 msgid "Download Location"
 msgstr "Ort herunterladen"
 
@@ -2481,6 +2487,37 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr "Bestätigung"
 
+msgid "Export GPX file starting from first member"
+msgstr "GPX-Datei exportieren, beginnend mit erstem Element"
+
+msgid "Export GPX file starting from last member"
+msgstr "GPX-Datei exportieren, beginnend mit letztem Element"
+
+msgid "Convert to GPX layer starting from first member"
+msgstr "In GPX-Ebene konvertieren, beginnend mit erstem Element"
+
+msgid "Convert to GPX layer starting from last member"
+msgstr "In GPX-Ebene konvertieren, beginnend mit letztem Element"
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+"Diese Relation rekursiv zu einer einzelnen GPX-Spur vereinfachen, beginnend "
+"mit dem ersten Element bzw. den ersten Elementen, fortlaufend bis zum "
+"letzten Element bzw. zu den letzten Elementen."
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+"Diese Relation rekursiv zu einer einzelnen GPX-Spur vereinfachen, beginnend "
+"mit dem letzten Element bzw. den letzten Elementen, fortlaufend bis zum "
+"ersten Element bzw. zu den ersten Elementen."
+
+msgid "Selected Relations"
+msgstr "Ausgewählte Relationen"
+
 msgid "List of recent relations"
 msgstr "Liste der neuesten Relationen"
 
@@ -3366,18 +3403,6 @@ msgstr "Die Revisions-Datei ''/REVISION'' fehlt."
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr "Konflikt mit Element \"{0}\" besteht bereits"
 
-msgid "Decimal Degrees"
-msgstr "Dezimalgrad"
-
-msgid "deg° min'' sec\""
-msgstr "Grad° Min\" Sek''"
-
-msgid "deg° min'' (Nautical)"
-msgstr "Grad° Min\" (nautisch)"
-
-msgid "Projected Coordinates"
-msgstr "Projizierte Koordinaten"
-
 msgctxt "compass"
 msgid "S"
 msgstr "S"
@@ -3394,9 +3419,21 @@ msgctxt "compass"
 msgid "E"
 msgstr "O"
 
+msgid "deg° min'' sec\""
+msgstr "Grad° Min\" Sek''"
+
+msgid "Decimal Degrees"
+msgstr "Dezimalgrad"
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr "Parsen als Koordinatenwert nicht möglich: ''{0}''"
 
+msgid "deg° min'' (Nautical)"
+msgstr "Grad° Min\" (nautisch)"
+
+msgid "Projected Coordinates"
+msgstr "Projizierte Koordinaten"
+
 msgid "Date of imagery: {0}"
 msgstr "Datum des Hintergrundbildes: {0}"
 
@@ -4761,16 +4798,16 @@ msgid "Way contains segment twice"
 msgstr "Linie enthält Abschnitt doppelt"
 
 msgid "Power lines"
-msgstr "Hochspannungsleitungen"
+msgstr "Stromleitungen"
 
 msgid ""
 "Checks for nodes in power lines that do not have a power=tower/pole tag."
 msgstr ""
-"Überprüft Punkte in Hochspannungsleitungen, welchen kein "
-"''power=tower/pole''-Merkmal zugeordnet wurde."
+"Überprüft Punkte in Stromleitungen, welchen kein ''power=tower/pole''-"
+"Merkmal zugeordnet wurde."
 
 msgid "Missing power tower/pole within power line"
-msgstr "Fehlender »power tower/pole« in der Überlandleitung"
+msgstr "Fehlender »power tower/pole« in der Stromleitung"
 
 msgid "Public Transport Route"
 msgstr "Öffentliche Verkehrsroute"
@@ -9088,12 +9125,6 @@ msgstr ""
 "starten.<br>Die Funktion kann auch manuell aus dem Dateimenü oder der "
 "Werkzeugleiste gestartet werden.</html>"
 
-msgid "Zoom to downloaded data"
-msgstr "Auf heruntergeladene Daten zoomen"
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr "Auswählen, um auf alle neu heruntergeladenen Daten zu zoomen."
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -10844,6 +10875,12 @@ msgstr "Metadaten "
 msgid "Load tile"
 msgstr "Kachel laden"
 
+msgid "Get tile status"
+msgstr "Kachelstatus abrufen"
+
+msgid "Force tile rendering"
+msgstr "Kachelerzeugung erzwingen"
+
 msgid "Failed to create tile source"
 msgstr "Fehler beim Erstellen der Kachelquelle"
 
@@ -10956,10 +10993,10 @@ msgstr "Name: {0}"
 msgid "Description: {0}"
 msgstr "Beschreibung: {0}"
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
-msgstr[0] "{0} Spur"
-msgstr[1] "{0} Spuren"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
+msgstr[0] "{0} Spur, {1} Spurabschnitte"
+msgstr[1] "{0} Spuren, {1} Spurabschnitte"
 
 msgid "Timespan"
 msgstr "Zeitraum"
@@ -10967,6 +11004,9 @@ msgstr "Zeitraum"
 msgid "Length"
 msgstr "Länge"
 
+msgid "Number of<br/>Segments"
+msgstr "Anzahl der<br/>Abschnitte"
+
 msgid "Length: {0}"
 msgstr "Länge: {0}"
 
@@ -10980,14 +11020,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] "{0} Wegpunkt"
 msgstr[1] "{0} Wegpunkte"
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
-msgstr[0] "{0} GPS-Spur, "
-msgstr[1] "{0} GPS-Spuren, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] "{0} Spur"
+msgstr[1] "{0} Spuren"
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
+msgstr[0] " ({0} Abschnitt)"
+msgstr[1] " ({0} Abschnitte)"
 
 msgid "Save GPX file"
 msgstr "GPX-Datei speichern"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr "Abschnitte aller Spuren sammeln und zu einer Spur vereinen."
+
+msgid "Combine tracks of this layer"
+msgstr "Spuren dieser Ebene vereinen."
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr "Mehrere Spurabschnitte einer Spur in mehrere Spuren aufteilen."
+
+msgid "Split track segments to tracks"
+msgstr "Spurabschnitte in Spuren aufspalten"
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr "Spuren dieser Ebene auf jeweils eine neue Ebene aufteilen."
+
+msgid "Split tracks to new layers"
+msgstr "Spuren auf neue Ebenen aufteilen"
+
 msgid "Id"
 msgstr "Id"
 
@@ -11031,6 +11094,20 @@ msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 "Versuche eine schreibgeschützte Daten-Ebene zur aktuellen Ebene zu machen"
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+"Versuche die Ebene mit Hintergrund-Hochladeprozess läuft zu löschen. Bitte "
+"warten Sie, bis der Hochladeprozess abgeschlossen ist."
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+"Ein Hintergrund-Hochladeprozess läuft bereits. Status kann nicht "
+"zurückgesetzt werden, bis der Hochladeprozess beendet ist."
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] "{0} Hinweis"
@@ -11381,29 +11458,20 @@ msgstr "Fehler bei Datei {0}"
 msgid "Display geotagged images"
 msgstr "Stelle georeferenzierte Bilder dar"
 
-msgid "Previous"
-msgstr "Vorheriges"
+msgid "Next"
+msgstr "Nächstes"
 
-msgid "Show previous Image"
-msgstr "Vorheriges Bild zeigen"
+msgid "Show next Image"
+msgstr "Nächstes Bild zeigen"
 
 msgid "Geoimage: {0}"
 msgstr "Geoimage: {0}"
 
-msgid "Remove photo from layer"
-msgstr "Photo aus Ebene entfernen"
-
-msgid "Delete File from disk"
-msgstr "Datei von der Festplatte löschen"
-
-msgid "Copy image path"
-msgstr "Bildpfad kopieren"
-
-msgid "Next"
-msgstr "Nächstes"
+msgid "Previous"
+msgstr "Vorheriges"
 
-msgid "Show next Image"
-msgstr "Nächstes Bild zeigen"
+msgid "Show previous Image"
+msgstr "Vorheriges Bild zeigen"
 
 msgid "Show first Image"
 msgstr "Erstes Bild zeigen"
@@ -11417,6 +11485,15 @@ msgstr "Anzeige zentrieren"
 msgid "Zoom best fit and 1:1"
 msgstr "Passend zoomen und 1:1"
 
+msgid "Remove photo from layer"
+msgstr "Photo aus Ebene entfernen"
+
+msgid "Delete File from disk"
+msgstr "Datei von der Festplatte löschen"
+
+msgid "Copy image path"
+msgstr "Bildpfad kopieren"
+
 msgid "Move dialog to the side pane"
 msgstr "Dialog in die Seitenleiste verschieben"
 
@@ -14953,11 +15030,11 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr "Gelöschter Punkt {0} ist Teil der Linie {1}"
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
-"Die Linie {0} mit {1} Punkten enthält unvollständige Punkte, weil mindestens "
-"ein Punkt nicht in den geladenen Daten enthalten war."
+"Linie {0} mit {1} Punkten ist unvollständig weil mindestens ein Punkt in den "
+"geladenen Daten fehlt."
 
 msgid ""
 "Relation with external id ''{0}'' refers to a missing primitive with "
@@ -15726,6 +15803,12 @@ msgstr "Die Fernsteuerung wurde aufgefordert, eine lokale Datei zu öffnen."
 msgid "Do you want to allow this?"
 msgstr "Soll dies erlaubt werden?"
 
+msgid "Yes, always"
+msgstr "Ja, immer"
+
+msgid "Yes, once"
+msgstr "Ja, nur einmal"
+
 msgid "Confirm Remote Control action"
 msgstr "Fernsteuerungsaktion bestätigen"
 
@@ -18523,7 +18606,7 @@ msgid "Oneway for bicycle"
 msgstr "Einbahn für Fahrrad"
 
 msgid "Living Street"
-msgstr "Spielstraße"
+msgstr "Verkehrsberuhigter Bereich (Spielstraße)"
 
 msgid "Pedestrian"
 msgstr "Fußgängerzone"
@@ -21465,6 +21548,12 @@ msgstr "Abfall"
 msgid "Recycling Centre"
 msgstr "Recyclingzentrum"
 
+msgid "trash"
+msgstr "Müll"
+
+msgid "dog_excrement"
+msgstr "Hundekot"
+
 msgid "Waste Disposal/Dumpster"
 msgstr "Abfallentsorgung/Müllcontainer"
 
@@ -22593,7 +22682,7 @@ msgid "abutment"
 msgstr "Widerlager"
 
 msgid "lift_pier"
-msgstr "Endportal"
+msgstr "Hubpfeiler"
 
 msgid "pivot_pier"
 msgstr "Drehpfeiler"
@@ -25479,6 +25568,12 @@ msgstr "Öffentlicher Personennahverkehr (ÖPNV)"
 msgid "Hike & Bike"
 msgstr "Hike & Bike"
 
+msgid "OpenSnowMap overlay"
+msgstr "OpenSnowMap-Einblendung"
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr "Einblendung für Pisten-Kartierung in OSM. Täglich aktualisiert."
+
 msgid "skobbler"
 msgstr "skobbler"
 
@@ -25817,8 +25912,11 @@ msgstr "Basiskarte von Österreich, basierend auf Regierungsdaten."
 msgid "basemap.at Orthofoto"
 msgstr "basemap.at Orthofoto"
 
-msgid "Orthofoto layer provided by basemap.at. "
-msgstr "Orthofoto-Ebene bereitgestellt von basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
+msgstr ""
+"Orthofoto-Ebene bereitgestellt von basemap.at. \"Nachfolger\" der "
+"geoimage.at-Bilder."
 
 msgid "Geoimage.at MaxRes"
 msgstr "Geoimage.at MaxRes"
@@ -26261,6 +26359,13 @@ msgstr "Estland Kataster (Maaamet)"
 msgid "Estonia Forestry (Maaamet)"
 msgstr "Estland Forstwirtschaft (Maaamet)"
 
+msgid "Nordic snowmobile overlay"
+msgstr "Nordische Schneemobil-Einblendung"
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+"Kelkkareitit.fi Schneemobilrouten von OSM (Nordische Gebiets-Abdeckung)"
+
 msgid "BANO"
 msgstr "BANO (Französische Adressen unter offener Lizenz)"
 
@@ -26348,9 +26453,6 @@ msgid ""
 msgstr ""
 "Vercors - Naturschutzgebiet Hochland von Vercors - Orthofotos 1999 - 1 m"
 
-msgid "Hamburg (40 cm)"
-msgstr "Hamburg (40 cm)"
-
 msgid "Hamburg (20 cm)"
 msgstr "Hamburg (20 cm)"
 
@@ -26378,12 +26480,12 @@ 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"
-
 msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr "Deutsche Bahn VzG-Linien Nov. 2015"
 
+msgid "Deutsche Bahn VzG lines January 2017"
+msgstr "Deutsche Bahn VzG Linien Januar 2017"
+
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
 msgstr "Erlangen Luftbild (2016 5,0 cm)"
 
@@ -26816,18 +26918,6 @@ msgstr "geoportail.lu alle Ebenen"
 msgid "geoportail.lu ortho latest"
 msgstr "geoportail.lu neueste Orthofotos"
 
-msgid "geoportail.lu ortho 2016"
-msgstr "geoportail.lu Orthofoto 2016"
-
-msgid "Luxembourg Inspire Railway"
-msgstr "Luxembourg Inspire Railway"
-
-msgid "Luxembourg Inspire Roads"
-msgstr "Luxembourg Inspire Roads"
-
-msgid "Luxembourg Inspire Water"
-msgstr "Luxemburg Inspire Water"
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Nigerdelta Okt 2012 Landsat"
 
@@ -26853,8 +26943,195 @@ msgstr "LINZ NZ Luftbilder"
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr "LINZ NZ Topo50 Gitterlose Karten"
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
-msgstr "Spitzbergen - Orthofoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr "Kartverket N50 topo"
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+"Topographische Karte N50, gleichwertig zu norwegischen 1:50.000 "
+"Papierkartenserien."
+
+msgid "Kartverket Hillshade overlay"
+msgstr "Kartverket Schummerungs-Einblendung"
+
+msgid "Hillshade for Norway"
+msgstr "Schummerung für Norwegen"
+
+msgid "Kartverket Nautical Charts"
+msgstr "Kartverket Seekarten"
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+"Norwegische Seekarte (enthält Spitzbergen und die Antarktis). "
+"Rasterdarstellung von Papierkarten. Zweiwöchentlich aktuallisiert."
+
+msgid "Kartverket Road Network overlay"
+msgstr "Kartverket Straßennetz-Einblendung"
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+"Norwegisches Straßennetz aus der Nationalen Straßendatenbank (NVDB), auch in "
+"Vbase and Elveg genutzt. Die Farben stellen Staats-, Kreis-, Orts-, private "
+"Straßen, Waldwege und Fuß-/Radwege dar."
+
+msgid "Kartverket Trails overlay"
+msgstr "Kartverket Wege-Einblendung"
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+"Wege der  norwegischen Datenbank `Tur og Friluftsruter´. Auswählbare "
+"Kategorien für Fuß-, Fahrrad- und Skiwege."
+
+msgid "Kartverket Place Names overlay"
+msgstr "Kartverket (Norwegische Kartographiebehörde) Ortsnameneinblendung"
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+"Offizielle norwegische Ortsnamen aus der SSR-Datenbank. Wählbare Kategorien."
+
+msgid "MTBmap.no"
+msgstr "MTBmap.no"
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+"Norwegische Mountainbikekarte von OSM (maximaler Zoom 14-16, variiert je "
+"nach Region)"
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr "Kartverket DTM Digitales Geländemodell"
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+"Schummerungsdarstellung von offenen norwegischen digitalen Geländemodell- "
+"(DTM) Projekten, d.h. Erdoberfläche ohne Bäume, Gebäude und anderen "
+"Objekten. Um das Projektjahr zu ermitteln bitte hoydedata.no besuchen."
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr "Kartverket DOM Digitales Oberflächenmodell"
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+"Schummerungsdarstellung von offenen norwegischen digitalen Oberflächenmodell-"
+" (DOM) Projekten, d.h. Erdoberfläche mit Bäumen, Gebäuden und anderen "
+"Objekten auf der Erdoberfläche. Um das Projektjahr zu ermitteln bitte "
+"hoydedata.no besuchen."
+
+msgid "Kartverket Historic maps"
+msgstr "Kartverket historische Karten"
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr "Historische Karten - einstweilen `Amtskartserien´ 1826-1917."
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr "Kartverket Wirtschaftskarten (historisch)"
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+"1. Ausgabe historischer Wirtschafts-Karten von Norwegen 1960er bis  90er "
+"(„Økonomisk kartverk“). Verfügbar ab Zoomstufe 16. Bitte den lokalen Versatz "
+"der Hintergrundebene korrigieren."
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+"Kartverket (Norwegische Kartographiebehörde) Verwaltungsgrenzen-Einblendung"
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+"Offizielle administrative Grenzen auf nationaler Ebene, Bezirksebene und "
+"kommunaler Ebene"
+
+msgid "Kartverket Cadastral overlay"
+msgstr "Kartverket Katastereinblendung"
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+"Grundstücksgrenzen des offiziellen Landregisters  (`matrikkelen´). "
+"Monatliche Aktualisierung."
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr "Kartverket Luftfahrt-Hindernis-Einblendung"
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+"Vertikale Hindernisse für Flugzeuge, über 15m in ländlichen Gebieten und 30m "
+"in städtischen Gebieten (z.B. Masten, Türme, Hochhäuser, Stromleitungen)"
+
+msgid "NVE Electricity Network overlay"
+msgstr "NVE Elektrizitätsnetz-Einblendung"
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+"Stromleitungen (Hochspannungsnetz) einschließlich Transformatoren, Seekabeln "
+"und Masten. Lokales Verteilungsnetz ist nicht enthalten."
+
+msgid "NVE Hydropower Plants overlay"
+msgstr "NVE Wasserkraftwerke-Einblendung"
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+"Wasserkraftwerke inklusive Wasserwege (Tunnel, Kanal, Pipeline) und Dämme"
+
+msgid "NVE Wind Power Plants overlay"
+msgstr "NVE Widnkraftwerke-Einblendung"
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+"Windkraftanlagen, Windfarmen und genehmigte Gebiete. Rote Farbe = "
+"Genehmigung verweigert."
+
+msgid "NPD Offshore Installations overlay"
+msgstr "NPD Anlagen auf offener See Einblendung"
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+"Förderplattformen und Erdöl-/Erdgasfelder auf dem norwegischen Festlandsockel"
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr "Einblendung der Schutzgebiete des Norwgischen Umweltministeriums"
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+"Norwegische Nationalparks, Naturreservate und andere geschützte Bereiche und "
+"Objekte von Naturbase, inklusive Svalbard/Spitzbergen"
+
+msgid "NP Svalbard Orthophoto"
+msgstr "NP Orthophoto Spitzbergen"
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
+msgstr "Orthophoto von Spitzbergen vom Norwegischen Polar Institut"
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
 msgstr "imagico.de OSM-Bilder zum Kartieren: Spitzbergen-Mosaik"
@@ -26927,11 +27204,11 @@ msgstr "Schlechte und veraltete Bilder bei anderen Quellen (Echtfarben)"
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr "Pangasinán/Bulacan (Philippinen hochaufgelöst)"
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
-msgstr "Geoportal 2: Luftbild"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
+msgstr "Geoportal 2: Orthofoto"
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
-msgstr "Geoportal 2: Luftbild WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
+msgstr "Geoportal 2: Orthofoto WMTS"
 
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr "Geoportal 2: PRNG (Geonamen)"
@@ -26939,119 +27216,128 @@ msgstr "Geoportal 2: PRNG (Geonamen)"
 msgid "Geoportal 2: ISOK hillshade"
 msgstr "Geoportal 2: ISOK-Schummerung"
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
-msgstr "Bendzin: Luftbild 2013"
+msgid "polska.e-mapa.net: Buildings"
+msgstr "polska.e-mapa.net: Gebäude"
+
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
+msgstr "Będzin: Orthofoto 2013"
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Buildings"
 msgstr "Będzin: Gebäude"
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
-msgstr "Beuthen: Luftbild 2012"
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
+msgstr "Bytom: Orthofoto 2012"
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr "Beuthen: Fotoplan 2014 (Luftbild)"
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
 msgstr "Bytom: Gebäude"
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Chorzów: Buildings"
 msgstr "Chorzów: Gebäude"
 
-msgid "Częstochowa: Budynki (buildings)"
-msgstr "Tschenstochau: Gebäude (buildings)"
+msgid "Częstochowa: Buildings"
+msgstr "Częstochowa: Gebäude"
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
-msgstr "Tschenstochau: Luftbild 2011"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
+msgstr "Częstochowa: Orthofoto 2011"
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
-msgstr "Tschenstochau: Luftbild 2013"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
+msgstr "Częstochowa: Orthofoto 2013"
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
-msgstr "Tschenstochau: Luftbild 2014"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
+msgstr "Częstochowa: Orthofoto 2014"
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
-msgstr "Gleiwitz: Luftbild 2013"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
+msgstr "Gliwice: Orthofoto 2013"
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Gliwice: Buildings"
 msgstr "Gliwice: Gebäude"
 
-msgid "Katowice: Ortofotomapa (aerial image)"
-msgstr "Kattowitz: Luftbild"
+msgid "Katowice: Orthophotomap (aerial image)"
+msgstr "Katowice: Orthofoto"
 
-msgid "Katowice: Budynki (buildings)"
-msgstr "Kattowitz: Gebäude (buildings)"
+msgid "Katowice: Buildings"
+msgstr "Katowice: Gebäude"
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr "Łódź: Gebäude"
 
-msgid "Łódź: Ortofotomapa (aerial image)"
-msgstr "Lodz: Luftbild"
+msgid "Łódź: Orthophotomap (aerial image)"
+msgstr "Łódź: Orthofoto"
 
-msgid "Powiat dębicki: Budynki (buildings)"
-msgstr "Landkreis Dębicki: Gebäude"
+msgid "Powiat dębicki: Buildings"
+msgstr "Powiat dębicki: Gebäude"
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
-msgstr "Landkreis Lubaczowski: Gebäude"
+msgid "Powiat lubaczowski: Buildings"
+msgstr "Powiat lubaczowski: Gebäude"
 
-msgid "Powiat łańcucki: Budynki (buildings)"
-msgstr "Landkreis Łańcucki: Gebäude"
+msgid "Powiat łańcucki: Buildings"
+msgstr "Powiat łańcucki: Gebäude"
 
-msgid "Powiat poznański: Budynki (buildings)"
-msgstr "Landkreis Poznański: Gebäude"
+msgid "Powiat poznański: Buildings"
+msgstr "Powiat poznański: Gebäude"
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
-msgstr "Landkreis Posen: Luftbild"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
+msgstr "Powiat poznański: Orthofoto"
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
-msgstr "Powiat ropczycko-sędziszowski: Budynki (Gebäude)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
+msgstr "Powiat ropczycko-sędziszowski: Gebäude"
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
-msgstr "Landkreis Rzeszowski: Gebäude"
+msgid "Powiat rzeszowski: Buildings"
+msgstr "Powiat rzeszowski: Gebäude"
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
-msgstr "Landkreis Rzeszowski: Luftbild"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
+msgstr "Powiat rzeszowski: Orthofoto"
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
-msgstr "Landkreis Stalowowolski: Gebäude"
+msgid "Powiat stalowowolski: Buildings"
+msgstr "Powiat stalowowolski: Gebäude"
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
-msgstr "Posen: Luftbild 2014"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
+msgstr "Poznań: Orthofoto 2014"
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Buildings"
 msgstr "Przemyśl: Gebäude"
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
-msgstr "Premissel: Luftbild"
+msgid "Przemyśl: Ortophotomap (aerial image)"
+msgstr "Przemyśl: Orthofoto"
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
-msgstr "Ruda: Luftbild"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
+msgstr "Ruda Śląska: Orthofoto"
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
-msgstr "Rzeszów: Luftbild"
+msgid "Rzeszów: Orthophotomap (aerial image)"
+msgstr "Rzeszów: Orthofoto"
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Rzeszów: Buildings"
 msgstr "Rzeszów: Gebäude"
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
-msgstr "Siemianowitz: Luftbild"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
+msgstr "Siemianowice Śląskie: Orthofoto"
+
+msgid "Siemianowice Śląskie: Buildings"
+msgstr "Siemianowice Śląskie: Gebäude"
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
-msgstr "Siemianowitz: Gebäude (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
+msgstr "Świętochłowice: Orthofoto 2008"
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
-msgstr "Schwientochlowitz: Luftbild 2008"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
+msgstr "Świętochłowice: Orthofoto 2009"
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
-msgstr "Schwientochlowitz: Luftbild 2009"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
+msgstr "Świętochłowice: Orthofoto 2012"
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
-msgstr "Schwientochlowitz: Luftbild 2012"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
+msgstr "Zabrze: Orthofoto 2011"
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
-msgstr "Hindenburg: Luftbild 2011"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
+msgstr "Wrocław: Orthofoto 2015"
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
-msgstr "Breslau: Luftbild 2015"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr "Orthofotos DGRF 2004-2006 (WMS)"
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
+msgstr "Orthofotos Litoral DGT 2014-2015 (WMS)"
 
 msgid "ScanEx IRS"
 msgstr "ScanEx IRS"
@@ -27198,6 +27484,18 @@ msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 "Ergänzung der unvollständigen Abdeckung in anderen Quellen (Echtfarben)"
 
+msgid "Economic Maps (historic)"
+msgstr "Wirtschaftskarten (historisch)"
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr "Scan der ´Economic maps´ ca 1950-1980"
+
+msgid "Snowmobile map Sweden"
+msgstr "Schneemobilkarte Schweden"
+
+msgid "Snowmobile trails"
+msgstr "Schneemobilwege"
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr "Kanton Aargau 25cm (AGIS 2011)"
 
@@ -30179,15 +30477,12 @@ 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 "Open Mapillary layer"
+msgstr "Mapillary-Einblendung öffnen"
 
 msgid "Mapillary"
 msgstr "Mapillary"
 
-msgid "Create Mapillary layer"
-msgstr "Mapillary-Ebene erstellen"
-
 msgid "Download Mapillary images in current view"
 msgstr "Mapillary-Bilder in aktueller Ansicht herunterladen"
 
@@ -30252,14 +30547,8 @@ msgstr ""
 "werden. Es kann sich um ein Problem mit der Internetverbindung gehandelt "
 "haben."
 
-msgid "Upload pictures"
-msgstr "Bilder hochladen"
-
-msgid "Upload Mapillary pictures"
-msgstr "Mapillary-Bilder hochladen"
-
-msgid "Upload pictures."
-msgstr "Bilder hochladen."
+msgid "Upload Mapillary images"
+msgstr "Bilder zu Mapillary hochladen"
 
 msgid "Walk mode"
 msgstr "Spaziergangmodus"
@@ -30294,15 +30583,12 @@ msgstr "Ausgewählte Bilder exportieren"
 msgid "Rewrite imported images"
 msgstr "Importierte Bilder neu schreiben"
 
-msgid "Select a folder"
-msgstr "Wählen Sie einen Ordner aus"
+msgid "Select a directory"
+msgstr "Wählen Sie ein Verzeichnis aus"
 
 msgid "Explore"
 msgstr "Erkunden"
 
-msgid "Select a directory"
-msgstr "Wählen Sie ein Verzeichnis aus"
-
 msgid "Speed limit"
 msgstr "Geschwindigkeitsbegrenzung"
 
@@ -30436,6 +30722,13 @@ msgstr "Beim Überfahren des Symbols Vorschaubilder anzeigen"
 msgid "Cut off sequences at download bounds"
 msgstr "Schneide Sequenzen an den Herunterladegrenzen ab"
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+"Beim Öffnen eines Mapillary Bildes im Webbrowser den Unschärfe-Editor "
+"anstelle des Bildbetrachters anzeigen"
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr "Experimentelle Beta-Funktionalität aktivieren (kann instabil sein)"
 
@@ -35336,6 +35629,10 @@ msgstr "Wiederholen"
 msgid "Unable to process file ''{0}'':"
 msgstr "Datei ''{0}'' kann nicht verarbeitet werden:"
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr "Datei konnte nicht gelöscht werden!"
 
@@ -36903,9 +37200,6 @@ msgstr "Verkehrsdaten in SUMO-Netzwerk-Datei exportieren."
 msgid "SUMO Export"
 msgstr "SUMO-Export"
 
-msgid "Export"
-msgstr "Exportieren"
-
 msgid "AutoSave LiveData"
 msgstr "Live-Daten automatisch speichern"
 
diff --git a/i18n/po/de_DE.po b/i18n/po/de_DE.po
index 8c349fc..f281f5d 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 05:12+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 05:09+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -961,6 +961,12 @@ msgstr "Separate Ebene"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "Auswählen, ob die Daten in eine neue Ebene geladen werden sollen"
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr ""
 
@@ -2233,6 +2239,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3036,18 +3067,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr ""
@@ -3064,9 +3083,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8240,12 +8271,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9739,6 +9764,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9843,8 +9874,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9854,6 +9885,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9867,14 +9901,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr ""
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9917,6 +9974,16 @@ msgstr ""
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10245,40 +10312,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13365,8 +13432,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14029,6 +14096,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19460,6 +19533,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23435,6 +23514,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23755,7 +23840,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24178,6 +24264,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24264,9 +24356,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24294,10 +24383,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24696,18 +24785,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24731,7 +24808,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24793,10 +25020,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24805,118 +25032,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25053,6 +25289,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27581,15 +27829,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27648,13 +27893,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27690,15 +27929,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27831,6 +28067,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32261,6 +32502,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33741,9 +33986,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/el.po b/i18n/po/el.po
index a4cbc59..afc76af 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 04:46+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:45+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: el\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1041,6 +1041,12 @@ msgstr "Ξεχωριστό Επίπεδο"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "Επιλέξτε αν τα δεδομένα πρέπει να ληφθούν σε νέο επίπεδο"
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr "Προορισμός Λήψης"
 
@@ -2383,6 +2389,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3205,18 +3236,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr "Δεκαδικές Μοίρες"
-
-msgid "deg° min'' sec\""
-msgstr "μοι° λεπ'' δευ\""
-
-msgid "deg° min'' (Nautical)"
-msgstr "μοι° λεπ'' (Ναυτικά)"
-
-msgid "Projected Coordinates"
-msgstr "Προβεβλημένες Συντεταγμένες"
-
 msgctxt "compass"
 msgid "S"
 msgstr "Ν"
@@ -3233,9 +3252,21 @@ msgctxt "compass"
 msgid "E"
 msgstr "Α"
 
+msgid "deg° min'' sec\""
+msgstr "μοι° λεπ'' δευ\""
+
+msgid "Decimal Degrees"
+msgstr "Δεκαδικές Μοίρες"
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr "μοι° λεπ'' (Ναυτικά)"
+
+msgid "Projected Coordinates"
+msgstr "Προβεβλημένες Συντεταγμένες"
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8492,12 +8523,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -10048,6 +10073,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -10155,10 +10186,10 @@ msgstr "Όνομα: {0}"
 msgid "Description: {0}"
 msgstr "Περιγραφή: {0}"
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
-msgstr[0] "{0} ίχνος"
-msgstr[1] "{0} ίχνη"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Timespan"
 msgstr ""
@@ -10166,6 +10197,9 @@ msgstr ""
 msgid "Length"
 msgstr "Μήκος"
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr "Μήκος: {0}"
 
@@ -10179,14 +10213,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] "{0} σημείο αναφοράς"
 msgstr[1] "{0} σημεία αναφοράς"
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
-msgstr[0] "{0} τροχιά, "
-msgstr[1] "{0} τροχιές, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] "{0} ίχνος"
+msgstr[1] "{0} ίχνη"
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr "Αποθήκευση αρχείου GPX"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr "Ταυτότητα"
 
@@ -10229,6 +10286,16 @@ msgstr "Αποθήκευση Επιπέδου"
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10557,29 +10624,20 @@ msgstr "Σφάλμα στο αρχείο {0}"
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
-msgstr "Προηγούμενο"
+msgid "Next"
+msgstr "Επόμενο"
 
-msgid "Show previous Image"
-msgstr "Εμφάνιση προηγούμενης εικόνας"
+msgid "Show next Image"
+msgstr "Εμφάνιση επόμενης εικόνας"
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
-msgstr "Αφαίρεση φωτογραφίας από επίπεδο"
-
-msgid "Delete File from disk"
-msgstr "Διαγραφή αρχείου από τον δίσκο"
-
-msgid "Copy image path"
-msgstr ""
-
-msgid "Next"
-msgstr "Επόμενο"
+msgid "Previous"
+msgstr "Προηγούμενο"
 
-msgid "Show next Image"
-msgstr "Εμφάνιση επόμενης εικόνας"
+msgid "Show previous Image"
+msgstr "Εμφάνιση προηγούμενης εικόνας"
 
 msgid "Show first Image"
 msgstr ""
@@ -10593,6 +10651,15 @@ msgstr "Κεντράρισμα επιπέδου"
 msgid "Zoom best fit and 1:1"
 msgstr ""
 
+msgid "Remove photo from layer"
+msgstr "Αφαίρεση φωτογραφίας από επίπεδο"
+
+msgid "Delete File from disk"
+msgstr "Διαγραφή αρχείου από τον δίσκο"
+
+msgid "Copy image path"
+msgstr ""
+
 msgid "Move dialog to the side pane"
 msgstr ""
 
@@ -13718,8 +13785,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14389,6 +14456,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr "Θέλετε να το επιτρέψετε;"
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr "Επιβεβαίωση ενέργειας Τηλεχειρισμού"
 
@@ -19841,6 +19914,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23816,6 +23895,12 @@ msgstr "Δημόσια συγκοινωνία (ÖPNV)"
 msgid "Hike & Bike"
 msgstr "Ορειβασία & ποδήλατο"
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr "skobbler"
 
@@ -24136,7 +24221,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24559,6 +24645,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24645,9 +24737,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24675,10 +24764,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -25077,18 +25166,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -25112,7 +25189,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -25174,10 +25401,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -25186,118 +25413,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
+msgstr ""
+
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25434,6 +25670,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27964,15 +28212,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -28031,13 +28276,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -28073,15 +28312,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -28214,6 +28450,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32666,6 +32907,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -34149,9 +34394,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/en_AU.po b/i18n/po/en_AU.po
index de735c9..d6f0b3f 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 05:10+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 05:07+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1021,6 +1021,12 @@ msgstr "Separate Layer"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "Select if the data should be downloaded into a new layer"
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr "Download Location"
 
@@ -2393,6 +2399,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr "Confirmation"
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3252,18 +3283,6 @@ msgstr "The revision file ''/REVISION'' is missing."
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr "already registered a conflict for primitive ''{0}''"
 
-msgid "Decimal Degrees"
-msgstr "Decimal Degrees"
-
-msgid "deg° min'' sec\""
-msgstr "deg° min'' sec\""
-
-msgid "deg° min'' (Nautical)"
-msgstr "deg° min'' (Nautical)"
-
-msgid "Projected Coordinates"
-msgstr "Projected Coordinates"
-
 msgctxt "compass"
 msgid "S"
 msgstr "S"
@@ -3280,9 +3299,21 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
+msgid "deg° min'' sec\""
+msgstr "deg° min'' sec\""
+
+msgid "Decimal Degrees"
+msgstr "Decimal Degrees"
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr "deg° min'' (Nautical)"
+
+msgid "Projected Coordinates"
+msgstr "Projected Coordinates"
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8715,12 +8746,6 @@ msgstr ""
 "<html>Autostart ''Download from OSM'' dialogue every time JOSM is "
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -10359,6 +10384,12 @@ msgstr "Metadata "
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -10463,10 +10494,10 @@ msgstr "Name: {0}"
 msgid "Description: {0}"
 msgstr "Description: {0}"
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
-msgstr[0] "{0} track"
-msgstr[1] "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Timespan"
 msgstr "Timespan"
@@ -10474,6 +10505,9 @@ msgstr "Timespan"
 msgid "Length"
 msgstr "Length"
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr "Length: {0}"
 
@@ -10487,14 +10521,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] "{0} waypoint"
 msgstr[1] "{0} waypoints"
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
-msgstr[0] "{0} track, "
-msgstr[1] "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] "{0} track"
+msgstr[1] "{0} tracks"
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr "Save GPX file"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -10537,6 +10594,16 @@ msgstr "Save Layer"
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10880,29 +10947,20 @@ msgstr "Error on file {0}"
 msgid "Display geotagged images"
 msgstr "Display geotagged images"
 
-msgid "Previous"
-msgstr "Previous"
+msgid "Next"
+msgstr "Next"
 
-msgid "Show previous Image"
-msgstr "Show previous Image"
+msgid "Show next Image"
+msgstr "Show next Image"
 
 msgid "Geoimage: {0}"
 msgstr "Geoimage: {0}"
 
-msgid "Remove photo from layer"
-msgstr "Remove photo from layer"
-
-msgid "Delete File from disk"
-msgstr "Delete File from disk"
-
-msgid "Copy image path"
-msgstr "Copy image path"
-
-msgid "Next"
-msgstr "Next"
+msgid "Previous"
+msgstr "Previous"
 
-msgid "Show next Image"
-msgstr "Show next Image"
+msgid "Show previous Image"
+msgstr "Show previous Image"
 
 msgid "Show first Image"
 msgstr "Show first Image"
@@ -10916,6 +10974,15 @@ msgstr "Centre view"
 msgid "Zoom best fit and 1:1"
 msgstr "Zoom best fit and 1:1"
 
+msgid "Remove photo from layer"
+msgstr "Remove photo from layer"
+
+msgid "Delete File from disk"
+msgstr "Delete File from disk"
+
+msgid "Copy image path"
+msgstr "Copy image path"
+
 msgid "Move dialog to the side pane"
 msgstr "Move dialogue to the side pane"
 
@@ -14202,11 +14269,9 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr "Deleted node {0} is part of way {1}"
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
 
 msgid ""
 "Relation with external id ''{0}'' refers to a missing primitive with "
@@ -14891,6 +14956,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr "Do you want to allow this?"
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr "Confirm Remote Control action"
 
@@ -20391,6 +20462,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -24366,6 +24443,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -24686,7 +24769,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -25109,6 +25193,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -25195,9 +25285,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -25225,10 +25312,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -25627,18 +25714,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -25662,7 +25737,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -25724,10 +25949,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -25736,118 +25961,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
+msgstr ""
+
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25984,6 +26218,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -28543,15 +28789,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -28610,13 +28853,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -28652,15 +28889,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -28793,6 +29027,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -33279,6 +33518,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr "File could not be deleted!"
 
@@ -34763,9 +35006,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr "AutoSave LiveData"
 
diff --git a/i18n/po/en_CA.po b/i18n/po/en_CA.po
index 8af58de..8a52ee1 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 05:12+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 05:09+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -959,6 +959,12 @@ msgstr "Separate Layer"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "Select if the data should be downloaded into a new layer"
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr ""
 
@@ -2231,6 +2237,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3034,18 +3065,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr ""
@@ -3062,9 +3081,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8237,12 +8268,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9736,6 +9761,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9840,8 +9871,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9851,6 +9882,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9864,14 +9898,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr ""
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9914,6 +9971,16 @@ msgstr ""
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10242,40 +10309,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13362,8 +13429,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14026,6 +14093,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19454,6 +19527,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23429,6 +23508,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23749,7 +23834,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24172,6 +24258,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24258,9 +24350,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24288,10 +24377,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24690,18 +24779,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24725,7 +24802,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24787,10 +25014,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24799,118 +25026,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25047,6 +25283,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27575,15 +27823,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27642,13 +27887,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27684,15 +27923,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27825,6 +28061,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32251,6 +32492,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33731,9 +33976,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/en_GB.po b/i18n/po/en_GB.po
index c52de1e..bdc6e58 100644
--- a/i18n/po/en_GB.po
+++ b/i18n/po/en_GB.po
@@ -10,16 +10,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: JOSM\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-11-26 00:06+0100\n"
-"PO-Revision-Date: 2017-11-23 11:29+0000\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\n"
+"PO-Revision-Date: 2017-12-29 14:58+0000\n"
 "Last-Translator: Andi Chandler <Unknown>\n"
 "Language-Team: German <josm-dev at openstreetmap.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2017-11-26 05:10+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 05:07+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: de\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1024,6 +1024,12 @@ msgstr "Separate Layer"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "Select if the data should be downloaded into a new layer"
 
+msgid "Zoom to downloaded data"
+msgstr "Zoom to downloaded data"
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr "Select to zoom to entire newly downloaded data."
+
 msgid "Download Location"
 msgstr "Download Location"
 
@@ -2400,6 +2406,35 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr "Confirmation"
 
+msgid "Export GPX file starting from first member"
+msgstr "Export GPX file starting from first member"
+
+msgid "Export GPX file starting from last member"
+msgstr "Export GPX file starting from last member"
+
+msgid "Convert to GPX layer starting from first member"
+msgstr "Convert to GPX layer starting from first member"
+
+msgid "Convert to GPX layer starting from last member"
+msgstr "Convert to GPX layer starting from last member"
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+"Flatten this relation to a single GPX track recursively, starting with the "
+"first member(s), successively continuing to the last."
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+"Flatten this relation to a single GPX track recursively, starting with the "
+"last member(s), successively continuing to the first."
+
+msgid "Selected Relations"
+msgstr "Selected Relations"
+
 msgid "List of recent relations"
 msgstr "List of recent relations"
 
@@ -3259,18 +3294,6 @@ msgstr "The revision file ''/REVISION'' is missing."
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr "already registered a conflict for primitive ''{0}''"
 
-msgid "Decimal Degrees"
-msgstr "Decimal Degrees"
-
-msgid "deg° min'' sec\""
-msgstr "deg° min'' sec\""
-
-msgid "deg° min'' (Nautical)"
-msgstr "deg° min'' (Nautical)"
-
-msgid "Projected Coordinates"
-msgstr "Projected Coordinates"
-
 msgctxt "compass"
 msgid "S"
 msgstr "S"
@@ -3287,9 +3310,21 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
+msgid "deg° min'' sec\""
+msgstr "deg° min'' sec\""
+
+msgid "Decimal Degrees"
+msgstr "Decimal Degrees"
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr "Unable to parse as coordinate value: ''{0}''"
 
+msgid "deg° min'' (Nautical)"
+msgstr "deg° min'' (Nautical)"
+
+msgid "Projected Coordinates"
+msgstr "Projected Coordinates"
+
 msgid "Date of imagery: {0}"
 msgstr "Date of imagery: {0}"
 
@@ -3774,7 +3809,7 @@ msgid "Failed to create missing user data directory: {0}"
 msgstr "Failed to create missing user data directory: {0}"
 
 msgid "<html>Failed to create missing user data directory: {0}</html>"
-msgstr ""
+msgstr "<html>Failed to create missing user data directory: {0}</html>"
 
 msgid "Failed to create missing cache directory: {0}"
 msgstr "Failed to create missing cache directory: {0}"
@@ -3887,10 +3922,10 @@ msgid "Checks for errors on relations"
 msgstr "Checks for errors on relations"
 
 msgid "Territories"
-msgstr ""
+msgstr "Territories"
 
 msgid "Checks for territories-specific features"
-msgstr ""
+msgstr "Checks for territories-specific features"
 
 msgid "Unnecessary tags"
 msgstr "Unnecessary tags"
@@ -3981,48 +4016,54 @@ msgid "Custom Projection"
 msgstr "Custom Projection"
 
 msgid "Error: {0}"
-msgstr ""
+msgstr "Error: {0}"
 
 msgid "JOSM projection command line interface"
-msgstr ""
+msgstr "JOSM projection command line interface"
 
 msgid "Description"
 msgstr "Description"
 
 msgid "Converts coordinates from one coordinate reference system to another."
 msgstr ""
+"Converts coordinates from one coordinate reference system to another."
 
 msgid "Options"
-msgstr ""
+msgstr "Options"
 
 msgid "Show this help"
 msgstr "Show this help"
 
 msgid "Switch input and output crs"
-msgstr ""
+msgstr "Switch input and output crs"
 
 msgid "Switch order of input coordinates (east/north, lon/lat)"
-msgstr ""
+msgstr "Switch order of input coordinates (east/north, lon/lat)"
 
 msgid "Switch order of output coordinates (east/north, lon/lat)"
-msgstr ""
+msgstr "Switch order of output coordinates (east/north, lon/lat)"
 
 msgid "<crs>"
-msgstr ""
+msgstr "<crs>"
 
 msgid ""
 "The format for input and output coordinate reference system is similar to "
 "that of the PROJ.4 software."
 msgstr ""
+"The format for input and output coordinate reference system is similar to "
+"that of the PROJ.4 software."
 
 msgid "[file]"
-msgstr ""
+msgstr "[file]"
 
 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 ""
+"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."
 
 msgid "Examples"
 msgstr "Examples"
@@ -4030,9 +4071,10 @@ msgstr "Examples"
 msgid ""
 "Expected two coordinates, separated by white space, found {0} in ''{1}''"
 msgstr ""
+"Expected two coordinates, separated by white space, found {0} in ''{1}''"
 
 msgid "Unable to parse number ''{0}''"
-msgstr ""
+msgstr "Unable to parse number ''{0}''"
 
 msgid "GRS80"
 msgstr "GRS80"
@@ -4428,7 +4470,7 @@ msgid "Area style way is not closed"
 msgstr "Area style way is not closed"
 
 msgid "No outer way for boundary"
-msgstr ""
+msgstr "No outer way for boundary"
 
 msgid "No outer way for multipolygon"
 msgstr "No outer way for multipolygon"
@@ -4469,16 +4511,16 @@ msgid "Multipolygon is not closed"
 msgstr "Multipolygon is not closed"
 
 msgid "Self-intersecting polygon ring"
-msgstr ""
+msgstr "Self-intersecting polygon ring"
 
 msgid "Multipolygon rings share node(s)"
-msgstr ""
+msgstr "Multipolygon rings share node(s)"
 
 msgid "Intersection between multipolygon ways"
 msgstr "Intersection between multipolygon ways"
 
 msgid "Multipolygon rings are equal"
-msgstr ""
+msgstr "Multipolygon rings are equal"
 
 msgid "Role for ''{0}'' should be ''{1}''"
 msgstr "Role for ''{0}'' should be ''{1}''"
@@ -4487,16 +4529,16 @@ msgid "Multipolygon inner way is outside"
 msgstr "Multipolygon inner way is outside"
 
 msgid "Multipolygon ring contains segments twice"
-msgstr ""
+msgstr "Multipolygon ring contains segments twice"
 
 msgid "Multipolygon outer way shares segment(s) with other ring"
-msgstr ""
+msgstr "Multipolygon outer way shares segment(s) with other ring"
 
 msgid "No useful role for multipolygon member"
 msgstr "No useful role for multipolygon member"
 
 msgid "Non-Way in boundary"
-msgstr ""
+msgstr "Non-Way in boundary"
 
 msgid "Non-Way in multipolygon"
 msgstr "Non-Way in multipolygon"
@@ -4635,29 +4677,32 @@ msgstr "Relation is empty"
 msgid ""
 "Role of relation member does not match expression ''{0}'' in template {1}"
 msgstr ""
+"Role of relation member does not match expression ''{0}'' in template {1}"
 
 msgid ""
 "Type ''{0}'' of relation member with role ''{1}'' does not match accepted "
 "types ''{2}'' in template {3}"
 msgstr ""
+"Type ''{0}'' of relation member with role ''{1}'' does not match accepted "
+"types ''{2}'' in template {3}"
 
 msgid "<empty>"
 msgstr "<empty>"
 
 msgid "Role ''{0}'' unknown in templates ''{1}''"
-msgstr ""
+msgstr "Role ''{0}'' unknown in templates ''{1}''"
 
 msgid "Empty role type found when expecting one of ''{0}''"
-msgstr ""
+msgstr "Empty role type found when expecting one of ''{0}''"
 
 msgid "Role ''{0}'' missing"
-msgstr ""
+msgstr "Role ''{0}'' missing"
 
 msgid "Number of ''{0}'' roles too low ({1})"
-msgstr ""
+msgstr "Number of ''{0}'' roles too low ({1})"
 
 msgid "Number of ''{0}'' roles too high ({1})"
-msgstr ""
+msgstr "Number of ''{0}'' roles too high ({1})"
 
 msgid "Self-intersecting ways"
 msgstr "Self-intersecting ways"
@@ -5131,12 +5176,14 @@ msgid ""
 "You may face critical Java bugs; we highly recommend you to update to Java "
 "{0}."
 msgstr ""
+"You may face critical Java bugs; we highly recommend you to update to Java "
+"{0}."
 
 msgid "Would you like to update now ?"
 msgstr "Would you like to update now ?"
 
 msgid "Starting file watcher"
-msgstr ""
+msgstr "Starting file watcher"
 
 msgid "Executing platform startup hook"
 msgstr "Executing platform startup hook"
@@ -5148,7 +5195,7 @@ msgid "Updating user interface"
 msgstr "Updating user interface"
 
 msgid "Initializing internal boundaries data"
-msgstr ""
+msgstr "Initialising internal boundaries data"
 
 msgid "Initializing OSM API"
 msgstr "Initialising OSM API"
@@ -5157,7 +5204,7 @@ 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 ""
+msgstr "Initialising internal traffic data"
 
 msgid "Initializing validator"
 msgstr "Initialising validator"
@@ -5175,23 +5222,24 @@ msgid "usage"
 msgstr "usage"
 
 msgid "commands"
-msgstr ""
+msgstr "commands"
 
 msgid "launch JOSM (default, performed when no command is specified)"
-msgstr ""
+msgstr "launch JOSM (default, performed when no command is specified)"
 
 msgid "render data and save the result to an image file"
-msgstr ""
+msgstr "render data and save the result to an image file"
 
 msgid "convert coordinates from one coordinate reference system to another"
-msgstr ""
+msgstr "convert coordinates from one coordinate reference system to another"
 
 msgid ""
 "For details on the {0} and {1} commands, run them with the {2} option."
 msgstr ""
+"For details on the {0} and {1} commands, run them with the {2} option."
 
 msgid "The remainder of this help page documents the {0} command."
-msgstr ""
+msgstr "The remainder of this help page documents the {0} command."
 
 msgid "options"
 msgstr "options"
@@ -5249,7 +5297,7 @@ msgid "options provided as Java system properties"
 msgstr "options provided as Java system properties"
 
 msgid "Change the JOSM directory name"
-msgstr ""
+msgstr "Change the JOSM directory name"
 
 msgid "/PATH/TO/JOSM/PREF    "
 msgstr "/PATH/TO/JOSM/PREF    "
@@ -5258,7 +5306,7 @@ msgid "Set the preferences directory"
 msgstr "Set the preferences directory"
 
 msgid "Default: {0}"
-msgstr ""
+msgstr "Default: {0}"
 
 msgid "/PATH/TO/JOSM/USERDATA"
 msgstr "/PATH/TO/JOSM/USERDATA"
@@ -5279,6 +5327,8 @@ msgid ""
 "Set the preferences+data+cache directory (cache directory will be "
 "josm.home/cache)"
 msgstr ""
+"Set the preferences+data+cache directory (cache directory will be "
+"josm.home/cache)"
 
 msgid ""
 "-Djosm.home has lower precedence, i.e. the specific setting overrides the "
@@ -5640,10 +5690,10 @@ msgid " ({0})"
 msgstr " ({0})"
 
 msgid "<h2>Filter active: {0}</h2>"
-msgstr ""
+msgstr "<h2>Filter active: {0}</h2>"
 
 msgid "</p><p>Click again on filter button to see all objects.</p></html>"
-msgstr ""
+msgstr "</p><p>Click again on filter button to see all objects.</p></html>"
 
 msgid "Enlarge"
 msgstr "Enlarge"
@@ -5652,7 +5702,7 @@ msgid "Shrink"
 msgstr "Shrink"
 
 msgid "Show downloaded area"
-msgstr ""
+msgstr "Show downloaded area"
 
 msgid ""
 "<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
@@ -6209,7 +6259,7 @@ msgid "Primitive"
 msgstr "Primitive"
 
 msgid "Merged members not frozen yet. Cannot build resolution command"
-msgstr ""
+msgstr "Merged members not frozen yet. Cannot build resolution command"
 
 msgid "<undefined>"
 msgstr "<undefined>"
@@ -7615,7 +7665,7 @@ msgid "Update the changeset from the OSM server"
 msgstr "Update the changeset from the OSM server"
 
 msgid "View changeset"
-msgstr ""
+msgstr "View changeset"
 
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
@@ -8605,7 +8655,7 @@ msgstr ""
 "resolve this conflict first, then try again.</html>"
 
 msgid "Select the currently edited relation"
-msgstr ""
+msgstr "Select the currently edited relation"
 
 msgid "Select objects for selected relation members"
 msgstr "Select objects for selected relation members"
@@ -8677,7 +8727,7 @@ msgid "Wrong number of arguments for bookmark"
 msgstr "Wrong number of arguments for bookmark"
 
 msgid "Home location"
-msgstr ""
+msgstr "Home location"
 
 msgid "Error reading bookmark entry: %s"
 msgstr "Error reading bookmark entry: %s"
@@ -8719,7 +8769,7 @@ msgid "Rename the currently selected bookmark"
 msgstr "Rename the currently selected bookmark"
 
 msgid "Download bookmarks for my {0} last changesets"
-msgstr ""
+msgstr "Download bookmarks for my {0} last changesets"
 
 msgid "min lat"
 msgstr "min lat"
@@ -8775,12 +8825,6 @@ msgstr ""
 "<html>Autostart ''Download from OSM'' dialogue every time JOSM is "
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -8817,7 +8861,7 @@ msgid "Download referrers (parent relations and ways)"
 msgstr "Download referrers (parent relations and ways)"
 
 msgid "Download from OSM"
-msgstr ""
+msgstr "Download from OSM"
 
 msgid "Data Sources and Types:"
 msgstr "Data Sources and Types:"
@@ -8859,59 +8903,63 @@ msgid "Download area ok, size probably acceptable to server"
 msgstr "Download area ok, size probably acceptable to server"
 
 msgid "Download from Overpass API"
-msgstr ""
+msgstr "Download from Overpass API"
 
 msgid ""
 "Place your Overpass query below or generate one using the Overpass Turbo "
 "Query Wizard"
 msgstr ""
+"Place your Overpass query below or generate one using the Overpass Turbo "
+"Query Wizard"
 
 msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
-msgstr ""
+msgstr "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 
 msgid "Query Wizard"
-msgstr ""
+msgstr "Query Wizard"
 
 msgid "Your saved queries:"
-msgstr ""
+msgstr "Your saved queries:"
 
 msgid "Show/hide Overpass snippet list"
-msgstr ""
+msgstr "Show/hide Overpass snippet list"
 
 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 ""
+"You entered an empty query. Do you want to download all data in this area "
+"instead?"
 
 msgid "Download all data?"
-msgstr ""
+msgstr "Download all data?"
 
 msgid "Add new snippet"
-msgstr ""
+msgstr "Add new snippet"
 
 msgid "Delete selected snippet"
-msgstr ""
+msgstr "Delete selected snippet"
 
 msgid "Edit selected snippet"
-msgstr ""
+msgstr "Edit selected snippet"
 
 msgid "Overpass Turbo Query Wizard"
-msgstr ""
+msgstr "Overpass Turbo Query Wizard"
 
 msgid "Build query"
 msgstr "Build query"
 
 msgid "Build query and execute"
-msgstr ""
+msgstr "Build query and execute"
 
 msgid "Search :"
-msgstr ""
+msgstr "Search :"
 
 msgid "The Overpass wizard could not parse the following query:"
-msgstr ""
+msgstr "The Overpass wizard could not parse the following query:"
 
 msgid "Parse error"
 msgstr "Parse error"
@@ -8920,58 +8968,73 @@ msgid ""
 "Allows you to interact with <i>Overpass API</i> by writing declarative, "
 "human-readable terms."
 msgstr ""
+"Allows you to interact with <i>Overpass API</i> by writing declarative, "
+"human-readable terms."
 
 msgid ""
 "The <i>Query Wizard</i> tool will transform those to a valid overpass query."
 msgstr ""
+"The <i>Query Wizard</i> tool will transform those to a valid overpass query."
 
 msgid "For more detailed description see "
-msgstr ""
+msgstr "For more detailed description see "
 
 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 "Download objects of a certain type."
 
 msgid "Download object by specifying a specific location. For example,"
-msgstr ""
+msgstr "Download object by specifying a specific location. For example,"
 
 msgid "{0} all objects having {1} as attribute are downloaded."
-msgstr ""
+msgstr "{0} all objects having {1} as attribute are downloaded."
 
 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} 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."
 
 msgid ""
 "{0} all objects within the current selection that have {1} as attribute."
 msgstr ""
+"{0} all objects within the current selection that have {1} as attribute."
 
 msgid ""
 "Instead of <i>location</i> any valid place name can be used like address, "
 "city, etc."
 msgstr ""
+"Instead of <i>location</i> any valid place name can be used like address, "
+"city, 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>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>"
 
 msgid "<i>expression1 {0} expression2</i>"
-msgstr ""
+msgstr "<i>expression1 {0} expression2</i>"
 
 msgid ""
 "Basic logical operators can be used to create more sophisticated queries. "
 "Instead of \"or\" - \"|\", \"||\" can be used, and instead of \"and\" - "
 "\"&\", \"&&\"."
 msgstr ""
+"Basic logical operators can be used to create more sophisticated queries. "
+"Instead of \"or\" - \"|\", \"||\" can be used, and instead of \"and\" - "
+"\"&\", \"&&\"."
 
 msgid "Class Type"
 msgstr "Class Type"
@@ -9025,28 +9088,28 @@ msgid "history"
 msgstr "history"
 
 msgid "Please select an item first"
-msgstr ""
+msgstr "Please select an item first"
 
 msgid "Edit item"
-msgstr ""
+msgstr "Edit item"
 
 msgid "Add snippet"
-msgstr ""
+msgstr "Add snippet"
 
 msgid "Query cannot be empty"
-msgstr ""
+msgstr "Query cannot be empty"
 
 msgid "This name can be used for the item"
-msgstr ""
+msgstr "This name can be used for the item"
 
 msgid "Item with this name already exists"
-msgstr ""
+msgstr "Item with this name already exists"
 
 msgid "The item cannot be created with provided name"
-msgstr ""
+msgstr "The item cannot be created with provided name"
 
 msgid "The item cannot be created with an empty query"
-msgstr ""
+msgstr "The item cannot be created with an empty query"
 
 msgid "JOSM Help Browser"
 msgstr "JOSM Help Browser"
@@ -9199,10 +9262,10 @@ 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 ""
+msgstr "View changeset in web browser"
 
 msgid "Open {0}"
-msgstr ""
+msgstr "Open {0}"
 
 msgid "Way {0}"
 msgstr "Way {0}"
@@ -9214,7 +9277,7 @@ msgid "Object"
 msgstr "Object"
 
 msgid "Open Changeset Manager"
-msgstr ""
+msgstr "Open Changeset Manager"
 
 msgid "Changeset comment"
 msgstr "Changeset comment"
@@ -9277,7 +9340,7 @@ msgid "B"
 msgstr "B"
 
 msgid "Editor"
-msgstr ""
+msgstr "Editor"
 
 msgid ""
 "Failed to update primitive with id {0} because current edit layer is null"
@@ -9389,9 +9452,11 @@ msgid ""
 "A background upload is already in progress. Kindly wait for it to finish "
 "before uploading new changes"
 msgstr ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
 
 msgid "I would like someone to review my edits."
-msgstr ""
+msgstr "I would like someone to review my edits."
 
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "Provide a brief comment for the changes you are uploading:"
@@ -9768,7 +9833,7 @@ msgid "Perform actions before restarting"
 msgstr "Perform actions before restarting"
 
 msgid "Restart JOSM with saving. Unsaved changes are uploaded and/or saved."
-msgstr ""
+msgstr "Restart JOSM with saving. Unsaved changes are uploaded and/or saved."
 
 msgid "Perform actions before deleting"
 msgstr "Perform actions before deleting"
@@ -10372,7 +10437,7 @@ msgid "Open OSM file"
 msgstr "Open OSM file"
 
 msgid "Validation Error Files"
-msgstr ""
+msgstr "Validation Error Files"
 
 msgid "WMS Files (*.wms)"
 msgstr "WMS Files (*.wms)"
@@ -10381,19 +10446,19 @@ msgid "Unsupported WMS file version; found {0}, expected {1}"
 msgstr "Unsupported WMS file version; found {0}, expected {1}"
 
 msgid "Native projections"
-msgstr ""
+msgstr "Native projections"
 
 msgid "Offset"
 msgstr "Offset"
 
 msgid "Tile download projection"
-msgstr ""
+msgstr "Tile download projection"
 
 msgid "Tile display projection"
-msgstr ""
+msgstr "Tile display projection"
 
 msgid "Current zoom"
-msgstr ""
+msgstr "Current zoom"
 
 msgid "Show tile info"
 msgstr "Show tile info"
@@ -10402,22 +10467,22 @@ msgid "Tile Info"
 msgstr "Tile Info"
 
 msgid "Tile name"
-msgstr ""
+msgstr "Tile name"
 
 msgid "Tile URL"
-msgstr ""
+msgstr "Tile URL"
 
 msgid "Tile size"
-msgstr ""
+msgstr "Tile size"
 
 msgid "Tile display size"
-msgstr ""
+msgstr "Tile display size"
 
 msgid "Reprojection"
-msgstr ""
+msgstr "Reprojection"
 
 msgid "Reprojected tile size"
-msgstr ""
+msgstr "Reprojected tile size"
 
 msgid "Metadata "
 msgstr "Metadata "
@@ -10425,6 +10490,12 @@ msgstr "Metadata "
 msgid "Load tile"
 msgstr "Load tile"
 
+msgid "Get tile status"
+msgstr "Get tile status"
+
+msgid "Force tile rendering"
+msgstr "Force tile rendering"
+
 msgid "Failed to create tile source"
 msgstr "Failed to create tile source"
 
@@ -10531,10 +10602,10 @@ msgstr "Name: {0}"
 msgid "Description: {0}"
 msgstr "Description: {0}"
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
-msgstr[0] "{0} track"
-msgstr[1] "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
+msgstr[0] "{0} track, {1} track segments"
+msgstr[1] "{0} tracks, {1} track segments"
 
 msgid "Timespan"
 msgstr "Timespan"
@@ -10542,6 +10613,9 @@ msgstr "Timespan"
 msgid "Length"
 msgstr "Length"
 
+msgid "Number of<br/>Segments"
+msgstr "Number of<br/>Segments"
+
 msgid "Length: {0}"
 msgstr "Length: {0}"
 
@@ -10555,22 +10629,45 @@ msgid_plural "{0} waypoints"
 msgstr[0] "{0} waypoint"
 msgstr[1] "{0} waypoints"
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
-msgstr[0] "{0} track, "
-msgstr[1] "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] "{0} track"
+msgstr[1] "{0} tracks"
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
+msgstr[0] " ({0} segment)"
+msgstr[1] " ({0} segments)"
 
 msgid "Save GPX file"
 msgstr "Save GPX file"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr "Collect segments of all tracks and combine in a single track."
+
+msgid "Combine tracks of this layer"
+msgstr "Combine tracks of this layer"
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr "Split multiple track segments of one track into multiple tracks."
+
+msgid "Split track segments to tracks"
+msgstr "Split track segments to tracks"
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr "Split the tracks of this layer to one new layer each."
+
+msgid "Split tracks to new layers"
+msgstr "Split tracks to new layers"
+
 msgid "Id"
 msgstr "Id"
 
 msgid "Min. zoom"
-msgstr ""
+msgstr "Min. zoom"
 
 msgid "Max. zoom"
-msgstr ""
+msgstr "Max. zoom"
 
 msgid "Unsupported imagery type: {0}"
 msgstr "Unsupported imagery type: {0}"
@@ -10603,7 +10700,21 @@ msgid "Save Layer"
 msgstr "Save Layer"
 
 msgid "Trying to set a read only data layer as edit layer"
+msgstr "Trying to set a read only data layer as edit layer"
+
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
 msgstr ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
 
 msgid "{0} note"
 msgid_plural "{0} notes"
@@ -10620,7 +10731,7 @@ msgid "Changes need uploading?"
 msgstr "Changes need uploading?"
 
 msgid "Save Note file"
-msgstr ""
+msgstr "Save Note file"
 
 msgid "outside downloaded area"
 msgstr "outside downloaded area"
@@ -10649,7 +10760,7 @@ msgid "Upload is discouraged"
 msgstr "Upload is discouraged"
 
 msgid "Upload is blocked"
-msgstr ""
+msgstr "Upload is blocked"
 
 msgid "Convert to GPX layer"
 msgstr "Convert to GPX layer"
@@ -10698,7 +10809,7 @@ msgid "No validation errors"
 msgstr "No validation errors"
 
 msgid "Save Validation errors file"
-msgstr ""
+msgstr "Save Validation errors file"
 
 msgid "Set WMS Bookmark"
 msgstr "Set WMS Bookmark"
@@ -10707,9 +10818,11 @@ msgid ""
 "Reprojecting layer {0} from {1} to {2}. For best image quality and "
 "performance, switch to one of the supported projections: {3}"
 msgstr ""
+"Reprojecting layer {0} from {1} to {2}. For best image quality and "
+"performance, switch to one of the supported projections: {3}"
 
 msgid "Unable to find supported projection for layer {0}. Using {1}."
-msgstr ""
+msgstr "Unable to find supported projection for layer {0}. Using {1}."
 
 msgid "Correlate to GPX"
 msgstr "Correlate to GPX"
@@ -10948,29 +11061,20 @@ msgstr "Error on file {0}"
 msgid "Display geotagged images"
 msgstr "Display geotagged images"
 
-msgid "Previous"
-msgstr "Previous"
+msgid "Next"
+msgstr "Next"
 
-msgid "Show previous Image"
-msgstr "Show previous Image"
+msgid "Show next Image"
+msgstr "Show next Image"
 
 msgid "Geoimage: {0}"
 msgstr "Geoimage: {0}"
 
-msgid "Remove photo from layer"
-msgstr "Remove photo from layer"
-
-msgid "Delete File from disk"
-msgstr "Delete File from disk"
-
-msgid "Copy image path"
-msgstr "Copy image path"
-
-msgid "Next"
-msgstr "Next"
+msgid "Previous"
+msgstr "Previous"
 
-msgid "Show next Image"
-msgstr "Show next Image"
+msgid "Show previous Image"
+msgstr "Show previous Image"
 
 msgid "Show first Image"
 msgstr "Show first image"
@@ -10984,6 +11088,15 @@ msgstr "Centre view"
 msgid "Zoom best fit and 1:1"
 msgstr "Zoom best fit and 1:1"
 
+msgid "Remove photo from layer"
+msgstr "Remove photo from layer"
+
+msgid "Delete File from disk"
+msgstr "Delete File from disk"
+
+msgid "Copy image path"
+msgstr "Copy image path"
+
 msgid "Move dialog to the side pane"
 msgstr "Move dialogue to the side pane"
 
@@ -11161,7 +11274,7 @@ msgid "Velocity, {0}"
 msgstr "Velocity, {0}"
 
 msgid "Audio files (*.wav, *.mp3, *.aac, *.aif, *.aiff)"
-msgstr ""
+msgstr "Audio files (*.wav, *.mp3, *.aac, *.aif, *.aiff)"
 
 msgid "Import Audio"
 msgstr "Import Audio"
@@ -11319,154 +11432,176 @@ msgid "Select the map painting styles"
 msgstr "Select the map painting styles"
 
 msgid "Error - file not found: ''{0}''"
-msgstr ""
+msgstr "Error - file not found: ''{0}''"
 
 msgid "Expected integer number for option {0}, but got ''{1}''"
-msgstr ""
+msgstr "Expected integer number for option {0}, but got ''{1}''"
 
 msgid "Expected integer number >= 0 for option {0}, but got ''{1}''"
-msgstr ""
+msgstr "Expected integer number >= 0 for option {0}, but got ''{1}''"
 
 msgid "Unable to parse {0} parameter: {1}"
-msgstr ""
+msgstr "Unable to parse {0} parameter: {1}"
 
 msgid ""
 "Expected key and value, separated by '':'' character for option {0}, but got "
 "''{1}''"
 msgstr ""
+"Expected key and value, separated by '':'' character for option {0}, but got "
+"''{1}''"
 
 msgid "Expected floating point number for option {0}, but got ''{1}''"
-msgstr ""
+msgstr "Expected floating point number for option {0}, but got ''{1}''"
 
 msgid ""
 "Expected two coordinates, separated by comma, for option {0}, but got ''{1}''"
 msgstr ""
+"Expected two coordinates, separated by comma, for option {0}, but got ''{1}''"
 
 msgid "In option {0}: {1}"
-msgstr ""
+msgstr "In option {0}: {1}"
 
 msgid "Expected floating point number > 0 for option {0}, but got ''{1}''"
-msgstr ""
+msgstr "Expected floating point number > 0 for option {0}, but got ''{1}''"
 
 msgid "Expected integer number > 0 for option {0}, but got ''{1}''"
-msgstr ""
+msgstr "Expected integer number > 0 for option {0}, but got ''{1}''"
 
 msgid "JOSM rendering command line interface"
-msgstr ""
+msgstr "JOSM rendering command line interface"
 
 msgid "Renders data and saves the result to an image file."
-msgstr ""
+msgstr "Renders data and saves the result to an image file."
 
 msgid "Input data file name (.osm)"
-msgstr ""
+msgstr "Input data file name (.osm)"
 
 msgid "Output image file name (.png); defaults to ''{0}''"
-msgstr ""
+msgstr "Output image file name (.png); defaults to ''{0}''"
 
 msgid "Style file to use for rendering (.mapcss or .zip)"
-msgstr ""
+msgstr "Style file to use for rendering (.mapcss or .zip)"
 
 msgid "This option can be repeated to load multiple styles."
-msgstr ""
+msgstr "This option can be repeated to load multiple styles."
 
 msgid ""
 "Style setting (in JOSM accessible in the style list dialog right click menu)"
 msgstr ""
+"Style setting (in JOSM accessible in the style list dialogue right click "
+"menu)"
 
 msgid "Applies to the last style loaded with the {0} option."
-msgstr ""
+msgstr "Applies to the last style loaded with the {0} option."
 
 msgid ""
 "Select zoom level to render. (integer value, 0=entire earth, 18=street level)"
 msgstr ""
+"Select zoom level to render. (integer value, 0=entire earth, 18=street level)"
 
 msgid "Select the map scale"
-msgstr ""
+msgstr "Select the map scale"
 
 msgid ""
 "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)"
 msgstr ""
+"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)"
 
 msgid "Options {0} and {1} are mutually exclusive."
-msgstr ""
+msgstr "Options {0} and {1} are mutually exclusive."
 
 msgid "Area to render, default value is ''{0}''"
-msgstr ""
+msgstr "Area to render, default value is ''{0}''"
 
 msgid ""
 "With keyword ''{0}'', the downloaded area in the .osm input file will be "
 "used (if recorded)."
 msgstr ""
+"With keyword ''{0}'', the downloaded area in the .osm input file will be "
+"used (if recorded)."
 
 msgid "Specify bottom left corner of the rendering area"
-msgstr ""
+msgstr "Specify bottom left corner of the rendering area"
 
 msgid ""
 "Used in combination with width and height options to determine the area to "
 "render."
 msgstr ""
+"Used in combination with width and height options to determine the area to "
+"render."
 
 msgid "Width of the rendered area, in meter"
-msgstr ""
+msgstr "Width of the rendered area, in meter"
 
 msgid "Height of the rendered area, in meter"
-msgstr ""
+msgstr "Height of the rendered area, in metres"
 
 msgid "Width of the target image, in pixel"
-msgstr ""
+msgstr "Width of the target image, in pixels"
 
 msgid "Height of the target image, in pixel"
-msgstr ""
+msgstr "Height of the target image, in pixels"
 
 msgid "Projection to use, default value ''{0}'' (web-Mercator)"
-msgstr ""
+msgstr "Projection to use, default value ''{0}'' (web-Mercator)"
 
 msgid ""
 "Maximum image width/height in pixel (''{0}'' means no limit), default value: "
 "{1}"
 msgstr ""
+"Maximum image width/height in pixel (''{0}'' means no limit), default value: "
+"{1}"
 
 msgid ""
 "To specify the rendered area and scale, the options can be combined in "
 "various ways"
 msgstr ""
+"To specify the rendered area and scale, the options can be combined in "
+"various ways"
 
 msgid ""
 "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."
 msgstr ""
+"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."
 
 msgid ""
 "Argument {0} given, but scale cannot be determined from remaining arguments"
 msgstr ""
+"Argument {0} given, but scale cannot be determined from remaining arguments"
 
 msgid "Argument {0} given, expected {1} or {2}"
-msgstr ""
+msgstr "Argument {0} given, expected {1} or {2}"
 
 msgid "{0} mode, but no bounds found in osm data input file"
-msgstr ""
+msgstr "{0} mode, but no bounds found in OSM data input file"
 
 msgid ""
 "Unable to determine scale, one of the options {0}, {1}, {2} or {3} expected"
 msgstr ""
+"Unable to determine scale, one of the options {0}, {1}, {2} or {3} expected"
 
 msgid "Missing argument - input data file ({0})"
-msgstr ""
+msgstr "Missing argument - input data file ({0})"
 
 msgid "In .osm data file ''{0}'' - "
-msgstr ""
+msgstr "In .osm data file ''{0}'' - "
 
 msgid "Missing argument - at least one style expected ({0})"
-msgstr ""
+msgstr "Missing argument - at least one style expected ({0})"
 
 msgid ""
 "Image dimensions ({0}x{1}) exceeds maximum image size {2} (use option {3} to "
 "change limit)"
 msgstr ""
+"Image dimensions ({0}x{1}) exceeds maximum image size {2} (use option {3} to "
+"change limit)"
 
 msgid "Style setting not found: ''{0}''"
-msgstr ""
+msgstr "Style setting not found: ''{0}''"
 
 msgid ""
 "There was an error when loading this style. Select ''Info'' from the right "
@@ -12408,7 +12543,7 @@ msgid "Draw segment order numbers"
 msgstr "Draw segment order numbers"
 
 msgid "Draw segment order numbers on selected way"
-msgstr ""
+msgstr "Draw segment order numbers on selected way"
 
 msgid "Draw boundaries of downloaded data"
 msgstr "Draw boundaries of downloaded data"
@@ -12423,10 +12558,10 @@ msgid "Display discardable keys"
 msgstr "Display discardable keys"
 
 msgid "Use auto filters"
-msgstr ""
+msgstr "Use auto filters"
 
 msgid "Rule"
-msgstr ""
+msgstr "Rule"
 
 msgid "Highlight target ways and nodes"
 msgstr "Highlight target ways and nodes"
@@ -12496,6 +12631,7 @@ msgstr ""
 msgid ""
 "Display buttons to automatically filter numeric values of a predefined tag"
 msgstr ""
+"Display buttons to automatically filter numeric values of a predefined tag"
 
 msgid "Options that affect drawing performance"
 msgstr "Options that affect drawing performance"
@@ -12566,7 +12702,7 @@ msgid "Track date"
 msgstr "Track date"
 
 msgid "Heat Map (dark = few, bright = many)"
-msgstr ""
+msgstr "Heat Map (dark = few, bright = many)"
 
 msgid "Single Color (can be customized for named layers)"
 msgstr "Single Colour (can be customised for named layers)"
@@ -12582,34 +12718,34 @@ msgstr "Foot"
 
 msgctxt "Heat map"
 msgid "User Normal"
-msgstr ""
+msgstr "User Normal"
 
 msgctxt "Heat map"
 msgid "User Light"
-msgstr ""
+msgstr "User Light"
 
 msgctxt "Heat map"
 msgid "Traffic Lights"
-msgstr ""
+msgstr "Traffic Lights"
 
 msgctxt "Heat map"
 msgid "Inferno"
-msgstr ""
+msgstr "Inferno"
 
 msgctxt "Heat map"
 msgid "Viridis"
-msgstr ""
+msgstr "Viridis"
 
 msgctxt "Heat map"
 msgid "Wood"
-msgstr ""
+msgstr "Wood"
 
 msgctxt "Heat map"
 msgid "Heat"
-msgstr ""
+msgstr "Heat"
 
 msgid "Use points instead of lines for heat map"
-msgstr ""
+msgstr "Use points instead of lines for heat map"
 
 msgid "Create markers when reading GPX"
 msgstr "Create markers when reading GPX"
@@ -12624,7 +12760,7 @@ msgid "Smooth GPX graphics (antialiasing)"
 msgstr "Smooth GPX graphics (antialiasing)"
 
 msgid "Draw with Opacity (alpha blending) "
-msgstr ""
+msgstr "Draw with Opacity (alpha blending) "
 
 msgid ""
 "Automatically make a marker layer from any waypoints when opening a GPX "
@@ -12698,6 +12834,8 @@ msgid ""
 "Apply dynamic alpha-blending and adjust width based on zoom level for all "
 "GPX lines."
 msgstr ""
+"Apply dynamic alpha-blending and adjust width based on zoom level for all "
+"GPX lines."
 
 msgid ""
 "All points and track segments will have the same color. Can be customized in "
@@ -12725,31 +12863,33 @@ msgstr "Colours points and track segments by its timestamp."
 msgid ""
 "Collected points and track segments for a position and displayed as heat map."
 msgstr ""
+"Collected points and track segments for a position and displayed as heat map."
 
 msgid "Allows to tune the track coloring for different average speeds."
 msgstr "Allows tuning of the track colouring for different average speeds."
 
 msgid "Selects the color schema for heat map."
-msgstr ""
+msgstr "Selects the colour schema for heat map."
 
 msgid "Track and Point Coloring"
 msgstr "Track and Point Colouring"
 
 msgid "Overlay gain adjustment"
-msgstr ""
+msgstr "Overlay gain adjustment"
 
 msgid "Lower limit of visibility"
-msgstr ""
+msgstr "Lower limit of visibility"
 
 msgid "Adjust the gain of overlay blending."
-msgstr ""
+msgstr "Adjust the gain of overlay blending."
 
 msgid "Draw all GPX traces that exceed this threshold."
-msgstr ""
+msgstr "Draw all GPX traces that exceed this threshold."
 
 msgid ""
 "Render engine uses points with simulated position error instead of lines. "
 msgstr ""
+"Render engine uses points with simulated position error instead of lines. "
 
 msgid "Colors points and track segments by data limits."
 msgstr "Colours points and track segments by data limits."
@@ -12776,7 +12916,7 @@ msgid "Show object ID in selection lists"
 msgstr "Show object ID in selection lists"
 
 msgid "Show node coordinates in selection lists"
-msgstr ""
+msgstr "Show node coordinates in selection lists"
 
 msgid "Show localized name in selection lists"
 msgstr "Show localised name in selection lists"
@@ -12993,7 +13133,7 @@ msgid "Available default entries:"
 msgstr "Available default entries:"
 
 msgid "New default entries can be added in the <a href=\"{0}\">Wiki</a>."
-msgstr ""
+msgstr "New default entries can be added in the <a href=\"{0}\">Wiki</a>."
 
 msgid "Selected entries:"
 msgstr "Selected entries:"
@@ -13521,13 +13661,13 @@ msgid "Projection method"
 msgstr "Projection method"
 
 msgid "Set as default"
-msgstr ""
+msgstr "Set as default"
 
 msgid "Default projection"
-msgstr ""
+msgstr "Default projection"
 
 msgid "Default projection has been set to ''{0}''"
-msgstr ""
+msgstr "Default projection has been set to ''{0}''"
 
 msgid "Display coordinates as"
 msgstr "Display coordinates as"
@@ -13557,7 +13697,7 @@ msgid "Swiss Grid (Switzerland)"
 msgstr "Swiss Grid (Switzerland)"
 
 msgid "<i>CH1903 / LV03</i>"
-msgstr ""
+msgstr "<i>CH1903 / LV03</i>"
 
 msgid "Guadeloupe Fort-Marigot 1949"
 msgstr "Guadeloupe Fort-Marigot 1949"
@@ -14158,7 +14298,7 @@ msgid "Unknown requisite: {0}"
 msgstr "Unknown requisite: {0}"
 
 msgid "Unknown regexp value: {0}"
-msgstr ""
+msgstr "Unknown regexp value: {0}"
 
 msgid "Illegal member expression: {0}"
 msgstr "Illegal member expression: {0}"
@@ -14351,11 +14491,11 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr "Deleted node {0} is part of way {1}"
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 
 msgid ""
 "Relation with external id ''{0}'' refers to a missing primitive with "
@@ -14700,11 +14840,15 @@ msgid ""
 "Missing mandatory attributes on element ''bounds''. Got "
 "minlon=''{0}'',minlat=''{1}'',maxlon=''{2}'',maxlat=''{3}'', origin=''{4}''."
 msgstr ""
+"Missing mandatory attributes on element ''bounds''. Got "
+"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 ""
+"Illegal value for attributes ''lat'', ''lon'' on node with ID {0}. Got "
+"''{1}'', ''{2}''."
 
 msgid "Deleted way {0} contains nodes"
 msgstr "Deleted way {0} contains nodes"
@@ -14856,7 +15000,7 @@ msgid "Reading user info ..."
 msgstr "Reading user info ..."
 
 msgid "Reading user preferences ..."
-msgstr ""
+msgstr "Reading user preferences ..."
 
 msgid "Starting to upload with one request per primitive ..."
 msgstr "Starting to upload with one request per primitive ..."
@@ -15069,6 +15213,12 @@ msgstr "Remote Control has been asked to open a local file."
 msgid "Do you want to allow this?"
 msgstr "Do you want to allow this?"
 
+msgid "Yes, always"
+msgstr "Yes, always"
+
+msgid "Yes, once"
+msgstr "Yes, once"
+
 msgid "Confirm Remote Control action"
 msgstr "Confirm Remote Control action"
 
@@ -15218,13 +15368,13 @@ msgid "expected .jos file inside .joz archive"
 msgstr "expected .jos file inside .joz archive"
 
 msgid "Failed to create missing plugin preferences directory: {0}"
-msgstr ""
+msgstr "Failed to create missing plugin preferences directory: {0}"
 
 msgid "Failed to create missing plugin user data directory: {0}"
-msgstr ""
+msgstr "Failed to create missing plugin user data directory: {0}"
 
 msgid "Failed to create missing plugin cache directory: {0}"
-msgstr ""
+msgstr "Failed to create missing plugin cache directory: {0}"
 
 msgid "Skip download"
 msgstr "Skip download"
@@ -16084,7 +16234,7 @@ msgid "Silent shortcut conflict: ''{0}'' moved by ''{1}'' to ''{2}''."
 msgstr "Silent shortcut conflict: ''{0}'' moved by ''{1}'' to ''{2}''."
 
 msgid "Unknown territory id: {0}"
-msgstr ""
+msgstr "Unknown territory 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!"
@@ -16218,11 +16368,11 @@ msgstr "farmland"
 
 msgctxt "landuse"
 msgid "farmyard"
-msgstr ""
+msgstr "farmyard"
 
 msgctxt "landuse"
 msgid "cemetery"
-msgstr ""
+msgstr "cemetery"
 
 msgctxt "landuse"
 msgid "residential"
@@ -16230,23 +16380,23 @@ msgstr "residential"
 
 msgctxt "landuse"
 msgid "greenfield"
-msgstr ""
+msgstr "greenfield"
 
 msgctxt "landuse"
 msgid "village_green"
-msgstr ""
+msgstr "village_green"
 
 msgctxt "landuse"
 msgid "quarry"
-msgstr ""
+msgstr "quarry"
 
 msgctxt "landuse"
 msgid "allotments"
-msgstr ""
+msgstr "allotments"
 
 msgctxt "landuse"
 msgid "vineyard"
-msgstr ""
+msgstr "vineyard"
 
 msgctxt "natural"
 msgid "scrub"
@@ -16258,27 +16408,27 @@ msgstr "wood"
 
 msgctxt "natural"
 msgid "grassland"
-msgstr ""
+msgstr "grassland"
 
 msgctxt "natural"
 msgid "wetland"
-msgstr ""
+msgstr "wetland"
 
 msgctxt "natural"
 msgid "heath"
-msgstr ""
+msgstr "heath"
 
 msgctxt "amenity"
 msgid "fire_station"
-msgstr ""
+msgstr "fire_station"
 
 msgctxt "leisure"
 msgid "park"
-msgstr ""
+msgstr "park"
 
 msgctxt "leisure"
 msgid "track"
-msgstr ""
+msgstr "track"
 
 msgctxt "building"
 msgid "industrial"
@@ -16629,7 +16779,7 @@ msgstr "No wheeled vehicle"
 
 msgctxt "riding"
 msgid "horse_riding"
-msgstr ""
+msgstr "horse_riding"
 
 msgctxt "riding"
 msgid "pitch"
@@ -16728,7 +16878,7 @@ msgstr "no"
 
 msgctxt "sidewalk"
 msgid "separate"
-msgstr ""
+msgstr "separate"
 
 msgid "Service type"
 msgstr "Service type"
@@ -16799,7 +16949,7 @@ msgid "Minimum age"
 msgstr "Minimum age"
 
 msgid "Maximum age"
-msgstr ""
+msgstr "Maximum age"
 
 msgid "Reference"
 msgstr "Reference"
@@ -16928,16 +17078,16 @@ msgid "korean"
 msgstr "korean"
 
 msgid "donut"
-msgstr ""
+msgstr "donut"
 
 msgid "mediterranean"
-msgstr ""
+msgstr "Mediterranean"
 
 msgid "friture"
-msgstr ""
+msgstr "friture"
 
 msgid "crepe"
-msgstr ""
+msgstr "crepe"
 
 msgid "Internet access"
 msgstr "Internet access"
@@ -17461,7 +17611,7 @@ msgstr "platform"
 
 msgctxt "power"
 msgid "rooftop"
-msgstr ""
+msgstr "rooftop"
 
 msgctxt "power"
 msgid "kiosk"
@@ -18032,7 +18182,7 @@ msgid "Ford"
 msgstr "Ford"
 
 msgid "stepping_stones"
-msgstr ""
+msgstr "stepping_stones"
 
 msgid "Ways"
 msgstr "Ways"
@@ -18184,31 +18334,31 @@ msgstr "Cycleway"
 
 msgctxt "cycleway"
 msgid "lane"
-msgstr ""
+msgstr "lane"
 
 msgctxt "cycleway"
 msgid "track"
-msgstr ""
+msgstr "track"
 
 msgctxt "cycleway"
 msgid "opposite_lane"
-msgstr ""
+msgstr "opposite_lane"
 
 msgctxt "cycleway"
 msgid "opposite_track"
-msgstr ""
+msgstr "opposite_track"
 
 msgctxt "cycleway"
 msgid "opposite"
-msgstr ""
+msgstr "opposite"
 
 msgctxt "cycleway"
 msgid "share_busway"
-msgstr ""
+msgstr "shared_busway"
 
 msgctxt "cycleway"
 msgid "shared_lane"
-msgstr ""
+msgstr "shared_lane"
 
 msgid "Cycleway left"
 msgstr "Cycleway left"
@@ -18668,7 +18818,7 @@ msgid "River"
 msgstr "River"
 
 msgid "Lock"
-msgstr ""
+msgstr "Lock"
 
 msgid "Canal"
 msgstr "Canal"
@@ -18705,25 +18855,25 @@ msgid "Basin"
 msgstr "Basin"
 
 msgid "retention"
-msgstr ""
+msgstr "retention"
 
 msgid "infiltration"
-msgstr ""
+msgstr "infiltration"
 
 msgid "detention"
-msgstr ""
+msgstr "detention"
 
 msgid "Reservoir"
 msgstr "Reservoir"
 
 msgid "evaporator"
-msgstr ""
+msgstr "evaporator"
 
 msgid "tailings"
-msgstr ""
+msgstr "tailings"
 
 msgid "water_storage"
-msgstr ""
+msgstr "water_storage"
 
 msgid "Covered Reservoir"
 msgstr "Covered Reservoir"
@@ -18760,10 +18910,10 @@ msgid "river"
 msgstr "river"
 
 msgid "lock"
-msgstr ""
+msgstr "lock"
 
 msgid "wastewater"
-msgstr ""
+msgstr "wastewater"
 
 msgid "Salt Water"
 msgstr "Salt Water"
@@ -18843,6 +18993,8 @@ msgid ""
 "An area of water mostly surrounded by land but with level connection to the "
 "ocean or a lake."
 msgstr ""
+"An area of water mostly surrounded by land but with level connection to the "
+"ocean or a lake."
 
 msgid "Shipping"
 msgstr "Shipping"
@@ -19280,10 +19432,10 @@ msgid "1/50 mix (mofa/moped)"
 msgstr "1/50 mix (mofa/moped)"
 
 msgid "Additives:"
-msgstr ""
+msgstr "Additives:"
 
 msgid "Diesel Exhaust Fluid (AdBlue/AUS32)"
-msgstr ""
+msgstr "Diesel Exhaust Fluid (AdBlue/AUS32)"
 
 msgid "Fuel cards:"
 msgstr "Fuel cards:"
@@ -19376,7 +19528,7 @@ msgid "Wash"
 msgstr "Wash"
 
 msgid "Self Service"
-msgstr ""
+msgstr "Self Service"
 
 msgid "Car Dealer"
 msgstr "Car Dealer"
@@ -19392,19 +19544,19 @@ msgstr "Repair"
 
 msgctxt "shop=car_repair"
 msgid "Service"
-msgstr ""
+msgstr "Service"
 
 msgid "dealer"
-msgstr ""
+msgstr "dealer"
 
 msgid "repair"
-msgstr ""
+msgstr "repair"
 
 msgid "parts"
-msgstr ""
+msgstr "parts"
 
 msgid "tyres"
-msgstr ""
+msgstr "tyres"
 
 msgid "Parts"
 msgstr "Parts"
@@ -19690,7 +19842,7 @@ msgid "Taxiway"
 msgstr "Taxiway"
 
 msgid "Holding Position"
-msgstr ""
+msgstr "Holding Position"
 
 msgid "Helipad"
 msgstr "Helipad"
@@ -19714,10 +19866,10 @@ msgstr "yes"
 
 msgctxt "airmark"
 msgid "Beacon"
-msgstr ""
+msgstr "Beacon"
 
 msgid "Navigationaid"
-msgstr ""
+msgstr "Navigationaid"
 
 msgid "Windsock"
 msgstr "Windsock"
@@ -19754,10 +19906,10 @@ msgid "Guest House/Bed & Breakfast"
 msgstr "Guest House/Bed & Breakfast"
 
 msgid "Apartment"
-msgstr ""
+msgstr "Apartment"
 
 msgid "Number of apartments"
-msgstr ""
+msgstr "Number of apartments"
 
 msgid "Chalet"
 msgstr "Chalet"
@@ -19808,16 +19960,16 @@ msgid "Tents allowed"
 msgstr "Tents allowed"
 
 msgid "Campsite"
-msgstr ""
+msgstr "Campsite"
 
 msgid "Caravans allowed"
-msgstr ""
+msgstr "Caravans allowed"
 
 msgid "Backcountry"
-msgstr ""
+msgstr "Backcountry"
 
 msgid "Group only access"
-msgstr ""
+msgstr "Group only access"
 
 msgid "Food+Drinks"
 msgstr "Food+Drinks"
@@ -19835,10 +19987,10 @@ msgid "Takeaway"
 msgstr "Takeaway"
 
 msgid "Delivery"
-msgstr ""
+msgstr "Delivery"
 
 msgid "Mo-Su 12:00-22:00"
-msgstr ""
+msgstr "Mo-Su 12:00-22:00"
 
 msgid "Fast Food"
 msgstr "Fast Food"
@@ -20383,10 +20535,10 @@ msgid "Point Name"
 msgstr "Point Name"
 
 msgid "Emergency Phone Number"
-msgstr ""
+msgstr "Emergency Phone Number"
 
 msgid "(Use number as shown on plate.)"
-msgstr ""
+msgstr "(Use number as shown on plate.)"
 
 msgid "Veterinary"
 msgstr "Veterinary"
@@ -20401,7 +20553,7 @@ msgid "Automated Defibrillator"
 msgstr "Automated Defibrillator"
 
 msgid "Location description"
-msgstr ""
+msgstr "Location description"
 
 msgid "Phone Number"
 msgstr "Phone number"
@@ -20523,7 +20675,7 @@ msgid "Nursing Home"
 msgstr "Nursing home"
 
 msgid "Nursing Home (Legacy)"
-msgstr ""
+msgstr "Nursing Home (Legacy)"
 
 msgid "Group Home"
 msgstr "Group Home"
@@ -20632,7 +20784,7 @@ msgid "Telephone cards"
 msgstr "Telephone cards"
 
 msgid "Internet Cafe"
-msgstr ""
+msgstr "Internet Cafe"
 
 msgid "Internet Access"
 msgstr "Internet access"
@@ -20680,7 +20832,7 @@ msgid "Shows humidity"
 msgstr "Shows humidity"
 
 msgid "Photo booth"
-msgstr ""
+msgstr "Photo booth"
 
 msgid "Recycling Container"
 msgstr "Recycling Container"
@@ -20733,6 +20885,12 @@ msgstr "Waste"
 msgid "Recycling Centre"
 msgstr "Recycling Centre"
 
+msgid "trash"
+msgstr "rubbish bin"
+
+msgid "dog_excrement"
+msgstr "dog_excrement"
+
 msgid "Waste Disposal/Dumpster"
 msgstr "Waste disposal/Dumpster"
 
@@ -20792,13 +20950,13 @@ msgid "Hide"
 msgstr "Hide"
 
 msgid "Lockable"
-msgstr ""
+msgstr "Lockable"
 
 msgid "Water Point"
 msgstr "Water Point"
 
 msgid "Animal watering place"
-msgstr ""
+msgstr "Animal watering place"
 
 msgid "Compressed Air"
 msgstr "Compressed Air"
@@ -21269,7 +21427,7 @@ msgstr "university"
 
 msgctxt "building"
 msgid "college"
-msgstr ""
+msgstr "college"
 
 msgctxt "building"
 msgid "hospital"
@@ -21357,7 +21515,7 @@ msgstr "public"
 
 msgctxt "building"
 msgid "ruins"
-msgstr ""
+msgstr "ruins"
 
 msgctxt "building"
 msgid "Levels"
@@ -21388,7 +21546,7 @@ msgstr "hut"
 
 msgctxt "building"
 msgid "bungalow"
-msgstr ""
+msgstr "bungalow"
 
 msgctxt "building"
 msgid "dormitory"
@@ -21445,7 +21603,7 @@ msgstr "staircase"
 
 msgctxt "entrance"
 msgid "home"
-msgstr ""
+msgstr "home"
 
 msgid "Entrance number"
 msgstr "Entrance number"
@@ -21469,7 +21627,7 @@ msgid "Flagpole"
 msgstr "Flagpole"
 
 msgid "Cross"
-msgstr ""
+msgstr "Cross"
 
 msgid "Works"
 msgstr "Works"
@@ -21648,7 +21806,7 @@ msgstr "Lighthouse"
 
 msgctxt "man_made"
 msgid "Beacon"
-msgstr ""
+msgstr "Beacon"
 
 msgid "Street Lamp"
 msgstr "Street Lamp"
@@ -22244,23 +22402,23 @@ msgid "Power Switch"
 msgstr "Power Switch"
 
 msgid "Type of switch"
-msgstr ""
+msgstr "Type of switch"
 
 msgctxt "power"
 msgid "mechanical"
-msgstr ""
+msgstr "mechanical"
 
 msgctxt "power"
 msgid "circuit_breaker"
-msgstr ""
+msgstr "circuit_breaker"
 
 msgctxt "power"
 msgid "disconnector"
-msgstr ""
+msgstr "disconnector"
 
 msgctxt "power"
 msgid "earthing"
-msgstr ""
+msgstr "earthing"
 
 msgid "Power Converter"
 msgstr "Power Converter"
@@ -22529,13 +22687,13 @@ msgid "Pole"
 msgstr "Pole"
 
 msgid "Pole with Switch"
-msgstr ""
+msgstr "Pole with Switch"
 
 msgid "Pole Attributes:"
 msgstr "Pole Attributes:"
 
 msgid "Switch Attributes:"
-msgstr ""
+msgstr "Switch Attributes:"
 
 msgid "Pole with Transformer"
 msgstr "Pole with Transformer"
@@ -22614,37 +22772,37 @@ msgid "Castle"
 msgstr "Castle"
 
 msgid "stately"
-msgstr ""
+msgstr "stately"
 
 msgid "defensive"
-msgstr ""
+msgstr "defensive"
 
 msgid "fortress"
-msgstr ""
+msgstr "fortress"
 
 msgid "manor"
-msgstr ""
+msgstr "manor"
 
 msgid "palace"
-msgstr ""
+msgstr "palace"
 
 msgid "Archaeological Site"
 msgstr "Archaeological Site"
 
 msgid "tumulus"
-msgstr ""
+msgstr "tumulus"
 
 msgid "megalith"
-msgstr ""
+msgstr "megalith"
 
 msgid "fortification"
-msgstr ""
+msgstr "fortification"
 
 msgid "settlement"
-msgstr ""
+msgstr "settlement"
 
 msgid "necropolis"
-msgstr ""
+msgstr "necropolis"
 
 msgid "Battlefield"
 msgstr "Battlefield"
@@ -22653,38 +22811,38 @@ msgid "Palaeontological Site"
 msgstr "Palaeontological Site"
 
 msgid "Grave"
-msgstr ""
+msgstr "Grave"
 
 msgid "Tomb"
-msgstr ""
+msgstr "Tomb"
 
 msgctxt "tomb"
 msgid "tumulus"
-msgstr ""
+msgstr "tumulus"
 
 msgctxt "tomb"
 msgid "rock-cut"
-msgstr ""
+msgstr "rock-cut"
 
 msgctxt "tomb"
 msgid "hypogeum"
-msgstr ""
+msgstr "hypogeum"
 
 msgctxt "tomb"
 msgid "war_grave"
-msgstr ""
+msgstr "war_grave"
 
 msgctxt "tomb"
 msgid "mausoleum"
-msgstr ""
+msgstr "mausoleum"
 
 msgctxt "tomb"
 msgid "columbarium"
-msgstr ""
+msgstr "columbarium"
 
 msgctxt "tomb"
 msgid "crypt"
-msgstr ""
+msgstr "crypt"
 
 msgctxt "tomb"
 msgid "pyramid"
@@ -24732,6 +24890,12 @@ msgstr "Public Transport (ÖPNV)"
 msgid "Hike & Bike"
 msgstr "Hike & Bike"
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr "skobbler"
 
@@ -25052,7 +25216,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr "basemap.at Orthofoto"
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -25475,6 +25640,12 @@ msgstr "Estonia Cadastre (Maaamet)"
 msgid "Estonia Forestry (Maaamet)"
 msgstr "Estonia Forestry (Maaamet)"
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr "BANO"
 
@@ -25563,9 +25734,6 @@ msgstr ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
 
-msgid "Hamburg (40 cm)"
-msgstr "Hamburg (40 cm)"
-
 msgid "Hamburg (20 cm)"
 msgstr "Hamburg (20 cm)"
 
@@ -25593,10 +25761,10 @@ msgstr "Berlin aerial photograph 2016"
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -25995,18 +26163,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr "Luxembourg Inspire Railway"
-
-msgid "Luxembourg Inspire Roads"
-msgstr "Luxembourg Inspire Roads"
-
-msgid "Luxembourg Inspire Water"
-msgstr "Luxembourg Inspire Water"
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Niger Delta Oct 2012 Landsat"
 
@@ -26030,8 +26186,158 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
-msgstr "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
+msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
 msgstr ""
@@ -26092,11 +26398,11 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
-msgstr "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
-msgstr "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
+msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr "Geoportal 2: PRNG (geo names)"
@@ -26104,119 +26410,128 @@ msgstr "Geoportal 2: PRNG (geo names)"
 msgid "Geoportal 2: ISOK hillshade"
 msgstr "Geoportal 2: ISOK hillshade"
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
-msgstr "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
+msgstr ""
+
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
+msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
-msgstr "Będzin: Budynki (buildings)"
+msgid "Będzin: Buildings"
+msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
-msgstr "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
+msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr "Bytom: Fotoplan 2014 (aerial image)"
 
-msgid "Bytom: Budynki (buildings)"
-msgstr "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
+msgstr ""
+
+msgid "Częstochowa: Buildings"
+msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
-msgstr "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
+msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
-msgstr "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
+msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
+msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
+msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Buildings"
+msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
-msgstr "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Katowice: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
-msgstr "Gliwice: Budynki (buildings)"
+msgid "Katowice: Buildings"
+msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
-msgstr "Katowice: Ortofotomapa (aerial image)"
+msgid "Łódź: Buildings"
+msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
-msgstr "Katowice: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
-msgstr "Łódź: Budynki (buildings)"
+msgid "Powiat dębicki: Buildings"
+msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
-msgstr "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat lubaczowski: Buildings"
+msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
-msgstr "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
+msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
-msgstr "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
+msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
-msgstr "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
-msgstr "Powiat poznański: Budynki (buildings)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
+msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
-msgstr "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat rzeszowski: Buildings"
+msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
-msgstr "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
-msgstr "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat stalowowolski: Buildings"
+msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
-msgstr "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
+msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
-msgstr "Powiat stalowowolski: Budynki (buildings)"
+msgid "Przemyśl: Buildings"
+msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
-msgstr "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
+msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
-msgstr "Przemyśl: Budynki (buildings)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
-msgstr "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
-msgstr "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
+msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
-msgstr "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
-msgstr "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Buildings"
+msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
-msgstr "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
+msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
-msgstr "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
+msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
+msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
+msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
+msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
-msgstr "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
-msgstr "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
+msgstr ""
 
 msgid "ScanEx IRS"
 msgstr "ScanEx IRS"
@@ -26352,6 +26667,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr "Kanton Aargau 25cm (AGIS 2011)"
 
@@ -29049,15 +29376,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
-msgstr "Start Mapillary layer"
+msgid "Open Mapillary layer"
+msgstr ""
 
 msgid "Mapillary"
 msgstr "Mapillary"
 
-msgid "Create Mapillary layer"
-msgstr "Create Mapillary layer"
-
 msgid "Download Mapillary images in current view"
 msgstr "Download Mapillary images in current view"
 
@@ -29116,14 +29440,8 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr "Upload pictures"
-
-msgid "Upload Mapillary pictures"
-msgstr "Upload Mapillary pictures"
-
-msgid "Upload pictures."
-msgstr "Upload pictures."
+msgid "Upload Mapillary images"
+msgstr ""
 
 msgid "Walk mode"
 msgstr "Walk mode"
@@ -29158,15 +29476,12 @@ msgstr "Export selected images"
 msgid "Rewrite imported images"
 msgstr "Rewrite imported images"
 
-msgid "Select a folder"
-msgstr "Select a folder"
+msgid "Select a directory"
+msgstr "Select a directory"
 
 msgid "Explore"
 msgstr "Explore"
 
-msgid "Select a directory"
-msgstr "Select a directory"
-
 msgid "Speed limit"
 msgstr "Speed limit"
 
@@ -29299,6 +29614,11 @@ msgstr "Preview images when hovering its icon"
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -34029,6 +34349,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr "File could not be deleted!"
 
@@ -35552,9 +35876,6 @@ msgstr "Export traffic data to SUMO network file."
 msgid "SUMO Export"
 msgstr "SUMO Export"
 
-msgid "Export"
-msgstr "Export"
-
 msgid "AutoSave LiveData"
 msgstr "AutoSave LiveData"
 
diff --git a/i18n/po/eo.po b/i18n/po/eo.po
index 68792d4..6a52e41 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 04:41+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:41+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: eo\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -959,6 +959,12 @@ msgstr "Apartigu tavolojn"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr ""
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr ""
 
@@ -2231,6 +2237,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3034,18 +3065,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr ""
@@ -3062,9 +3081,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8238,12 +8269,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9741,6 +9766,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9845,8 +9876,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9856,6 +9887,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9869,14 +9903,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr ""
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9919,6 +9976,16 @@ msgstr ""
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10247,40 +10314,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13367,8 +13434,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14031,6 +14098,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19459,6 +19532,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23434,6 +23513,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23754,7 +23839,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24177,6 +24263,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24263,9 +24355,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24293,10 +24382,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24695,18 +24784,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24730,7 +24807,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24792,10 +25019,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24804,118 +25031,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25052,6 +25288,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27580,15 +27828,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27647,13 +27892,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27689,15 +27928,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27830,6 +28066,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32256,6 +32497,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33736,9 +33981,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/es.po b/i18n/po/es.po
index 56732b4..d9fb521 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-11-26 00:06+0100\n"
-"PO-Revision-Date: 2017-11-22 06:50+0000\n"
-"Last-Translator: cdavila <cdavilam at orangecorreo.es>\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\n"
+"PO-Revision-Date: 2017-12-29 10:36+0000\n"
+"Last-Translator: Roberto Geb <Unknown>\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-11-26 05:04+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 05:02+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: es\n"
 "X-Language: es_ES\n"
 "X-Source-Language: C\n"
@@ -449,7 +449,7 @@ msgid "Delete the active layer. Does not delete the associated file."
 msgstr "Eliminar la capa activa. No elimina el archivo asociado."
 
 msgid "Dialogs panel"
-msgstr ""
+msgstr "Panel de diálogos"
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Conmuta el panel de diálogos, maximiza la vista del mapa"
@@ -1045,6 +1045,13 @@ msgstr "Separar capa"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "Seleccionar si los datos deben ser descargados en una nueva capa"
 
+msgid "Zoom to downloaded data"
+msgstr "Zoom a los datos descargados"
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+"Seleccione para acercarse a todos los datos recientemente descargados."
+
 msgid "Download Location"
 msgstr "Descargar ubicación"
 
@@ -1226,7 +1233,7 @@ msgid "Could not rename file ''{0}''"
 msgstr "No se pudo renombrar el archivo ''{0}''"
 
 msgid "Report a ticket to JOSM bugtracker"
-msgstr "Reporta un billete para JOSM bugtracker"
+msgstr "Enviar una incidencia al registro de errores de JOSM"
 
 msgid "Restart"
 msgstr "Reiniciar"
@@ -2450,6 +2457,35 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr "Confirmar"
 
+msgid "Export GPX file starting from first member"
+msgstr "Exportar fichero GPX comenzando desde el primer miembro"
+
+msgid "Export GPX file starting from last member"
+msgstr "Exportar fichero GPX comenzando desde el último miembro"
+
+msgid "Convert to GPX layer starting from first member"
+msgstr "Convertir a capa GPX comenzando desde el primer miembro"
+
+msgid "Convert to GPX layer starting from last member"
+msgstr "Convertir a capa GPX comenzando desde el último miembro"
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+"Aplanar recursivamente esta relación a una única traza gpx, comenzando con "
+"el/los primero/s miembro/s, continuando sucesivamente hasta el último."
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+"Aplanar recursivamente esta relación a una única traza gpx, comenzando con "
+"el/los ultimo/s miembro/s, continuando sucesivamente hasta el primero."
+
+msgid "Selected Relations"
+msgstr "Relaciones seleccionadas"
+
 msgid "List of recent relations"
 msgstr "Lista de relaciones recientes"
 
@@ -3339,18 +3375,6 @@ msgstr "Falta el archivo de revisión ''/REVISION''."
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr "Ya se ha registrado un conflicto para la primitiva «{0}»."
 
-msgid "Decimal Degrees"
-msgstr "Grados decimales"
-
-msgid "deg° min'' sec\""
-msgstr "gradº min'' seg''"
-
-msgid "deg° min'' (Nautical)"
-msgstr "gradº min'' (Náutica)"
-
-msgid "Projected Coordinates"
-msgstr "Coordenadas proyectadas"
-
 msgctxt "compass"
 msgid "S"
 msgstr "S"
@@ -3367,9 +3391,21 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
+msgid "deg° min'' sec\""
+msgstr "gradº min'' seg''"
+
+msgid "Decimal Degrees"
+msgstr "Grados decimales"
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr "No se pudo analizar como valor de coordenada: ''{0}''"
 
+msgid "deg° min'' (Nautical)"
+msgstr "gradº min'' (Náutica)"
+
+msgid "Projected Coordinates"
+msgstr "Coordenadas proyectadas"
+
 msgid "Date of imagery: {0}"
 msgstr "Fecha de la imagen: {0}"
 
@@ -3874,6 +3910,7 @@ msgstr ""
 
 msgid "Failed to create missing user data directory: {0}"
 msgstr ""
+"No se pudo crear el directorio de preferencias de usuario que falta: {0}"
 
 msgid "<html>Failed to create missing user data directory: {0}</html>"
 msgstr ""
@@ -9074,13 +9111,6 @@ msgstr ""
 "que se inicia JOSM.<br>Puede abrirlo manualmente del menú Archivo o desde la "
 "barra de herramientas.</html>"
 
-msgid "Zoom to downloaded data"
-msgstr "Zoom a los datos descargados"
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-"Seleccione para acercarse a todos los datos recientemente descargados."
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9740,6 +9770,8 @@ msgid ""
 "A background upload is already in progress. Kindly wait for it to finish "
 "before uploading new changes"
 msgstr ""
+"Una subida en segundo plano ya está en progreso. Por favor espere a que "
+"termine antes de subir nuevos cambios."
 
 msgid "I would like someone to review my edits."
 msgstr "Me gustaría que alguien revisase mis ediciones."
@@ -10811,6 +10843,12 @@ msgstr "Metadatos "
 msgid "Load tile"
 msgstr "Cargar mosaico"
 
+msgid "Get tile status"
+msgstr "Obtener el estado del mosaico"
+
+msgid "Force tile rendering"
+msgstr "Forzar la representación del mosaico"
+
 msgid "Failed to create tile source"
 msgstr "Error al crear la fuente de teselas"
 
@@ -10920,10 +10958,10 @@ msgstr "Nombre: {0}"
 msgid "Description: {0}"
 msgstr "Descripción: {0}"
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
-msgstr[0] "{0} traza"
-msgstr[1] "{0} trazas"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
+msgstr[0] "{0} traza, {1} segmentos de traza"
+msgstr[1] "{0} trazas, {1} segmentos de traza"
 
 msgid "Timespan"
 msgstr "Intervalo de tiempo"
@@ -10931,6 +10969,9 @@ msgstr "Intervalo de tiempo"
 msgid "Length"
 msgstr "Longitud"
 
+msgid "Number of<br/>Segments"
+msgstr "Número de<br/>Segmentos"
+
 msgid "Length: {0}"
 msgstr "Longitud: {0}"
 
@@ -10944,14 +10985,38 @@ msgid_plural "{0} waypoints"
 msgstr[0] "{0} nodo de vía"
 msgstr[1] "{0} nodos de vía"
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
-msgstr[0] "{0} traza, "
-msgstr[1] "{0} trazas, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] "{0} traza"
+msgstr[1] "{0} trazas"
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
+msgstr[0] " ({0} segmento)"
+msgstr[1] " ({0} segmentos)"
 
 msgid "Save GPX file"
 msgstr "Guardar el archivo GPX"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+"Recoger segmentos de todas las trazas y combinarlas en una sola traza."
+
+msgid "Combine tracks of this layer"
+msgstr "Combinar las trazas de esta capa"
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr "Dividir los segmentos de una traza en múltiples trazas."
+
+msgid "Split track segments to tracks"
+msgstr "Dividir los segmentos de traza en trazas"
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr "Dividir las trazas de esta capa a una nueva capa por cada una"
+
+msgid "Split tracks to new layers"
+msgstr "Dividir trazas a nuevas capas"
+
 msgid "Id"
 msgstr "Id"
 
@@ -10993,6 +11058,21 @@ msgstr "Guardar capa"
 
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
+"Intentando establecer una capa de datos de solo lectura como capa de edición"
+
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+"Intentando borrar una capa con subida de datos en segundo plano. Por favor, "
+"espere hasta que termine la subida."
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+"Una subida de datos en segundo plano ya está en marcha. No se puede "
+"restablecer el estado hasta que finalice la carga."
 
 msgid "{0} note"
 msgid_plural "{0} notes"
@@ -11346,29 +11426,20 @@ msgstr "Error en archivo {0}"
 msgid "Display geotagged images"
 msgstr "Mostrar imágenes geolocalizadas"
 
-msgid "Previous"
-msgstr "Anterior"
+msgid "Next"
+msgstr "Siguiente"
 
-msgid "Show previous Image"
-msgstr "Mostrar la imagen previa"
+msgid "Show next Image"
+msgstr "Mostrar imagen siguiente"
 
 msgid "Geoimage: {0}"
 msgstr "Geoimagen: {0}"
 
-msgid "Remove photo from layer"
-msgstr "Eliminar foto de la capa"
-
-msgid "Delete File from disk"
-msgstr "Borrar archivo del disco"
-
-msgid "Copy image path"
-msgstr "Copiar la ruta de la imagen"
-
-msgid "Next"
-msgstr "Siguiente"
+msgid "Previous"
+msgstr "Anterior"
 
-msgid "Show next Image"
-msgstr "Mostrar imagen siguiente"
+msgid "Show previous Image"
+msgstr "Mostrar la imagen previa"
 
 msgid "Show first Image"
 msgstr "Mostrar primera imagen"
@@ -11382,6 +11453,15 @@ msgstr "Centrar vista"
 msgid "Zoom best fit and 1:1"
 msgstr "Zoom a mejor ajuste y 1:1"
 
+msgid "Remove photo from layer"
+msgstr "Eliminar foto de la capa"
+
+msgid "Delete File from disk"
+msgstr "Borrar archivo del disco"
+
+msgid "Copy image path"
+msgstr "Copiar la ruta de la imagen"
+
 msgid "Move dialog to the side pane"
 msgstr "Mover diálogo al panel lateral"
 
@@ -11743,31 +11823,39 @@ msgstr ""
 
 msgid "Expected floating point number for option {0}, but got ''{1}''"
 msgstr ""
+"Se esperaba un número de coma flotante para la opción {0}, pero se obtuvo "
+"\"{1}\""
 
 msgid ""
 "Expected two coordinates, separated by comma, for option {0}, but got ''{1}''"
 msgstr ""
+"Se esperaba dos coordenadas, separadas por coma, para la opción {0}, pero se "
+"obtuvo \"{1}\""
 
 msgid "In option {0}: {1}"
 msgstr "En opción {0}: {1}"
 
 msgid "Expected floating point number > 0 for option {0}, but got ''{1}''"
 msgstr ""
+"Se esperaba un número de coma flotante > 0 para la opción {0}, pero se "
+"obtuvo \"{1}\""
 
 msgid "Expected integer number > 0 for option {0}, but got ''{1}''"
 msgstr ""
+"Se esperaba un número entero > 0 para la opción {0}, pero se obtuvo \"{1}\""
 
 msgid "JOSM rendering command line interface"
-msgstr ""
+msgstr "Interfaz de línea de comandos de interpretado de JOSM"
 
 msgid "Renders data and saves the result to an image file."
-msgstr ""
+msgstr "Representar los datos y guardar el resultado a un archivo de imagen."
 
 msgid "Input data file name (.osm)"
 msgstr "Nombre de archivo de datos de entrada (.osm)"
 
 msgid "Output image file name (.png); defaults to ''{0}''"
 msgstr ""
+"Nombre de archivo de imagen de salida (.png); predeterminado a ''{0}''"
 
 msgid "Style file to use for rendering (.mapcss or .zip)"
 msgstr ""
@@ -11826,7 +11914,7 @@ msgid "Height of the target image, in pixel"
 msgstr ""
 
 msgid "Projection to use, default value ''{0}'' (web-Mercator)"
-msgstr ""
+msgstr "Proyección a usar, valor por defecto ''{0}'' (web-Mercator)"
 
 msgid ""
 "Maximum image width/height in pixel (''{0}'' means no limit), default value: "
@@ -14889,11 +14977,9 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr "El nodo borrado {0} es parte de la vía {1}"
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
-"La vía {0} con {1} nodos tiene nodos incompletos porque falta por lo menos "
-"un nodo en los datos cargados."
 
 msgid ""
 "Relation with external id ''{0}'' refers to a missing primitive with "
@@ -15652,6 +15738,12 @@ msgstr "Control Remoto recibió una petición de abrir un archivo local"
 msgid "Do you want to allow this?"
 msgstr "¿Desea permitir esto?"
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr "Confirmar la acción del control remoto"
 
@@ -17352,7 +17444,7 @@ msgstr "no"
 
 msgctxt "sidewalk"
 msgid "separate"
-msgstr ""
+msgstr "separada"
 
 msgid "Service type"
 msgstr "Tipo de servicio"
@@ -17555,10 +17647,10 @@ msgid "donut"
 msgstr ""
 
 msgid "mediterranean"
-msgstr ""
+msgstr "mediterránea"
 
 msgid "friture"
-msgstr ""
+msgstr "fritura"
 
 msgid "crepe"
 msgstr ""
@@ -17898,7 +17990,7 @@ msgid "Genus"
 msgstr "Género"
 
 msgid "Species"
-msgstr "Clase"
+msgstr "Especie"
 
 msgid "Taxon"
 msgstr "Taxón"
@@ -19918,7 +20010,7 @@ msgid "1/50 mix (mofa/moped)"
 msgstr "mezcla 1/50 (ciclomotor)"
 
 msgid "Additives:"
-msgstr ""
+msgstr "Aditivos:"
 
 msgid "Diesel Exhaust Fluid (AdBlue/AUS32)"
 msgstr ""
@@ -20448,10 +20540,10 @@ msgid "Tents allowed"
 msgstr "Permitido tiendas de campaña"
 
 msgid "Campsite"
-msgstr ""
+msgstr "Camping"
 
 msgid "Caravans allowed"
-msgstr ""
+msgstr "Caravanas permitidas"
 
 msgid "Backcountry"
 msgstr ""
@@ -21377,6 +21469,12 @@ msgstr "Residuos"
 msgid "Recycling Centre"
 msgstr "Centro de Reciclaje"
 
+msgid "trash"
+msgstr "papelera"
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr "Contenedor de residuos"
 
@@ -23298,14 +23396,14 @@ msgid "Palaeontological Site"
 msgstr "Sitio paleontológico"
 
 msgid "Grave"
-msgstr ""
+msgstr "Tumba"
 
 msgid "Tomb"
 msgstr ""
 
 msgctxt "tomb"
 msgid "tumulus"
-msgstr ""
+msgstr "Túmulo"
 
 msgctxt "tomb"
 msgid "rock-cut"
@@ -23313,7 +23411,7 @@ msgstr ""
 
 msgctxt "tomb"
 msgid "hypogeum"
-msgstr ""
+msgstr "hipogeo"
 
 msgctxt "tomb"
 msgid "war_grave"
@@ -23321,23 +23419,23 @@ msgstr ""
 
 msgctxt "tomb"
 msgid "mausoleum"
-msgstr ""
+msgstr "mausoleo"
 
 msgctxt "tomb"
 msgid "columbarium"
-msgstr ""
+msgstr "columbario"
 
 msgctxt "tomb"
 msgid "crypt"
-msgstr ""
+msgstr "cripta"
 
 msgctxt "tomb"
 msgid "pyramid"
-msgstr ""
+msgstr "pirámide"
 
 msgctxt "tomb"
 msgid "sarcophagus"
-msgstr ""
+msgstr "sarcófago"
 
 msgctxt "tomb"
 msgid "vault"
@@ -24556,23 +24654,23 @@ msgstr "Industrial"
 
 msgctxt "industrial"
 msgid "bakery"
-msgstr ""
+msgstr "panadería"
 
 msgctxt "industrial"
 msgid "brewery"
-msgstr ""
+msgstr "cervecería"
 
 msgctxt "industrial"
 msgid "brickyard"
-msgstr ""
+msgstr "fábrica de ladrillos"
 
 msgctxt "industrial"
 msgid "depot"
-msgstr ""
+msgstr "almacén"
 
 msgctxt "industrial"
 msgid "distributor"
-msgstr ""
+msgstr "distribuidor"
 
 msgctxt "industrial"
 msgid "factory"
@@ -24580,7 +24678,7 @@ msgstr "fábrica"
 
 msgctxt "industrial"
 msgid "grinding_mill"
-msgstr ""
+msgstr "molino"
 
 msgctxt "industrial"
 msgid "heating_station"
@@ -24588,7 +24686,7 @@ msgstr ""
 
 msgctxt "industrial"
 msgid "machine_shop"
-msgstr ""
+msgstr "tienda de maquinaria"
 
 msgctxt "industrial"
 msgid "mine"
@@ -24596,7 +24694,7 @@ msgstr "mina"
 
 msgctxt "industrial"
 msgid "oil"
-msgstr ""
+msgstr "petróleo"
 
 msgctxt "industrial"
 msgid "port"
@@ -24612,7 +24710,7 @@ msgstr "aserradero"
 
 msgctxt "industrial"
 msgid "scrap_yard"
-msgstr ""
+msgstr "depósito de chatarra"
 
 msgctxt "industrial"
 msgid "shipyard"
@@ -25115,19 +25213,19 @@ msgstr "Ruta de ciclismo"
 
 msgctxt "network"
 msgid "international"
-msgstr ""
+msgstr "internacional"
 
 msgctxt "network"
 msgid "national"
-msgstr ""
+msgstr "nacional"
 
 msgctxt "network"
 msgid "regional"
-msgstr ""
+msgstr "regional"
 
 msgctxt "network"
 msgid "local"
-msgstr ""
+msgstr "local"
 
 msgid "Mountain Biking Route"
 msgstr "Ruta de ciclismo de montaña"
@@ -25389,6 +25487,12 @@ msgstr "Transporte Público (ÖPNV)"
 msgid "Hike & Bike"
 msgstr "Ciclismo & Montañismo"
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr "skobbler"
 
@@ -25444,7 +25548,7 @@ msgid "Waymarked Trails: Winter Sports"
 msgstr "Pistas de Waymarked: deportes de invierno"
 
 msgid "Wikimedia Map"
-msgstr ""
+msgstr "Mapa de Wikimedia"
 
 msgid "OSM Inspector: Geometry"
 msgstr "OSM Inspector: Geometría"
@@ -25572,7 +25676,7 @@ msgid "IGN orthophoto El Rodeo (WMTS)"
 msgstr ""
 
 msgid "IGN orthophoto Jujuy (WMTS)"
-msgstr ""
+msgstr "IGN ortofoto Jujuy (WMTS)"
 
 msgid "IGN orthophoto La Rioja (WMTS)"
 msgstr ""
@@ -25722,8 +25826,9 @@ msgstr "Mapa base de Austria, basado en datos del gobierno."
 msgid "basemap.at Orthofoto"
 msgstr "basemap.at Orthofoto"
 
-msgid "Orthofoto layer provided by basemap.at. "
-msgstr "Capa de ortofoto provista por basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
+msgstr ""
 
 msgid "Geoimage.at MaxRes"
 msgstr "Geoimage.at MaxRes"
@@ -26162,6 +26267,12 @@ msgstr "Catastral de Estonia (Maaamet)"
 msgid "Estonia Forestry (Maaamet)"
 msgstr "Bosques de Estonia (Maaamet)"
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr "BANO"
 
@@ -26249,9 +26360,6 @@ msgid ""
 msgstr ""
 "Vercors - Reserva natural de Hauts-Plateaux du Vercors - Ortofotos 1999 - 1 m"
 
-msgid "Hamburg (40 cm)"
-msgstr "Hamburgo (40 cm)"
-
 msgid "Hamburg (20 cm)"
 msgstr "Hamburgo (20 cm)"
 
@@ -26279,12 +26387,12 @@ 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"
-
 msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr "Líneas de Deutsche Bahn VzG Noviembre 2015"
 
+msgid "Deutsche Bahn VzG lines January 2017"
+msgstr ""
+
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
 msgstr "Erlangen - Imágenes aéreas (2016 5.0 cm)"
 
@@ -26716,18 +26824,6 @@ msgstr "todas las capas de geoportail.lu"
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr "Ferrocarril Inspire Luxemburgo"
-
-msgid "Luxembourg Inspire Roads"
-msgstr "Rutas Inspire de Luxemburgo"
-
-msgid "Luxembourg Inspire Water"
-msgstr "Inspire Water Luxemburgo"
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Delta del Níger Oct 2012"
 
@@ -26753,8 +26849,158 @@ msgstr "Imágenes aéreas LINZ NZ"
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr "Mapas sin grilla Topo50 de LINZ NZ"
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
-msgstr "Svalbard - Ortofoto de 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
+msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
 msgstr "Imágenes OSM de imagico.de para mapeo: mosaico Svalbard"
@@ -26824,11 +27070,11 @@ msgstr "Imágenes aéreas de pobre calidad y desactualizadas (color verdadero)"
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr "Pangasinán/Bulacan (alta resolución Filipinas)"
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
-msgstr "Geoportal 2: Ortofotomapa (imagen aérea)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
-msgstr "Geoportal 2: Ortofotomapa (imagen aerea) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
+msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr "Geoportal 2: PRNG (geo nombres)"
@@ -26836,119 +27082,128 @@ msgstr "Geoportal 2: PRNG (geo nombres)"
 msgid "Geoportal 2: ISOK hillshade"
 msgstr "Geoportal 2: Mapa de sombras ISOK"
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
-msgstr "Będzin: Ortofotomapa 2013 (imagen aérea)"
+msgid "polska.e-mapa.net: Buildings"
+msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
-msgstr "Będzin: Budynki (edificios)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
+msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
-msgstr "Bytom: Ortofotomapa 2012 (imagen aérea)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
+msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr "Bytom: Fotoplan 2014 (imagen aérea)"
 
-msgid "Bytom: Budynki (buildings)"
-msgstr "Bytom: Budynki (edificio)"
+msgid "Bytom: Buildings"
+msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
-msgstr "Chorzów: Budynki (edificio)"
+msgid "Chorzów: Buildings"
+msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
-msgstr "Częstochowa: Budynki (edificios)"
+msgid "Częstochowa: Buildings"
+msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2011 (imagen aérea)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
+msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2013 (imagen aérea)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
+msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2014 (imagen aérea)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
+msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
-msgstr "Gliwice: Ortofotomapa 2013 (imagen aérea)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
+msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
-msgstr "Gliwice: Budynki (edificios)"
+msgid "Gliwice: Buildings"
+msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
-msgstr "Katowice: Ortofotomapa (imagen aérea)"
+msgid "Katowice: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
-msgstr "Katowice: Budynki (edificios)"
+msgid "Katowice: Buildings"
+msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
-msgstr "Łódź: Budynki (edificios)"
+msgid "Łódź: Buildings"
+msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
-msgstr "Łódź: Ortofotomapa (imagen aérea)"
+msgid "Łódź: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
-msgstr "Powiat dębicki: Budynki (edificios)"
+msgid "Powiat dębicki: Buildings"
+msgstr ""
+
+msgid "Powiat lubaczowski: Buildings"
+msgstr ""
+
+msgid "Powiat łańcucki: Buildings"
+msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
-msgstr "Powiat lubaczowski: Budynki (edificios)"
+msgid "Powiat poznański: Buildings"
+msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
-msgstr "Powiat łańcucki: Budynki (edificios)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
-msgstr "Powiat poznański: Budynki (edificios)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
+msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
-msgstr "Powiat poznański: Ortofotomapa (imagen aérea)"
+msgid "Powiat rzeszowski: Buildings"
+msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
-msgstr "Powiat ropczycko-sędziszowski: Budynki (edificios)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
-msgstr "Powiat rzeszowski: Budynki (edificios)"
+msgid "Powiat stalowowolski: Buildings"
+msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
-msgstr "Powiat rzeszowski: Ortofotomapa (Imagen aérea)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
+msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
-msgstr "Powiat stalowowolski: Budynki (edificios)"
+msgid "Przemyśl: Buildings"
+msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
-msgstr "Poznań: Ortofotomapa 2014 (imagen aérea)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
+msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
-msgstr "Przemyśl: Budynki (edificios)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
-msgstr "Przemyśl: Ortofotomapa (Imagen aérea)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
-msgstr "Ruda Śląska: Ortofotomapa (imagen aérea)"
+msgid "Rzeszów: Buildings"
+msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
-msgstr "Rzeszów: Ortofotomapa (imagen aérea)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
-msgstr "Rzeszów: Budynki (edificios)"
+msgid "Siemianowice Śląskie: Buildings"
+msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
-msgstr "Siemianowice Śląskie: Ortofotomapa (imagen aérea)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
+msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
-msgstr "Siemianowice Śląskie: Budynki (edificios)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
+msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2008 (imagen aérea)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
+msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2009 (imagen aérea)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
+msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2012 (imagen aérea)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
+msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
-msgstr "Zabrze: Ortofotomapa 2011 (imagen aérea)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
-msgstr "Breslavia: ortofotomapa de 2015 (imagen aérea)"
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
+msgstr ""
 
 msgid "ScanEx IRS"
 msgstr "ScanEx IRS"
@@ -27099,6 +27354,18 @@ msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 "Suplementando cobertura incompleta en otras fuentes (color verdadero)"
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr "Cantón Aargau 25cm (AGIS 2011)"
 
@@ -29920,7 +30187,7 @@ msgid "Select and close"
 msgstr "Seleccionar y cerrar"
 
 msgid "Fix unresolved addresses"
-msgstr "Corregir sirecciones sin resolver"
+msgstr "Corregir direcciones sin resolver"
 
 msgid "Complete Addresses"
 msgstr "Direcciones completas"
@@ -30097,15 +30364,12 @@ msgstr ""
 "Muestra la capa donde se visualiza los objetos de mapa detectados por "
 "Mapillary"
 
-msgid "Start Mapillary layer"
-msgstr "Iniciar capa de Mapillary"
+msgid "Open Mapillary layer"
+msgstr ""
 
 msgid "Mapillary"
 msgstr "Mapillary"
 
-msgid "Create Mapillary layer"
-msgstr "Crear capa de Mapillary"
-
 msgid "Download Mapillary images in current view"
 msgstr "Descargar imágenes de Mapillary en la vista actual"
 
@@ -30169,14 +30433,8 @@ msgstr ""
 "Ayuda. Si este mensaje aparece por primera vez, simplemente inténtelo de "
 "nuevo. Esto podría haber sido un problema con la conexión de Internet."
 
-msgid "Upload pictures"
-msgstr "Subir fotos"
-
-msgid "Upload Mapillary pictures"
-msgstr "Subir fotos Mapillary"
-
-msgid "Upload pictures."
-msgstr "Subir imágenes."
+msgid "Upload Mapillary images"
+msgstr ""
 
 msgid "Walk mode"
 msgstr "Modo caminar"
@@ -30211,15 +30469,12 @@ msgstr "Exportar las imágenes seleccionadas"
 msgid "Rewrite imported images"
 msgstr "Reescribir las imágenes importadas"
 
-msgid "Select a folder"
-msgstr "Seleccionar una carpeta"
+msgid "Select a directory"
+msgstr "Seleccionar un directorio"
 
 msgid "Explore"
 msgstr "Explorar"
 
-msgid "Select a directory"
-msgstr "Seleccionar un directorio"
-
 msgid "Speed limit"
 msgstr "Límite de velocidad"
 
@@ -30354,6 +30609,11 @@ msgstr "Vista previa de imágenes cuando el cursor se sitúa sobre el icono"
 msgid "Cut off sequences at download bounds"
 msgstr "Corta las secuencias en los límites de descargas"
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 "Permitir características beta experimentales (podría comportarse de forma "
@@ -31841,6 +32101,8 @@ msgstr "comuna"
 msgid ""
 "Select to download municipality boundary in the selected download area."
 msgstr ""
+"Seleccionar para descargar límites municipales en el área de descarga "
+"seleccionada."
 
 msgid ""
 "<html>Nothing is enabled.<br>Please choose something to download.</html>"
@@ -35261,11 +35523,15 @@ msgid "Writing position information to image files..."
 msgstr "Escribiendo información de posición a los archivos de imágenes..."
 
 msgid "Retry"
-msgstr ""
+msgstr "Reintentar"
 
 msgid "Unable to process file ''{0}'':"
 msgstr "No se pudo procesar el archivo ''{0}'':"
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr "¡No se pudo eliminar el archivo!"
 
@@ -36826,9 +37092,6 @@ msgstr "Exportar datos de tráfico a archivo de red SUMO."
 msgid "SUMO Export"
 msgstr "Exportar a SUMO"
 
-msgid "Export"
-msgstr "Exportar"
-
 msgid "AutoSave LiveData"
 msgstr "Autograbar LiveData"
 
diff --git a/i18n/po/et.po b/i18n/po/et.po
index 8a868e8..6fe5f39 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 04:42+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:41+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: et\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -994,6 +994,12 @@ msgstr "Eralda kiht."
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "Vali, kas andmed tuleb alla laadida uude kihti"
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr "Allalaadimise koht"
 
@@ -2301,6 +2307,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3115,18 +3146,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr ""
@@ -3143,9 +3162,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8354,12 +8385,6 @@ msgstr ""
 "JOSM käivitatakse.<br>Sa võid ka samas seda käsitsi avada Fail-menüüst või "
 "tööriistaribalt.</html>"
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9891,6 +9916,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9995,8 +10026,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -10006,6 +10037,9 @@ msgstr "Ajavahemik"
 msgid "Length"
 msgstr "Pikkus"
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr "Pikkus: {0}"
 
@@ -10019,14 +10053,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr "Salvesta GPX fail"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -10069,6 +10126,16 @@ msgstr "Salvesta kiht"
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10403,40 +10470,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr "Kuva geosildistatud fotosid"
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13564,8 +13631,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14234,6 +14301,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19691,6 +19764,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23666,6 +23745,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23986,7 +24071,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24409,6 +24495,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24495,9 +24587,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24525,10 +24614,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24927,18 +25016,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24962,7 +25039,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -25024,10 +25251,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -25036,118 +25263,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25284,6 +25520,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27821,15 +28069,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27888,13 +28133,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27930,15 +28169,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -28071,6 +28307,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32521,6 +32762,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -34001,9 +34246,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/eu.po b/i18n/po/eu.po
index d82f178..e5a2743 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 04:36+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:36+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: eu\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -978,6 +978,12 @@ msgstr "Geruza banatu"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "Aukeratu hau, datuak kapa berri batean deskargatu nahi badituzu"
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr "Kokapena deskargatu"
 
@@ -2312,6 +2318,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3139,18 +3170,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr "Jatorrizko ''{0}''(a)rentzako gatazka erregistratu da jada"
 
-msgid "Decimal Degrees"
-msgstr "Gradu hamartarrak (dezimalak)"
-
-msgid "deg° min'' sec\""
-msgstr "grad° min'' seg\""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr "Proiektatutako koordenatuak"
-
 msgctxt "compass"
 msgid "S"
 msgstr "H"
@@ -3167,9 +3186,21 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
+msgid "deg° min'' sec\""
+msgstr "grad° min'' seg\""
+
+msgid "Decimal Degrees"
+msgstr "Gradu hamartarrak (dezimalak)"
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr "Proiektatutako koordenatuak"
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8421,12 +8452,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9921,6 +9946,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -10025,8 +10056,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -10036,6 +10067,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -10049,14 +10083,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr "GPX fitxategia gorde"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -10099,6 +10156,16 @@ msgstr "Geruza gorde"
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10429,40 +10496,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13549,8 +13616,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14213,6 +14280,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19646,6 +19719,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23621,6 +23700,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23941,7 +24026,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24364,6 +24450,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24450,9 +24542,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24480,10 +24569,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24882,18 +24971,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24917,7 +24994,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24979,10 +25206,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24991,118 +25218,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25239,6 +25475,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27804,15 +28052,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27871,13 +28116,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27913,15 +28152,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -28054,6 +28290,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32480,6 +32721,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33960,9 +34205,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/fa.po b/i18n/po/fa.po
index 2ccfe59..b1cb062 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 04:58+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:57+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: fa\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1000,6 +1000,12 @@ msgstr "جداسازى لايه"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "اگر داده ها باید داخل لایه ی جدید دانلود شوند انتخاب کنید"
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr "محل دانلود"
 
@@ -2290,6 +2296,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3093,18 +3124,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr ""
@@ -3121,9 +3140,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8299,12 +8330,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9803,6 +9828,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9907,8 +9938,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9918,6 +9949,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9931,14 +9965,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr ""
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9981,6 +10038,16 @@ msgstr ""
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10309,40 +10376,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13429,8 +13496,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14093,6 +14160,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19521,6 +19594,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23496,6 +23575,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23816,7 +23901,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24239,6 +24325,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24325,9 +24417,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24355,10 +24444,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24757,18 +24846,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24792,7 +24869,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24854,10 +25081,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24866,118 +25093,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25114,6 +25350,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27642,15 +27890,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27709,13 +27954,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27751,15 +27990,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27892,6 +28128,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32318,6 +32559,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33798,9 +34043,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/fi.po b/i18n/po/fi.po
index 6081f06..ff8fd84 100644
--- a/i18n/po/fi.po
+++ b/i18n/po/fi.po
@@ -7,16 +7,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-11-26 00:06+0100\n"
-"PO-Revision-Date: 2016-01-19 17:11+0000\n"
-"Last-Translator: Lauri Kytömaa <Unknown>\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\n"
+"PO-Revision-Date: 2017-12-05 05:37+0000\n"
+"Last-Translator: Nka Mapper <Unknown>\n"
 "Language-Team: Finnish <fi at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2017-11-26 04:43+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:42+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: fi\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1025,6 +1025,12 @@ msgstr "Uusi taso"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "Valitse, ladataanko data uudelle tasolle"
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr "Latauksen sijainti"
 
@@ -2409,6 +2415,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3254,18 +3285,6 @@ msgstr "Revisiotiedosto ''/REVISION'' puuttuu."
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr "Objektille \"{0}\" on jo rekisteröity ristiriita"
 
-msgid "Decimal Degrees"
-msgstr "Asteina desimaalilukuna"
-
-msgid "deg° min'' sec\""
-msgstr "ast° min'' sek\""
-
-msgid "deg° min'' (Nautical)"
-msgstr "ast° min'' (Meri)"
-
-msgid "Projected Coordinates"
-msgstr "Projisoidut koordinaatit"
-
 msgctxt "compass"
 msgid "S"
 msgstr "E"
@@ -3282,9 +3301,21 @@ msgctxt "compass"
 msgid "E"
 msgstr "I"
 
+msgid "deg° min'' sec\""
+msgstr "ast° min'' sek\""
+
+msgid "Decimal Degrees"
+msgstr "Asteina desimaalilukuna"
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr "ast° min'' (Meri)"
+
+msgid "Projected Coordinates"
+msgstr "Projisoidut koordinaatit"
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8703,12 +8734,6 @@ msgstr ""
 "<html>Avaa tämä latausikkuna aina kun JOSM käynnistyy.<br>Tämän voi muutoin "
 "avata Tiedosto-valikosta tai työkalupalkista.</html>"
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -10368,6 +10393,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -10475,10 +10506,10 @@ msgstr "Nimi: {0}"
 msgid "Description: {0}"
 msgstr "Kuvaus: {0}"
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
-msgstr[0] "{0} jälki"
-msgstr[1] "{0} jälkeä"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Timespan"
 msgstr "Aikaväli"
@@ -10486,6 +10517,9 @@ msgstr "Aikaväli"
 msgid "Length"
 msgstr "Pituus"
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr "Pituus: {0}"
 
@@ -10499,14 +10533,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] "{0} reittipiste"
 msgstr[1] "{0} reittipistettä"
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
-msgstr[0] "{0} jälki, "
-msgstr[1] "{0} jälkeä, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] "{0} jälki"
+msgstr[1] "{0} jälkeä"
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr "Tallenna GPX-tiedosto"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -10549,6 +10606,16 @@ msgstr "Tallenna kerros"
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10888,28 +10955,19 @@ msgstr "Virhe tiedostossa {0}"
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
-msgstr "Edellinen"
+msgid "Next"
+msgstr "Seuraava"
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
-msgstr "Poista kuva tasosta"
-
-msgid "Delete File from disk"
-msgstr "Poista tiedosto levyltä"
-
-msgid "Copy image path"
-msgstr ""
-
-msgid "Next"
-msgstr "Seuraava"
+msgid "Previous"
+msgstr "Edellinen"
 
-msgid "Show next Image"
+msgid "Show previous Image"
 msgstr ""
 
 msgid "Show first Image"
@@ -10924,6 +10982,15 @@ msgstr "Keskitä näkymä"
 msgid "Zoom best fit and 1:1"
 msgstr ""
 
+msgid "Remove photo from layer"
+msgstr "Poista kuva tasosta"
+
+msgid "Delete File from disk"
+msgstr "Poista tiedosto levyltä"
+
+msgid "Copy image path"
+msgstr ""
+
 msgid "Move dialog to the side pane"
 msgstr ""
 
@@ -14128,8 +14195,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14829,6 +14896,12 @@ msgstr "JOSM:n etähallintaa on pyydetty avaamaan paikallinen tiedosto."
 msgid "Do you want to allow this?"
 msgstr "Sallitaanko tämä?"
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr "Varmista etähallinnan toimenpide"
 
@@ -20315,6 +20388,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr "Kierrätysasema"
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -24291,6 +24370,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -24611,7 +24696,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -25034,6 +25120,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -25120,9 +25212,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -25150,10 +25239,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -25552,18 +25641,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -25587,7 +25664,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -25649,11 +25876,11 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
-msgstr "Geoportal 2: Ortofotomapa (ilmakuva) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
+msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
@@ -25661,118 +25888,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
+msgstr ""
+
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Buildings"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
+msgstr ""
+
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25909,6 +26145,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -28499,15 +28747,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr "Mapillary"
 
-msgid "Create Mapillary layer"
-msgstr "Luo Mapillary-taso"
-
 msgid "Download Mapillary images in current view"
 msgstr "Lataa kuvat näkymän alueelta Mapillaryn palvelimelta."
 
@@ -28566,13 +28811,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -28608,15 +28847,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -28749,6 +28985,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -33231,6 +33472,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr "Tiedostoa ei voitu poistaa!"
 
@@ -34719,9 +34964,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/fil.po b/i18n/po/fil.po
index a1354d8..180371e 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 05:13+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 05:10+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: fil\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -953,6 +953,12 @@ msgstr ""
 msgid "Select if the data should be downloaded into a new layer"
 msgstr ""
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr ""
 
@@ -2225,6 +2231,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3028,18 +3059,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr ""
@@ -3056,9 +3075,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8231,12 +8262,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9730,6 +9755,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9834,8 +9865,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9845,6 +9876,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9858,14 +9892,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr ""
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9908,6 +9965,16 @@ msgstr ""
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10236,40 +10303,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13356,8 +13423,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14020,6 +14087,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19448,6 +19521,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23423,6 +23502,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23743,7 +23828,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24166,6 +24252,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24252,9 +24344,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24282,10 +24371,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24684,18 +24773,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24719,7 +24796,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24781,10 +25008,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24793,118 +25020,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25041,6 +25277,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27569,15 +27817,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27636,13 +27881,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27678,15 +27917,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27819,6 +28055,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32245,6 +32486,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33725,9 +33970,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/fo.po b/i18n/po/fo.po
index 9f07a0c..b4719a5 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 04:42+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:42+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
 msgstr "{0}: valmøguleiki ''{1}'' er tvítýddur"
@@ -952,6 +952,12 @@ msgstr ""
 msgid "Select if the data should be downloaded into a new layer"
 msgstr ""
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr ""
 
@@ -2224,6 +2230,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3027,18 +3058,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr ""
@@ -3055,9 +3074,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8230,12 +8261,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9729,6 +9754,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9833,8 +9864,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9844,6 +9875,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9857,14 +9891,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr ""
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9907,6 +9964,16 @@ msgstr ""
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10235,40 +10302,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13355,8 +13422,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14019,6 +14086,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19447,6 +19520,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23422,6 +23501,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23742,7 +23827,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24165,6 +24251,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24251,9 +24343,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24281,10 +24370,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24683,18 +24772,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24718,7 +24795,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24780,10 +25007,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24792,118 +25019,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25040,6 +25276,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27568,15 +27816,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27635,13 +27880,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27677,15 +27916,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27818,6 +28054,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32244,6 +32485,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33724,9 +33969,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/fr.po b/i18n/po/fr.po
index 9af7656..19d8004 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-11-26 00:06+0100\n"
-"PO-Revision-Date: 2017-11-20 10:59+0000\n"
-"Last-Translator: Dirk Stöcker <launchpad at dstoecker.de>\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\n"
+"PO-Revision-Date: 2017-12-27 09:42+0000\n"
+"Last-Translator: Jérôme <Unknown>\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-11-26 04:43+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:43+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: fr\n"
 "X-Poedit-Bookmarks: -1,-1,-1,2669,-1,-1,-1,-1,-1,-1\n"
 
@@ -1053,6 +1053,14 @@ msgstr "Télécharger dans un nouveau calque"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "Télécharger les données dans un nouveau calque"
 
+msgid "Zoom to downloaded data"
+msgstr "Zoomer sur les données téléchargées"
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+"Sélectionner pour zoomer sur l’ensemble des données nouvellement "
+"téléchargées."
+
 msgid "Download Location"
 msgstr "Emplacement du téléchargement"
 
@@ -2449,6 +2457,37 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr "Confirmer"
 
+msgid "Export GPX file starting from first member"
+msgstr "Exporter en fichier GPX à partir du premier membre"
+
+msgid "Export GPX file starting from last member"
+msgstr "Exporter en fichier GPX à partir du dernier membre"
+
+msgid "Convert to GPX layer starting from first member"
+msgstr "Convertir en fichier GPX à partir du premier membre"
+
+msgid "Convert to GPX layer starting from last member"
+msgstr "Convertir en fichier GPX à partir du dernier membre"
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+"Réduire cette relation à une seule trace GPX de manière récursive, en "
+"commençant pas le(s) premier(s) membres(s), en continuant ainsi jusqu’au(x) "
+"dernier(s)."
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+"Réduire cette relation à une seule trace GPX de manière récursive, en "
+"commençant pas le(s) dernier (s) membres(s), en continuant ainsi jusqu’au(x) "
+"premier(s)."
+
+msgid "Selected Relations"
+msgstr "Relations sélectionnées"
+
 msgid "List of recent relations"
 msgstr "Liste des relations récentes"
 
@@ -3336,18 +3375,6 @@ msgstr "Le fichier de révision ''/REVISION'' est manquant."
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr "Un conflit est déjà enregistré pour l’objet ''{0}''"
 
-msgid "Decimal Degrees"
-msgstr "Degrés décimaux"
-
-msgid "deg° min'' sec\""
-msgstr "Degré:Minute:Seconde"
-
-msgid "deg° min'' (Nautical)"
-msgstr "Degré:Minute (nautiques)"
-
-msgid "Projected Coordinates"
-msgstr "Coordonnées projetées"
-
 msgctxt "compass"
 msgid "S"
 msgstr "S"
@@ -3364,9 +3391,21 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
+msgid "deg° min'' sec\""
+msgstr "Degré:Minute:Seconde"
+
+msgid "Decimal Degrees"
+msgstr "Degrés décimaux"
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr "Echec d analyse en tant que coordonnée: ''{0}''"
 
+msgid "deg° min'' (Nautical)"
+msgstr "Degré:Minute (nautiques)"
+
+msgid "Projected Coordinates"
+msgstr "Coordonnées projetées"
+
 msgid "Date of imagery: {0}"
 msgstr "Date des images: {0}"
 
@@ -9003,14 +9042,6 @@ msgstr ""
 "JOSM.<br>Vous pouvez l’ouvrir manuellement depuis le menu Fichier ou la "
 "barre d’outils.</html>"
 
-msgid "Zoom to downloaded data"
-msgstr "Zoomer sur les données téléchargées"
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-"Sélectionner pour zoomer sur l’ensemble des données nouvellement "
-"téléchargées."
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9664,6 +9695,8 @@ msgid ""
 "A background upload is already in progress. Kindly wait for it to finish "
 "before uploading new changes"
 msgstr ""
+"Un envoi en arrière-plan est déjà en cours. Veuillez attendre qu''il soit "
+"terminé avant d''envoyer de nouvelles modifications."
 
 msgid "I would like someone to review my edits."
 msgstr "J’aimerais que quelqu’un vérifie mes modifications."
@@ -10756,6 +10789,12 @@ msgstr "Métadonnées "
 msgid "Load tile"
 msgstr "Charger la tuile"
 
+msgid "Get tile status"
+msgstr "Obtenir le statut de la tuile"
+
+msgid "Force tile rendering"
+msgstr "Forcer le rendu de la tuile"
+
 msgid "Failed to create tile source"
 msgstr "Impossible de créer la source de la tuile"
 
@@ -10868,10 +10907,10 @@ msgstr "Nom : {0}"
 msgid "Description: {0}"
 msgstr "Description : {0}"
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
-msgstr[0] "{0} trace"
-msgstr[1] "{0} traces"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
+msgstr[0] "{0} trace, {1} segments de trace"
+msgstr[1] "{0} traces, {1} segments de trace"
 
 msgid "Timespan"
 msgstr "Durée"
@@ -10879,6 +10918,9 @@ msgstr "Durée"
 msgid "Length"
 msgstr "Longueur"
 
+msgid "Number of<br/>Segments"
+msgstr "Nombre de <br/>segments"
+
 msgid "Length: {0}"
 msgstr "Longueur : {0}"
 
@@ -10892,14 +10934,39 @@ msgid_plural "{0} waypoints"
 msgstr[0] "{0} point de passage"
 msgstr[1] "{0} points de passage"
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
-msgstr[0] "{0} trace, "
-msgstr[1] "{0} traces, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] "{0} trace"
+msgstr[1] "{0} traces"
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
+msgstr[0] " ({0} segment)"
+msgstr[1] " ({0} segments)"
 
 msgid "Save GPX file"
 msgstr "Enregistrer le fichier GPX"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+"Rassembler les segments de toutes les traces et les assembler en une seule "
+"trace"
+
+msgid "Combine tracks of this layer"
+msgstr "Combiner les traces de cette couche"
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr "Diviser les multiples segments d''une trace en traces séparées"
+
+msgid "Split track segments to tracks"
+msgstr "Diviser les segments de trace en traces"
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr "Diviser les traces de cette couche en autant de couches séparées"
+
+msgid "Split tracks to new layers"
+msgstr "Diviser les traces en nouvelles couches"
+
 msgid "Id"
 msgstr "Identifiant"
 
@@ -10941,6 +11008,20 @@ msgstr "Enregistrer le calque"
 
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
+"Essayé de définir un calque de données en lecture seule comme calque "
+"d''édition"
+
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+"Un téléversement en arrière-plan est déjà en cours. L’état ne peut être "
+"réinitialisé avant que le téléversement ne soit achevé"
 
 msgid "{0} note"
 msgid_plural "{0} notes"
@@ -11292,29 +11373,20 @@ msgstr "Erreur sur le fichier {0}"
 msgid "Display geotagged images"
 msgstr "Afficher les photos géolocalisées"
 
-msgid "Previous"
-msgstr "Précédent"
+msgid "Next"
+msgstr "Suivant"
 
-msgid "Show previous Image"
-msgstr "Afficher l’image précédente"
+msgid "Show next Image"
+msgstr "Afficher la prochaine image"
 
 msgid "Geoimage: {0}"
 msgstr "Géoimage : {0}"
 
-msgid "Remove photo from layer"
-msgstr "Supprimer la photo du calque"
-
-msgid "Delete File from disk"
-msgstr "Supprimer un fichier du disque"
-
-msgid "Copy image path"
-msgstr "Copier chemin de l’image"
-
-msgid "Next"
-msgstr "Suivant"
+msgid "Previous"
+msgstr "Précédent"
 
-msgid "Show next Image"
-msgstr "Afficher la prochaine image"
+msgid "Show previous Image"
+msgstr "Afficher l’image précédente"
 
 msgid "Show first Image"
 msgstr "Afficher la première image"
@@ -11328,6 +11400,15 @@ msgstr "Centrer la vue"
 msgid "Zoom best fit and 1:1"
 msgstr "Meilleur zoom et 1:1"
 
+msgid "Remove photo from layer"
+msgstr "Supprimer la photo du calque"
+
+msgid "Delete File from disk"
+msgstr "Supprimer un fichier du disque"
+
+msgid "Copy image path"
+msgstr "Copier chemin de l’image"
+
 msgid "Move dialog to the side pane"
 msgstr "Déplacer la fenêtre sur le panneau"
 
@@ -13195,7 +13276,7 @@ msgid "Show object ID in selection lists"
 msgstr "Afficher les identifiants dans la fenêtre de sélection"
 
 msgid "Show node coordinates in selection lists"
-msgstr ""
+msgstr "Afficher les coordonnées des nœuds dans les listes de sélection"
 
 msgid "Show localized name in selection lists"
 msgstr "Afficher les noms traduits dans la fenêtre de sélection"
@@ -14812,11 +14893,11 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr "Le nœud supprimé {0} fait partie du chemin {1}"
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
-"Le chemin {0} avec {1} nœuds a des nœuds incomplets car au moins un nœud "
-"était manquant dans les données chargées."
+"Le chemin {0} contenant {1} nœuds est incomplet car au moins un nœud est "
+"manquant dans la donnée téléversée."
 
 msgid ""
 "Relation with external id ''{0}'' refers to a missing primitive with "
@@ -15609,6 +15690,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr "Voulez-vous autoriser cela ?"
 
+msgid "Yes, always"
+msgstr "Oui, toujours"
+
+msgid "Yes, once"
+msgstr "Oui, une seule fois"
+
 msgid "Confirm Remote Control action"
 msgstr "Confirmer l’action du contrôle à distance"
 
@@ -21325,6 +21412,12 @@ msgstr "Détritus"
 msgid "Recycling Centre"
 msgstr "Déchèterie"
 
+msgid "trash"
+msgstr "corbeille"
+
+msgid "dog_excrement"
+msgstr "excréments de chien"
+
 msgid "Waste Disposal/Dumpster"
 msgstr "Benne à ordures"
 
@@ -25339,6 +25432,14 @@ msgstr "Transport Public (ÖPNV)"
 msgid "Hike & Bike"
 msgstr "Hike & Bike"
 
+msgid "OpenSnowMap overlay"
+msgstr "Couche OpenSnowMap"
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+"Couche d’imagerie pour la cartographie des pistes dans OSM. Mise à jour "
+"quotidienne."
+
 msgid "skobbler"
 msgstr "skobbler"
 
@@ -25679,8 +25780,11 @@ msgstr "carte de base de l’Autriche, basé sur les données gouvernementales."
 msgid "basemap.at Orthofoto"
 msgstr "basemap.at Orthophoto"
 
-msgid "Orthofoto layer provided by basemap.at. "
-msgstr "La couche Orthophoto fournie par basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
+msgstr ""
+"Couche d’orthophoto fournie par basemap.at. \"Succède\" à l’imagerie "
+"geoimage.at"
 
 msgid "Geoimage.at MaxRes"
 msgstr "Geoimage.at MaxRes"
@@ -26128,6 +26232,12 @@ msgstr "Cadastre estonien (Maaamet)"
 msgid "Estonia Forestry (Maaamet)"
 msgstr "Sylviculture estonienne (Maaamet)"
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr "BANO"
 
@@ -26216,9 +26326,6 @@ msgstr ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
 
-msgid "Hamburg (40 cm)"
-msgstr "Hambourg (40 cm)"
-
 msgid "Hamburg (20 cm)"
 msgstr "Hambourg (20 cm)"
 
@@ -26246,12 +26353,12 @@ msgstr "Berlin Photographie aérienne 2016"
 msgid "Berlin aerial photograph 2017"
 msgstr "Photographie aérienne de Berlin 2017"
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
-msgstr "Lignes VzG Deutsche Bahn 2013"
-
 msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr "Lignes VzG Deutsche Bahn 2015"
 
+msgid "Deutsche Bahn VzG lines January 2017"
+msgstr ""
+
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
 msgstr "Erlangen imagerie aérienne (2016 5.0 cm)"
 
@@ -26653,7 +26760,7 @@ msgid "Japan GSI ortho Imagery"
 msgstr "Imagerie ortho du Japon GSI"
 
 msgid "Japan GSI Standard Map"
-msgstr ""
+msgstr "Carte standard GSI du Japon"
 
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
@@ -26689,7 +26796,7 @@ msgid "20cm ortho - Latvia - Coastline"
 msgstr "20 cm ortho - Lettonie - Ligne de côte"
 
 msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
-msgstr ""
+msgstr "Orthophoto 1er cycle (1994-1999) - Lettonie"
 
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Lituanie)"
@@ -26698,19 +26805,7 @@ msgid "geoportail.lu all layers"
 msgstr "geoportail.lu toutes les couches"
 
 msgid "geoportail.lu ortho latest"
-msgstr ""
-
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr "Luxembourg Inspire Chemin de fer"
-
-msgid "Luxembourg Inspire Roads"
-msgstr "Luxembourg Inspire Routes"
-
-msgid "Luxembourg Inspire Water"
-msgstr "Luxembourg Inspire Eau"
+msgstr "Dernière orthophoto geoportail.lu"
 
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Delta du Niger Oct 2012 Landsat"
@@ -26737,8 +26832,160 @@ msgstr "LINZ NZ imagerie aérienne"
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr "LINZ NZ Carte Topo50 sans grille"
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
-msgstr "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr "Couche d’ombrage pour la Norvège"
+
+msgid "Kartverket Nautical Charts"
+msgstr "Cartes nautiques Kartverket"
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr "MTBmap.no"
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+"Limites administratives officielles aux échelles du pays, des comtés et des "
+"municipalités"
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr "Couche des installations offshore NPD"
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
+msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
 msgstr "Images OSM de imagico.de pour la cartographie: mosaïque de Svalbard"
@@ -26812,11 +27059,11 @@ msgstr "Imagerie pauvre et dépassée dans d autres sources (vraies couleurs)"
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr "Pangasinán/Bulacan (Philippines HiRes)"
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
-msgstr "Geoportal 2 : Ortofotomapa (image aérienne)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
+msgstr "Geoportal 2: Orthophoto (image aérienne)"
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
-msgstr "Geoportal 2: Ortofotomapa (imagerie aérienne) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
+msgstr "Geoportal 2: Orthophoto WMTS (image aérienne)"
 
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr "Geoportal 2: PRNG (geo names)"
@@ -26824,119 +27071,128 @@ msgstr "Geoportal 2: PRNG (geo names)"
 msgid "Geoportal 2: ISOK hillshade"
 msgstr "Geoportal 2: ISOK hillshade"
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
-msgstr "Będzin : Ortofotomapa 2013 (image aérienne)"
+msgid "polska.e-mapa.net: Buildings"
+msgstr ""
+
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
+msgstr "Będzin: Orthophoto 2013 (image aérienne)"
 
-msgid "Będzin: Budynki (buildings)"
-msgstr "Będzin: Budynki (bâtiments)"
+msgid "Będzin: Buildings"
+msgstr "Będzin: Bâtiments"
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
-msgstr "Bytom : Ortofotomapa 2012 (image aérienne)"
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
+msgstr "Bytom: Orthophoto 2012 (image aérienne)"
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr "Bytom: Fotoplan 2014 (image aérienne)"
 
-msgid "Bytom: Budynki (buildings)"
-msgstr "Bytom : Budynki (bâtiments)"
+msgid "Bytom: Buildings"
+msgstr "Bytom: Bâtiments"
+
+msgid "Chorzów: Buildings"
+msgstr "Chorzów: Bâtiments"
 
-msgid "Chorzów: Budynki (buildings)"
-msgstr "Chorzów : Budynki (bâtiments)"
+msgid "Częstochowa: Buildings"
+msgstr "Częstochowa: Bâtiments"
 
-msgid "Częstochowa: Budynki (buildings)"
-msgstr "Częstochowa: Budynki (bâtiments)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
+msgstr "Częstochowa: Orthophoto 2011 (image aérienne)"
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
-msgstr "Częstochowa : Ortofotomapa 2011 (image aérienne)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
+msgstr "Częstochowa: Orthophoto 2013 (image aérienne)"
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2013 (image aérienne)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
+msgstr "Częstochowa: Orthophoto 2014 (image aérienne)"
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2014 (image aérienne)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
+msgstr "Gliwice: Orthophoto 2013 (image aérienne)"
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
-msgstr "Gliwice : Ortofotomapa 2013 (image aérienne)"
+msgid "Gliwice: Buildings"
+msgstr "Gliwice: Bâtiments"
 
-msgid "Gliwice: Budynki (buildings)"
-msgstr "Gliwice: Budynki (bâtiments)"
+msgid "Katowice: Orthophotomap (aerial image)"
+msgstr "Katowice: Orthophoto (image aérienne)"
 
-msgid "Katowice: Ortofotomapa (aerial image)"
-msgstr "Katowice: Ortofotomapa (image aérienne)"
+msgid "Katowice: Buildings"
+msgstr "Katowice: Bâtiments"
 
-msgid "Katowice: Budynki (buildings)"
-msgstr "Katowice: Budynki (bâtiments)"
+msgid "Łódź: Buildings"
+msgstr "Łódź: Bâtiments"
 
-msgid "Łódź: Budynki (buildings)"
-msgstr "Łódź: Budynki (bâtiments)"
+msgid "Łódź: Orthophotomap (aerial image)"
+msgstr "Łódź: Orthophoto (image aérienne)"
 
-msgid "Łódź: Ortofotomapa (aerial image)"
-msgstr "Łódź : Ortofotomapa (image aérienne)"
+msgid "Powiat dębicki: Buildings"
+msgstr "Powiat de Dębica: Bâtiment"
 
-msgid "Powiat dębicki: Budynki (buildings)"
-msgstr "Powiat dębicki: Budynki (bâtiments)"
+msgid "Powiat lubaczowski: Buildings"
+msgstr "Powiat de Lubaczów: Bâtiments"
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
-msgstr "Powiat lubaczowski: Budynki (bâtiments)"
+msgid "Powiat łańcucki: Buildings"
+msgstr "Powiat de Łańcut: Bâtiments"
 
-msgid "Powiat łańcucki: Budynki (buildings)"
-msgstr "Powiat łańcucki: Budynki (bâtiments)"
+msgid "Powiat poznański: Buildings"
+msgstr "Powiat de Poznań: Bâtiments"
 
-msgid "Powiat poznański: Budynki (buildings)"
-msgstr "Powiat poznański: Budynki (bâtiments)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
+msgstr "Powiat de Poznań: Orthophoto (image aérienne)"
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
-msgstr "Powiat poznański: Ortofotomapa (image aérienne)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
+msgstr "Powiat de Ropczyce-Sędziszów: Bâtiments"
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
-msgstr "Powiat de Ropczycko-Sędziszowski: bâtiments"
+msgid "Powiat rzeszowski: Buildings"
+msgstr "Powiat de Rzeszów: Bâtiments"
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
-msgstr "Powiat rzeszowski: Budynki (bâtiments)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
+msgstr "Powiat de Rzeszów: Orthophoto (image aérienne)"
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
-msgstr "Powiat rzeszowski: Ortofotomapa (image aérienne)"
+msgid "Powiat stalowowolski: Buildings"
+msgstr "Powiat de Stalowa Wola: Bâtiments"
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
-msgstr "Powiat stalowowolski: Budynki (bâtiments)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
+msgstr "Poznań: Orthophoto 2014 (image aérienne)"
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
-msgstr "Poznań: Ortofotomapa 2014 (image aérienne)"
+msgid "Przemyśl: Buildings"
+msgstr "Przemyśl: Bâtiments"
 
-msgid "Przemyśl: Budynki (buildings)"
-msgstr "Przemyśl: Budynki (bâtiments)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
+msgstr "Przemyśl: Orthophoto (image aérienne)"
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
-msgstr "Przemyśl: Ortofotomapa (image aérienne)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
+msgstr "Ruda Śląska: Orthophoto (image aérienne)"
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
-msgstr "Ruda Śląska : Ortofotomapa (image aérienne)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
+msgstr "Rzeszów: Orthophoto (image aérienne)"
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
-msgstr "Rzeszów : Ortofotomapa (image aérienne)"
+msgid "Rzeszów: Buildings"
+msgstr "Rzeszów: Bâtiments"
 
-msgid "Rzeszów: Budynki (buildings)"
-msgstr "Rzeszów: Budynki (bâtiments)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
+msgstr "Siemianowice Śląskie: Orthophoto (image aérienne)"
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
-msgstr "Siemianowice Śląskie: Ortofotomapa (image aérienne)"
+msgid "Siemianowice Śląskie: Buildings"
+msgstr "Siemianowice Śląskie: Bâtiments"
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
-msgstr "Siemianowice Śląskie: bâtiments"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
+msgstr "Świętochłowice: Orthophoto 2008 (image aérienne)"
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2008 (image aérienne)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
+msgstr "Świętochłowice: Orthophoto 2009 (image aérienne)"
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2009 (image aérienne)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
+msgstr "Świętochłowice: Orthophoto 2012 (image aérienne)"
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2012 (image aérienne)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
+msgstr "Zabrze: Orthophoto 2011 (image aérienne)"
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
-msgstr "Zabrze: Ortofotomapa 2011 (image aérienne)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
+msgstr "Wrocław: Orthophoto 2015 (image aérienne)"
+
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
-msgstr "Wrocław : Orthophotographie 2015 (imagerie aérienne)"
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
+msgstr ""
 
 msgid "ScanEx IRS"
 msgstr "ScanEx IRS"
@@ -27088,6 +27344,18 @@ msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 "Complément a la couverture incomplète des autres sources (vraies couleurs)"
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr "Sentiers de motoneige"
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr "Canton d''Argovie 25 cm (AGIS 2011)"
 
@@ -27346,7 +27614,7 @@ msgstr ""
 "Mise a jour au moins trimestrielle."
 
 msgid "Texas Orthophoto"
-msgstr "Texas Orthophoto"
+msgstr "Orthophoto du Texas"
 
 msgid "Philadelphia 2015 Imagery"
 msgstr "Imagerie de Philadelphie 2015"
@@ -30081,15 +30349,12 @@ 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 "Open Mapillary layer"
+msgstr "Ouvrir la couche Mapillary"
 
 msgid "Mapillary"
 msgstr "Mapillary"
 
-msgid "Create Mapillary layer"
-msgstr "Créer un calque Mapillary"
-
 msgid "Download Mapillary images in current view"
 msgstr "Télécharger des images Mapillary dans la vue actuelle"
 
@@ -30154,14 +30419,8 @@ msgstr ""
 "menu Aide. Si ce message apparaît pour la première fois, essayez-le à "
 "nouveau. Cela pourrait avoir été un problème avec la connexion Internet."
 
-msgid "Upload pictures"
-msgstr "Envoi de photographies"
-
-msgid "Upload Mapillary pictures"
-msgstr "Envoi de photographies Mapillary"
-
-msgid "Upload pictures."
-msgstr "Envoi de photographies."
+msgid "Upload Mapillary images"
+msgstr "Téléverser les images mapillary"
 
 msgid "Walk mode"
 msgstr "Mode piéton"
@@ -30196,15 +30455,12 @@ msgstr "Exporter les images sélectionnées"
 msgid "Rewrite imported images"
 msgstr "Réécrire les images importées"
 
-msgid "Select a folder"
-msgstr "Sélectionner un dossier"
+msgid "Select a directory"
+msgstr "Sélectionner un répertoire"
 
 msgid "Explore"
 msgstr "Explorer"
 
-msgid "Select a directory"
-msgstr "Sélectionner un répertoire"
-
 msgid "Speed limit"
 msgstr "Limite de vitesse"
 
@@ -30339,6 +30595,13 @@ msgstr "Aperçu des images lors du survol de l’icône"
 msgid "Cut off sequences at download bounds"
 msgstr "Couper les séquences aux limites de téléchargement"
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+"A l’ouverture d’une image dans le navigateur, ouvrir l’éditeur de floutage "
+"au lieu du visualiseur d’images"
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 "Activer les beta-fonctionnalités expérimentales (peuvent être instables)"
@@ -35261,6 +35524,10 @@ msgstr "Réessayer"
 msgid "Unable to process file ''{0}'':"
 msgstr "Impossible de traiter le fichier \"{0}\" :"
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr "Le fichier ne peut pas être supprimé !"
 
@@ -36835,9 +37102,6 @@ msgstr "Exporter les données de trafic vers un fichier réseau SUMO"
 msgid "SUMO Export"
 msgstr "Export SUMO"
 
-msgid "Export"
-msgstr "Exporter"
-
 msgid "AutoSave LiveData"
 msgstr "Sauvegarde automatique des données en direct"
 
@@ -39136,7 +39400,7 @@ msgstr ""
 "sélection"
 
 msgid "Show/hide Sophox snippet list"
-msgstr ""
+msgstr "Afficher/masquer la liste des extraits Sophox"
 
 msgid "help"
 msgstr "Aide"
diff --git a/i18n/po/ga.po b/i18n/po/ga.po
index 33f18d5..d1797c6 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 04:45+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:44+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
 msgstr ""
@@ -952,6 +952,12 @@ msgstr ""
 msgid "Select if the data should be downloaded into a new layer"
 msgstr ""
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr ""
 
@@ -2224,6 +2230,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3027,18 +3058,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr ""
@@ -3055,9 +3074,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8230,12 +8261,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9729,6 +9754,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9833,8 +9864,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9844,6 +9875,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9857,14 +9891,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr ""
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9907,6 +9964,16 @@ msgstr ""
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10235,40 +10302,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13355,8 +13422,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14019,6 +14086,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19447,6 +19520,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23422,6 +23501,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23742,7 +23827,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24165,6 +24251,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24251,9 +24343,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24281,10 +24370,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24683,18 +24772,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24718,7 +24795,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24780,10 +25007,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24792,118 +25019,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25040,6 +25276,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27568,15 +27816,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27635,13 +27880,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27677,15 +27916,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27818,6 +28054,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32244,6 +32485,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33724,9 +33969,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/gl.po b/i18n/po/gl.po
index 815ec3b..385e212 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\n"
 "PO-Revision-Date: 2017-11-23 00:05+0000\n"
 "Last-Translator: Jesús López <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-11-26 04:46+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:45+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: gl\n"
 "X-Poedit-Language: Galician\n"
 
@@ -1033,6 +1033,12 @@ msgstr "Capa separada"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "Escoller se o dato debería estar nunha nova capa"
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr "Descargar Lugar"
 
@@ -2373,6 +2379,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr "Confirmación"
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr "Listaxe de relacións recentes"
 
@@ -3204,18 +3235,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr "Xa se rexistrou un conflito para a primitiva «{0}»"
 
-msgid "Decimal Degrees"
-msgstr "Grados Decimais"
-
-msgid "deg° min'' sec\""
-msgstr "gra° min'' seg\""
-
-msgid "deg° min'' (Nautical)"
-msgstr "gra° min'' (náuticos)"
-
-msgid "Projected Coordinates"
-msgstr "Coordenadas Proxectadas"
-
 msgctxt "compass"
 msgid "S"
 msgstr "S"
@@ -3232,9 +3251,21 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
+msgid "deg° min'' sec\""
+msgstr "gra° min'' seg\""
+
+msgid "Decimal Degrees"
+msgstr "Grados Decimais"
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr "gra° min'' (náuticos)"
+
+msgid "Projected Coordinates"
+msgstr "Coordenadas Proxectadas"
+
 msgid "Date of imagery: {0}"
 msgstr "Data da imaxe: {0}"
 
@@ -8562,12 +8593,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -10103,6 +10128,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -10209,10 +10240,10 @@ msgstr "Nome: {0}"
 msgid "Description: {0}"
 msgstr "Descrición: {0}"
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
-msgstr[0] "{0} camiño"
-msgstr[1] "{0} camiños"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Timespan"
 msgstr ""
@@ -10220,6 +10251,9 @@ msgstr ""
 msgid "Length"
 msgstr "Lonxitude"
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr "Lonxitude: {0}"
 
@@ -10233,14 +10267,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] "{0} punto de referencia"
 msgstr[1] "{0} puntos de referencia"
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
-msgstr[0] "{0} camiño, "
-msgstr[1] "{0} camiños, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] "{0} camiño"
+msgstr[1] "{0} camiños"
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr "Gardar ficheiro GPX"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -10283,6 +10340,16 @@ msgstr "Gardar capa"
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10613,29 +10680,20 @@ msgstr "Erro no ficheiro {0}"
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
-msgstr "Previo"
+msgid "Next"
+msgstr "Seguinte"
 
-msgid "Show previous Image"
-msgstr "Mostrar a imaxe previa"
+msgid "Show next Image"
+msgstr "Mostrar a seguinte imaxe"
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
-msgstr "Retirar a foto da capa"
-
-msgid "Delete File from disk"
-msgstr "Eliminar o ficheiro do disco"
-
-msgid "Copy image path"
-msgstr ""
-
-msgid "Next"
-msgstr "Seguinte"
+msgid "Previous"
+msgstr "Previo"
 
-msgid "Show next Image"
-msgstr "Mostrar a seguinte imaxe"
+msgid "Show previous Image"
+msgstr "Mostrar a imaxe previa"
 
 msgid "Show first Image"
 msgstr ""
@@ -10649,6 +10707,15 @@ msgstr "Centrar vista"
 msgid "Zoom best fit and 1:1"
 msgstr ""
 
+msgid "Remove photo from layer"
+msgstr "Retirar a foto da capa"
+
+msgid "Delete File from disk"
+msgstr "Eliminar o ficheiro do disco"
+
+msgid "Copy image path"
+msgstr ""
+
 msgid "Move dialog to the side pane"
 msgstr ""
 
@@ -13815,11 +13882,9 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr "O nodo eliminado {0} é parte da vía {1}"
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
-"Vía {0} con {1} nodos ten nodos incompletos porque polo menos falta un nodo "
-"nos datos cargados."
 
 msgid ""
 "Relation with external id ''{0}'' refers to a missing primitive with "
@@ -14503,6 +14568,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr "Desexa permitir esto?"
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr "Confirma a acción do Control Remoto"
 
@@ -19971,6 +20042,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23946,6 +24023,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -24266,7 +24349,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24689,6 +24773,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24775,9 +24865,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24805,10 +24892,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -25207,18 +25294,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -25242,7 +25317,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -25304,10 +25529,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -25316,118 +25541,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
+msgstr ""
+
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25564,6 +25798,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -28122,15 +28368,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -28189,13 +28432,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -28231,15 +28468,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -28372,6 +28606,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32821,6 +33060,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr "O ficheiro non puido ser eliminado!"
 
@@ -34303,9 +34546,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/he.po b/i18n/po/he.po
index 9024c97..1bd0241 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 04:47+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:46+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: he\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -960,6 +960,12 @@ msgstr "שכבה נפרדת"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr ""
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr "מיקום ההורדה"
 
@@ -2237,6 +2243,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3040,18 +3071,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr "מעלות עשרוניות"
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr "דרום"
@@ -3068,9 +3087,21 @@ msgctxt "compass"
 msgid "E"
 msgstr "מזרח"
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr "מעלות עשרוניות"
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8260,12 +8291,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9761,6 +9786,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9865,8 +9896,8 @@ msgstr "שם: {0}"
 msgid "Description: {0}"
 msgstr "תיאור: {0}"
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9876,6 +9907,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9889,14 +9923,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] "נקודת דרך {0}"
 msgstr[1] "{0} נקודות דרך"
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr "שמור קובץ GPX"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9939,6 +9996,16 @@ msgstr "שמור שכבה"
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10269,28 +10336,19 @@ msgstr "שגיאה בקובץ {0}"
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
-msgstr "קודמת"
+msgid "Next"
+msgstr "הבאה"
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
-msgstr "הסר תמונה משכבה"
-
-msgid "Delete File from disk"
-msgstr ""
-
-msgid "Copy image path"
-msgstr ""
-
-msgid "Next"
-msgstr "הבאה"
+msgid "Previous"
+msgstr "קודמת"
 
-msgid "Show next Image"
+msgid "Show previous Image"
 msgstr ""
 
 msgid "Show first Image"
@@ -10305,6 +10363,15 @@ msgstr "מרכז תצוגה"
 msgid "Zoom best fit and 1:1"
 msgstr ""
 
+msgid "Remove photo from layer"
+msgstr "הסר תמונה משכבה"
+
+msgid "Delete File from disk"
+msgstr ""
+
+msgid "Copy image path"
+msgstr ""
+
 msgid "Move dialog to the side pane"
 msgstr ""
 
@@ -13397,8 +13464,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14061,6 +14128,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr "האם אתה רוצה לאשר את זה?"
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr "אשר פעולת שלט רחוק"
 
@@ -19491,6 +19564,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23466,6 +23545,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23786,7 +23871,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24209,6 +24295,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24295,9 +24387,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24325,10 +24414,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24727,18 +24816,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24762,7 +24839,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24824,10 +25051,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24836,118 +25063,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
+msgstr ""
+
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Buildings"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25084,6 +25320,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27612,15 +27860,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27679,13 +27924,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27721,15 +27960,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27862,6 +28098,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32292,6 +32533,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33772,9 +34017,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/hi.po b/i18n/po/hi.po
index 5cae627..8bbc39b 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 04:48+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:47+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: hi\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -953,6 +953,12 @@ msgstr ""
 msgid "Select if the data should be downloaded into a new layer"
 msgstr ""
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr ""
 
@@ -2225,6 +2231,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3028,18 +3059,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr ""
@@ -3056,9 +3075,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8231,12 +8262,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9730,6 +9755,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9834,8 +9865,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9845,6 +9876,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9858,14 +9892,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr ""
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9908,6 +9965,16 @@ msgstr ""
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10236,40 +10303,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13356,8 +13423,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14020,6 +14087,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19448,6 +19521,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23423,6 +23502,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23743,7 +23828,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24166,6 +24252,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24252,9 +24344,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24282,10 +24371,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24684,18 +24773,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24719,7 +24796,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24781,10 +25008,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24793,118 +25020,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25041,6 +25277,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27569,15 +27817,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27636,13 +27881,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27678,15 +27917,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27819,6 +28055,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32245,6 +32486,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33725,9 +33970,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/hr.po b/i18n/po/hr.po
index a9c7c82..0790059 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 05:02+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 05:00+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: hr\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -994,6 +994,12 @@ msgstr "Razdjeli sloj (layer)"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr ""
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr "Preuzmi lokaciju"
 
@@ -2312,6 +2318,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3132,18 +3163,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr "S"
@@ -3160,9 +3179,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8353,12 +8384,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9875,6 +9900,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9979,8 +10010,8 @@ msgstr "Ime: {0}"
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9990,6 +10021,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -10004,14 +10038,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr "Spremi GPX datoteku"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr "Id"
 
@@ -10054,6 +10111,16 @@ msgstr "Snimi sloj"
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10386,40 +10453,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13506,8 +13573,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14170,6 +14237,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19598,6 +19671,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23573,6 +23652,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23893,7 +23978,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24316,6 +24402,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24402,9 +24494,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24432,10 +24521,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24834,18 +24923,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24869,7 +24946,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24931,10 +25158,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24943,118 +25170,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25191,6 +25427,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27719,15 +27967,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27786,13 +28031,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27828,15 +28067,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27969,6 +28205,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32395,6 +32636,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33875,9 +34120,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/ht.po b/i18n/po/ht.po
index e9f9cc4..d2a5476 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 04:47+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:46+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -953,6 +953,12 @@ msgstr ""
 msgid "Select if the data should be downloaded into a new layer"
 msgstr ""
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr ""
 
@@ -2225,6 +2231,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3028,18 +3059,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr ""
@@ -3056,9 +3075,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8231,12 +8262,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9730,6 +9755,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9834,8 +9865,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9845,6 +9876,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9858,14 +9892,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr ""
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9908,6 +9965,16 @@ msgstr ""
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10236,40 +10303,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13356,8 +13423,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14020,6 +14087,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19448,6 +19521,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23423,6 +23502,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23743,7 +23828,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24166,6 +24252,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24252,9 +24344,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24282,10 +24371,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24684,18 +24773,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24719,7 +24796,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24781,10 +25008,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24793,118 +25020,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25041,6 +25277,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27569,15 +27817,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27636,13 +27881,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27678,15 +27917,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27819,6 +28055,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32245,6 +32486,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33725,9 +33970,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/hu.po b/i18n/po/hu.po
index 96aeea8..e04574c 100644
--- a/i18n/po/hu.po
+++ b/i18n/po/hu.po
@@ -8,16 +8,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-11-26 00:06+0100\n"
-"PO-Revision-Date: 2017-11-13 21:35+0000\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\n"
+"PO-Revision-Date: 2017-12-28 21:40+0000\n"
 "Last-Translator: Báthory Péter <bathory86p at gmail.com>\n"
 "Language-Team: Hungarian <kde-l10n-hu at kde.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2017-11-26 04:48+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:47+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: hu\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1040,6 +1040,13 @@ msgstr "Külön rétegen"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "Jelöld be, ha az adatokat egy új rétegre szeretnéd letölteni"
 
+msgid "Zoom to downloaded data"
+msgstr "Nagyítás a letöltött adatokra"
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+"Válaszd ki, ha szeretnél ránagyítani az összes újonnan letöltött adatra."
+
 msgid "Download Location"
 msgstr "Letöltési hely"
 
@@ -1458,7 +1465,7 @@ msgid "Search presets"
 msgstr "Készlet keresése"
 
 msgid "Discourage upload"
-msgstr ""
+msgstr "Feltöltés nem javasolt"
 
 msgid "UnGlue Ways"
 msgstr "Vonalak szétválasztása"
@@ -2430,6 +2437,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr "Megerősítés"
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr "Legutóbbi kapcsolatok listája"
 
@@ -3302,18 +3334,6 @@ msgstr "A \"/REVISION\" verziófájl hiányzik."
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr "Már van bejegyzett ütközés ''{0}'' elemre."
 
-msgid "Decimal Degrees"
-msgstr "Tizedes fok"
-
-msgid "deg° min'' sec\""
-msgstr "fok° perc'' mp\""
-
-msgid "deg° min'' (Nautical)"
-msgstr "fok° perc'' (tengerészeti)"
-
-msgid "Projected Coordinates"
-msgstr "Vetített Koordináták"
-
 msgctxt "compass"
 msgid "S"
 msgstr "D"
@@ -3330,8 +3350,20 @@ msgctxt "compass"
 msgid "E"
 msgstr "K"
 
+msgid "deg° min'' sec\""
+msgstr "fok° perc'' mp\""
+
+msgid "Decimal Degrees"
+msgstr "Tizedes fok"
+
 msgid "Unable to parse as coordinate value: ''{0}''"
-msgstr ""
+msgstr "Nem sikerült koordináta értékként értelmezni: „{0}”"
+
+msgid "deg° min'' (Nautical)"
+msgstr "fok° perc'' (tengerészeti)"
+
+msgid "Projected Coordinates"
+msgstr "Vetített Koordináták"
 
 msgid "Date of imagery: {0}"
 msgstr "Légifelvétel dátuma: {0}"
@@ -3812,16 +3844,20 @@ msgid "areatext"
 msgstr "területszöveg"
 
 msgid "Failed to create missing preferences directory: {0}"
-msgstr ""
+msgstr "Nem sikerült létrehozni a beállítások hiányzó könyvtárát: {0}"
 
 msgid "<html>Failed to create missing preferences directory: {0}</html>"
 msgstr ""
+"<html>Nem sikerült létrehozni a beállítások hiányzó könyvtárát: {0}</html>"
 
 msgid "Failed to create missing user data directory: {0}"
 msgstr ""
+"Nem sikerült létrehozni a felhasználói adatok hiányzó könyvtárát: {0}"
 
 msgid "<html>Failed to create missing user data directory: {0}</html>"
 msgstr ""
+"<html>Nem sikerült létrehozni a felhasználói adatok hiányzó könyvtárát: "
+"{0}</html>"
 
 msgid "Failed to create missing cache directory: {0}"
 msgstr "Nem sikerült létrehozni a hiányző cache könyvtárat: {0}"
@@ -4074,6 +4110,9 @@ msgid ""
 "no files are given, or the filename is \"-\", data is read from standard "
 "input."
 msgstr ""
+"Bemenő adatokat olvas egy vagy több paraméterként felsorolt fájlból. Ha "
+"nincs fájl megadva, vagy a fájlnév „-”, akkor az adatokat a szabványos "
+"bemenetről olvassa."
 
 msgid "Examples"
 msgstr "Példák"
@@ -4081,9 +4120,11 @@ msgstr "Példák"
 msgid ""
 "Expected two coordinates, separated by white space, found {0} in ''{1}''"
 msgstr ""
+"Két szóközzel elválasztott koordináta megadását vártam, helyette {0} "
+"található itt: „{1}”"
 
 msgid "Unable to parse number ''{0}''"
-msgstr ""
+msgstr "„{0}” szám nem értelmezhető"
 
 msgid "GRS80"
 msgstr "GRS80"
@@ -4523,7 +4564,7 @@ msgid "Multipolygon is not closed"
 msgstr "A multipoligon nem zárt"
 
 msgid "Self-intersecting polygon ring"
-msgstr ""
+msgstr "Önmagát metsző poligon gyűrű"
 
 msgid "Multipolygon rings share node(s)"
 msgstr "A multipoligon gyűrűknek közös pontja(i) van(nak)"
@@ -5247,23 +5288,25 @@ msgid "usage"
 msgstr "használat"
 
 msgid "commands"
-msgstr ""
+msgstr "parancsok"
 
 msgid "launch JOSM (default, performed when no command is specified)"
-msgstr ""
+msgstr "JOSM futtatása (alapértelmezett, ha nincs más parancs megadva)"
 
 msgid "render data and save the result to an image file"
-msgstr ""
+msgstr "adatok renderelése és az eredmény mentése képként"
 
 msgid "convert coordinates from one coordinate reference system to another"
-msgstr ""
+msgstr "koordináták konvertálása egyik koordinátarendszerből a másikba"
 
 msgid ""
 "For details on the {0} and {1} commands, run them with the {2} option."
 msgstr ""
+"A {0} és {1} parancsokról bővebb információért futtasd őket {2} kapcsolóval."
 
 msgid "The remainder of this help page documents the {0} command."
 msgstr ""
+"Ezen súgó oldal a továbbiakban a {0} parancs dokumentációját tartalmazza."
 
 msgid "options"
 msgstr "beállítások"
@@ -8893,13 +8936,6 @@ msgstr ""
 "indításakor.<br>Manuálisan is megnyithatod a Fájl menüből, vagy az "
 "eszközsorról.</html>"
 
-msgid "Zoom to downloaded data"
-msgstr "Nagyítás a letöltött adatokra"
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-"Válaszd ki, ha szeretnél ránagyítani az összes újonnan letöltött adatra."
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9550,6 +9586,8 @@ msgid ""
 "A background upload is already in progress. Kindly wait for it to finish "
 "before uploading new changes"
 msgstr ""
+"Egy háttérben futó feltöltés már folyamatban van. Kérlek, várd meg a "
+"befejeződését, mielőtt új módosításcsomagot töltenél fel."
 
 msgid "I would like someone to review my edits."
 msgstr "Szeretném, hogy valaki átnézze a szerkesztéseimet."
@@ -10607,6 +10645,12 @@ msgstr "Metaadatok "
 msgid "Load tile"
 msgstr "Csempe betöltése"
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr "Csempeforrás létrehozása nem sikerült"
 
@@ -10715,10 +10759,10 @@ msgstr "Név: {0}"
 msgid "Description: {0}"
 msgstr "Leírás: {0}"
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
-msgstr[0] "{0} nyomvonal"
-msgstr[1] "{0} nyomvonal"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Timespan"
 msgstr "Időtartam"
@@ -10726,6 +10770,9 @@ msgstr "Időtartam"
 msgid "Length"
 msgstr "Hossz"
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr "Hossz: {0}"
 
@@ -10739,14 +10786,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] "{0} útpont"
 msgstr[1] "{0} útpont"
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
-msgstr[0] "{0} nyomvonal, "
-msgstr[1] "{0} nyomvonal, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] "{0} nyomvonal"
+msgstr[1] "{0} nyomvonal"
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr "GPX fájl mentése"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr "ID"
 
@@ -10789,6 +10859,16 @@ msgstr "Réteg mentése"
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] "{0} jegyzet"
@@ -11135,29 +11215,20 @@ msgstr "Hibás fájl: {0}"
 msgid "Display geotagged images"
 msgstr "Geotagelt képek megjelenítése"
 
-msgid "Previous"
-msgstr "Előző"
+msgid "Next"
+msgstr "Következő"
 
-msgid "Show previous Image"
-msgstr "Előző kép megjelenítése"
+msgid "Show next Image"
+msgstr "Mutasd a következő képet"
 
 msgid "Geoimage: {0}"
 msgstr "Geokép: {0}"
 
-msgid "Remove photo from layer"
-msgstr "Fénykép eltávolítása a rétegről"
-
-msgid "Delete File from disk"
-msgstr "Fájl törlése a lemezről"
-
-msgid "Copy image path"
-msgstr "Kép elérési útvonalának másolása"
-
-msgid "Next"
-msgstr "Következő"
+msgid "Previous"
+msgstr "Előző"
 
-msgid "Show next Image"
-msgstr "Mutasd a következő képet"
+msgid "Show previous Image"
+msgstr "Előző kép megjelenítése"
 
 msgid "Show first Image"
 msgstr "Első kép megjelenítése"
@@ -11171,6 +11242,15 @@ msgstr "Képhez ugrás (nézet közepére)"
 msgid "Zoom best fit and 1:1"
 msgstr "Nagyítás váltása teljes méretre és 1:1 arányra"
 
+msgid "Remove photo from layer"
+msgstr "Fénykép eltávolítása a rétegről"
+
+msgid "Delete File from disk"
+msgstr "Fájl törlése a lemezről"
+
+msgid "Copy image path"
+msgstr "Kép elérési útvonalának másolása"
+
 msgid "Move dialog to the side pane"
 msgstr "Dialógus áthelyezése az oldalsávra"
 
@@ -11511,63 +11591,70 @@ msgid "Error - file not found: ''{0}''"
 msgstr "Hiba, a fájl nem található: „{0}”"
 
 msgid "Expected integer number for option {0}, but got ''{1}''"
-msgstr ""
+msgstr "{0} kapcsoló egész számot várt, de ezt kapta: „{1}”"
 
 msgid "Expected integer number >= 0 for option {0}, but got ''{1}''"
-msgstr ""
+msgstr "{0} kapcsoló 0 <= egész számot várt, de ezt kapta: „{1}”"
 
 msgid "Unable to parse {0} parameter: {1}"
-msgstr ""
+msgstr "{0} paramétert nem sikerült értelmezni: {1}"
 
 msgid ""
 "Expected key and value, separated by '':'' character for option {0}, but got "
 "''{1}''"
 msgstr ""
+"{0} kapcsoló „:”-al elválasztott kulcs-érték párt várt, de ezt kapta: „{1}”"
 
 msgid "Expected floating point number for option {0}, but got ''{1}''"
-msgstr ""
+msgstr "{0} kapcsoló lebegőpontos számot várt, de ezt kapta: „{1}”"
 
 msgid ""
 "Expected two coordinates, separated by comma, for option {0}, but got ''{1}''"
 msgstr ""
+"{0} kapcsoló két, vesszővel elválasztott koordinátát várt, de ezt kapta: "
+"„{1}”"
 
 msgid "In option {0}: {1}"
-msgstr ""
+msgstr "{0} kapcsolóban: {1}"
 
 msgid "Expected floating point number > 0 for option {0}, but got ''{1}''"
 msgstr ""
 
 msgid "Expected integer number > 0 for option {0}, but got ''{1}''"
-msgstr ""
+msgstr "{0} kapcsoló 0 < egész számot várt, de ezt kapta: „{1}”"
 
 msgid "JOSM rendering command line interface"
-msgstr ""
+msgstr "JOSM renderelő parancssoros interfész"
 
 msgid "Renders data and saves the result to an image file."
-msgstr ""
+msgstr "Adatokat renderel és az eredményt képfájlba menti."
 
 msgid "Input data file name (.osm)"
-msgstr ""
+msgstr "Bemeneti adat fájlnév (.osm)"
 
 msgid "Output image file name (.png); defaults to ''{0}''"
-msgstr ""
+msgstr "Kimeneti kép fájlnév (.png); alapértelmezett: „{0}”"
 
 msgid "Style file to use for rendering (.mapcss or .zip)"
-msgstr ""
+msgstr "Rendereléshez használt stílusfájl (.mapcss vagy .zip)"
 
 msgid "This option can be repeated to load multiple styles."
-msgstr ""
+msgstr "Több stílusfájl betöltéséhez a kapcsoló megismételhető."
 
 msgid ""
 "Style setting (in JOSM accessible in the style list dialog right click menu)"
 msgstr ""
+"Stílusbeállítás (JOSM-ben a térképrajz dialógus jobb klikkes menüjében "
+"érhető el)"
 
 msgid "Applies to the last style loaded with the {0} option."
-msgstr ""
+msgstr "Az utolsó, {0} opcióval megadott stílusra alkalmazza."
 
 msgid ""
 "Select zoom level to render. (integer value, 0=entire earth, 18=street level)"
 msgstr ""
+"Zoomszint kiválasztása rendereléshez. (egész érték, 0=egész Föld, "
+"18=utcaszint)"
 
 msgid "Select the map scale"
 msgstr ""
@@ -14605,11 +14692,9 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr "A(z) {0} törölt pont a(z) {1} vonal része."
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
-"{0} vonal {1} ponttal félkész pontokat tartalmaz, vagyis legalább egy pont "
-"hiányzik a betöltött adatból"
 
 msgid ""
 "Relation with external id ''{0}'' refers to a missing primitive with "
@@ -15353,6 +15438,12 @@ msgstr "A Távirányítóhoz kérés érkezett, hogy töltsön be egy helyi fáj
 msgid "Do you want to allow this?"
 msgstr "Jóvá akarod ezt hagyni?"
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr "Távirányító aktivitás jóváhagyása"
 
@@ -16636,7 +16727,7 @@ msgstr "tömegközlekedési útvonalhálózat"
 
 msgctxt "Relation type"
 msgid "site"
-msgstr "telephely"
+msgstr "helyszín"
 
 msgctxt "Relation type"
 msgid "street"
@@ -18130,7 +18221,7 @@ msgid "driveway"
 msgstr "kocsifelhajtó"
 
 msgid "parking_aisle"
-msgstr "parkolóút"
+msgstr "parkolón belüli út"
 
 msgid "drive-through"
 msgstr "áthajtó"
@@ -18139,7 +18230,7 @@ msgid "emergency_access"
 msgstr "tűzoltási felvonulási út"
 
 msgid "Parking Aisle"
-msgstr "Parkolóút"
+msgstr "Parkolón belüli út"
 
 msgid "Escape"
 msgstr "Fékezősáv (\"majomfogó\")"
@@ -21045,6 +21136,12 @@ msgstr "Kommunális hulladék"
 msgid "Recycling Centre"
 msgstr "Hulladékudvar"
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr "Szemeteskonténer"
 
@@ -25050,6 +25147,12 @@ msgstr "Tömegközlekedés (ÖPNV)"
 msgid "Hike & Bike"
 msgstr "Túra és kerékpár"
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr "skobbler"
 
@@ -25374,7 +25477,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr "basemap.at ortofotó"
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -25798,6 +25902,12 @@ msgstr "Estonia Kataszteri (Maaamet)"
 msgid "Estonia Forestry (Maaamet)"
 msgstr "Estonia Forestry (Maaamet)"
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr "BANO"
 
@@ -25886,9 +25996,6 @@ msgstr ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Ortofotók 1999 - "
 "1 m"
 
-msgid "Hamburg (40 cm)"
-msgstr "Hamburg (40 cm)"
-
 msgid "Hamburg (20 cm)"
 msgstr "Hamburg (20 cm)"
 
@@ -25916,10 +26023,10 @@ msgstr "Berlin légifotó 2016"
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -26328,18 +26435,6 @@ msgstr "geoportail.lu összes réteg"
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr "Luxembourg Inspire Vasúti"
-
-msgid "Luxembourg Inspire Roads"
-msgstr "Luxembourg Inspire Utak"
-
-msgid "Luxembourg Inspire Water"
-msgstr "Luxembourg Inspire vizek"
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Niger Delta Oct 2012 Landsat"
 
@@ -26363,8 +26458,158 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
-msgstr "Svalbard -ortofotó 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
+msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
 msgstr ""
@@ -26427,11 +26672,11 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
-msgstr "Geoportal 2: Ortofotomapa (légifelvétel)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
-msgstr "Geoportal 2: Ortofotomapa (légifelvétel) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
+msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr "Geoportal 2: PRNG (földrajzi nevek)"
@@ -26439,119 +26684,128 @@ msgstr "Geoportal 2: PRNG (földrajzi nevek)"
 msgid "Geoportal 2: ISOK hillshade"
 msgstr "Geoportal 2: ISOK domborzatárnyékolás"
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
-msgstr "Będzin: Ortofotomapa 2013 (légifelvétel)"
+msgid "polska.e-mapa.net: Buildings"
+msgstr ""
+
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
+msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
-msgstr "Będzin: Budynki (épületek)"
+msgid "Będzin: Buildings"
+msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
-msgstr "Bytom: Ortofotomapa 2012 (légifelvétel)"
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
+msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr "Bytom: Fotoplan 2014 (légifelvétel)"
 
-msgid "Bytom: Budynki (buildings)"
-msgstr "Bytom: Budynki (épületek)"
+msgid "Bytom: Buildings"
+msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
-msgstr "Chorzów: Budynki (épületek)"
+msgid "Chorzów: Buildings"
+msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
-msgstr "Częstochowa: Budynki (épületek)"
+msgid "Częstochowa: Buildings"
+msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2011 (légifelvétel)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
+msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2013 (légifelvétel)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
+msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2014 (légifelvétel)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
+msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
-msgstr "Gliwice: Ortofotomapa 2013 (légifelvétel)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
+msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
-msgstr "Gliwice: Budynki (épületek)"
+msgid "Gliwice: Buildings"
+msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
-msgstr "Katowice: Ortofotomapa (légifelvétel)"
+msgid "Katowice: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
-msgstr "Katowice: Budynki (épületek)"
+msgid "Katowice: Buildings"
+msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
-msgstr "Łódź: Budynki (épületek)"
+msgid "Łódź: Buildings"
+msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
-msgstr "Łódź: Ortofotomapa (légifelvétel)"
+msgid "Łódź: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
-msgstr "Powiat dębicki: Budynki (épületek)"
+msgid "Powiat dębicki: Buildings"
+msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
-msgstr "Powiat lubaczowski: Budynki (épületek)"
+msgid "Powiat lubaczowski: Buildings"
+msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
-msgstr "Powiat łańcucki: Budynki (épületek)"
+msgid "Powiat łańcucki: Buildings"
+msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
-msgstr "Powiat poznański: Budynki (épületek)"
+msgid "Powiat poznański: Buildings"
+msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
-msgstr "Powiat poznański: Ortofotomapa (légifelvétel)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
-msgstr "Powiat ropczycko-sędziszowski: Budynki (épületek)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
+msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
-msgstr "Powiat rzeszowski: Budynki (épületek)"
+msgid "Powiat rzeszowski: Buildings"
+msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
-msgstr "Powiat rzeszowski: Ortofotomapa (légifelvétel)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
-msgstr "Powiat stalowowolski: Budynki (épületek)"
+msgid "Powiat stalowowolski: Buildings"
+msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
-msgstr "Poznań: Ortofotomapa 2014 (légifotó)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
+msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
-msgstr "Przemyśl: Budynki (épületek)"
+msgid "Przemyśl: Buildings"
+msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
-msgstr "Przemyśl: Ortofotomapa (légifelvétel)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
+msgstr ""
+
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
+msgstr ""
+
+msgid "Rzeszów: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
-msgstr "Ruda Śląska: Ortofotomapa (légifelvétel)"
+msgid "Rzeszów: Buildings"
+msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
-msgstr "Rzeszów: Ortofotomapa (légifelvétel)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
-msgstr "Rzeszów: Budynki (épületek)"
+msgid "Siemianowice Śląskie: Buildings"
+msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
-msgstr "Siemianowice Śląskie: Ortofotomapa (légifelvétel)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
+msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
-msgstr "Siemianowice Śląskie: Budynki (épületek)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
+msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2008 (légifelvétel)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
+msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2009 (légifelvétel)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
+msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2012 (légifelvétel)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
+msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
-msgstr "Zabrze: Ortofotomapa 2011 (légifelvétel)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
-msgstr "Wrocław: Ortofotomapa 2015 (légifelvétel)"
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
+msgstr ""
 
 msgid "ScanEx IRS"
 msgstr "ScanEx IRS"
@@ -26690,6 +26944,18 @@ msgstr "imagico.de OSM képek térképezéshez: Adams-híd"
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr "Kanton Aargau 25cm (AGIS 2011)"
 
@@ -27481,6 +27747,7 @@ msgstr "OS Várostervek, Paisley 1858 (NLS)"
 msgid ""
 "Detailed town plan of Paisley 1858, courtesy of National Library of Scotland."
 msgstr ""
+"Paisley részletes városterve (1858), a Skót Nemzeti Könyvtár jóvoltából"
 
 msgid "OS Town Plans, Peebles 1856 (NLS)"
 msgstr "Angol (OS) városrendezési tervek, Peebles 1856 (NLS)"
@@ -29454,15 +29721,12 @@ 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 "Open Mapillary layer"
+msgstr ""
 
 msgid "Mapillary"
 msgstr "Mapillary"
 
-msgid "Create Mapillary layer"
-msgstr "Mapillary réteg készítése"
-
 msgid "Download Mapillary images in current view"
 msgstr "Mapillary képek letöltése a jelenlegi nézeten"
 
@@ -29521,14 +29785,8 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr "Képek feltöltése"
-
-msgid "Upload Mapillary pictures"
-msgstr "Mapillary képek feltöltése"
-
-msgid "Upload pictures."
-msgstr "Képek feltöltése."
+msgid "Upload Mapillary images"
+msgstr ""
 
 msgid "Walk mode"
 msgstr "Gyalogos mód"
@@ -29563,15 +29821,12 @@ msgstr "Kijelölt képek exportálása"
 msgid "Rewrite imported images"
 msgstr "Importált képek átírása"
 
-msgid "Select a folder"
-msgstr "Mappa kijelölése"
+msgid "Select a directory"
+msgstr "Könyvtár kijelölése"
 
 msgid "Explore"
 msgstr "Böngészés"
 
-msgid "Select a directory"
-msgstr "Könyvtár kijelölése"
-
 msgid "Speed limit"
 msgstr "Sebességkorlátozás"
 
@@ -29704,6 +29959,11 @@ msgstr "Kép előnézete, ha az egér az ikon fölött áll"
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -34274,6 +34534,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr "A fájlt nem lehetett törölni!"
 
@@ -35795,9 +36059,6 @@ msgstr "Forgalmi adatok kiöntése SUMO hálózati fájlba."
 msgid "SUMO Export"
 msgstr "SUMO kiöntés"
 
-msgid "Export"
-msgstr "Kiöntés"
-
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -36512,82 +36773,88 @@ msgid "Create a new signing key"
 msgstr ""
 
 msgid "Turn lanes tagging - editor"
-msgstr ""
+msgstr "Kanyarodósáv címkézés szerkesztő"
 
 msgid "Turn lanes tagging - Editor"
-msgstr ""
+msgstr "Kanyarodósáv címkézés - Szerkesztő"
 
 msgid "turn lanes tagging - editor"
-msgstr ""
+msgstr "kanyarodósáv címkézés szerkesztő"
 
 msgid "Turn Lanes Editor"
-msgstr ""
+msgstr "Kanyarodósáv szerkesztő"
 
 msgid " The number of lanes has fixed according number of turns"
-msgstr ""
+msgstr " A sávok száma javítva lesz a kanyarodósávok alapján"
 
 msgid " The number of lanes:forward has fixed according number of turns"
 msgstr ""
+" A vonal irányába menő sávok lanes:forward száma javítva lesz a "
+"kanyarodósávok alapján"
 
 msgid " The number of lanes:both_ways has fixed according number of turns"
 msgstr ""
+" A kétirányú sávok (lanes:both_ways) száma javítva lesz a kanyarodósávok "
+"alapján"
 
 msgid " The number of lanes:backward has fixed according number of turns"
 msgstr ""
+" A vonal irányával ellentétesen menő sávok (lanes:backward) száma javítva "
+"lesz a kanyarodósávok alapján"
 
 msgid "check the right direction of the way"
-msgstr ""
+msgstr "ellenőrizd a vonal irányát"
 
 msgid "Unidirectional road"
-msgstr ""
+msgstr "Egyirányú út"
 
 msgid "Build unidirectional road"
-msgstr ""
+msgstr "Egyirányú út készítése"
 
 msgid "Bidirectional road"
-msgstr ""
+msgstr "Kétirányú út"
 
 msgid "Build bidirectional road"
-msgstr ""
+msgstr "Kétirányú út készítése"
 
 msgid "Use \"none\""
-msgstr ""
+msgstr "„none” használata"
 
 msgid "use \"none\" instead of empty values"
-msgstr ""
+msgstr "üres értékek helyett használjon „none”-t"
 
 msgid "Preset turn lanes"
-msgstr ""
+msgstr "Előre beállított"
 
 msgid "Recently turn lanes edits"
-msgstr ""
+msgstr "Legutóbbi szerkesztések"
 
 msgid "Forward"
 msgstr "Előre"
 
 msgid "Both way lane"
-msgstr ""
+msgstr "Kétirányú sáv"
 
 msgid "Backward"
 msgstr "Visszafelé"
 
 msgid "Number of backward lanes"
-msgstr ""
+msgstr "Visszafelé irányú sávok száma"
 
 msgid "Number of forward lanes"
-msgstr ""
+msgstr "Előre irányú sávok száma"
 
 msgid "Both way"
-msgstr ""
+msgstr "Mindkét irány"
 
 msgid "Number of lanes"
-msgstr ""
+msgstr "Sávok száma"
 
 msgid "Directional"
-msgstr ""
+msgstr "Irányok"
 
 msgid "Turn lanes"
-msgstr ""
+msgstr "Kanyarodósáv"
 
 msgid "No such lane."
 msgstr "Nincs ilyen sáv."
@@ -36607,7 +36874,7 @@ msgstr ""
 "hogy biztosan konzisztensek-e az adatok.<br><br>Hiba: {0}</html>"
 
 msgid "Edit turn relations and lane lengths for selected node."
-msgstr "Szerkezd meg a kapcsolatokat és a sávok hosszát a kijelölt ponthoz."
+msgstr "Szerkeszd meg a kapcsolatokat és a sávok hosszát a kijelölt ponthoz."
 
 msgid "Validate turn- and lane-length-relations for consistency."
 msgstr "Kanyar- és sávhossz-kapcsolatok ellenörzése a konzisztenciához."
diff --git a/i18n/po/hy.po b/i18n/po/hy.po
index 1038dbd..84b0f49 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 04:35+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:35+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: hy\n"
 
 msgid "Cancel"
@@ -953,6 +953,12 @@ msgstr ""
 msgid "Select if the data should be downloaded into a new layer"
 msgstr ""
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr ""
 
@@ -2225,6 +2231,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3028,18 +3059,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr ""
@@ -3056,9 +3075,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8231,12 +8262,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9730,6 +9755,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9834,8 +9865,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9845,6 +9876,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9858,14 +9892,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr ""
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9908,6 +9965,16 @@ msgstr ""
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10236,40 +10303,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13356,8 +13423,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14020,6 +14087,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19448,6 +19521,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23423,6 +23502,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23743,7 +23828,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24166,6 +24252,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24252,9 +24344,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24282,10 +24371,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24684,18 +24773,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24719,7 +24796,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24781,10 +25008,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24793,118 +25020,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25041,6 +25277,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27569,15 +27817,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27636,13 +27881,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27678,15 +27917,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27819,6 +28055,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32245,6 +32486,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33725,9 +33970,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/ia.po b/i18n/po/ia.po
index ed4ef84..8726661 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 04:49+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:48+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: ia\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -953,6 +953,12 @@ msgstr ""
 msgid "Select if the data should be downloaded into a new layer"
 msgstr ""
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr ""
 
@@ -2225,6 +2231,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3028,18 +3059,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr ""
@@ -3056,9 +3075,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8231,12 +8262,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9730,6 +9755,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9834,8 +9865,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9845,6 +9876,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9858,14 +9892,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr ""
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9908,6 +9965,16 @@ msgstr ""
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10236,40 +10303,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13356,8 +13423,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14020,6 +14087,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19448,6 +19521,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23423,6 +23502,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23743,7 +23828,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24166,6 +24252,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24252,9 +24344,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24282,10 +24371,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24684,18 +24773,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24719,7 +24796,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24781,10 +25008,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24793,118 +25020,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25041,6 +25277,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27569,15 +27817,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27636,13 +27881,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27678,15 +27917,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27819,6 +28055,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32245,6 +32486,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33725,9 +33970,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/id.po b/i18n/po/id.po
index 20db94d..09258bf 100644
--- a/i18n/po/id.po
+++ b/i18n/po/id.po
@@ -7,16 +7,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-11-26 00:06+0100\n"
-"PO-Revision-Date: 2017-11-24 08:03+0000\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\n"
+"PO-Revision-Date: 2017-12-21 09:17+0000\n"
 "Last-Translator: Adhitya Dido Widyanto <Unknown>\n"
 "Language-Team: Indonesian <id at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2017-11-26 04:49+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:48+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: id\n"
 "X-Language: id_ID\n"
 
@@ -1018,6 +1018,12 @@ msgstr "Memisahkan layer"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "Pilih jika data yang seharusnya didownload ke dalam layer baru"
 
+msgid "Zoom to downloaded data"
+msgstr "Perbesar untuk mengunduh data"
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr "Pilih untuk memperbesar seluruh data yang baru diunduh."
+
 msgid "Download Location"
 msgstr "Download Lokasi"
 
@@ -1074,6 +1080,8 @@ msgid ""
 "Orthogonalize Shape / Undo<br>Please select nodes that were moved by the "
 "previous Orthogonalize Shape action!"
 msgstr ""
+"Ortogonalisasi bentuk / Undo<br>Silakan pilih titik yang dipindahkan oleh "
+"perintah Ortogonalisasi Bentuk sebelumnya!"
 
 msgid ""
 "<html>You are using the EPSG:4326 projection which might lead<br>to "
@@ -1414,7 +1422,7 @@ msgstr[0] ""
 "pilih cara yang juga anda inginkan."
 
 msgid "Which way segment should reuse the history of {0}?"
-msgstr ""
+msgstr "Segmen garis mana yang sebaiknya menggunakan riwayat dari {0}?"
 
 msgid " [id: {0}]"
 msgstr " [id: {0}]"
@@ -1501,7 +1509,7 @@ msgid "New node"
 msgstr "Titik baru"
 
 msgid "Tags / Memberships"
-msgstr ""
+msgstr "Tags / Memberships"
 
 msgid "Unglue"
 msgstr "Memisahkan"
@@ -2013,7 +2021,7 @@ msgid "Create note"
 msgstr "Buat note"
 
 msgid "Enter a detailed comment to create a note"
-msgstr ""
+msgstr "Masukkan komentar detil untuk membuat note"
 
 msgid "You must enter a comment to create a new note"
 msgstr "Anda harus menambahkan komentar untuk membuat note"
@@ -2218,8 +2226,7 @@ msgstr ""
 
 msgid "Add a new node to way"
 msgid_plural "Add a new node to {0} ways"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Tambahkan titik baru pada {0}  jalan"
 
 msgid "Cannot delete node that has tags"
 msgstr "Tidak dapat menghapus node/titik yang mempunyai tag"
@@ -2341,6 +2348,8 @@ msgid ""
 "{0}Add selection to relation{1}: Verify every single relation to avoid "
 "damage!"
 msgstr ""
+"{0}Tambahkan seleksi ke relasi{1}: Pastikan setiap relasi untuk menghindari "
+"kerusakan!"
 
 msgid "Add selection to {0} relation"
 msgid_plural "Add selection to {0} relations"
@@ -2380,6 +2389,31 @@ msgstr[0] ""
 msgstr[1] ""
 
 msgid "Confirmation"
+msgstr "Konfirmasi"
+
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
 msgstr ""
 
 msgid "List of recent relations"
@@ -2467,7 +2501,7 @@ msgid "add toolbar button"
 msgstr "Tambah tombol toolbar"
 
 msgid "standard"
-msgstr ""
+msgstr "standar"
 
 msgid "regular expression"
 msgstr "ekspresi reguler"
@@ -2596,7 +2630,7 @@ msgid "all objects that use the address preset"
 msgstr ""
 
 msgid "all objects that use any preset under the Geography/Nature group"
-msgstr ""
+msgstr "Seluruh objek yang menggunakan preset di bawah grup Geografi/Alami"
 
 msgid "metadata"
 msgstr "metadata"
@@ -2622,6 +2656,8 @@ msgstr "Properti"
 msgid ""
 "ways with at least 20 nodes, or relations containing at least 20 nodes"
 msgstr ""
+"Garis dengan setidaknya 20 titik, atau relasi yang mengandung setidaknya 20 "
+"titik"
 
 msgid ""
 "nodes with at least 3 referring ways, or relations containing at least 3 ways"
@@ -2861,18 +2897,15 @@ msgstr[0] "Hapus \"{0}\" untuk {1} objek"
 
 msgid "Set {0}={1} for {2} object"
 msgid_plural "Set {0}={1} for {2} objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Set {0}={1} untuk {2} objek"
 
 msgid "Deleted {0} tags for {1} object"
 msgid_plural "Deleted {0} tags for {1} objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Hapus {0} *tags* untuk {1} objek"
 
 msgid "Set {0} tags for {1} object"
 msgid_plural "Set {0} tags for {1} objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Set {0} tags untuk {1} objek"
 
 msgid "Replace \"{0}\" by \"{1}\" for"
 msgstr "Gantikan \"{0}\" dengan \"{1}\" untuk"
@@ -2984,6 +3017,8 @@ msgid ""
 "Layer ''{0}'' does not exist any more. Cannot remove conflict for object "
 "''{1}''."
 msgstr ""
+"Layer \"{0}\" tidak ada lagi. Tidak dapat menghilangkan konflik objek "
+"\"{1}\"."
 
 msgid "Add conflict for ''{0}''"
 msgstr "Tambah konflik untuk {0}"
@@ -3214,18 +3249,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr "Telah meregistrasi sebuah konflik untuk primitif \"{0}\"."
 
-msgid "Decimal Degrees"
-msgstr "Decimal Degrees"
-
-msgid "deg° min'' sec\""
-msgstr "derajat° menit'' detik\""
-
-msgid "deg° min'' (Nautical)"
-msgstr "derajat° menit'' (Nautical)"
-
-msgid "Projected Coordinates"
-msgstr "proyeksi koordinat"
-
 msgctxt "compass"
 msgid "S"
 msgstr "S"
@@ -3242,9 +3265,21 @@ msgctxt "compass"
 msgid "E"
 msgstr "T"
 
+msgid "deg° min'' sec\""
+msgstr "derajat° menit'' detik\""
+
+msgid "Decimal Degrees"
+msgstr "Decimal Degrees"
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr "derajat° menit'' (Nautical)"
+
+msgid "Projected Coordinates"
+msgstr "proyeksi koordinat"
+
 msgid "Date of imagery: {0}"
 msgstr "Tanggal citra: {0}"
 
@@ -3274,10 +3309,10 @@ msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
 msgid "Error downloading tiles: {0}"
-msgstr ""
+msgstr "Terdapat kesalahan dalam mengunduh kotak tile: {0}"
 
 msgid "Could not load image from tile server"
-msgstr ""
+msgstr "Tidak dapat memuat citra dari tile server"
 
 msgid ""
 "{0} is not a valid WMS argument. Please check this server URL:\n"
@@ -3631,7 +3666,7 @@ msgstr "RX"
 
 msgctxt "search"
 msgid "CSS"
-msgstr ""
+msgstr "CSS"
 
 msgctxt "search"
 msgid "A"
@@ -3736,7 +3771,7 @@ msgid "Expected element ''{0}'', but got ''{1}''"
 msgstr ""
 
 msgid "value expected"
-msgstr ""
+msgstr "Nilai diharapkan"
 
 msgid "Short Description:"
 msgstr "Deskripsi singkat:"
@@ -3814,16 +3849,16 @@ msgid "Checks for errors on highways"
 msgstr "Memerika  error pada highway"
 
 msgid "Multiple values"
-msgstr ""
+msgstr "Nilai berganda"
 
 msgid "Checks for wrong multiple values"
 msgstr ""
 
 msgid "Numeric values"
-msgstr ""
+msgstr "Nilai numerik"
 
 msgid "Checks for wrong numeric values"
-msgstr ""
+msgstr "Periksa kesalahan value numerik"
 
 msgid "Religion"
 msgstr "Agama"
@@ -3844,7 +3879,7 @@ msgid "Checks for territories-specific features"
 msgstr ""
 
 msgid "Unnecessary tags"
-msgstr ""
+msgstr "Tag tidak dibutuhkan"
 
 msgid "Checks for unnecessary tags"
 msgstr "Memeriksa tag tidak dibutuhkan"
@@ -3856,7 +3891,7 @@ msgid "Checks for wrong wikipedia tags"
 msgstr "Memeriksa kesalahan tag wikipedia"
 
 msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
-msgstr ""
+msgstr "Proyeksi UTM (''+proj=utm'') membutuhkan ''+zone=...'' parameter."
 
 msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
 msgstr ""
@@ -3865,7 +3900,7 @@ msgid "No unit found for: {0}"
 msgstr ""
 
 msgid "Unknown parameter: ''{0}''."
-msgstr ""
+msgstr "Parameter tidak diketahui: \"{0}\"."
 
 msgid "Value expected for parameter ''{0}''."
 msgstr "Nilai yang diharapkan untuk parameter ''{0}''."
@@ -3972,7 +4007,7 @@ msgid ""
 msgstr ""
 
 msgid "[file]"
-msgstr ""
+msgstr "[file]"
 
 msgid ""
 "Reads input data from one or more files listed as positional arguments. When "
@@ -4033,7 +4068,7 @@ msgid "Illegal value for parameter ''{0}'': {1}"
 msgstr ""
 
 msgid "error in initialization"
-msgstr ""
+msgstr "Kesalahan dalam pemasangan"
 
 msgid "Polar Stereographic"
 msgstr ""
@@ -4073,7 +4108,7 @@ msgid "E-mail address is invalid"
 msgstr "Alamat e-mail tidak valid"
 
 msgid "E-mail address contains an invalid username: {0}"
-msgstr ""
+msgstr "Alamat surat elektronik memuat nama pengguna yang salah: {0}"
 
 msgid "E-mail address contains an invalid domain: {0}"
 msgstr ""
@@ -4185,7 +4220,7 @@ msgid "Wrong syntax in {0} key"
 msgstr ""
 
 msgid "Error in {0} value: {1}"
-msgstr ""
+msgstr "Kesalahan pada {0} nilai: {1}"
 
 msgid "Crossing ways"
 msgstr "garis yang bersimpangan/berpotongan"
@@ -4363,7 +4398,7 @@ msgid "Unable to replace argument {0} in {1}: {2}"
 msgstr ""
 
 msgid "Fix of {0}"
-msgstr ""
+msgstr "Memperbaiki {0}"
 
 msgid " or "
 msgstr " atau "
@@ -4633,7 +4668,7 @@ msgid "Tag checker"
 msgstr ""
 
 msgid "Adding {0} to ignore tags"
-msgstr ""
+msgstr "Menambahkan {0} ke tag diabaikan"
 
 msgid "Invalid tagchecker line - {0}: {1}"
 msgstr "Garis tidak valid dalam pemeriksaan tag - {0}:{1}"
@@ -4688,7 +4723,7 @@ msgid "Misspelled property key"
 msgstr "Salah pengejaan properti key"
 
 msgid "Key ''{0}'' looks like ''{1}''."
-msgstr ""
+msgstr "Key \"{0}\" mirip seperti \"{1}\""
 
 msgid "Presets do not contain property key"
 msgstr "Preset tidak mengandung kunci properti"
@@ -5210,13 +5245,13 @@ msgid "options provided as Java system properties"
 msgstr "Pilihan disediakan sebagai sistem properti Java"
 
 msgid "Change the JOSM directory name"
-msgstr ""
+msgstr "Ubah nama direktori JOSM"
 
 msgid "/PATH/TO/JOSM/PREF    "
 msgstr ""
 
 msgid "Set the preferences directory"
-msgstr ""
+msgstr "Atur preferensi direktori"
 
 msgid "Default: {0}"
 msgstr ""
@@ -5677,6 +5712,9 @@ msgid ""
 "include information on how to reproduce the error and try to supply as much "
 "detail as possible."
 msgstr ""
+"Jika Anda menjalankan versi terbaru dari JOSM dan plugin, silakan lampirkan "
+"file laporan bug di dalam pelacak bug kami. \n"
+"Telah ada"
 
 msgid "Report Bug"
 msgstr "Laporkan Bug"
@@ -5720,6 +5758,8 @@ msgid ""
 "Before you file a bug report make sure you have updated to the latest "
 "version of JOSM here:"
 msgstr ""
+"Sebelum Anda melaporkan laporan bug pastikan Anda Anda telah memperbarui "
+"versi terakhir JOSM disini:"
 
 msgid "Update JOSM"
 msgstr "Perbarui JOSM"
@@ -6255,7 +6295,7 @@ msgid "all"
 msgstr "Seluruhnya"
 
 msgid "sum"
-msgstr ""
+msgstr "jumlah"
 
 msgid "Please decide which values to keep"
 msgstr "Mohon tentukan mana nilai yang akan disimpan"
@@ -8135,7 +8175,7 @@ msgid "Ignore tag ''{0}''"
 msgstr "Abaikan *tag* \"{0}\""
 
 msgid "Edit ignore list"
-msgstr ""
+msgstr "Edit daftar abai"
 
 msgid "You changed the value of ''{0}'' from ''{1}'' to ''{2}''."
 msgstr ""
@@ -8661,12 +8701,6 @@ msgstr ""
 "<html>Mulai otomatis ''Download dari OSM'' setiap JOSM dinyalakan.<br>Anda "
 "dapat membuka secara manual dari Menu file atau toolbar.</html>"
 
-msgid "Zoom to downloaded data"
-msgstr "Perbesar untuk mengunduh data"
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr "Pilih untuk memperbesar seluruh data yang baru diunduh."
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -8722,7 +8756,7 @@ msgstr ""
 "Pilih untuk mendownload jejak GPS pada area download yang telah dipilih."
 
 msgid "Select to download notes in the selected download area."
-msgstr ""
+msgstr "Pilih untuk download catatan pada area download terpilih."
 
 msgid "Please select a download area first."
 msgstr "Silahkan pilih area untuk didownload terlebih dahulu"
@@ -8756,7 +8790,7 @@ msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr "Buat sebuah kueri Overpass menggunakan Overpass Turbo Query Wizard"
 
 msgid "Query Wizard"
-msgstr ""
+msgstr "Query Wizard"
 
 msgid "Your saved queries:"
 msgstr "Kueri tersimpan:"
@@ -8765,7 +8799,7 @@ msgid "Show/hide Overpass snippet list"
 msgstr ""
 
 msgid "Overpass query:"
-msgstr ""
+msgstr "Kueri Overpass:"
 
 msgid ""
 "You entered an empty query. Do you want to download all data in this area "
@@ -9276,6 +9310,8 @@ msgid ""
 "Select which actions to perform for this layer, if you click the leftmost "
 "button."
 msgstr ""
+"Pilih tindakan apa yang ingin dilakukan untuk layer ini, jia Anda klik "
+"tombol paling kiri."
 
 msgid "Check \"Upload\" to upload the changes to the OSM server."
 msgstr "Cek \"Upload\" untuk mengunggah perubahan ke server OSM."
@@ -9475,6 +9511,8 @@ msgid ""
 "Cannot download file ''{0}''. Its download link ''{1}'' is not a valid URL. "
 "Skipping download."
 msgstr ""
+"Tidak dapat mengunduh file \"{0}\". Tautan \"{1}\" adalah URL yang tidak "
+"valid. Lewati unduh."
 
 msgid ""
 "Could not retrieve the list of your open changesets because<br>JOSM does not "
@@ -9652,7 +9690,7 @@ msgstr ""
 "dan/atau disimpan."
 
 msgid "Perform actions before restarting"
-msgstr ""
+msgstr "Jalankan tindakan sebelum mulai ulang"
 
 msgid "Restart JOSM with saving. Unsaved changes are uploaded and/or saved."
 msgstr ""
@@ -10271,7 +10309,7 @@ msgid "Tile display projection"
 msgstr ""
 
 msgid "Current zoom"
-msgstr ""
+msgstr "Perbesaran saat ini"
 
 msgid "Show tile info"
 msgstr ""
@@ -10292,17 +10330,23 @@ msgid "Tile display size"
 msgstr ""
 
 msgid "Reprojection"
-msgstr ""
+msgstr "Proyeksi ulang"
 
 msgid "Reprojected tile size"
 msgstr ""
 
 msgid "Metadata "
-msgstr ""
+msgstr "Metadata "
 
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -10319,7 +10363,7 @@ msgid "No tiles at this zoom level"
 msgstr "Tidak ada indeks pada tingkat perbesaran ini"
 
 msgid "Current zoom: {0}"
-msgstr ""
+msgstr "Perbesaran saat ini: {0}"
 
 msgid "Display zoom: {0}"
 msgstr ""
@@ -10331,16 +10375,16 @@ msgid "Best zoom: {0}"
 msgstr ""
 
 msgid "Estimated cache size: {0}"
-msgstr ""
+msgstr "Perkiraan ukuran cache: {0}"
 
 msgid "Cache stats: {0}"
-msgstr ""
+msgstr "Statistik cache: {0}"
 
 msgid "{0} ({1}), automatically downloading in zoom {2}"
-msgstr ""
+msgstr "{0} ({1}), mengunduh otomatis pada perbesaran {2}"
 
 msgid "{0} ({1}), downloading in zoom {2}"
-msgstr ""
+msgstr "{0} ({1}), mengunduh dalam perbesaran {2}"
 
 msgid "Downloaded {0}/{1} tiles"
 msgstr "Download indeks {0}/{1}"
@@ -10411,9 +10455,10 @@ msgstr "Nama: {0}"
 msgid "Description: {0}"
 msgstr "Deskripsi: {0}"
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
-msgstr[0] "{0} jalur"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Timespan"
 msgstr "Timespan"
@@ -10421,6 +10466,9 @@ msgstr "Timespan"
 msgid "Length"
 msgstr "Panjang"
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr "Panjang: {0}"
 
@@ -10432,13 +10480,36 @@ msgid "{0} waypoint"
 msgid_plural "{0} waypoints"
 msgstr[0] "{0} titik"
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
-msgstr[0] "{0} jalur, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] "{0} jalur"
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr "Simpan file GPX"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr "ID"
 
@@ -10481,10 +10552,19 @@ msgstr "Simpan Layer"
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} note"
 
 msgid "Notes layer"
 msgstr ""
@@ -10818,29 +10898,20 @@ msgstr "Kesalahan pada {0}"
 msgid "Display geotagged images"
 msgstr "Tampilkan Citra geotag"
 
-msgid "Previous"
-msgstr "Sebelumnya"
+msgid "Next"
+msgstr "Berikutnya"
 
-msgid "Show previous Image"
-msgstr "Tujukkan gambar sebelumnya"
+msgid "Show next Image"
+msgstr "Tunjukkan gambar berikutnya"
 
 msgid "Geoimage: {0}"
 msgstr "Geoimage: {0}"
 
-msgid "Remove photo from layer"
-msgstr "Hapus Foto dari layer"
-
-msgid "Delete File from disk"
-msgstr "Hapis filedari disk"
-
-msgid "Copy image path"
-msgstr ""
-
-msgid "Next"
-msgstr "Berikutnya"
+msgid "Previous"
+msgstr "Sebelumnya"
 
-msgid "Show next Image"
-msgstr "Tunjukkan gambar berikutnya"
+msgid "Show previous Image"
+msgstr "Tujukkan gambar sebelumnya"
 
 msgid "Show first Image"
 msgstr ""
@@ -10854,6 +10925,15 @@ msgstr "Tampak tengah"
 msgid "Zoom best fit and 1:1"
 msgstr "Perbesaran terbaik yang sesuai 1 : 1"
 
+msgid "Remove photo from layer"
+msgstr "Hapus Foto dari layer"
+
+msgid "Delete File from disk"
+msgstr "Hapis filedari disk"
+
+msgid "Copy image path"
+msgstr ""
+
 msgid "Move dialog to the side pane"
 msgstr "Pindahkan dialog ke panel samping"
 
@@ -11229,10 +11309,10 @@ msgid "Renders data and saves the result to an image file."
 msgstr ""
 
 msgid "Input data file name (.osm)"
-msgstr ""
+msgstr "Masukkan nama file data (.osm)"
 
 msgid "Output image file name (.png); defaults to ''{0}''"
-msgstr ""
+msgstr "Keluaran nama file gambar (.png); otomatis ke \"{0}\""
 
 msgid "Style file to use for rendering (.mapcss or .zip)"
 msgstr ""
@@ -11335,9 +11415,11 @@ msgid ""
 "Image dimensions ({0}x{1}) exceeds maximum image size {2} (use option {3} to "
 "change limit)"
 msgstr ""
+"Dimensi gambar ({0}x{1}) melebihi batas ukuran maksimum {2} (gunakan opsi "
+"{3} untuk merubah limit)"
 
 msgid "Style setting not found: ''{0}''"
-msgstr ""
+msgstr "Pengaturan gaya tidak ditemukan :\"{0}\""
 
 msgid ""
 "There was an error when loading this style. Select ''Info'' from the right "
@@ -12305,7 +12387,7 @@ msgid "Display discardable keys"
 msgstr ""
 
 msgid "Use auto filters"
-msgstr ""
+msgstr "Gunakan penyaringan otomatis"
 
 msgid "Rule"
 msgstr ""
@@ -12490,7 +12572,7 @@ msgid "Heat"
 msgstr ""
 
 msgid "Use points instead of lines for heat map"
-msgstr ""
+msgstr "Gunakan garis sebagai ganti titik untuk"
 
 msgid "Create markers when reading GPX"
 msgstr "Buat mark/tanda ketika membaca GPX"
@@ -12630,7 +12712,7 @@ msgid "Adjust the gain of overlay blending."
 msgstr ""
 
 msgid "Draw all GPX traces that exceed this threshold."
-msgstr ""
+msgstr "Gambar seluruh jejak GPS yang melewati batas"
 
 msgid ""
 "Render engine uses points with simulated position error instead of lines. "
@@ -12661,7 +12743,7 @@ msgid "Show object ID in selection lists"
 msgstr "Tampilkan objek ID pada daftar pilihan"
 
 msgid "Show node coordinates in selection lists"
-msgstr ""
+msgstr "Tampilkan titik koordinat dalam daftar pilihan"
 
 msgid "Show localized name in selection lists"
 msgstr "Tampilkan penempatan nama pada daftar pilihan"
@@ -12679,7 +12761,7 @@ msgid "Use native file choosers (nicer, but do not support file filters)"
 msgstr ""
 
 msgid "Reverse zoom with mouse wheel"
-msgstr ""
+msgstr "balikkan perbesaran dengan roda gulir"
 
 msgid "Intermediate steps between native resolutions"
 msgstr ""
@@ -12817,7 +12899,7 @@ msgid "{0} cache, total cache size: {1} bytes"
 msgstr ""
 
 msgid "Cache name"
-msgstr ""
+msgstr "Nama cache"
 
 msgid "Object Count"
 msgstr ""
@@ -12990,7 +13072,7 @@ msgid "Notification at each save"
 msgstr ""
 
 msgid "When saving, display a small notification"
-msgstr ""
+msgstr "Ketika menyimpan, tampilkan pemberitahuan kecil"
 
 msgid "File backup"
 msgstr "File backup"
@@ -13505,10 +13587,10 @@ msgid "Enable HTTPS support"
 msgstr "Aktifkan HTTPS support"
 
 msgid "Install..."
-msgstr ""
+msgstr "Pasang..."
 
 msgid "Uninstall..."
-msgstr ""
+msgstr "Copot Pemasangan"
 
 msgid "Install JOSM localhost certificate to system/browser root keystores"
 msgstr ""
@@ -13872,7 +13954,7 @@ msgid "Tests"
 msgstr ""
 
 msgid "Choose tests to enable"
-msgstr ""
+msgstr "Pilih tes  mana untuk diaktifkan"
 
 msgid "multiple"
 msgstr "multiple"
@@ -13903,7 +13985,7 @@ msgid "This preset also sets: {0}"
 msgstr ""
 
 msgid "Edit also …"
-msgstr ""
+msgstr "Edit juga . . ."
 
 msgid "Apply Preset"
 msgstr "Tambahkan Preset"
@@ -13914,6 +13996,8 @@ msgstr "Relasi baru"
 msgid ""
 "The preset <i>{0}</i> cannot be applied since nothing has been selected!"
 msgstr ""
+"Preset <i>{0}</i> tidak dapat diterapkan karena tidak ada apapun yang "
+"dipilih!"
 
 msgid ""
 "The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
@@ -14007,7 +14091,7 @@ msgstr ""
 "harus sama dengan \"nilai''"
 
 msgid "Detailed information: {0} <> {1}"
-msgstr ""
+msgstr "Informasi detil: {0} <> {1}"
 
 msgid ""
 "Broken tagging preset \"{0}-{1}\" - number of items in "
@@ -14225,11 +14309,9 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr "Hapus node/titik {0} bagian dari way/garis {1}"
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
-"Way/garis {0} dengan {1} node/titik tidak lengkap karena node/titik satu "
-"terakhir hilang pada saat data dimuat"
 
 msgid ""
 "Relation with external id ''{0}'' refers to a missing primitive with "
@@ -14413,6 +14495,7 @@ msgstr "Website JOSM"
 
 msgid "Unable to access ''{0}'': {1} not available (offline mode)"
 msgstr ""
+"Tidak dapat mengakses \"{0}\" : \"{1}\" tidak tersedia (mode offline)"
 
 msgid "Unable to initialize OSM API."
 msgstr ""
@@ -14484,7 +14567,7 @@ msgstr ""
 "Buka changeset pengecualian. Dapatkan changeset tertutup dengan id {0}."
 
 msgid "Note upload failed"
-msgstr ""
+msgstr "Gagal mengunggah catatan"
 
 msgid "Error parsing note response from server"
 msgstr ""
@@ -14689,7 +14772,7 @@ msgid "Contacting Server..."
 msgstr "Memanggil Server..."
 
 msgid "Downloading OSM notes..."
-msgstr ""
+msgstr "Mengunduh catatan OSM..."
 
 msgid "Downloading data..."
 msgstr "Mengunduh data..."
@@ -14717,7 +14800,7 @@ msgid "Reading user info ..."
 msgstr "Info pengguna"
 
 msgid "Reading user preferences ..."
-msgstr ""
+msgstr "Membaca prefensi pengguna"
 
 msgid "Starting to upload with one request per primitive ..."
 msgstr "Memulai upload dengan satu permintaan per primitif"
@@ -14927,6 +15010,12 @@ msgstr "Remote kontrol meminta untuk membuka berkas lokal"
 msgid "Do you want to allow this?"
 msgstr "Apakah anda ingin mengikuti ini?"
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr "Konfirmasi tindakan remote kontrol"
 
@@ -15207,7 +15296,7 @@ msgstr[0] ""
 "Plugin {0} membutuhkan {1} plugin tidak ditemukan. Plugin yang hilang adalah:"
 
 msgid "Download and restart"
-msgstr ""
+msgstr "Unduh dan muat ulang"
 
 msgid "Click to download missing plugin and restart JOSM"
 msgid_plural "Click to download missing plugins and restart JOSM"
@@ -15317,6 +15406,8 @@ msgid ""
 "Failed to install plugin ''{0}'' from temporary download file ''{1}''. "
 "Renaming failed."
 msgstr ""
+"Gagal untuk install plugin \"{0}\" dari file download sementara \"{1}\". "
+"Penggatian nama gagal."
 
 msgid "Update plugin"
 msgstr "Perbarui plugin"
@@ -15373,7 +15464,7 @@ msgid "Invalid plugin main version ''{0}'' in plugin {1}"
 msgstr ""
 
 msgid "Missing plugin main version in plugin {0}"
-msgstr ""
+msgstr "Kehilangan versi utama plugin dalam plugin {0}"
 
 msgid "More info..."
 msgstr "Info selengkapnya..."
@@ -15397,7 +15488,7 @@ msgid "Processing file ''{0}''"
 msgstr "Memproses file ''{0}''"
 
 msgid "Failed to scan file ''{0}'' for plugin information. Skipping."
-msgstr ""
+msgstr "Gagal untuk scan file \"{0}\" untuk informasi plugin. Lewati."
 
 msgid "Processing plugin files..."
 msgstr "memproses berkas plugin"
@@ -15412,13 +15503,13 @@ msgid "Unsuccessful HTTP request"
 msgstr ""
 
 msgid "Plugin list download error"
-msgstr ""
+msgstr "Error download daftar plugin"
 
 msgid "JOSM failed to download plugin list:"
 msgstr "JOSM gagal mengunduh daftar plugin:"
 
 msgid "Details:"
-msgstr ""
+msgstr "Detil:"
 
 msgid ""
 "Failed to create plugin directory ''{0}''. Cannot cache plugin list from "
@@ -15767,7 +15858,7 @@ msgid "longitude"
 msgstr "Garus bujur"
 
 msgid "zoom"
-msgstr ""
+msgstr "perbesaran"
 
 msgid ""
 "Unexpected response from HTTP server. Got {0} response without ''Location'' "
@@ -15869,12 +15960,11 @@ msgid "Silent shortcut conflict: ''{0}'' moved by ''{1}'' to ''{2}''."
 msgstr ""
 
 msgid "Unknown territory id: {0}"
-msgstr ""
+msgstr "id wilayah tidak dikenal: {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!"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Ada {0} tag ditemukan dalam penyangga, mencurigakan!"
 
 msgid "Key is too long (max {0} characters):"
 msgstr "Key terlalu panjang (maksimal {0} karakter):"
@@ -15892,21 +15982,20 @@ msgid "Unable to create directory {0}"
 msgstr ""
 
 msgid "ms"
-msgstr ""
+msgstr "ms"
 
 msgid "s"
-msgstr ""
+msgstr "s"
 
 msgid "min"
-msgstr ""
+msgstr "min"
 
 msgid "h"
-msgstr ""
+msgstr "h"
 
 msgid "day"
 msgid_plural "days"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "hari"
 
 msgid "Failed to load XML schema."
 msgstr "Gagal memuat skema XML."
@@ -16003,7 +16092,7 @@ msgstr "Lahan Pertanian"
 
 msgctxt "landuse"
 msgid "farmyard"
-msgstr ""
+msgstr "peternakan"
 
 msgctxt "landuse"
 msgid "cemetery"
@@ -16039,15 +16128,15 @@ msgstr "Semak"
 
 msgctxt "natural"
 msgid "wood"
-msgstr ""
+msgstr "hutan"
 
 msgctxt "natural"
 msgid "grassland"
-msgstr ""
+msgstr "padang rumput"
 
 msgctxt "natural"
 msgid "wetland"
-msgstr ""
+msgstr "lahan basah"
 
 msgctxt "natural"
 msgid "heath"
@@ -16067,7 +16156,7 @@ msgstr "jalur"
 
 msgctxt "building"
 msgid "industrial"
-msgstr ""
+msgstr "industri"
 
 msgctxt "Relation type"
 msgid "associatedStreet"
@@ -16362,7 +16451,7 @@ msgid "metal"
 msgstr "Metal"
 
 msgid "Smoothness"
-msgstr ""
+msgstr "Kehalusan"
 
 msgid "excellent"
 msgstr ""
@@ -16410,7 +16499,7 @@ msgid "impassable"
 msgstr "tidak dapat dilewati"
 
 msgid "No wheeled vehicle"
-msgstr ""
+msgstr "Kendaraan tidak beroda"
 
 msgctxt "riding"
 msgid "horse_riding"
@@ -16516,7 +16605,7 @@ msgid "separate"
 msgstr ""
 
 msgid "Service type"
-msgstr ""
+msgstr "Tipe layanan"
 
 msgid "yard"
 msgstr "halaman"
@@ -16539,11 +16628,11 @@ msgstr ""
 
 msgctxt "electrified"
 msgid "no"
-msgstr ""
+msgstr "tidak"
 
 msgctxt "electrified"
 msgid "yes"
-msgstr ""
+msgstr "ya"
 
 msgctxt "electrified"
 msgid "rail"
@@ -16556,7 +16645,7 @@ msgid "Frequency in Hertz (Hz)"
 msgstr ""
 
 msgid "16.67"
-msgstr ""
+msgstr "16.67"
 
 msgid "16.7"
 msgstr "16.7"
@@ -16689,7 +16778,7 @@ msgid "international"
 msgstr "Internasional"
 
 msgid "seafood"
-msgstr ""
+msgstr "makanan laut"
 
 msgid "spanish"
 msgstr ""
@@ -16865,7 +16954,7 @@ msgstr "golf"
 
 msgctxt "sport"
 msgid "gymnastics"
-msgstr ""
+msgstr "gimnastik"
 
 msgctxt "sport"
 msgid "handball"
@@ -16989,7 +17078,7 @@ msgstr ""
 
 msgctxt "parking"
 msgid "underground"
-msgstr ""
+msgstr "bawah tanah"
 
 msgctxt "parking"
 msgid "rooftop"
@@ -17035,7 +17124,7 @@ msgid "Population"
 msgstr "Population"
 
 msgid "Postal Code"
-msgstr ""
+msgstr "Kode Pos"
 
 msgid "Website"
 msgstr "Website"
@@ -17132,7 +17221,7 @@ msgid "muslim"
 msgstr "muslim"
 
 msgid "shinto"
-msgstr ""
+msgstr "shinto"
 
 msgid "sikh"
 msgstr "sikh"
@@ -17198,7 +17287,7 @@ msgid "quaker"
 msgstr "quaker"
 
 msgid "roman_catholic"
-msgstr ""
+msgstr "katolik roma"
 
 msgid "shia"
 msgstr "shia"
@@ -17226,15 +17315,15 @@ msgstr "Lokasi"
 
 msgctxt "power"
 msgid "outdoor"
-msgstr ""
+msgstr "di luar"
 
 msgctxt "power"
 msgid "indoor"
-msgstr ""
+msgstr "di dalam"
 
 msgctxt "power"
 msgid "underground"
-msgstr ""
+msgstr "bawah tanah"
 
 msgctxt "power"
 msgid "platform"
@@ -17242,7 +17331,7 @@ msgstr ""
 
 msgctxt "power"
 msgid "rooftop"
-msgstr ""
+msgstr "atap"
 
 msgctxt "power"
 msgid "kiosk"
@@ -17351,7 +17440,7 @@ msgid "Water access rules:"
 msgstr ""
 
 msgid "Ship"
-msgstr ""
+msgstr "Kapal"
 
 msgid "designated"
 msgstr "ditunjuk"
@@ -17468,7 +17557,7 @@ msgid "Motorway"
 msgstr "Jalan Tol"
 
 msgid "Destination"
-msgstr ""
+msgstr "Tujuan"
 
 msgid "Destination reference"
 msgstr ""
@@ -17581,7 +17670,7 @@ msgid "Vehicle access"
 msgstr ""
 
 msgid "Oneway for bicycle"
-msgstr ""
+msgstr "Satu arah untuk sepeda"
 
 msgid "Living Street"
 msgstr "Jalan Permukiman"
@@ -18017,7 +18106,7 @@ msgstr "diperuntukkan untuk jalan kaki/trotoar"
 
 msgctxt "footway"
 msgid "sidewalk"
-msgstr ""
+msgstr "Trotoar"
 
 msgctxt "footway"
 msgid "crossing"
@@ -20502,6 +20591,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr "Pembuangan Limbah/Tempat Sampah"
 
@@ -20811,7 +20906,7 @@ msgstr ""
 
 msgctxt "piste:difficulty"
 msgid "easy"
-msgstr ""
+msgstr "mudah"
 
 msgctxt "piste:difficulty"
 msgid "intermediate"
@@ -21002,15 +21097,15 @@ msgstr "Jalan layanan"
 
 msgctxt "building"
 msgid "train_station"
-msgstr ""
+msgstr "stasiun kereta"
 
 msgctxt "building"
 msgid "barn"
-msgstr ""
+msgstr "lumbung"
 
 msgctxt "building"
 msgid "stable"
-msgstr ""
+msgstr "kandang kuda"
 
 msgctxt "building"
 msgid "cabin"
@@ -21094,11 +21189,11 @@ msgstr ""
 
 msgctxt "building"
 msgid "cathedral"
-msgstr ""
+msgstr "katedral"
 
 msgctxt "building"
 msgid "chapel"
-msgstr ""
+msgstr "kapel"
 
 msgctxt "building"
 msgid "church"
@@ -21110,7 +21205,7 @@ msgstr "candi"
 
 msgctxt "building"
 msgid "mosque"
-msgstr ""
+msgstr "masjid"
 
 msgctxt "building"
 msgid "synagogue"
@@ -22893,7 +22988,7 @@ msgid "Maestro"
 msgstr ""
 
 msgid "Visa Debit"
-msgstr ""
+msgstr "Visa Debit"
 
 msgid "Visa Electron"
 msgstr ""
@@ -22902,7 +22997,7 @@ msgid "Credit cards"
 msgstr "Kartu Kredit"
 
 msgid "American Express"
-msgstr ""
+msgstr "American Express"
 
 msgid "Diners Club"
 msgstr ""
@@ -22911,13 +23006,13 @@ msgid "Discover Card"
 msgstr ""
 
 msgid "JCB"
-msgstr ""
+msgstr "JCB"
 
 msgid "Mastercard"
-msgstr ""
+msgstr "Mastercard"
 
 msgid "Visa"
-msgstr ""
+msgstr "Visa"
 
 msgid "Electronic purses and Charge cards"
 msgstr "Electronic purses and Charge cards"
@@ -22962,7 +23057,7 @@ msgid "Cryptocurrencies"
 msgstr ""
 
 msgid "Bitcoin"
-msgstr ""
+msgstr "Bitcoin"
 
 msgid "Dogecoin"
 msgstr ""
@@ -23305,16 +23400,16 @@ msgid "scoria"
 msgstr ""
 
 msgid "Ridge"
-msgstr ""
+msgstr "bukit"
 
 msgid "A mountain or hill ridge."
-msgstr ""
+msgstr "Gunung atau perbukitan."
 
 msgid "Valley"
-msgstr ""
+msgstr "Lembah"
 
 msgid "A low area between hills."
-msgstr ""
+msgstr "Daerah rendah diantara bukit-bukit."
 
 msgid "Cliff"
 msgstr "Tebing"
@@ -23328,7 +23423,7 @@ msgid "Cave Entrance"
 msgstr "Pintu Masuk Goa"
 
 msgid "The entrance to a cave."
-msgstr ""
+msgstr "Pintu masuk ke sebuah gua."
 
 msgid "Island"
 msgstr "Pulau"
@@ -23337,7 +23432,7 @@ msgid "Islet"
 msgstr "Pulau kecil"
 
 msgid "Reef"
-msgstr ""
+msgstr "Terumbu karang"
 
 msgid "coral"
 msgstr "koral"
@@ -24061,7 +24156,7 @@ msgid "administrative"
 msgstr "Administratif"
 
 msgid "maritime"
-msgstr ""
+msgstr "maritim"
 
 msgid "national_park"
 msgstr "taman nasional"
@@ -24479,6 +24574,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -24534,7 +24635,7 @@ msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
 msgid "Wikimedia Map"
-msgstr ""
+msgstr "Peta Wikimedia"
 
 msgid "OSM Inspector: Geometry"
 msgstr ""
@@ -24799,7 +24900,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -25100,7 +25202,7 @@ msgid ""
 msgstr ""
 
 msgid "Kelowna 2012"
-msgstr ""
+msgstr "Kelowna 2012"
 
 msgid "High quality aerial imagery taken for the City of Kelowna"
 msgstr ""
@@ -25133,7 +25235,7 @@ msgid "imagico.de OSM images for mapping: Fogo, Cape Verde"
 msgstr ""
 
 msgid "Image from after the 2014/2015 eruption (true color)"
-msgstr ""
+msgstr "Gambar dari setelah erupsi tahun 2014/2015 (warna sebenarnya)"
 
 msgid "imagico.de OSM images for mapping: Isla Londonderry"
 msgstr ""
@@ -25222,6 +25324,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -25308,9 +25416,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -25338,10 +25443,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -25740,18 +25845,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -25775,7 +25868,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -25837,10 +26080,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -25849,118 +26092,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
+msgstr ""
+
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -26097,6 +26349,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27027,7 +27291,7 @@ msgid ""
 msgstr ""
 
 msgid "Landsat 233055"
-msgstr ""
+msgstr "Landsat 233055"
 
 msgid "Recent Landsat imagery"
 msgstr ""
@@ -27257,7 +27521,7 @@ msgid "{0} together with {1} on a node. Remove {0}."
 msgstr ""
 
 msgid "{0} on a node"
-msgstr ""
+msgstr "{0} pada node"
 
 msgid "Building inside building"
 msgstr "Bangunan didalam bangunan"
@@ -27269,7 +27533,7 @@ msgid "Overlapping Areas"
 msgstr "Area yang bertampalan"
 
 msgid "{0} inside {1}"
-msgstr ""
+msgstr "{0} di dalam {1}"
 
 msgid "Overlapping Identical Natural Areas"
 msgstr ""
@@ -27281,19 +27545,19 @@ msgid "isolated node which must be connected to a way"
 msgstr ""
 
 msgid "node connects waterway and bridge"
-msgstr ""
+msgstr "titik tersambung antara saluran air dengan jembatan"
 
 msgid "{0} node connected to a highway"
-msgstr ""
+msgstr "{0} titik tersambung dengan jalan raya"
 
 msgid "suspicious roundabout direction"
 msgstr ""
 
 msgid "{0} on a large area"
-msgstr ""
+msgstr "{0} pada area besar"
 
 msgid "{0} on a small area"
-msgstr ""
+msgstr "{0} pada area kecil"
 
 msgid "Too large building"
 msgstr "Bangunan terlalu besar"
@@ -27309,10 +27573,10 @@ msgid ""
 msgstr ""
 
 msgid "Coastline inside {1}"
-msgstr ""
+msgstr "garis pantai di dalam {1}"
 
 msgid "{0} should be on the node where {1} and {2} intersect"
-msgstr ""
+msgstr "{0} seharusnya berada pada node dimana {1} dan {2} berpotongan"
 
 msgid ""
 "{0} is the tag for the linear waterway. To tag the water area use {1} + {2} "
@@ -27320,10 +27584,11 @@ msgid ""
 msgstr ""
 
 msgid "Ferry route is not connected to the road network or branches."
-msgstr ""
+msgstr "Jalur ferry tidak terhubung pada jaringan jalan atau percabangannya."
 
 msgid "Ferry route is not connected to a ferry terminal or branches."
 msgstr ""
+"Jalur ferry tidak terhubung pada pelabuhan ferry atau percabangannya."
 
 msgid "abbreviated street name"
 msgstr "mempersingkat nama jalan"
@@ -27341,13 +27606,15 @@ msgid "highway without a reference"
 msgstr "Jalan raya tanpa referensi"
 
 msgid "Unspecific highway type"
-msgstr ""
+msgstr "TIpe jalan raya tidak spesifik"
 
 msgid "{0} used with {1}"
-msgstr ""
+msgstr "{0} digunakan dengan {1}"
 
 msgid "{0} is deprecated, use {1} instead. Also check similar tags like {2}"
 msgstr ""
+"{0} tidak digunakan lagi, sebagai gantinya gunakan {1}.  Periksa juga tag "
+"serupa seperti {2}"
 
 msgid ""
 "Value of ''{0}'' should either be ''{1}'' or ''{2}''. For sidewalks use "
@@ -27361,13 +27628,13 @@ msgid "railway crossing without {0}"
 msgstr ""
 
 msgid "{0} with multiple values"
-msgstr ""
+msgstr "{0} dengan nilai berganda"
 
 msgid "empty value in semicolon-separated ''{0}''"
 msgstr ""
 
 msgid "numerical key"
-msgstr ""
+msgstr "key numeric"
 
 msgid "{0} value with + sign"
 msgstr ""
@@ -27407,7 +27674,7 @@ msgid "unusual incline; use percentages/degrees or up/down"
 msgstr ""
 
 msgid "{0} must be a numeric value"
-msgstr ""
+msgstr "{0} harus nilai numeric"
 
 msgid "{0} must be a positive integer number"
 msgstr ""
@@ -27416,13 +27683,13 @@ msgid "unusual value of {0}"
 msgstr ""
 
 msgid "{0} must be a numeric value, in meters and without units"
-msgstr ""
+msgstr "{0} harus dalam nilai numerik, dalam meter dan tanpa satuan."
 
 msgid "relation without type"
 msgstr "relasi tanpa tipe"
 
 msgid "{0} relation without {0} tag"
-msgstr ""
+msgstr "{0} relasi tanpa {0} tag"
 
 msgid "way with {0} is part of a bicycle route relation"
 msgstr ""
@@ -27443,7 +27710,7 @@ msgid "street name contains ss"
 msgstr "nama jalan berisi ss"
 
 msgid "street name contains ß"
-msgstr ""
+msgstr "nama jalan mengandung ß"
 
 msgid "{0} is unnecessary"
 msgstr "{0} tidak diperlukan"
@@ -27452,7 +27719,7 @@ msgid "unnecessary tag"
 msgstr "tag tidak diperlukan"
 
 msgid "{0} is unnecessary for {1}"
-msgstr ""
+msgstr "{0} tidak diperlukan untuk {1}"
 
 msgid "{0} makes no sense"
 msgstr ""
@@ -27494,6 +27761,7 @@ msgstr ""
 
 msgid "wikipedia page title should have first letter capitalized"
 msgstr ""
+"huruf pertama judul halaman wikipedia harus ditulis dengan huruf kapital"
 
 msgid ""
 "wikipedia page title should have spaces instead of underscores (''_''→'' '')"
@@ -27516,13 +27784,13 @@ msgid ""
 msgstr ""
 
 msgid "Hide icons at low zoom"
-msgstr ""
+msgstr "Sembunyikan icon pada perbesaran rendah"
 
 msgid "Less obtrusive node symbols at low zoom"
 msgstr ""
 
 msgid "Display street labels (at high zoom)"
-msgstr ""
+msgstr "Tampillkan label jalan (pada perbesaran tinggi)"
 
 msgid "Use alternative turn restriction icon set"
 msgstr ""
@@ -27572,6 +27840,8 @@ msgid ""
 "Allows the user to correct angle of buildings to 90 degrees, and aligns all "
 "loaded buildings to nearest road."
 msgstr ""
+"Izinkan pengguna untuk memperbaiki sudut bangunan menjadi 90 derajat, dan "
+"sejajarkan seluruh bangunan yang sudah termuat ke jalanan terdekat."
 
 msgid "Tools for drawing buildings."
 msgstr "Alat untuk menggambar bangunan"
@@ -27613,7 +27883,7 @@ msgid "Tool for conflating data (matching and merging)."
 msgstr ""
 
 msgid "Downloads new data when you pan/zoom"
-msgstr ""
+msgstr "Download data baru ketika Anda menggeser/memperbesar"
 
 msgid "Create a grid of ways."
 msgstr "Buat grid garis."
@@ -27893,7 +28163,7 @@ msgid ""
 msgstr "Menulis info posisi gps"
 
 msgid "Make photos movable and position them on the map."
-msgstr ""
+msgstr "Buat foto dapat digerakkan dan tempatkan dalam peta."
 
 msgid ""
 "This plugin allows to display any picture as a background in the editor and "
@@ -28136,7 +28406,7 @@ msgid ""
 msgstr ""
 
 msgid "No command found"
-msgstr ""
+msgstr "Tidak ada perintah ditemukan"
 
 msgid "Default commands have been successfully installed"
 msgstr ""
@@ -28321,7 +28591,7 @@ msgid "Shape is started incorrectly"
 msgstr ""
 
 msgid "Can''t load SVG diagram"
-msgstr ""
+msgstr "Tidak dapat memuat diagram SVG"
 
 msgid "Can''t find root SVG element"
 msgstr ""
@@ -28369,7 +28639,7 @@ msgid "increase zoom level to see more detail"
 msgstr "meningkatkan tingkat zoom untuk melihat lebih detail"
 
 msgid "No SRTM data"
-msgstr ""
+msgstr "Tidak ada data SRTM"
 
 msgid "Open the elevation profile window."
 msgstr "membuka jendela profil ketinggian"
@@ -28729,15 +28999,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -28760,7 +29027,7 @@ msgid "Import pictures into Mapillary layer"
 msgstr ""
 
 msgid "Join mode"
-msgstr ""
+msgstr "Mode penggabungan"
 
 msgid "Join/unjoin pictures"
 msgstr ""
@@ -28781,7 +29048,7 @@ msgid "pending"
 msgstr "Tunda"
 
 msgid "approved"
-msgstr ""
+msgstr "disetujui"
 
 msgid "{0} images submitted, Changeset key: {1}, State: {2}"
 msgstr ""
@@ -28796,20 +29063,14 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
 msgstr ""
 
 msgid "Zoom to selected image"
-msgstr ""
+msgstr "Perbesar ke gambar terpilih"
 
 msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
@@ -28838,20 +29099,17 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
-msgstr ""
+msgstr "Batas kecepatan"
 
 msgid "Give way"
-msgstr ""
+msgstr "Beri jalan"
 
 msgid "No entry"
 msgstr ""
@@ -28866,7 +29124,7 @@ msgid "Uneven road"
 msgstr ""
 
 msgid "No parking"
-msgstr ""
+msgstr "Dilarang parkir"
 
 msgid "No overtaking"
 msgstr ""
@@ -28914,10 +29172,10 @@ msgid "Open Mapillary history dialog"
 msgstr ""
 
 msgid "No image selected"
-msgstr ""
+msgstr "Tidak ada gambar terpilih"
 
 msgid "Press \"{0}\" to download images"
-msgstr ""
+msgstr "Tekan \"{0}\" untuk download gambar"
 
 msgid "Mapillary picture"
 msgstr ""
@@ -28926,13 +29184,13 @@ msgid "Open Mapillary window"
 msgstr ""
 
 msgid "Next picture"
-msgstr ""
+msgstr "Gambar berikutnya"
 
 msgid "Shows the next picture in the sequence"
 msgstr ""
 
 msgid "Previous picture"
-msgstr ""
+msgstr "Gambar sebelumnya"
 
 msgid "Shows the previous picture in the sequence"
 msgstr ""
@@ -28979,11 +29237,16 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
 msgid "Download mode"
-msgstr ""
+msgstr "Mode unduh"
 
 msgid "Number of images to be pre-fetched (forwards and backwards)"
 msgstr ""
@@ -29010,7 +29273,7 @@ msgid "Delete after upload"
 msgstr "Hapus setelah mengunggah"
 
 msgid "Wait for full quality pictures"
-msgstr ""
+msgstr "Tunggu untuk kualitas gambar yang baik"
 
 msgid "Follow selected image"
 msgstr ""
@@ -29041,7 +29304,7 @@ msgid "Images from my file system"
 msgstr ""
 
 msgid "Select the images you want to import"
-msgstr ""
+msgstr "Pilih gambar yang ingin anda masukkan"
 
 msgid "All images in a directory"
 msgstr ""
@@ -29091,7 +29354,7 @@ msgid "I got it, close this."
 msgstr "Saya mengerti, tutup."
 
 msgid "Image info"
-msgstr ""
+msgstr "Info gambar"
 
 msgid "Displays detail information on the currently selected Mapillary image"
 msgstr ""
@@ -29100,34 +29363,34 @@ msgid "Show detections on top of image"
 msgstr ""
 
 msgid "View in browser"
-msgstr ""
+msgstr "Tampilkan dalam browser"
 
 msgid "Copy key"
-msgstr ""
+msgstr "Salin key"
 
 msgid "Add Mapillary tag"
 msgstr ""
 
 msgid "Image detections"
-msgstr ""
+msgstr "Deteksi gambar"
 
 msgid "Image actions"
 msgstr ""
 
 msgid "Image key"
-msgstr ""
+msgstr "Key gambar"
 
 msgid "Sequence key"
 msgstr ""
 
 msgid "{0} detections"
-msgstr ""
+msgstr "{0} deteksi"
 
 msgid "image has no key"
-msgstr ""
+msgstr "gambar tidak memiliki key"
 
 msgid "unknown user"
-msgstr ""
+msgstr "pengguna tidak diketahui"
 
 msgid "sequence has no key"
 msgstr ""
@@ -29136,13 +29399,14 @@ msgid "Could not open the URL {0} in a browser"
 msgstr ""
 
 msgid "Downloading map objects…"
-msgstr ""
+msgstr "Unduh objek peta"
 
 msgid "All map objects loaded."
 msgstr ""
 
 msgid "Too many map objects, zoom in to see all."
 msgstr ""
+"Terlalu banyak objek pada peta, perbesar tampilan untuk melihat semua."
 
 msgid "Downloading map objects failed!"
 msgstr "Gagal mengunduh objek peta!"
@@ -29155,8 +29419,7 @@ msgstr ""
 
 msgid "Deleted {0} image"
 msgid_plural "Deleted {0} images"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Hapus {0} gambar"
 
 msgid "Imported {0} image"
 msgid_plural "Imported {0} images"
@@ -29205,6 +29468,8 @@ msgstr ""
 msgid ""
 "To solve this problem, you could zoom in and load a smaller area of the map."
 msgstr ""
+"Untuk menyelesaikan masalah ini, anda dapat memperbesar tampilan dan pilih "
+"area yang lebih kecil pada peta."
 
 msgid ""
 "To solve this problem, you could switch to download mode ''{0}'' and load "
@@ -29212,10 +29477,10 @@ msgid ""
 msgstr ""
 
 msgid "Downloading"
-msgstr ""
+msgstr "Mengunduh"
 
 msgid "Select mode"
-msgstr ""
+msgstr "Pilih mode"
 
 msgid "Mapillary login"
 msgstr ""
@@ -29302,7 +29567,7 @@ msgid "Select objects or create new objects and get recommendation."
 msgstr ""
 
 msgid "Add Recommendation"
-msgstr ""
+msgstr "Tambah Rekomendasi"
 
 msgid "Add a recommended key/value pair to your object"
 msgstr ""
@@ -29833,7 +30098,7 @@ msgid "Building:"
 msgstr "Bangunan"
 
 msgid "Tags:"
-msgstr ""
+msgstr "Tags:"
 
 msgid "Source:"
 msgstr "Sumber:"
@@ -29842,7 +30107,7 @@ msgid "Name:"
 msgstr "Nama:"
 
 msgid "update building info"
-msgstr ""
+msgstr "perbarui info bangunan"
 
 msgid "Tag Element"
 msgstr ""
@@ -29851,7 +30116,7 @@ msgid "Select an item to tag."
 msgstr ""
 
 msgid "Tag Building"
-msgstr ""
+msgstr "Tag Bangunan"
 
 msgid "Tools: {0}"
 msgstr ""
@@ -30021,13 +30286,13 @@ msgid "No address type selected. Aborting."
 msgstr ""
 
 msgid "Successfully added address to selected object:"
-msgstr ""
+msgstr "Berhasil menambahkan alamat pada objek terpilih:"
 
 msgid "Distance between building center and address coordinates:"
 msgstr ""
 
 msgid "No address was found for this object."
-msgstr ""
+msgstr "Tidak ada ada alamat ditemukan pada objek ini."
 
 msgid "An unexpected exception occurred:"
 msgstr ""
@@ -30316,7 +30581,7 @@ msgid "Objects:"
 msgstr ""
 
 msgid "Select to download buildings in the selected download area."
-msgstr ""
+msgstr "Pilih untuk mengunduh bangunan dalam area unduh yang dipilih"
 
 msgid "address"
 msgstr "alamat"
@@ -30824,7 +31089,7 @@ msgid "Reference only"
 msgstr ""
 
 msgid "Subject only"
-msgstr ""
+msgstr "Hanya objek"
 
 msgid "Matches ({0})"
 msgstr ""
@@ -30845,7 +31110,7 @@ msgid "Remove selected matches"
 msgstr ""
 
 msgid "Remove ({0})"
-msgstr ""
+msgstr "Hapus ({0})"
 
 msgid "Conflate"
 msgstr ""
@@ -30932,10 +31197,10 @@ msgid "Weight"
 msgstr "Berat"
 
 msgid "Standard Distance"
-msgstr ""
+msgstr "Jarak Standar"
 
 msgid "below"
-msgstr ""
+msgstr "di bawah"
 
 msgid "Maximum Distance"
 msgstr "Jarak maksimum"
@@ -31006,7 +31271,7 @@ msgid "List of tags to merge"
 msgstr ""
 
 msgid "except"
-msgstr ""
+msgstr "kecuali"
 
 msgid "List of tags to NOT merge (they will be ignored)"
 msgstr ""
@@ -31020,10 +31285,10 @@ msgid ""
 msgstr ""
 
 msgid "Simple Example"
-msgstr ""
+msgstr "Contoh yang sederhana"
 
 msgid "Advanced Example"
-msgstr ""
+msgstr "Contoh yang rumit"
 
 msgid "<Please select data>"
 msgstr "<Silahkan pilih data>"
@@ -32195,7 +32460,7 @@ msgid "POWER"
 msgstr ""
 
 msgid "Activates the plug-in"
-msgstr ""
+msgstr "Aktifkan plug-in"
 
 msgid "Working Level"
 msgstr ""
@@ -32240,10 +32505,10 @@ msgid "The lowest level of your building."
 msgstr ""
 
 msgid "Highest Level"
-msgstr ""
+msgstr "Tingkat tertinggi"
 
 msgid "The highest level of your building."
-msgstr ""
+msgstr "Tingkat tertinggi dari bangunan."
 
 msgid "Toolbox for indoor mapping assistance"
 msgstr ""
@@ -32385,12 +32650,12 @@ msgid "generate all combinations from entrie/exit candidates"
 msgstr "menghasilkan semua kombinasi dari masukan/keluar kandidat"
 
 msgid "Check the direction"
-msgstr ""
+msgstr "Periksa arahnya"
 
 msgid ""
 "Check the direction of the selected stream/river. Is it correct?\n"
 " Progress: "
-msgstr ""
+msgstr "Periksa arah alirah sungai yang dipilih. Apakah sudah benar? "
 
 msgid "Correct"
 msgstr "Benar"
@@ -32414,10 +32679,10 @@ msgid "<HTML><U>I</U>gnore this way</HTML>"
 msgstr ""
 
 msgid "Ignore direction of this way."
-msgstr ""
+msgstr "Abaikan arah dari jalan ini."
 
 msgid "Check direction of streams"
-msgstr ""
+msgstr "Periksa arah aliran sungai."
 
 msgid "Check direction of streams and rivers"
 msgstr ""
@@ -32429,7 +32694,7 @@ msgid "Replace way"
 msgstr ""
 
 msgid "Replace way of selected way with a new way"
-msgstr ""
+msgstr "Mengganti jalan yang dipilih dengan jalan yang baru"
 
 msgid ""
 "This tool replaces coastline of one way with another, and so requires "
@@ -33683,11 +33948,15 @@ msgid "Writing position information to image files..."
 msgstr "Menulis informasi posisi pada berkas gambar..."
 
 msgid "Retry"
-msgstr ""
+msgstr "Coba lagi"
 
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr "Berkas tidak dapat dihapus!"
 
@@ -33728,18 +33997,20 @@ msgid ""
 "Click+drag photo, shift+click to position photo, control+click to set "
 "direction."
 msgstr ""
+"Klik+geser foto, shift+klik untuk memposisikan foto, control+klik untuk "
+"mengatur arah."
 
 msgid "Please load some photos."
-msgstr ""
+msgstr "Silakan muat ulang beberapa foto."
 
 msgid "Edit photo GPS data"
-msgstr ""
+msgstr "Edit data foto GPS"
 
 msgid "Edit GPS data of selected photo."
 msgstr ""
 
 msgid "Edit Photo GPS Data"
-msgstr ""
+msgstr "Edit data foto GPS"
 
 msgid "Please select an image first."
 msgstr "Pertama silahkan pilih gambar"
@@ -33751,55 +34022,55 @@ msgid "coordinates"
 msgstr "koordinat"
 
 msgid "Latitude and longitude"
-msgstr ""
+msgstr "Lintang dan bujur"
 
 msgid "Edit Image Coordinates"
 msgstr "Ubah koordinat gambar"
 
 msgid "Edit coordinates in separate editor"
-msgstr ""
+msgstr "Edit koordinat pada editor terpisah"
 
 msgid "altitude"
-msgstr ""
+msgstr "ketinggian"
 
 msgid "Altitude:"
 msgstr ""
 
 msgid "speed"
-msgstr ""
+msgstr "kecepatan"
 
 msgid "positive number or empty"
 msgstr ""
 
 msgid "Speed:"
-msgstr ""
+msgstr "Kecepatan:"
 
 msgid "km/h"
 msgstr "km/jam"
 
 msgid "direction"
-msgstr ""
+msgstr "arah"
 
 msgid "range -360.0 .. 360.0, or empty"
 msgstr ""
 
 msgid "Direction:"
-msgstr ""
+msgstr "Arah:"
 
 msgid "°"
-msgstr ""
+msgstr "°"
 
 msgid "Undo changes made in this dialog"
 msgstr ""
 
 msgid "Reload GPS data from image file"
-msgstr ""
+msgstr "Muat ulang data GPS dari file gambar"
 
 msgid "New layer for untagged images"
-msgstr ""
+msgstr "Layer baru untuk gambar belum ditandai"
 
 msgid "Untagged Images"
-msgstr ""
+msgstr "Gambar belum ditandai"
 
 msgid "Do you want to save current calibration of layer {0}?"
 msgstr "Apakah anda ingin menyimpan kalibrasi saat ini dari layer {0}?"
@@ -33817,7 +34088,7 @@ msgid "Loading file failed: {0}"
 msgstr "Gagal memuat berkas: {0}"
 
 msgid "Problem occurred"
-msgstr ""
+msgstr "Masalah terjadi"
 
 msgid "Import World File Calibration..."
 msgstr ""
@@ -34015,7 +34286,7 @@ msgid "Tags copied to clipboard."
 msgstr ""
 
 msgid "New address point added."
-msgstr ""
+msgstr "Titik alamat baru telah ditambahkan"
 
 msgid "Download Osmosis poly"
 msgstr "Download Osmosis poly"
@@ -34099,21 +34370,23 @@ msgid "Printing has failed."
 msgstr "Pencetakan gagal"
 
 msgid "Repeat last fix"
-msgstr ""
+msgstr "Ulangi perbaikan terakhir"
 
 msgid ""
 "The relation has incomplete members. Do you want to download them and "
 "continue with the sorting?"
 msgstr ""
+"Relasi memiliki anggota yang tidak lengkap. Apakah Anda mau mengunduhnya dan "
+"melanjutkan dengan penyortiran?"
 
 msgid "Incomplete Members"
-msgstr ""
+msgstr "Anggota tidak lengkap"
 
 msgid "Do you want to make the roundabout round?"
-msgstr ""
+msgstr "Apakah Anda mau membuat bundaran lalu lintas?"
 
 msgid "Roundabout round"
-msgstr ""
+msgstr "Bundaran lalu lintas"
 
 msgid "Do you want to download referrers of platforms and stop positions?"
 msgstr ""
@@ -34131,7 +34404,7 @@ msgid ""
 msgstr ""
 
 msgid "Download incomplete route relation members"
-msgstr ""
+msgstr "Download anggota relasi rute yang belum lengkap"
 
 msgid "Include stop_area tests"
 msgstr ""
@@ -34150,7 +34423,7 @@ msgstr[0] ""
 msgstr[1] ""
 
 msgid "How do you want to proceed?"
-msgstr ""
+msgstr "Bagaimana cara anda untuk memprosesnya?"
 
 msgid "PT_Assistant Proceed Request"
 msgstr ""
@@ -34720,7 +34993,7 @@ msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
 msgid "Downloading objects history"
-msgstr ""
+msgstr "Mengunduh riwayat objek"
 
 msgid "Missing merge target for {0} with id {1}"
 msgstr "Hilang target penggabungan untuk {0} dengan id {1}"
@@ -34761,7 +35034,7 @@ msgid "Downloading changeset"
 msgstr "Mengunduh set perubahan"
 
 msgid "See {0}"
-msgstr ""
+msgstr "Lihat {0}"
 
 msgid "Revert changeset #{0}"
 msgstr "Mengembalikan perubahan #{0}"
@@ -34805,7 +35078,7 @@ msgid "Show a selection of the most useful signs"
 msgstr "Tampilkan pilihan dari plugin yang paling berguna"
 
 msgid "Belgium"
-msgstr ""
+msgstr "Belgia"
 
 msgid "Spain"
 msgstr "Spanyol"
@@ -35025,13 +35298,13 @@ msgid "Save SDS file"
 msgstr "Simpan file SDS"
 
 msgid "No object selected"
-msgstr ""
+msgstr "Tidak ada objek terpilih"
 
 msgid "SeaChart Editor"
-msgstr ""
+msgstr "Editor SeaChart"
 
 msgid "Seamark Inspector"
-msgstr ""
+msgstr "Alat pengecek Seamark"
 
 msgid "Select only one object"
 msgstr "Pilih hanya satu objek"
@@ -35043,16 +35316,16 @@ msgid "Please enter minimal distance in metres"
 msgstr "Silahkan masukan minimum jarak dalam meter"
 
 msgid "Please enter numeric angle in degrees"
-msgstr ""
+msgstr "Mohon masukkan sudut numerik"
 
 msgid "Shape actions panel"
-msgstr ""
+msgstr "Panel pembuatan shape"
 
 msgid "Shape mode control panel"
-msgstr ""
+msgstr "Panel kontrol mode shape"
 
 msgid "Rotate Mode:"
-msgstr ""
+msgstr "Mode Rotasi:"
 
 msgid "Clockwise"
 msgstr "Searah jarum jam"
@@ -35061,13 +35334,13 @@ msgid "Counter Clockwise"
 msgstr "Berlawanan arah jarum jam"
 
 msgid "Input angle here"
-msgstr ""
+msgstr "Masukkan sudut disini"
 
 msgid "Rotate"
-msgstr ""
+msgstr "Putar"
 
 msgid "Align building "
-msgstr ""
+msgstr "Meluruskan bangunan "
 
 msgid "Select building"
 msgstr "Pilih bangunan"
@@ -35076,19 +35349,19 @@ msgid "Select road"
 msgstr "Pilih jalan"
 
 msgid "Select none"
-msgstr ""
+msgstr "Tidak ada yang dipilih"
 
 msgid "Min Distance:"
-msgstr ""
+msgstr "Jarak minimum:"
 
 msgid "Input min distance"
-msgstr ""
+msgstr "Masukan jarak minimum"
 
 msgid "Align all buildings"
 msgstr "Meluruskan semua bangunan"
 
 msgid "Delete overlay"
-msgstr ""
+msgstr "Hapus overlay"
 
 msgid "Simplify Area"
 msgstr "Sederhanakan area"
@@ -35167,37 +35440,37 @@ msgid "SeaMap Editor"
 msgstr "Editor SeaMap"
 
 msgid "Spline drawing"
-msgstr ""
+msgstr "Gambar spline"
 
 msgid "Draw a spline curve"
-msgstr ""
+msgstr "Gambar sebuah spline curve"
 
 msgid "Spline goes outside of the world."
 msgstr ""
 
 msgid "Add an existing node to spline: {0}"
-msgstr ""
+msgstr "Menambahkan titik yang sudah ada ke spline: {0}"
 
 msgid "Add a new node to spline: {0}"
-msgstr ""
+msgstr "Menambahkan titik baru ke spline: {0}"
 
 msgid "Delete spline node {0}"
-msgstr ""
+msgstr "Menghapus titik spline {0}"
 
 msgid "Finish spline"
-msgstr ""
+msgstr "Selesaikan spline"
 
 msgid "Splines"
-msgstr ""
+msgstr "Splines"
 
 msgid "Spline drawing preferences"
-msgstr ""
+msgstr "Pengaturan penggambaran spline"
 
 msgid "Curve steps"
 msgstr ""
 
 msgid "Undelete node {0}"
-msgstr ""
+msgstr "Batalkan hapus node {0}"
 
 msgid "OSM Export"
 msgstr ""
@@ -35208,9 +35481,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr "Export"
-
 msgid "AutoSave LiveData"
 msgstr "AutoSave LiveData"
 
@@ -35421,70 +35691,81 @@ msgstr "Pilih semua yang tidak ditandai dan perbesar"
 
 msgid "Select and zoom to all of the unmarked items in the todo list."
 msgstr ""
+"Pilih dan perbesar pada semua yang tidak ditandai dalam daftar yang harus "
+"dikerjakan"
 
 msgid "Pass"
-msgstr ""
+msgstr "Lewat"
 
 msgid "Moves on to the next item but leaves this item in the todo list. ([)."
 msgstr ""
 
 msgid "Add the selected items to the todo list."
 msgstr ""
+"Tambahkan item yang sudah dipilih ke dalam daftar yang harus dikerjakan"
 
 msgid "Mark selected"
-msgstr ""
+msgstr "Tandai yang sudah dipilih"
 
 msgid "Mark the selected items (on the map) as done in the todo list."
 msgstr ""
+"Tandai item yang sudah dipilih (dalam peta) sebagai sudah selesai dalam "
+"daftar yang harus dikerjakan"
 
 msgid "Mark the selected item in the todo list as done. (])."
 msgstr ""
+"Tandai item yang dipilih dalam daftar yang harus dikerjakan sebagai sudah "
+"selesai"
 
 msgid "Mark all"
-msgstr ""
+msgstr "Tandai semua"
 
 msgid "Mark all items in the todo list as done."
 msgstr ""
 "Tandai semua item dalam daftar yang harus dikerjakan sebagai sudah selesai"
 
 msgid "Unmark all"
-msgstr ""
+msgstr "Hapus semua tanda"
 
 msgid "Unmark all items in the todo list that have been marked as done."
 msgstr ""
+"Hapus semua tanda pada item dalam daftar yang harus dikerjakan yang sudah "
+"selesai dikerjakan."
 
 msgid "Clear the todo list"
 msgstr "Kosongkan daftar yang harus dikerjakan"
 
 msgid "Remove all items (marked and unmarked) from the todo list."
 msgstr ""
+"Hilangkan semua item (yang ditandai dan tidak ditandai) dari daftar yang "
+"harus dikerjakan"
 
 msgid "Todo list {0}/{1} ({2}%)"
-msgstr ""
+msgstr "Daftar yang harus dikerjakan {0}/{1} ({2}%)"
 
 msgid "To-fix"
-msgstr ""
+msgstr "To-fix"
 
 msgid "Open to-fix window."
-msgstr ""
+msgstr "Buka jendela to-fix"
 
 msgid "Tool:To-fix"
-msgstr ""
+msgstr "Alat:To-fix"
 
 msgid "Enable Tofix plugin"
-msgstr ""
+msgstr "Aktifkan plugin Tofix"
 
 msgid "Auto delete layer"
-msgstr ""
+msgstr "Hapus layer otomatis"
 
 msgid "Set default url"
-msgstr ""
+msgstr "Atur url bawaan"
 
 msgid "Select the checkbox to:"
 msgstr ""
 
 msgid "Skip"
-msgstr ""
+msgstr "Lewati"
 
 msgid "Skip Error"
 msgstr "Lewati kesalahan"
@@ -35514,7 +35795,7 @@ msgid "Setting new URL: "
 msgstr ""
 
 msgid "Set download area (m²)"
-msgstr ""
+msgstr "Atur daerah yang akan diunduh (m²)"
 
 msgid "~.02"
 msgstr ""
@@ -35523,7 +35804,7 @@ msgid "Tasks"
 msgstr ""
 
 msgid "Config"
-msgstr ""
+msgstr "Konfigurasi"
 
 msgid "Activation"
 msgstr ""
@@ -35541,7 +35822,7 @@ msgid "Activate to-fix plugin."
 msgstr ""
 
 msgid "Maintenance server"
-msgstr ""
+msgstr "Pemeliharaan server"
 
 msgid ""
 "<html>Something went wrong, please update the plugin or report an issue at "
@@ -35555,7 +35836,7 @@ msgid "No change to upload!"
 msgstr "Tidak ada perubahan untuk diunggah"
 
 msgid "The bounding box is too big."
-msgstr ""
+msgstr "Kotak pembatas terlalu besar"
 
 msgid "Cannot place a node outside of the world."
 msgstr "Tidak dapat menempatkan sebuah node/titik di luar permukaan bumi."
@@ -35605,7 +35886,7 @@ msgid "No set of parameter is active!"
 msgstr ""
 
 msgid "Select parameter"
-msgstr ""
+msgstr "Pilih parameter"
 
 msgid "Tracer2: add a way with {0} points"
 msgstr ""
@@ -35617,28 +35898,28 @@ msgid "Tracer2 error"
 msgstr ""
 
 msgid "Parameter for server request"
-msgstr ""
+msgstr "Parameter untuk permintaan server"
 
 msgid "Resolution:"
-msgstr ""
+msgstr "Resolusi:"
 
 msgid "Mode:"
-msgstr ""
+msgstr "Mode:"
 
 msgid "Threshold:"
 msgstr ""
 
 msgid "Points per circle:"
-msgstr ""
+msgstr "Titik per lingkaran"
 
 msgid "Tag:"
-msgstr ""
+msgstr "Tag:"
 
 msgid "Preferred values:"
 msgstr ""
 
 msgid "Delete parameter \"{0}\"?"
-msgstr ""
+msgstr "Hapus parameter \"{0}\"?"
 
 msgid "Add new"
 msgstr "Tambah baru"
@@ -35662,10 +35943,10 @@ msgid ""
 msgstr ""
 
 msgid "Tracer2Server hasn''t found anything."
-msgstr ""
+msgstr "Tracer2Server belum menemukan apapun."
 
 msgid "Tracer2Server has detected an error."
-msgstr ""
+msgstr "Tracer2Server mendeteksi sebuah error"
 
 msgid "GPG"
 msgstr "GPG"
@@ -35968,58 +36249,58 @@ msgid " The number of lanes:backward has fixed according number of turns"
 msgstr ""
 
 msgid "check the right direction of the way"
-msgstr ""
+msgstr "periksa arah yang benar dari garis"
 
 msgid "Unidirectional road"
-msgstr ""
+msgstr "Jalan searah"
 
 msgid "Build unidirectional road"
-msgstr ""
+msgstr "Buat jalan searah"
 
 msgid "Bidirectional road"
-msgstr ""
+msgstr "Jalan dua arah"
 
 msgid "Build bidirectional road"
-msgstr ""
+msgstr "Buat jalan dua arah"
 
 msgid "Use \"none\""
-msgstr ""
+msgstr "Gunakan \"none\""
 
 msgid "use \"none\" instead of empty values"
-msgstr ""
+msgstr "Gunakan \"none\" dibandingkan nilai kosong"
 
 msgid "Preset turn lanes"
-msgstr ""
+msgstr "Preset putar jalur"
 
 msgid "Recently turn lanes edits"
-msgstr ""
+msgstr "Pengubahan putar jalur yang terakhir"
 
 msgid "Forward"
 msgstr "Maju"
 
 msgid "Both way lane"
-msgstr ""
+msgstr "Kedua jalur garis"
 
 msgid "Backward"
 msgstr "ke belakang"
 
 msgid "Number of backward lanes"
-msgstr ""
+msgstr "Jumlah jalur mundur"
 
 msgid "Number of forward lanes"
-msgstr ""
+msgstr "Jumlah jalur maju"
 
 msgid "Both way"
-msgstr ""
+msgstr "Kedua jalan"
 
 msgid "Number of lanes"
-msgstr ""
+msgstr "Jumlah jalur"
 
 msgid "Directional"
-msgstr ""
+msgstr "Arah"
 
 msgid "Turn lanes"
-msgstr ""
+msgstr "Putar jalur"
 
 msgid "No such lane."
 msgstr "Tidak ada jalur tersebut"
@@ -36333,7 +36614,7 @@ msgid "Bicycles"
 msgstr "Sepeda"
 
 msgid "Mopeds"
-msgstr ""
+msgstr "Sepeda listrik"
 
 msgid "Use standard exceptions"
 msgstr "Gunakan standar pengecualian"
@@ -36664,12 +36945,18 @@ msgstr "Ubah kedalam editor dasar dan pilih way/garis"
 
 msgid "Unable to undelete node {0}. Object has likely been redacted"
 msgstr ""
+"Tidak bisa untuk membatalkan menghapus titik {0}. Objek kemungkinan telah "
+"disunting"
 
 msgid "Unable to undelete way {0}. Object has likely been redacted"
 msgstr ""
+"Tidak bisa untuk membatalkan menghapus garis{0}. Objek kemungkinan telah "
+"disunting"
 
 msgid "Unable to undelete relation {0}. Object has likely been redacted"
 msgstr ""
+"Tidak bisa untuk membatalkan menghapus relasi{0}. Objek kemungkinan telah "
+"disunting"
 
 msgid "Undelete object..."
 msgstr "Batalkan menghapus objek"
@@ -36724,7 +37011,7 @@ msgid "Internal error: number of nodes is {0}."
 msgstr "Kesalahan internal: jumlah dari node/titik {0}"
 
 msgid "Copy all tags of selected objects to paste buffer."
-msgstr ""
+msgstr "Salin semua tag dari objek terpilih untuk menempel jangkauan"
 
 msgid "Extract node"
 msgstr "Ekstrak node/titik"
@@ -36938,16 +37225,16 @@ msgstr ""
 "deg 11' 47.60\" T</li></ul>"
 
 msgid "Tag multiple objects [alpha]"
-msgstr ""
+msgstr "Tag beberapa objek [alpha]"
 
 msgid "Edit tags of object list in table"
 msgstr "Perbaiki *tags* dari daftar objek pada tabel"
 
 msgid "Tag multiple objects"
-msgstr ""
+msgstr "Tag beberapa objek"
 
 msgid "Sync with JOSM selection"
-msgstr ""
+msgstr "Sinkronkan dengan seleksi JOSM"
 
 msgid "Zoom to objects"
 msgstr "Perbesar ke objek"
@@ -36956,22 +37243,22 @@ msgid "Remove tag"
 msgstr "Hapus tag"
 
 msgid "Delete tags from multiple objects"
-msgstr ""
+msgstr "Hapus tag dari beberapa objek"
 
 msgid "Duplicate tags from the first"
-msgstr ""
+msgstr "Duplikasi tag dari pertama"
 
 msgid "Set tags for multiple objects"
-msgstr ""
+msgstr "Atur tag untuk beberapa objek"
 
 msgid "Delete from history"
 msgstr "Hapus dari riwayat"
 
 msgid "Find primitives with these tags"
-msgstr ""
+msgstr "Temukan awalan dengan tag ini"
 
 msgid "Multitag Background: highlight"
-msgstr ""
+msgstr "Multitag Background: sorot"
 
 msgid "Replace geometry of selected object with a new one"
 msgstr "Ganti geometri dari objek yang dipilih dengan yang baru"
@@ -37026,31 +37313,33 @@ msgid "Replace geometry for way {0}"
 msgstr "Ganti geometri untuk way/garis {0}"
 
 msgid "Replace Membership"
-msgstr ""
+msgstr "Ganti keanggontaan"
 
 msgid ""
 "In relations where the selected object is member of, replace it with a new "
 "one"
 msgstr ""
+"Dalam relasi dimana objek yang dipilih adalah salah satu anggotanya, ganti "
+"dengan yang baru"
 
 msgid "Replaced ''{0}'' by ''{1}'' in {2} relation"
 msgid_plural "Replaced ''{0}'' by ''{1}'' in {2} relations"
 msgstr[0] "Ganti \"{0}\"dengan \"{1}\"dalam {2} *relation*"
 
 msgid "The first selected object ''{0}'' is not part of any relation"
-msgstr ""
+msgstr "Objek yang di pilih pertama kali \"{0}\" bukan bagian dari relasi"
 
 msgid "Range of child primitives count"
-msgstr ""
+msgstr "Jangkauan dari perhitungan turunan awal"
 
 msgid "Range of parent primitives count"
-msgstr ""
+msgstr "Jangkauan dari perhitungan induk awal"
 
 msgid "Range of referencing relation count"
-msgstr ""
+msgstr "Rentang dari penghitungan referensi relasi"
 
 msgid "Range of attached ways count"
-msgstr ""
+msgstr "Rentang dari jumlah way yang menempel"
 
 msgid "Adjacent nodes"
 msgstr "Node/titik berdekatan"
@@ -37219,7 +37508,7 @@ msgid "Keep centered"
 msgstr "Tetap ditengah"
 
 msgid "follows the video icon automatically"
-msgstr ""
+msgstr "Ikuti ikon video secara otomatis"
 
 msgid "Subtitles"
 msgstr "Sub Judul"
@@ -37357,27 +37646,26 @@ msgstr ""
 "Pencarian setelah waypoint. Klik dan gerakkan tampilan peta ke waypoint"
 
 msgid "Fetch Wikidata IDs"
-msgstr ""
+msgstr "Ambil ID Wikidata"
 
 msgid "Fetch Wikidata IDs using the ''wikipedia'' tag"
-msgstr ""
+msgstr "Ambil ID Wikidata menggunakan tag \"wikipedia\""
 
 msgid "Fetching Wikidata IDs"
-msgstr ""
+msgstr "Ambil ID Wikidata"
 
 msgid "Add Wikidata"
-msgstr ""
+msgstr "Tambahkan Wikidata"
 
 msgid "No Wikidata ID found for: {0}"
-msgstr ""
+msgstr "Tidak ada ID Wikidata yang ditemukan untuk: {0}"
 
 msgid "Fetching {0} Wikidata ID for language ''{1}''"
 msgid_plural "Fetching {0} Wikidata IDs for language ''{1}''"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Ambil ID Wikidata {0} untuk bahasa \"{1}\""
 
 msgid "Add Wikidata for language ''{0}''"
-msgstr ""
+msgstr "Tambahkan Wikidata untuk bahasa \"{0}\""
 
 msgid "Add names from Wikipedia"
 msgstr "Menambahkan nama dari Wikipedia"
@@ -37400,40 +37688,41 @@ msgstr "Salin template {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] ""
-msgstr[1] ""
+msgstr[0] "Ganti \"{0}\" tag {1} dari {2} dengan nilai baru \"{3}\"?"
 
 msgid "Download from Sophox API"
-msgstr ""
+msgstr "Download dari API Sophox"
 
 msgid ""
 "Find places of education at least 2km, and at most 3km from the center of "
 "the selection"
 msgstr ""
+"Cari tempat pendidikan paling sedikit 2km, dan paling jauh 3km dari pusat "
+"dari seleksibelu"
 
 msgid "Show/hide Sophox snippet list"
-msgstr ""
+msgstr "Munculkan/hilangkan daftar potongan Sophox"
 
 msgid "help"
-msgstr ""
+msgstr "Bantuan"
 
 msgid "Server: "
-msgstr ""
+msgstr "Server: "
 
 msgid "Wikidata+OSM server"
-msgstr ""
+msgstr "Wikidata+server OSM"
 
 msgid "Search Wikidata items"
-msgstr ""
+msgstr "Cari item Wikidata"
 
 msgid "Target key: "
-msgstr ""
+msgstr "Target key: "
 
 msgid "Search Wikipedia category"
-msgstr ""
+msgstr "Cari kategori Wikipedia"
 
 msgid "Load category"
-msgstr ""
+msgstr "Muat kategori"
 
 msgid "Fetch Wikipedia articles with coordinates"
 msgstr "mengambil artikel wikipedia dengan koordinat"
@@ -37454,13 +37743,13 @@ msgid "Not linked yet"
 msgstr "Belum tertautan"
 
 msgid "{0}: {1}"
-msgstr ""
+msgstr "{0}: {1}"
 
 msgid "Wikidata"
-msgstr ""
+msgstr "Wikidata"
 
 msgid "Fetches all coordinates from Wikidata in the current view"
-msgstr ""
+msgstr "Mengambil seluruh koordinat dari Wikidata dalam tampilan saat ini"
 
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr "mengambil semua koordinat dari wikipedia dalam pandangan saat ini"
@@ -37533,97 +37822,97 @@ msgid "Test"
 msgstr "Tes"
 
 msgid "View website"
-msgstr ""
+msgstr "Tampilkan website"
 
 msgid "View URL"
-msgstr ""
+msgstr "Tunjukkan URL"
 
 msgid "Send Email"
-msgstr ""
+msgstr "Kirim Email"
 
 msgid "View image"
-msgstr ""
+msgstr "Lihat gambar"
 
 msgid "View %name% article"
-msgstr ""
+msgstr "Lihat artikel %name%"
 
 msgid "View Wikidata page"
-msgstr ""
+msgstr "Lihat halaman Wikidata"
 
 msgid "View Wikispecies page"
-msgstr ""
+msgstr "Lihat halaman Wikispecies"
 
 msgid "View UNESCO sheet"
-msgstr ""
+msgstr "Lihat lembar UNESCO"
 
 msgid "View %name% image"
-msgstr ""
+msgstr "Lihat foto %name%"
 
 msgid "View %name% sheet of river"
-msgstr ""
+msgstr "Lihat lembar %name% dari sungai"
 
 msgid "View %name% municipality sheet"
-msgstr ""
+msgstr "Lihat lembar kecamatan %name%"
 
 msgid "View %name% sheet on osm.fr"
-msgstr ""
+msgstr "Lihat lembar %name% pada osm.fr"
 
 msgid "View %name% map of municipalities"
-msgstr ""
+msgstr "Lihat peta %name% dari kecamatan"
 
 msgid "View %name% list of municipalities"
-msgstr ""
+msgstr "Lihat daftar %name% dari kecamatan"
 
 msgid "View %name% map of cantons"
-msgstr ""
+msgstr "Lihat peta %name% dari provinsi/wilayah"
 
 msgid "View %name% list of cantons"
-msgstr ""
+msgstr "Lihat daftar %name% dari provinsi/wilayah"
 
 msgid "View %name% map of arrondissements"
-msgstr ""
+msgstr "Lihat peta %name% dari kabupaten"
 
 msgid "View %name% list of arrondissements"
-msgstr ""
+msgstr "Lihat datar %name% dari kabupaten"
 
 msgid "View %name% map of departments"
-msgstr ""
+msgstr "Lihat peta %name% dari departemen"
 
 msgid "View %name% list of departments"
-msgstr ""
+msgstr "Lihat daftar %name% dari departemen"
 
 msgid "View %name% map of regions"
-msgstr ""
+msgstr "Lihat area peta %name%"
 
 msgid "View %name% list of regions"
-msgstr ""
+msgstr "Lihat daftar %name% area"
 
 msgid "View %name% sheet of church"
-msgstr ""
+msgstr "Lihat lembat %name% dari gereja"
 
 msgid "View Mérimée sheet of monument"
-msgstr ""
+msgstr "Lihat lembar Mérimée dari monumen"
 
 msgid "View Mérimée list for this municipality"
-msgstr ""
+msgstr "Lihat daftar Mérimée  untuk kecamatan ini"
 
 msgid "View %name% sheet of geodesic site"
-msgstr ""
+msgstr "Lihat lembar %name% dari situs geodesic"
 
 msgid "View UAI sheet of school/college"
-msgstr ""
+msgstr "Lihat lembar UAI dari sekolah/perguruan tinggi"
 
 msgid "View %name% sheet of hospital/home"
-msgstr ""
+msgstr "Lihat lembar %name% dari rumah sakit/rumah"
 
 msgid "View INSEE explanation of %name% code"
-msgstr ""
+msgstr "Lihat penjelasan INSEE dari kode %name%"
 
 msgid "Get identification card (pdf) for this establishment"
-msgstr ""
+msgstr "Mendapatkan kartu identifikasi (pdf) dari pembangunan ini"
 
 msgid "View %name% page of this post office"
-msgstr ""
+msgstr "Lihat halaman %name% untuk kantor pos ini"
 
 msgid "View %name% sheet of memorial"
-msgstr ""
+msgstr "Lihat lembar %name% dari memorial"
diff --git a/i18n/po/is.po b/i18n/po/is.po
index 4121f6b..db86aad 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 04:48+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:47+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: is\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -959,6 +959,12 @@ msgstr "Aðskilið lag"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "Veljð hvort sótt gögn ættu að vera sett í nýtt lag."
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr "Opna slóð"
 
@@ -2242,6 +2248,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3045,18 +3076,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr "S"
@@ -3073,9 +3092,21 @@ msgctxt "compass"
 msgid "E"
 msgstr "A"
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8259,12 +8290,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9765,6 +9790,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9869,10 +9900,10 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
-msgstr[0] "{0} ferill"
-msgstr[1] "{0} ferlar"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Timespan"
 msgstr "Tímaspan"
@@ -9880,6 +9911,9 @@ msgstr "Tímaspan"
 msgid "Length"
 msgstr "Lengd"
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9893,14 +9927,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] "{0} punktur"
 msgstr[1] "{0} punktar"
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
-msgstr[0] "{0} ferill, "
-msgstr[1] "{0} ferlar, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] "{0} ferill"
+msgstr[1] "{0} ferlar"
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr "Vista GPX skrá"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9943,6 +10000,16 @@ msgstr ""
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10271,28 +10338,19 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
-msgstr "Fyrri"
+msgid "Next"
+msgstr "Næsta"
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
-msgstr "Fjarlægja myndina úr laginu"
-
-msgid "Delete File from disk"
-msgstr ""
-
-msgid "Copy image path"
-msgstr ""
-
-msgid "Next"
-msgstr "Næsta"
+msgid "Previous"
+msgstr "Fyrri"
 
-msgid "Show next Image"
+msgid "Show previous Image"
 msgstr ""
 
 msgid "Show first Image"
@@ -10307,6 +10365,15 @@ msgstr ""
 msgid "Zoom best fit and 1:1"
 msgstr ""
 
+msgid "Remove photo from layer"
+msgstr "Fjarlægja myndina úr laginu"
+
+msgid "Delete File from disk"
+msgstr ""
+
+msgid "Copy image path"
+msgstr ""
+
 msgid "Move dialog to the side pane"
 msgstr ""
 
@@ -13403,8 +13470,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14068,6 +14135,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19499,6 +19572,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23474,6 +23553,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23794,7 +23879,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24217,6 +24303,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24303,9 +24395,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24333,10 +24422,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24735,18 +24824,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24770,7 +24847,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24832,10 +25059,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24844,118 +25071,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
+msgstr ""
+
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25092,6 +25328,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27621,15 +27869,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27688,13 +27933,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27730,15 +27969,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27871,6 +28107,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32297,6 +32538,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33777,9 +34022,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/it.po b/i18n/po/it.po
index eaddaec..2391c11 100644
--- a/i18n/po/it.po
+++ b/i18n/po/it.po
@@ -4,7 +4,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm 20081003\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\n"
 "PO-Revision-Date: 2017-10-24 12:58+0000\n"
 "Last-Translator: Moire <Unknown>\n"
 "Language-Team: Italian <talk-it at lists.openstreetmap.org>\n"
@@ -12,8 +12,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-11-26 04:50+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:49+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: it\n"
 "X-Language: it_IT\n"
 "X-Source-Language: en\n"
@@ -1047,6 +1047,12 @@ msgstr "Livello separato"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "Selezionare se i dati devono essere scaricati in un nuovo livello"
 
+msgid "Zoom to downloaded data"
+msgstr "Ingrandisci la visuale sui dati scaricati"
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr "Seleziona per ingrandire la visuale sui dati appena scaricati"
+
 msgid "Download Location"
 msgstr "Scarica indirizzo URL"
 
@@ -2479,6 +2485,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr "Conferma"
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr "Lista delle relazioni recenti"
 
@@ -3365,18 +3396,6 @@ msgstr "Il file di revisione ''/REVISION'' è mancante."
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr "Un conflitto per la primitca \"{0}\" è già stato registrato"
 
-msgid "Decimal Degrees"
-msgstr "Gradi decimali"
-
-msgid "deg° min'' sec\""
-msgstr "grad° min'' sec\""
-
-msgid "deg° min'' (Nautical)"
-msgstr "grad° min'' (Nautico)"
-
-msgid "Projected Coordinates"
-msgstr "Coordinate proiettate"
-
 msgctxt "compass"
 msgid "S"
 msgstr "S"
@@ -3393,9 +3412,21 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
+msgid "deg° min'' sec\""
+msgstr "grad° min'' sec\""
+
+msgid "Decimal Degrees"
+msgstr "Gradi decimali"
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr "grad° min'' (Nautico)"
+
+msgid "Projected Coordinates"
+msgstr "Coordinate proiettate"
+
 msgid "Date of imagery: {0}"
 msgstr "Immagini risalenti al: {0}"
 
@@ -9093,12 +9124,6 @@ msgstr ""
 "JOSM.<br>E'' possibile aprirla manualmente dal menu File o dalla barra degli "
 "strumenti.</html>"
 
-msgid "Zoom to downloaded data"
-msgstr "Ingrandisci la visuale sui dati scaricati"
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr "Seleziona per ingrandire la visuale sui dati appena scaricati"
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -10826,6 +10851,12 @@ msgstr "Metadata "
 msgid "Load tile"
 msgstr "Carica tassello"
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr "Impossibile creare la fonte dei tasselli"
 
@@ -10938,10 +10969,10 @@ msgstr "Nome: {0}"
 msgid "Description: {0}"
 msgstr "Descrizione: {0}"
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
-msgstr[0] "{0} tracciato"
-msgstr[1] "{0} tracciati"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Timespan"
 msgstr "Differenza temporale"
@@ -10949,6 +10980,9 @@ msgstr "Differenza temporale"
 msgid "Length"
 msgstr "Lunghezza"
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr "Lunghezza: {0}"
 
@@ -10962,14 +10996,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] "{0} punto del percorso"
 msgstr[1] "{0} punti del percorso"
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
-msgstr[0] "{0} percorso, "
-msgstr[1] "{0} percorsi, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] "{0} tracciato"
+msgstr[1] "{0} tracciati"
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr "Salva in un file GPX"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr "ID"
 
@@ -11012,6 +11069,16 @@ msgstr "Salva livello"
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] "{0} note"
@@ -11359,29 +11426,20 @@ msgstr "Errore nel file {0}"
 msgid "Display geotagged images"
 msgstr "Visualizza immagini georeferenziate"
 
-msgid "Previous"
-msgstr "Precedente"
+msgid "Next"
+msgstr "Successivo"
 
-msgid "Show previous Image"
-msgstr "Visualizza l''immagine precedente"
+msgid "Show next Image"
+msgstr "Visualizza l''immagine successiva"
 
 msgid "Geoimage: {0}"
 msgstr "Immagine georeferenziata: {0}"
 
-msgid "Remove photo from layer"
-msgstr "Rimuovi la fotografia dal livello"
-
-msgid "Delete File from disk"
-msgstr "Elimina il file dal disco"
-
-msgid "Copy image path"
-msgstr "Copia percorso immagine"
-
-msgid "Next"
-msgstr "Successivo"
+msgid "Previous"
+msgstr "Precedente"
 
-msgid "Show next Image"
-msgstr "Visualizza l''immagine successiva"
+msgid "Show previous Image"
+msgstr "Visualizza l''immagine precedente"
 
 msgid "Show first Image"
 msgstr "Mostra prima immagine"
@@ -11395,6 +11453,15 @@ msgstr "Centra la visualizzazione"
 msgid "Zoom best fit and 1:1"
 msgstr "Ingrandimento ottimale e 1:1"
 
+msgid "Remove photo from layer"
+msgstr "Rimuovi la fotografia dal livello"
+
+msgid "Delete File from disk"
+msgstr "Elimina il file dal disco"
+
+msgid "Copy image path"
+msgstr "Copia percorso immagine"
+
 msgid "Move dialog to the side pane"
 msgstr "Sposta la finestra sul pannello laterale"
 
@@ -14929,11 +14996,9 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr "Il nodo eliminato {0} fa parte del percorso {1}"
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
-"Il percorso {0} con {1} nodi ha dei nodi incompleti perché almeno un nodo "
-"non è presente nei dati caricati."
 
 msgid ""
 "Relation with external id ''{0}'' refers to a missing primitive with "
@@ -15702,6 +15767,12 @@ msgstr "È stata richiesta al controllo remoto l''apertura di un file locale."
 msgid "Do you want to allow this?"
 msgstr "Si vuole permettere questo?"
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr "Conferma l''azione del controllo remoto"
 
@@ -21424,6 +21495,12 @@ msgstr "Rifiuti"
 msgid "Recycling Centre"
 msgstr "Centro di riciclaggio"
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr "Cassonetto"
 
@@ -25424,6 +25501,12 @@ msgstr "Trasporto pubblico locale (TPL)"
 msgid "Hike & Bike"
 msgstr "Hike & Bike"
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr "skobbler"
 
@@ -25744,8 +25827,9 @@ msgstr "Mappa di base dell’Austria, basata su dati governativi."
 msgid "basemap.at Orthofoto"
 msgstr "basemap.at Orthofoto"
 
-msgid "Orthofoto layer provided by basemap.at. "
-msgstr "Livello di ortofoto fornito da basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
+msgstr ""
 
 msgid "Geoimage.at MaxRes"
 msgstr "Geoimage.at MaxRes"
@@ -26168,6 +26252,12 @@ msgstr "Estonia Cadastre (Maaamet)"
 msgid "Estonia Forestry (Maaamet)"
 msgstr "Estonia Forestry (Maaamet)"
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr "BANO"
 
@@ -26255,9 +26345,6 @@ msgid ""
 msgstr ""
 "Vercors - Riserva naturale degli Altipiani di Vercors - Ortofoto 1999 - 1 m"
 
-msgid "Hamburg (40 cm)"
-msgstr "Amburgo (40 cm)"
-
 msgid "Hamburg (20 cm)"
 msgstr "Amburgo (20 cm)"
 
@@ -26285,12 +26372,12 @@ 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"
-
 msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr "Linee Deutsche Bahn VzG Nov 2015"
 
+msgid "Deutsche Bahn VzG lines January 2017"
+msgstr ""
+
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
 msgstr ""
 
@@ -26687,18 +26774,6 @@ msgstr "geoportail.lu tutti i livelli"
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr "Lussemburgo Inspire Ferrovia"
-
-msgid "Luxembourg Inspire Roads"
-msgstr "Lussemburgo Inspire Strade"
-
-msgid "Luxembourg Inspire Water"
-msgstr "Lussemburgo Inspire Water"
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Delta del Niger Ott 2012 Landsat"
 
@@ -26722,8 +26797,158 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
-msgstr "Svalbard -Orthofoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
+msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
 msgstr ""
@@ -26784,11 +27009,11 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr "Pangasinán/Bulacan (Filippine HiRes)"
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
-msgstr "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
-msgstr "Geoportal 2: Ortofotomapa (immagini aeree) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
+msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr "Geoportal 2: PRNG (geo names)"
@@ -26796,118 +27021,127 @@ msgstr "Geoportal 2: PRNG (geo names)"
 msgid "Geoportal 2: ISOK hillshade"
 msgstr "Geoportal 2: ISOK hillshade"
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
-msgstr "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
+msgstr ""
+
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
+msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
-msgstr "Będzin: Budynki (buildings)"
+msgid "Będzin: Buildings"
+msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
-msgstr "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
+msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr "Bytom: Fotoplan 2014 (immagini aeree)"
 
-msgid "Bytom: Budynki (buildings)"
-msgstr "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
-msgstr "Chorzów: Budynki (buildings)"
+msgid "Chorzów: Buildings"
+msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
-msgstr "Częstochowa: Budynki (edifici)"
+msgid "Częstochowa: Buildings"
+msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
+msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2013 (immagini aeree)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
+msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2014 (immagini aeree)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
+msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
-msgstr "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
+msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
-msgstr "Gliwice: Budynki (buildings)"
+msgid "Gliwice: Buildings"
+msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
-msgstr "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
-msgstr "Katowice: Budynki (edifici)"
+msgid "Katowice: Buildings"
+msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
-msgstr "Łódź: Budynki (edifici)"
+msgid "Łódź: Buildings"
+msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
-msgstr "Łódź: Ortofotomapa (aerial image)"
+msgid "Łódź: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
-msgstr "Powiat dębicki: Budynki (edifici)"
+msgid "Powiat dębicki: Buildings"
+msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
-msgstr "Powiat lubaczowski: Budynki (edifici)"
+msgid "Powiat lubaczowski: Buildings"
+msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
-msgstr "Powiat łańcucki: Budynki (edifici)"
+msgid "Powiat łańcucki: Buildings"
+msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
-msgstr "Powiat poznański: Budynki (edifici)"
+msgid "Powiat poznański: Buildings"
+msgstr ""
+
+msgid "Powiat poznański: Orthophotomap (aerial image)"
+msgstr ""
+
+msgid "Powiat ropczycko-sędziszowski: Buildings"
+msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
-msgstr "Powiat poznański: Ortofotomapa (Immagine Aerea)"
+msgid "Powiat rzeszowski: Buildings"
+msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
-msgstr "Powiat rzeszowski: Budynki (edifici)"
+msgid "Powiat stalowowolski: Buildings"
+msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
-msgstr "Powiat rzeszowski: Ortofotomapa (Immagine Aerea)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
+msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
-msgstr "Powiat stalowowolski: Budynki (edifici)"
+msgid "Przemyśl: Buildings"
+msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
-msgstr "Przemyśl: Budynki (edifici)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
-msgstr "Przemyśl: Ortofotomapa (Immagine Aerea)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
-msgstr "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
+msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
-msgstr "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
-msgstr "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Buildings"
+msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
-msgstr "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
+msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
-msgstr "Siemianowice Śląskie: Budynki (edifici)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
+msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2008 (Immagine Aerea)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
+msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
+msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2012 (Immagine Aerea)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
+msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
-msgstr "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -27044,6 +27278,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr "Kanton Aargau 25cm (AGIS 2011)"
 
@@ -29784,15 +30030,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
-msgstr "Avvia livello Mapillary"
+msgid "Open Mapillary layer"
+msgstr ""
 
 msgid "Mapillary"
 msgstr "Mapillary"
 
-msgid "Create Mapillary layer"
-msgstr "Crea livello Mapillary"
-
 msgid "Download Mapillary images in current view"
 msgstr "Scarica immagini Mapillary nella vista corrente"
 
@@ -29851,14 +30094,8 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr "Carica foto"
-
-msgid "Upload Mapillary pictures"
-msgstr "Carica foto Mapillary"
-
-msgid "Upload pictures."
-msgstr "Carica foto."
+msgid "Upload Mapillary images"
+msgstr ""
 
 msgid "Walk mode"
 msgstr "Modalità camminata"
@@ -29893,15 +30130,12 @@ msgstr "Esporta le immagini selezionate"
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr "Selezionare una cartella"
 
 msgid "Explore"
 msgstr "Esplora"
 
-msgid "Select a directory"
-msgstr "Selezionare una cartella"
-
 msgid "Speed limit"
 msgstr "Limite di velocità"
 
@@ -30034,6 +30268,11 @@ msgstr "Anteprima delle immagini quando il mouse passa sopra la loro icona"
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -34868,6 +35107,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr "Il file non può essere eliminato!"
 
@@ -36409,9 +36652,6 @@ msgstr "Esporta i dati del traffico su un file di rete SUMO"
 msgid "SUMO Export"
 msgstr "Esportazione SUMO"
 
-msgid "Export"
-msgstr "Esporta"
-
 msgid "AutoSave LiveData"
 msgstr "Salvataggio automatico LiveData"
 
diff --git a/i18n/po/ja.po b/i18n/po/ja.po
index 803862e..cb46e80 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-11-26 00:06+0100\n"
-"PO-Revision-Date: 2017-10-15 17:23+0000\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\n"
+"PO-Revision-Date: 2017-12-30 17:28+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-11-26 04:51+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:49+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "X-Poedit-Country: JAPAN\n"
 "Language: ja\n"
 "X-Poedit-Language: Japanese\n"
@@ -431,7 +431,7 @@ msgid "Delete the active layer. Does not delete the associated file."
 msgstr "アクティブなレイヤーを削除します。関連するファイルは削除されません。"
 
 msgid "Dialogs panel"
-msgstr ""
+msgstr "ダイアログパネル"
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "ダイアログパネルの表示/非表示を切り替え、地図ビューを最大化"
@@ -466,7 +466,7 @@ msgstr "あなたが選択したサーバから地図データをダウンロー
 msgid ""
 "<html>This action will require {0} individual<br>download requests. Do you "
 "wish<br>to continue?</html>"
-msgstr "<html>この操作には、{0}回の独立したダウンロードリクエストを<br>必要とします。続けますか?</html>"
+msgstr "<html>この操作には、 {0} 回の独立したダウンロード<br>リクエストを必要とします。続けますか?</html>"
 
 msgid "Download notes in current view"
 msgstr "現在のビューにメモをダウンロード"
@@ -481,7 +481,7 @@ msgid "Download object..."
 msgstr "オブジェクトをダウンロード..."
 
 msgid "Download OSM object by ID."
-msgstr "IDを指定してOSMオブジェクトをダウンロードします。"
+msgstr "ID を指定して OSM オブジェクトをダウンロードします。"
 
 msgid "Download parent ways/relations..."
 msgstr "親のウェイ/リレーションをダウンロード..."
@@ -962,7 +962,7 @@ msgid "Enter URL to download:"
 msgstr "ダウンロードするURL:"
 
 msgid "Enter an URL from where data should be downloaded"
-msgstr "データダウンロード先のURLを入力"
+msgstr "データダウンロード先の URL を入力"
 
 msgid "Separate Layer"
 msgstr "新規レイヤーを作成"
@@ -970,6 +970,12 @@ msgstr "新規レイヤーを作成"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "新しいレイヤーにデータをダウンロードするなら選択"
 
+msgid "Zoom to downloaded data"
+msgstr "ダウンロードしたデータにズーム"
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr "新しくダウンロードしたデータ全体へのズームを選択します。"
+
 msgid "Download Location"
 msgstr "ダウンロード先"
 
@@ -1722,22 +1728,22 @@ msgid "Downloading changeset content"
 msgstr "変更セットをダウンロード中"
 
 msgid "({0}/{1}) Downloading changeset {2}..."
-msgstr "変更セット {2} をダウンロード中。({0}/{1})"
+msgstr "変更セット {2} をダウンロードしています。({0}/{1})"
 
 msgid "({0}/{1}) Downloading content for changeset {2}..."
-msgstr "変更セット {2} の内容をダウンロード中。({0}/{1})"
+msgstr "変更セット {2} の内容をダウンロードしています。({0}/{1})"
 
 msgid "Download changesets"
 msgstr "変更セットをダウンロード"
 
 msgid "Querying and downloading changesets"
-msgstr "変更セットを問い合わせ及びダウンロード中"
+msgstr "変更セットを問い合わせしてダウンロード中"
 
 msgid "Determine user id for current user..."
 msgstr "現在のユーザー用のIDを決定..."
 
 msgid "Query and download changesets ..."
-msgstr "変更セットをクエリー及びダウンロード..."
+msgstr "変更セットを問い合わせしてダウンロード..."
 
 msgid "Errors during download"
 msgstr "ダウンロード中にエラー"
@@ -1765,11 +1771,11 @@ msgstr "メモ"
 
 msgid "{0} note has been downloaded."
 msgid_plural "{0} notes have been downloaded."
-msgstr[0] "ノート{0}件をダウンロードしました。"
+msgstr[0] "{0} 件のメモをダウンロードしました。"
 
 msgid ""
 "Since the download limit was {0}, there might be more notes to download."
-msgstr "ダウンロード制限が{0}件だったので、ダウンロードするメモがもっと残っています。"
+msgstr "ダウンロード制限が {0} 件だったので、ダウンロードするメモがもっと残っています。"
 
 msgid ""
 "Request a smaller area to make sure that all notes are being downloaded."
@@ -1842,7 +1848,7 @@ msgid "Download session"
 msgstr "ダウンロードセッション"
 
 msgid "Download {0} of {1} ({2} left)"
-msgstr "ダウンロード{1}件中{0}件目(残り{2}件)"
+msgstr "{1} 件中 {0} 件目をダウンロード (残り {2} 件)"
 
 msgid "Updating data"
 msgstr "データ更新中"
@@ -2252,6 +2258,31 @@ msgstr[0] "<b>{0}枚</b>の異なるリレーションエディターを同時
 msgid "Confirmation"
 msgstr "確認"
 
+msgid "Export GPX file starting from first member"
+msgstr "最初のメンバーからGPXファイルにエクスポート"
+
+msgid "Export GPX file starting from last member"
+msgstr "最後のメンバーからGPXファイルにエクスポート"
+
+msgid "Convert to GPX layer starting from first member"
+msgstr "最初のメンバーからGPXレイヤーに変換"
+
+msgid "Convert to GPX layer starting from last member"
+msgstr "最後のメンバーからGPXレイヤーに変換"
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr "選択中のリレーション"
+
 msgid "List of recent relations"
 msgstr "最近のリレーションの一覧"
 
@@ -3051,18 +3082,6 @@ msgstr "''/REVISION''で指定されたリビジョンファイルが見つか
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr "プリミティブ ''{0}'' には既に競合が登録されています"
 
-msgid "Decimal Degrees"
-msgstr "十進経緯度"
-
-msgid "deg° min'' sec\""
-msgstr "度 分 秒"
-
-msgid "deg° min'' (Nautical)"
-msgstr "度° 分'' (Nautical)"
-
-msgid "Projected Coordinates"
-msgstr "射影された座標"
-
 msgctxt "compass"
 msgid "S"
 msgstr "南"
@@ -3079,9 +3098,21 @@ msgctxt "compass"
 msgid "E"
 msgstr "東"
 
+msgid "deg° min'' sec\""
+msgstr "度 分 秒"
+
+msgid "Decimal Degrees"
+msgstr "十進経緯度"
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr "度° 分'' (Nautical)"
+
+msgid "Projected Coordinates"
+msgstr "射影された座標"
+
 msgid "Date of imagery: {0}"
 msgstr "画像の日付: {0}"
 
@@ -3600,7 +3631,7 @@ msgid "Tag combinations"
 msgstr "タグの組み合わせ"
 
 msgid "Checks for missing tag or suspicious combinations"
-msgstr "抜けているタグや疑わしい組み合わせをチェックします"
+msgstr "欠落しているタグや疑わしい組み合わせをチェックします"
 
 msgid "Deprecated features"
 msgstr "推奨されない機能"
@@ -3740,7 +3771,7 @@ msgid "Error: {0}"
 msgstr "エラー: {0}"
 
 msgid "JOSM projection command line interface"
-msgstr ""
+msgstr "JOSM 投影コマンドラインインターフェース"
 
 msgid "Description"
 msgstr "説明"
@@ -4904,10 +4935,10 @@ msgid "usage"
 msgstr "使用法"
 
 msgid "commands"
-msgstr ""
+msgstr "コマンド"
 
 msgid "launch JOSM (default, performed when no command is specified)"
-msgstr ""
+msgstr "JOSM を起動(コマンドが指定されなかった場合の既定)"
 
 msgid "render data and save the result to an image file"
 msgstr ""
@@ -5355,7 +5386,7 @@ msgid "Shrink"
 msgstr "縮小"
 
 msgid "Show downloaded area"
-msgstr ""
+msgstr "ダウンロードしたデータを表示"
 
 msgid ""
 "<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
@@ -5410,6 +5441,8 @@ 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 "デバッグ情報"
@@ -7051,7 +7084,7 @@ msgid "Query"
 msgstr "クエリ"
 
 msgid "Launch the dialog for querying changesets"
-msgstr "ダイアログを開いて変更セットを問い合わせる"
+msgstr "変更セットの問い合わせダイアログを開く"
 
 msgid "Remove from cache"
 msgstr "キャッシュから削除"
@@ -7207,7 +7240,7 @@ msgid "Update the changeset from the OSM server"
 msgstr "OSMサーバーの情報で変更セットを更新する"
 
 msgid "View changeset"
-msgstr ""
+msgstr "変更セットを表示"
 
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
@@ -7280,12 +7313,12 @@ msgstr "指定した矩形範囲に関連する変更セットのみを選択"
 msgid ""
 "Cannot restrict the changeset query to a specific bounding box. The input is "
 "invalid."
-msgstr "矩形範囲を指定した変更セットの検索ができません。入力値が不正です。"
+msgstr "変更セットの問い合わせを矩形範囲に限定できません。入力が不正です。"
 
 msgid ""
 "<html>Please enter valid longitude/latitude values to restrict<br>the "
 "changeset query to a specific bounding box.</html>"
-msgstr "<html>矩形範囲を指定して変更セットを検索するには、<br>正しい緯度・経度を入力してください。</html>"
+msgstr "<html>矩形範囲を指定して変更セットを問い合わせするには、<br>正しい緯度・経度を入力してください。</html>"
 
 msgid "Invalid bounding box"
 msgstr "不正な矩形範囲指定"
@@ -7334,10 +7367,10 @@ msgstr "<html>現在のマップビュー内の変更セットをダウンロー
 msgid ""
 "Unexpected value for preference ''{0}'', got ''{1}''. Resetting to default "
 "query."
-msgstr "''{0}''の設定値が想定外の値で''{1}''になっています。デフォルト値が使用されます。"
+msgstr "''{0}''の設定値が想定外の''{1}''になっています。既定の問い合わせにリセットされます。"
 
 msgid "Cannot create changeset query for open changesets of anonymous user"
-msgstr "匿名ユーザーで変更セット開始リクエストが作成できません"
+msgstr "匿名ユーザーでオープンされた変更セットの問い合わせは作成できません"
 
 msgid "Basic"
 msgstr "基本"
@@ -7355,22 +7388,22 @@ msgid "Advanced"
 msgstr "詳細"
 
 msgid "Use a custom changeset query"
-msgstr "ユーザー定義の変更セットクエリーを使用する"
+msgstr "ユーザー定義の変更セットの問い合わせを使用する"
 
 msgid "Query changesets"
-msgstr "変更セットのクエリー"
+msgstr "変更セットの問い合わせ"
 
 msgid "Query and download changesets"
-msgstr "変更セットのクエリーとダウンロード"
+msgstr "変更セットの問い合わせとダウンロード"
 
 msgid "Please enter a valid changeset query URL first."
-msgstr "有効な変更セットクエリーURLを指定してください。"
+msgstr "有効な変更セット問い合わせURLを指定してください。"
 
 msgid "Illegal changeset query URL"
-msgstr "不正な変更セットクエリーURLです"
+msgstr "不正な変更セット問い合わせURLです"
 
 msgid "Close the dialog and abort querying of changesets"
-msgstr "ダイアログを閉じて変更セットのクエリを終了します"
+msgstr "ダイアログを閉じて変更セットの問い合わせを終了します"
 
 msgid ""
 "Please enter a date in the usual format for your locale.<br>Example: "
@@ -7518,7 +7551,7 @@ msgid "Show layer"
 msgstr "レイヤーを表示"
 
 msgid "Adjust opacity of the layer."
-msgstr "レイヤーの透明度を調整"
+msgstr "レイヤーの透明度を調整してください。"
 
 msgid "Opacity"
 msgstr "透明度"
@@ -7757,10 +7790,10 @@ msgid "No refresh"
 msgstr "更新なし"
 
 msgid "Refresh tag status only (enabled / disabled)"
-msgstr ""
+msgstr "タグステータスのみを更新(有効 / 無効)"
 
 msgid "Refresh tag status and list of recently added tags"
-msgstr ""
+msgstr "タグステータスと追加されたタグを更新"
 
 msgid "to apply first suggestion"
 msgstr "最初の提案を適用"
@@ -7937,7 +7970,7 @@ msgid "Refers to"
 msgstr "参照先"
 
 msgid "Cannot add {0} since it is not part of dataset"
-msgstr ""
+msgstr "データセットの一部ではないため {0} を追加できません"
 
 msgid "Download referring relations"
 msgstr "参照リレーションをダウンロード"
@@ -8296,12 +8329,6 @@ msgstr ""
 "<html>JOSMが起動された時に毎回「OSMからダウンロード」ダイアログを開きます。<br>これはファイルメニューやツールバーから開くことができます。"
 "</html>"
 
-msgid "Zoom to downloaded data"
-msgstr "ダウンロードしたデータにズーム"
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr "新しくダウンロードしたデータ全体へのズームを選択します。"
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -8334,7 +8361,7 @@ msgid "Download referrers (parent relations and ways)"
 msgstr "参照元(親リレーションやウェイ)をダウンロード"
 
 msgid "Download from OSM"
-msgstr ""
+msgstr "OSM からダウンロード"
 
 msgid "Data Sources and Types:"
 msgstr "データのソースと種別:"
@@ -8376,7 +8403,7 @@ msgid "Download area ok, size probably acceptable to server"
 msgstr "ダウンロード領域はOKです。指定のサイズはサーバーに受け入れられるでしょう"
 
 msgid "Download from Overpass API"
-msgstr ""
+msgstr "Overpass API からダウンロード"
 
 msgid ""
 "Place your Overpass query below or generate one using the Overpass Turbo "
@@ -8422,10 +8449,10 @@ 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 "Overpass ウィザードは以下のクエリを解析できませんでした:"
@@ -8443,10 +8470,10 @@ msgid ""
 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 "ヒント"
@@ -8489,6 +8516,8 @@ msgid ""
 "Instead of \"or\" - \"|\", \"||\" can be used, and instead of \"and\" - "
 "\"&\", \"&&\"."
 msgstr ""
+"基本的な論理演算子を使うことでより高度なクエリーを作成することができます。 \"or\" の代わりに \"|\" や \"||\" 、 \"and\" "
+"の代わりに \"&\" や \"&&\" が利用可能です。"
 
 msgid "Class Type"
 msgstr "クラス種別"
@@ -8551,7 +8580,7 @@ msgid "Add snippet"
 msgstr "スニペットを追加"
 
 msgid "Query cannot be empty"
-msgstr ""
+msgstr "クエリーは空にすることができません"
 
 msgid "This name can be used for the item"
 msgstr ""
@@ -8711,10 +8740,10 @@ msgid "Open a history browser with the history of this node"
 msgstr "このノードの履歴で履歴ブラウザーを開く"
 
 msgid "View changeset in web browser"
-msgstr ""
+msgstr "ウェブブラウザで変更セットを表示"
 
 msgid "Open {0}"
-msgstr ""
+msgstr "{0} を開く"
 
 msgid "Way {0}"
 msgstr "ウェイ {0}"
@@ -8892,7 +8921,7 @@ msgid ""
 msgstr ""
 
 msgid "I would like someone to review my edits."
-msgstr ""
+msgstr "編集を誰かにレビューしてほしい。"
 
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "アップロードする変更の概略コメントを入力してください。"
@@ -9846,6 +9875,12 @@ msgstr "メタデータ "
 msgid "Load tile"
 msgstr "タイルを読み込み"
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr "タイルソースの作成に失敗しました"
 
@@ -9950,9 +9985,10 @@ msgstr "名前: {0}"
 msgid "Description: {0}"
 msgstr "説明: {0}"
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
-msgstr[0] "{0}本のトラック"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Timespan"
 msgstr "測定時期"
@@ -9960,6 +9996,9 @@ msgstr "測定時期"
 msgid "Length"
 msgstr "長さ"
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr "長さ: {0}"
 
@@ -9971,13 +10010,36 @@ msgid "{0} waypoint"
 msgid_plural "{0} waypoints"
 msgstr[0] "{0}件のウェイポイント"
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
-msgstr[0] "{0}本のトラック、 "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] "{0}本のトラック"
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr "GPXファイルの保存"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr "ID"
 
@@ -10020,6 +10082,16 @@ msgstr "レイヤーを保存"
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] "{0}件のメモ"
@@ -10345,29 +10417,20 @@ msgstr "ファイル{0}にエラー"
 msgid "Display geotagged images"
 msgstr "ジオタグ付きの画像を表示"
 
-msgid "Previous"
-msgstr "前へ"
+msgid "Next"
+msgstr "次へ"
 
-msgid "Show previous Image"
-msgstr "前の画像を表示"
+msgid "Show next Image"
+msgstr "次の画像を表示"
 
 msgid "Geoimage: {0}"
 msgstr "ジオ画像: {0}"
 
-msgid "Remove photo from layer"
-msgstr "レイヤーから写真を削除しますか?"
-
-msgid "Delete File from disk"
-msgstr "ディスクからファイルを削除"
-
-msgid "Copy image path"
-msgstr "画像のパスをコピー"
-
-msgid "Next"
-msgstr "次へ"
+msgid "Previous"
+msgstr "前へ"
 
-msgid "Show next Image"
-msgstr "次の画像を表示"
+msgid "Show previous Image"
+msgstr "前の画像を表示"
 
 msgid "Show first Image"
 msgstr "最初の画像を表示"
@@ -10381,6 +10444,15 @@ msgstr "中央表示"
 msgid "Zoom best fit and 1:1"
 msgstr "最適な等倍表示"
 
+msgid "Remove photo from layer"
+msgstr "レイヤーから写真を削除しますか?"
+
+msgid "Delete File from disk"
+msgstr "ディスクからファイルを削除"
+
+msgid "Copy image path"
+msgstr "画像のパスをコピー"
+
 msgid "Move dialog to the side pane"
 msgstr "ダイアログをサイドペインに移動"
 
@@ -10745,7 +10817,7 @@ msgid "Output image file name (.png); defaults to ''{0}''"
 msgstr ""
 
 msgid "Style file to use for rendering (.mapcss or .zip)"
-msgstr ""
+msgstr "レンダリングに使用するスタイルファイル (.mapcss または .zip)"
 
 msgid "This option can be repeated to load multiple styles."
 msgstr ""
@@ -11745,7 +11817,7 @@ msgid "Use auto filters"
 msgstr ""
 
 msgid "Rule"
-msgstr ""
+msgstr "ルール"
 
 msgid "Highlight target ways and nodes"
 msgstr "選択中のウェイやノードを強調表示"
@@ -11936,7 +12008,7 @@ msgid "Smooth GPX graphics (antialiasing)"
 msgstr "GPXグラフィックを滑らかにする(アンチエイリアス)"
 
 msgid "Draw with Opacity (alpha blending) "
-msgstr ""
+msgstr "透明度(アルファ合成)を使って描画 "
 
 msgid ""
 "Automatically make a marker layer from any waypoints when opening a GPX "
@@ -12634,7 +12706,7 @@ msgid "Load plugins from list"
 msgstr "一覧からプラグインをロード"
 
 msgid "The following plugins were not found. Continue anyway?"
-msgstr ""
+msgstr "以下のプラグインが見つかりませんでした。このまま続けますか?"
 
 msgid "Add JOSM Plugin description URL."
 msgstr "JOSMプラグイン情報のURLを追加します。"
@@ -12791,7 +12863,7 @@ msgid "Set as default"
 msgstr ""
 
 msgid "Default projection"
-msgstr ""
+msgstr "既定の投影法"
 
 msgid "Default projection has been set to ''{0}''"
 msgstr ""
@@ -12824,7 +12896,7 @@ msgid "Swiss Grid (Switzerland)"
 msgstr "Swiss Grid (Switzerland)"
 
 msgid "<i>CH1903 / LV03</i>"
-msgstr ""
+msgstr "<i>CH1903 / LV03</i>"
 
 msgid "Guadeloupe Fort-Marigot 1949"
 msgstr "Guadeloupe Fort-Marigot 1949"
@@ -13567,9 +13639,9 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr "削除されたノード {0} はウェイ {1} の一部です"
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
-msgstr "ロードしたデータ内に1つ以上のノードが見つからないため、ウェイ {0}({1}個のノード)に不完全なノードが含まれています。"
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
+msgstr ""
 
 msgid ""
 "Relation with external id ''{0}'' refers to a missing primitive with "
@@ -14240,6 +14312,12 @@ msgstr "リモート制御により、ローカルファイルを開くよう指
 msgid "Do you want to allow this?"
 msgstr "本当にこれを許可してよろしいですか?"
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr "リモート制御の指示を確認"
 
@@ -15232,11 +15310,11 @@ msgstr "農地"
 
 msgctxt "landuse"
 msgid "farmyard"
-msgstr ""
+msgstr "農場"
 
 msgctxt "landuse"
 msgid "cemetery"
-msgstr ""
+msgstr "墓地"
 
 msgctxt "landuse"
 msgid "residential"
@@ -15244,11 +15322,11 @@ msgstr "住宅地"
 
 msgctxt "landuse"
 msgid "greenfield"
-msgstr ""
+msgstr "開発予定地"
 
 msgctxt "landuse"
 msgid "village_green"
-msgstr ""
+msgstr "緑地公園"
 
 msgctxt "landuse"
 msgid "quarry"
@@ -15256,11 +15334,11 @@ msgstr "採石場"
 
 msgctxt "landuse"
 msgid "allotments"
-msgstr ""
+msgstr "市民農園"
 
 msgctxt "landuse"
 msgid "vineyard"
-msgstr ""
+msgstr "ぶどう畑"
 
 msgctxt "natural"
 msgid "scrub"
@@ -15280,7 +15358,7 @@ msgstr "湿地帯"
 
 msgctxt "natural"
 msgid "heath"
-msgstr ""
+msgstr "茂み"
 
 msgctxt "amenity"
 msgid "fire_station"
@@ -15643,7 +15721,7 @@ msgstr "車輪付きの車両では不可"
 
 msgctxt "riding"
 msgid "horse_riding"
-msgstr ""
+msgstr "乗馬場"
 
 msgctxt "riding"
 msgid "pitch"
@@ -15764,19 +15842,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 "電圧(V)"
@@ -15942,16 +16020,16 @@ msgid "korean"
 msgstr "韓国料理"
 
 msgid "donut"
-msgstr ""
+msgstr "ドーナッツ"
 
 msgid "mediterranean"
-msgstr ""
+msgstr "地中海料理"
 
 msgid "friture"
-msgstr ""
+msgstr "揚げ物"
 
 msgid "crepe"
-msgstr ""
+msgstr "クレープ"
 
 msgid "Internet access"
 msgstr "インターネットアクセス"
@@ -16471,7 +16549,7 @@ msgstr "海上"
 
 msgctxt "power"
 msgid "rooftop"
-msgstr ""
+msgstr "屋上"
 
 msgctxt "power"
 msgid "kiosk"
@@ -19506,7 +19584,7 @@ msgid "Range (in meters)"
 msgstr "範囲(メートル単位)"
 
 msgid "Social Facility"
-msgstr ""
+msgstr "社会福祉施設"
 
 msgid "Nursing Home"
 msgstr "看護ステーション"
@@ -19722,6 +19800,12 @@ msgstr "一般ごみ"
 msgid "Recycling Centre"
 msgstr "リサイクル処理場"
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr "ゴミ集積所"
 
@@ -23698,6 +23782,12 @@ msgstr "Public Transport (ÖPNV)"
 msgid "Hike & Bike"
 msgstr "Hike & Bike"
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr "skobbler"
 
@@ -24018,7 +24108,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr "basemap.at Orthofoto"
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24441,6 +24532,12 @@ msgstr "Estonia Cadastre (Maaamet)"
 msgid "Estonia Forestry (Maaamet)"
 msgstr "Estonia Forestry (Maaamet)"
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr "BANO"
 
@@ -24529,9 +24626,6 @@ msgstr ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
 
-msgid "Hamburg (40 cm)"
-msgstr "Hamburg (40 cm)"
-
 msgid "Hamburg (20 cm)"
 msgstr "Hamburg (20 cm)"
 
@@ -24559,10 +24653,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24961,18 +25055,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr "Luxembourg Inspire Railway"
-
-msgid "Luxembourg Inspire Roads"
-msgstr "Luxembourg Inspire Roads"
-
-msgid "Luxembourg Inspire Water"
-msgstr "Luxembourg Inspire Water"
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Niger Delta Oct 2012 Landsat"
 
@@ -24996,8 +25078,158 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
-msgstr "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
+msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
 msgstr ""
@@ -25058,11 +25290,11 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
-msgstr "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
-msgstr "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
+msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr "Geoportal 2: PRNG (geo names)"
@@ -25070,119 +25302,128 @@ msgstr "Geoportal 2: PRNG (geo names)"
 msgid "Geoportal 2: ISOK hillshade"
 msgstr "Geoportal 2: ISOK hillshade"
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
-msgstr "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
+msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
-msgstr "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
+msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
-msgstr "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
+msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr "Bytom: Fotoplan 2014 (aerial image)"
 
-msgid "Bytom: Budynki (buildings)"
-msgstr "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
+msgstr ""
+
+msgid "Częstochowa: Buildings"
+msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
-msgstr "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
+msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
-msgstr "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
+msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
+msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
+msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Buildings"
+msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
-msgstr "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Katowice: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
-msgstr "Gliwice: Budynki (buildings)"
+msgid "Katowice: Buildings"
+msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
-msgstr "Katowice: Ortofotomapa (aerial image)"
+msgid "Łódź: Buildings"
+msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
-msgstr "Katowice: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
-msgstr "Łódź: Budynki (buildings)"
+msgid "Powiat dębicki: Buildings"
+msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
-msgstr "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat lubaczowski: Buildings"
+msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
-msgstr "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
+msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
-msgstr "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
+msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
-msgstr "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
-msgstr "Powiat poznański: Budynki (buildings)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
+msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
-msgstr "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat rzeszowski: Buildings"
+msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
-msgstr "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
-msgstr "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat stalowowolski: Buildings"
+msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
-msgstr "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
+msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
-msgstr "Powiat stalowowolski: Budynki (buildings)"
+msgid "Przemyśl: Buildings"
+msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
-msgstr "Przemyśl: Budynki (buildings)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
-msgstr "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
-msgstr "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
+msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
-msgstr "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
-msgstr "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Buildings"
+msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
-msgstr "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
+msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
-msgstr "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
+msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
+msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
+msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
+msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
-msgstr "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
-msgstr "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
+msgstr ""
 
 msgid "ScanEx IRS"
 msgstr "ScanEx IRS"
@@ -25318,6 +25559,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr "Kanton Aargau 25cm (AGIS 2011)"
 
@@ -26274,7 +26527,7 @@ msgid "{0} without {1}"
 msgstr "{0}があるのに{1}がない"
 
 msgid "missing tag"
-msgstr ""
+msgstr "タグが欠落している"
 
 msgid "{0} without {1} or {2}"
 msgstr "{0}があるのに{1}または{2}がない"
@@ -26313,7 +26566,7 @@ msgid "sport without physical feature"
 msgstr "スポーツに物理的な地物が設定されていない"
 
 msgid "alternative name without {0}"
-msgstr ""
+msgstr "{0} がないのに別名がある"
 
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
@@ -26340,6 +26593,8 @@ msgid ""
 "underground. Remove {1} or add a tunnel tag if applicable. Also check "
 "crossing bridges and their {1} tags."
 msgstr ""
+"トンネルや地下水路としてのタグを持たない短い水路に{0}が指定されています。{1}を削除するか、適切であればtunnelタグを追加してください。また、横断"
+"する橋やその{1}タグをチェックしてください。"
 
 msgid "{0} together with {1} and {2}. Remove {1} and {2}"
 msgstr ""
@@ -26375,7 +26630,7 @@ 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 "
@@ -26529,7 +26784,7 @@ 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 ""
@@ -26552,10 +26807,10 @@ msgid "abbreviated street name"
 msgstr "通り名が略称になっている"
 
 msgid "wrong highway tag on a node"
-msgstr "誤ったhighwayタグがあるノード"
+msgstr "ノードにhighwayタグがあるのは誤り"
 
 msgid "wrong crossing tag on a way"
-msgstr "誤ったcrossingタグがあるウェイ"
+msgstr "ウェイにcrossingタグがあるのは誤り"
 
 msgid "Unnamed unclassified highway"
 msgstr "名前のない一般道(2車線未満)の道路"
@@ -27200,6 +27455,9 @@ msgid ""
 "of tagging presets (quick preview of the dialog that will popup). You can "
 "start the jar-file as standalone as well."
 msgstr ""
+"Windows メニューに tagging preset tester "
+"を追加すると、タグ付けプリセットの開発に役立ちます(ポップアップするダイアログをすばやくプレビューできます)。単独で jar "
+"ファイルを実行することもできます。"
 
 msgid "Make terraced houses out of single blocks."
 msgstr "1つのブロックからテラスハウスを作成する"
@@ -27896,15 +28154,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
-msgstr "Mapillary レイヤの開始"
+msgid "Open Mapillary layer"
+msgstr ""
 
 msgid "Mapillary"
 msgstr "Mapillary"
 
-msgid "Create Mapillary layer"
-msgstr "Mapillary レイヤの作成"
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27963,13 +28218,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -28005,15 +28254,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -28141,11 +28387,16 @@ msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
 msgid "Preview images when hovering its icon"
-msgstr ""
+msgstr "アイコンの上に移動したとき画像をプレビュー"
 
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32733,6 +32984,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr "ファイルを削除できませんでした。"
 
@@ -33841,7 +34096,7 @@ msgid "Show a selection of the most useful signs"
 msgstr "よく使用する標識を選択して表示"
 
 msgid "Belgium"
-msgstr ""
+msgstr "ベルギー"
 
 msgid "Spain"
 msgstr "スペイン"
@@ -34081,10 +34336,10 @@ msgid "Rotate Mode:"
 msgstr ""
 
 msgid "Clockwise"
-msgstr ""
+msgstr "時計回り"
 
 msgid "Counter Clockwise"
-msgstr ""
+msgstr "反時計回り"
 
 msgid "Input angle here"
 msgstr ""
@@ -34227,9 +34482,6 @@ msgstr "交通データをSUMOネットワークファイルにエクスポー
 msgid "SUMO Export"
 msgstr "SUMOエクスポート"
 
-msgid "Export"
-msgstr "エクスポート"
-
 msgid "AutoSave LiveData"
 msgstr "LiveDataの自動保存"
 
diff --git a/i18n/po/ka.po b/i18n/po/ka.po
index f698fb2..1bcd569 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 04:44+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:43+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: ka\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -958,6 +958,12 @@ msgstr "განაცალკევე ფენა."
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "მონიშნე მონაცემები, რომელიც უნდა იქნას გადმოქაჩული ახალ ფენაში."
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr ""
 
@@ -2230,6 +2236,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3033,18 +3064,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr ""
@@ -3061,9 +3080,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8236,12 +8267,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9735,6 +9760,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9839,8 +9870,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9850,6 +9881,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9863,14 +9897,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr ""
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9913,6 +9970,16 @@ msgstr ""
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10241,40 +10308,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13361,8 +13428,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14025,6 +14092,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19453,6 +19526,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23428,6 +23507,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23748,7 +23833,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24171,6 +24257,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24257,9 +24349,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24287,10 +24376,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24689,18 +24778,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24724,7 +24801,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24786,10 +25013,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24798,118 +25025,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25046,6 +25282,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27574,15 +27822,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27641,13 +27886,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27683,15 +27922,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27824,6 +28060,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32250,6 +32491,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33730,9 +33975,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/km.po b/i18n/po/km.po
index 1f23aa2..2f470e4 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 04:51+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:50+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1008,6 +1008,12 @@ msgstr "ស្រទាប់ដាច់ដោយឡែកពីគ្នា"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "ជ្រើស បើ​ទិន្នន័យ​គួរ​ត្រូវ​បាន​ទាញ​យក​នៅ​ក្នុង​ស្រទាប់​ថ្មី"
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr "ទីតាំង​ទាញយក"
 
@@ -2370,6 +2376,31 @@ msgstr[0] ""
 msgid "Confirmation"
 msgstr "ការ​បញ្ជាក់"
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3215,18 +3246,6 @@ msgstr "ឯកសារ​ពិនិត្យ​ឡើងវិញ ''/REVISION
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr "បាន​ចុះឈ្មោះ​ការ​ប៉ះ​ទង្គិច​រួចហើយ​សម្រាប់​ព្រីមីទីវ ''{0}'' ។"
 
-msgid "Decimal Degrees"
-msgstr "កម្រិត​ទសភាគ"
-
-msgid "deg° min'' sec\""
-msgstr "deg° min'' sec\""
-
-msgid "deg° min'' (Nautical)"
-msgstr "deg° min'' (Nautical)"
-
-msgid "Projected Coordinates"
-msgstr "កូអរដោណេ​ដែល​បាន​ធ្វើ​ចំណោល"
-
 msgctxt "compass"
 msgid "S"
 msgstr "ត្បូង"
@@ -3243,9 +3262,21 @@ msgctxt "compass"
 msgid "E"
 msgstr "កើត"
 
+msgid "deg° min'' sec\""
+msgstr "deg° min'' sec\""
+
+msgid "Decimal Degrees"
+msgstr "កម្រិត​ទសភាគ"
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr "deg° min'' (Nautical)"
+
+msgid "Projected Coordinates"
+msgstr "កូអរដោណេ​ដែល​បាន​ធ្វើ​ចំណោល"
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8745,12 +8776,6 @@ msgstr ""
 "នៅ​រាល់​ពេល​ចាប់ផ្ដើម JOSM ។<br>អ្នក​អាច​បើក​វា​ដោយ​ដៃ​ចេញពី​ម៉ឺនុយ​ឯកសារ "
 "ឬ​របារ​ឧបករណ៍​ក៏​បាន។</html>"
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -10416,6 +10441,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -10521,9 +10552,10 @@ msgstr "ឈ្មោះ៖​ {0}"
 msgid "Description: {0}"
 msgstr "បរិយាយ៖ {0}"
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
-msgstr[0] "ដាន {0}"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Timespan"
 msgstr "ចំណែក​ពេល"
@@ -10531,6 +10563,9 @@ msgstr "ចំណែក​ពេល"
 msgid "Length"
 msgstr "ប្រវែង"
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr "ប្រវែង៖ {0}"
 
@@ -10542,13 +10577,36 @@ msgid "{0} waypoint"
 msgid_plural "{0} waypoints"
 msgstr[0] "{0} waypoint"
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
-msgstr[0] "{0} ដាន, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] "ដាន {0}"
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr "រក្សាទុក​ឯកសារ GPX"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -10591,6 +10649,16 @@ msgstr "រក្សាទុក​ស្រទាប់"
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10929,29 +10997,20 @@ msgstr "កំហុស​នៅ​លើ​ឯកសារ {0}"
 msgid "Display geotagged images"
 msgstr "បង្ហាញ​រូបភាព​ដែល​បាន​ដាក់​ស្លាក​ភូមិសាស្ត្រ"
 
-msgid "Previous"
-msgstr "ពីមុន"
+msgid "Next"
+msgstr "បន្ទាប់"
 
-msgid "Show previous Image"
-msgstr "បង្ហាញ​រូបភាព​ពីមុន"
+msgid "Show next Image"
+msgstr "បង្ហាញ​រូបភាព​បន្ទាប់"
 
 msgid "Geoimage: {0}"
 msgstr "រូបភាព​ភូមិសាស្ត្រ៖ {0}"
 
-msgid "Remove photo from layer"
-msgstr "លុប​រូបភាព​ពី​ស្រទាប់"
-
-msgid "Delete File from disk"
-msgstr "លុប​ឯកសារ​ពី​ថាស"
-
-msgid "Copy image path"
-msgstr "ចម្លង​ផ្លូវ​រូបភាព"
-
-msgid "Next"
-msgstr "បន្ទាប់"
+msgid "Previous"
+msgstr "ពីមុន"
 
-msgid "Show next Image"
-msgstr "បង្ហាញ​រូបភាព​បន្ទាប់"
+msgid "Show previous Image"
+msgstr "បង្ហាញ​រូបភាព​ពីមុន"
 
 msgid "Show first Image"
 msgstr "បង្ហាញ​រូបភាព​ដំបូង"
@@ -10965,6 +11024,15 @@ msgstr "ទិដ្ឋភាព​កណ្ដាល"
 msgid "Zoom best fit and 1:1"
 msgstr "ពង្រីក​សម​បំផុត និង 1:1"
 
+msgid "Remove photo from layer"
+msgstr "លុប​រូបភាព​ពី​ស្រទាប់"
+
+msgid "Delete File from disk"
+msgstr "លុប​ឯកសារ​ពី​ថាស"
+
+msgid "Copy image path"
+msgstr "ចម្លង​ផ្លូវ​រូបភាព"
+
 msgid "Move dialog to the side pane"
 msgstr "ផ្លាស់ទី​ប្រអប់​ទៅ​ផ្ទាំង​ចំហៀង"
 
@@ -14399,11 +14467,9 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr "បាន​លុប​តំណ {0} ដែល​ជា​ផ្នែក​នៃ​ផ្លូវ {1}"
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
-"ផ្លូវ {0} ដែល​មាន​តំណ {1} មាន​តំណ​មិន​បញ្ចប់ "
-"ព្រោះ​មាន​តំណ​យ៉ាង​ហោច​មួយ​ត្រូវ​បាន​បាត់​ពេល​ផ្ទុក​ទិន្នន័យ។"
 
 msgid ""
 "Relation with external id ''{0}'' refers to a missing primitive with "
@@ -15156,6 +15222,12 @@ msgstr "ការ​គ្រប់គ្រង​ពី​ចម្ងាយ​
 msgid "Do you want to allow this?"
 msgstr "តើ​អ្នក​ចង់​អនុញ្ញាត​វា​ឬ?"
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr "បញ្ជាក់​សកម្មភាព​គ្រប់គ្រង​ពី​ចម្ងាយ"
 
@@ -20774,6 +20846,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -24749,6 +24827,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -25069,7 +25153,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -25492,6 +25577,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -25578,9 +25669,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -25608,10 +25696,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -26010,18 +26098,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -26045,7 +26121,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -26107,10 +26333,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -26119,118 +26345,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
+msgstr ""
+
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -26367,6 +26602,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -28981,15 +29228,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -29048,13 +29292,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -29090,15 +29328,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -29231,6 +29466,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -33657,6 +33897,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -35137,9 +35381,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/ko.po b/i18n/po/ko.po
index 2440f85..573d939 100644
--- a/i18n/po/ko.po
+++ b/i18n/po/ko.po
@@ -7,16 +7,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-11-26 00:06+0100\n"
-"PO-Revision-Date: 2017-05-17 08:29+0000\n"
-"Last-Translator: Glados <Unknown>\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\n"
+"PO-Revision-Date: 2017-12-06 10:52+0000\n"
+"Last-Translator: Myeongjin <aranet100 at gmail.com>\n"
 "Language-Team: Korean <ko at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2017-11-26 04:52+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:51+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: ko\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -951,6 +951,12 @@ msgstr "레이어 분리"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "데이터가 새로운 레이어에 다운로드 되어야 하는지 선택합니다."
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr "URL로부터 다운로드"
 
@@ -2221,6 +2227,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr "확인"
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3014,18 +3045,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr "도° 분'' 초\""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr ""
@@ -3042,9 +3061,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr "도° 분'' 초\""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr "사진의 날짜: {0}"
 
@@ -8229,12 +8260,6 @@ msgstr ""
 "<html>JOSM이 시작될 때마다 \"OSM에서 다운로드\" 대화 상자가 자동으로 열립니다.<br>파일 메뉴나 도구 모음에서 수동으로 "
 "열 수 있습니다.</html>"
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9735,6 +9760,12 @@ msgstr "메타데이터 "
 msgid "Load tile"
 msgstr "타일 불러오기"
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9839,9 +9870,10 @@ msgstr "이름: {0}"
 msgid "Description: {0}"
 msgstr "설명: {0}"
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
-msgstr[0] "경로 {0}개"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Timespan"
 msgstr "일시"
@@ -9849,6 +9881,9 @@ msgstr "일시"
 msgid "Length"
 msgstr "거리"
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr "거리: {0}"
 
@@ -9860,13 +9895,36 @@ msgid "{0} waypoint"
 msgid_plural "{0} waypoints"
 msgstr[0] "지점 {0}개"
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
-msgstr[0] "경로 {0}개, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] "경로 {0}개"
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr "GPX 파일 저장"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9909,6 +9967,16 @@ msgstr "레이어 저장"
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] "참고 {0}개"
@@ -10234,29 +10302,20 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr "지오태그 이미지 표시"
 
-msgid "Previous"
-msgstr "이전"
+msgid "Next"
+msgstr "다음"
 
-msgid "Show previous Image"
-msgstr "이전 이미지 보기"
+msgid "Show next Image"
+msgstr "다음 이미지 보기"
 
 msgid "Geoimage: {0}"
 msgstr "지오이미지: {0}"
 
-msgid "Remove photo from layer"
-msgstr "레이어에서 사진 제거"
-
-msgid "Delete File from disk"
-msgstr "디스크에서 파일 삭제"
-
-msgid "Copy image path"
-msgstr "이미지 경로 복사"
-
-msgid "Next"
-msgstr "다음"
+msgid "Previous"
+msgstr "이전"
 
-msgid "Show next Image"
-msgstr "다음 이미지 보기"
+msgid "Show previous Image"
+msgstr "이전 이미지 보기"
 
 msgid "Show first Image"
 msgstr "처음 이미지 보기"
@@ -10270,6 +10329,15 @@ msgstr ""
 msgid "Zoom best fit and 1:1"
 msgstr ""
 
+msgid "Remove photo from layer"
+msgstr "레이어에서 사진 제거"
+
+msgid "Delete File from disk"
+msgstr "디스크에서 파일 삭제"
+
+msgid "Copy image path"
+msgstr "이미지 경로 복사"
+
 msgid "Move dialog to the side pane"
 msgstr "대화 상자를 사이드 패널로 이동"
 
@@ -13376,8 +13444,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14042,6 +14110,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -17228,7 +17302,7 @@ msgid "Mountain Pass"
 msgstr ""
 
 msgid "Elevation"
-msgstr ""
+msgstr "고도"
 
 msgid "Barriers"
 msgstr ""
@@ -19472,6 +19546,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23447,6 +23527,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23767,7 +23853,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24190,6 +24277,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24276,9 +24369,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24306,10 +24396,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24708,18 +24798,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24743,7 +24821,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24805,10 +25033,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24817,118 +25045,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
+msgstr ""
+
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Buildings"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
+msgstr ""
+
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25065,6 +25302,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -26607,7 +26856,7 @@ msgid ""
 msgstr ""
 
 msgid "Shows the elevation profile and some statistical data of a GPX track."
-msgstr ""
+msgstr "GPX 트랙의 고도 프로필과 일부 통계 자료를 보여줍니다."
 
 msgid "Handling of French EPCIs (boundary=local_authority)"
 msgstr ""
@@ -27233,19 +27482,19 @@ msgid "m"
 msgstr ""
 
 msgid "Shows elevation profile"
-msgstr ""
+msgstr "고도 프로필 보이기"
 
 msgid "Elevation Profile"
-msgstr ""
+msgstr "고도 프로필"
 
 msgid "Elevation Grid Layer (experimental!)"
-msgstr ""
+msgstr "고도 그리드 레이어 (실험적!)"
 
 msgid "Shows elevation grid layer"
-msgstr ""
+msgstr "고도 그리드 레이어 보이기"
 
 msgid "Elevation Grid"
-msgstr ""
+msgstr "고도 그리드"
 
 msgid "increase zoom level to see more detail"
 msgstr ""
@@ -27254,7 +27503,7 @@ msgid "No SRTM data"
 msgstr ""
 
 msgid "Open the elevation profile window."
-msgstr ""
+msgstr "고도 프로필 창을 엽니다."
 
 msgid "Min"
 msgstr ""
@@ -27275,13 +27524,13 @@ msgid "Tracks"
 msgstr ""
 
 msgid "Elevation profile for track ''{0}''."
-msgstr ""
+msgstr "트랙 ''{0}''에 대한 고도 프로필."
 
 msgid "Elevation profile"
-msgstr ""
+msgstr "고도 프로필"
 
 msgid "(No elevation data)"
-msgstr ""
+msgstr "(고도 자료 없음)"
 
 msgid "Can not save preferences"
 msgstr ""
@@ -27597,15 +27846,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27664,13 +27910,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27706,15 +27946,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27847,6 +28084,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32273,6 +32515,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33753,9 +33999,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/ku.po b/i18n/po/ku.po
index 7e04444..2319263 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 04:52+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:51+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
 msgstr ""
@@ -952,6 +952,12 @@ msgstr ""
 msgid "Select if the data should be downloaded into a new layer"
 msgstr ""
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr ""
 
@@ -2224,6 +2230,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3027,18 +3058,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr ""
@@ -3055,9 +3074,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8230,12 +8261,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9729,6 +9754,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9833,8 +9864,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9844,6 +9875,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9857,14 +9891,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr ""
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9907,6 +9964,16 @@ msgstr ""
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10235,40 +10302,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13355,8 +13422,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14019,6 +14086,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19447,6 +19520,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23422,6 +23501,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23742,7 +23827,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24165,6 +24251,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24251,9 +24343,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24281,10 +24370,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24683,18 +24772,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24718,7 +24795,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24780,10 +25007,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24792,118 +25019,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25040,6 +25276,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27568,15 +27816,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27635,13 +27880,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27677,15 +27916,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27818,6 +28054,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32244,6 +32485,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33724,9 +33969,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/ky.po b/i18n/po/ky.po
index a97414f..ce4cda3 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 04:51+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:50+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
 msgstr ""
@@ -952,6 +952,12 @@ msgstr ""
 msgid "Select if the data should be downloaded into a new layer"
 msgstr ""
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr ""
 
@@ -2224,6 +2230,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3027,18 +3058,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr ""
@@ -3055,9 +3074,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8230,12 +8261,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9729,6 +9754,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9833,8 +9864,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9844,6 +9875,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9857,14 +9891,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr ""
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9907,6 +9964,16 @@ msgstr ""
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10235,40 +10302,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13355,8 +13422,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14019,6 +14086,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19447,6 +19520,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23422,6 +23501,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23742,7 +23827,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24165,6 +24251,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24251,9 +24343,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24281,10 +24370,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24683,18 +24772,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24718,7 +24795,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24780,10 +25007,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24792,118 +25019,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25040,6 +25276,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27568,15 +27816,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27635,13 +27880,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27677,15 +27916,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27818,6 +28054,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32244,6 +32485,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33724,9 +33969,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/lb.po b/i18n/po/lb.po
index 92e4c15..c5071c0 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 04:54+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:53+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
 msgstr "{0}:D''Optioun \"{1}\" ass net eendeiteg"
@@ -952,6 +952,12 @@ msgstr ""
 msgid "Select if the data should be downloaded into a new layer"
 msgstr ""
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr ""
 
@@ -2224,6 +2230,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3027,18 +3058,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr ""
@@ -3055,9 +3074,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8230,12 +8261,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9729,6 +9754,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9833,8 +9864,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9844,6 +9875,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9857,14 +9891,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr ""
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9907,6 +9964,16 @@ msgstr ""
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10235,40 +10302,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13355,8 +13422,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14019,6 +14086,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19447,6 +19520,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23422,6 +23501,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23742,7 +23827,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24165,6 +24251,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24251,9 +24343,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24281,10 +24370,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24683,18 +24772,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24718,7 +24795,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24780,10 +25007,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24792,118 +25019,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25040,6 +25276,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27568,15 +27816,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27635,13 +27880,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27677,15 +27916,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27818,6 +28054,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32244,6 +32485,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33724,9 +33969,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/lo.po b/i18n/po/lo.po
index af8ed30..db4ffbb 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 04:53+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:52+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -953,6 +953,12 @@ msgstr ""
 msgid "Select if the data should be downloaded into a new layer"
 msgstr ""
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr ""
 
@@ -2225,6 +2231,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3028,18 +3059,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr ""
@@ -3056,9 +3075,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8231,12 +8262,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9730,6 +9755,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9834,8 +9865,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9845,6 +9876,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9858,14 +9892,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr ""
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9908,6 +9965,16 @@ msgstr ""
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10236,40 +10303,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13356,8 +13423,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14020,6 +14087,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19448,6 +19521,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23423,6 +23502,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23743,7 +23828,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24166,6 +24252,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24252,9 +24344,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24282,10 +24371,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24684,18 +24773,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24719,7 +24796,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24781,10 +25008,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24793,118 +25020,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25041,6 +25277,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27569,15 +27817,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27636,13 +27881,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27678,15 +27917,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27819,6 +28055,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32245,6 +32486,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33725,9 +33970,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/lt.po b/i18n/po/lt.po
index 1f04965..4469771 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-11-26 00:06+0100\n"
-"PO-Revision-Date: 2017-11-24 19:50+0000\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\n"
+"PO-Revision-Date: 2017-12-02 20:24+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-11-26 04:54+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:53+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: lt\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1034,6 +1034,12 @@ msgstr "Atskirti sluoksnius"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "Pasirinkite, ar duomenys turi būti parsiųsti į naują sluoksnį"
 
+msgid "Zoom to downloaded data"
+msgstr "Priartinti atsiųstus duomenis"
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr "Pažymėkite visų atsiųstų duomenų priartinimui."
+
 msgid "Download Location"
 msgstr "Parsiuntimo vieta"
 
@@ -2443,6 +2449,31 @@ msgstr[2] ""
 msgid "Confirmation"
 msgstr "Patvirtinimas"
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr "Paskiausių ryšių sąrašas"
 
@@ -3326,18 +3357,6 @@ msgstr "Nėra peržiūros failo „/REVISION“."
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr "Jau užregistruotas primityvo „{0}“ konfliktas."
 
-msgid "Decimal Degrees"
-msgstr "Dešimtainiai laipsniai"
-
-msgid "deg° min'' sec\""
-msgstr "laip° min'' sek\""
-
-msgid "deg° min'' (Nautical)"
-msgstr "laip° min'' (Jūrų)"
-
-msgid "Projected Coordinates"
-msgstr "Projektuotos koordinatės"
-
 msgctxt "compass"
 msgid "S"
 msgstr "P"
@@ -3354,9 +3373,21 @@ msgctxt "compass"
 msgid "E"
 msgstr "R"
 
+msgid "deg° min'' sec\""
+msgstr "laip° min'' sek\""
+
+msgid "Decimal Degrees"
+msgstr "Dešimtainiai laipsniai"
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr "Nepavyko išnagrinėti kaip koordinatės reikšmės: „{0}“"
 
+msgid "deg° min'' (Nautical)"
+msgstr "laip° min'' (Jūrų)"
+
+msgid "Projected Coordinates"
+msgstr "Projektuotos koordinatės"
+
 msgid "Date of imagery: {0}"
 msgstr "Vaizdų data: {0}"
 
@@ -8925,12 +8956,6 @@ msgstr ""
 "paleidus JOSM.<br>Galite jį atverti patys iš Failo meniu arba įrankių "
 "juostos.</html>"
 
-msgid "Zoom to downloaded data"
-msgstr "Priartinti atsiųstus duomenis"
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr "Pažymėkite visų atsiųstų duomenų priartinimui."
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -10644,6 +10669,12 @@ msgstr "Metaduomenys "
 msgid "Load tile"
 msgstr "Įkelti kaladėlę"
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr "Nepavyko sukurti kaladėlių šaltinio"
 
@@ -10752,11 +10783,10 @@ msgstr "Pavadinimas: {0}"
 msgid "Description: {0}"
 msgstr "Aprašas: {0}"
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
-msgstr[0] "{0} pėdsakas"
-msgstr[1] "{0} pėdsakai"
-msgstr[2] "{0} pėdsakų"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Timespan"
 msgstr "Trukmė"
@@ -10764,6 +10794,9 @@ msgstr "Trukmė"
 msgid "Length"
 msgstr "Ilgis"
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr "Ilgis: {0}"
 
@@ -10779,15 +10812,38 @@ msgstr[0] "{0} kelio taškas"
 msgstr[1] "{0} kelio taškai"
 msgstr[2] "{0} kelio taškų"
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
-msgstr[0] "{0} pėdsakas, "
-msgstr[1] "{0} pėdsakai, "
-msgstr[2] "{0} pėdsakų, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] "{0} pėdsakas"
+msgstr[1] "{0} pėdsakai"
+msgstr[2] "{0} pėdsakų"
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr "Išsaugoti GPX failą"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr "Id"
 
@@ -10830,6 +10886,16 @@ msgstr "Išsaugoti sluoksnį"
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] "{0} pastaba"
@@ -11183,29 +11249,20 @@ msgstr "Klaida faile {0}"
 msgid "Display geotagged images"
 msgstr "Rodyti vaizdus su geografinėmis žymomis"
 
-msgid "Previous"
-msgstr "Ankstesnis"
+msgid "Next"
+msgstr "Kitas"
 
-msgid "Show previous Image"
-msgstr "Rodyti ankstesnį atvaizdį"
+msgid "Show next Image"
+msgstr "Rodyti kitą atvaizdį"
 
 msgid "Geoimage: {0}"
 msgstr "Geovaizdas: {0}"
 
-msgid "Remove photo from layer"
-msgstr "Pašalinti nuotrauką iš sluoksnio"
-
-msgid "Delete File from disk"
-msgstr "Pašalinti failą iš disko"
-
-msgid "Copy image path"
-msgstr "Kopijuoti paveikslo kelią"
-
-msgid "Next"
-msgstr "Kitas"
+msgid "Previous"
+msgstr "Ankstesnis"
 
-msgid "Show next Image"
-msgstr "Rodyti kitą atvaizdį"
+msgid "Show previous Image"
+msgstr "Rodyti ankstesnį atvaizdį"
 
 msgid "Show first Image"
 msgstr "Rodyti pirmą atvaizdį"
@@ -11219,6 +11276,15 @@ msgstr "Centruoti vaizdą"
 msgid "Zoom best fit and 1:1"
 msgstr "Geriausias mastelis ir 1:1"
 
+msgid "Remove photo from layer"
+msgstr "Pašalinti nuotrauką iš sluoksnio"
+
+msgid "Delete File from disk"
+msgstr "Pašalinti failą iš disko"
+
+msgid "Copy image path"
+msgstr "Kopijuoti paveikslo kelią"
+
 msgid "Move dialog to the side pane"
 msgstr "Perkelti dialogą į šoninį skydelį"
 
@@ -14655,11 +14721,9 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr "Ištrintas taškas {0} yra dalis kelio {1}"
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
-"Kelias {0} su {1} taškais turi nebaigtų taškų, nes trūko bent vieno taško "
-"įkeltuose duomenyse."
 
 msgid ""
 "Relation with external id ''{0}'' refers to a missing primitive with "
@@ -15388,6 +15452,12 @@ msgstr "Per nuotolinį valdymą buvo paprašyta atidaryti vietinį failą"
 msgid "Do you want to allow this?"
 msgstr "Ar norite tai leisti?"
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr "Patvirtinti nuotolinio valdymo veiksmą"
 
@@ -21072,6 +21142,12 @@ msgstr "Atliekos"
 msgid "Recycling Centre"
 msgstr "Perdirbimo centras"
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr "Atliekų tvarkymas/Konteineris"
 
@@ -22430,7 +22506,7 @@ msgid "gasification"
 msgstr ""
 
 msgid "Water Turbine"
-msgstr ""
+msgstr "Vandens turbina"
 
 msgctxt "generator method"
 msgid "run-of-the-river"
@@ -22466,7 +22542,7 @@ msgid "pelton_turbine"
 msgstr ""
 
 msgid "Tidal Water Turbine"
-msgstr ""
+msgstr "Potvynio vandens turbina"
 
 msgctxt "generator method"
 msgid "barrage"
@@ -25059,6 +25135,12 @@ msgstr "Viešasis transportas (ÖPNV)"
 msgid "Hike & Bike"
 msgstr "Žygiams ir dviračiams"
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -25379,7 +25461,8 @@ msgstr "Austrijos bazinis žemėlapis, paremtas valdžios duomenimis."
 msgid "basemap.at Orthofoto"
 msgstr "basemap.at Orthofoto"
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -25802,6 +25885,12 @@ msgstr "Estijos kadastras (Maaamet)"
 msgid "Estonia Forestry (Maaamet)"
 msgstr "Estijos miškai (Maaamet)"
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr "BANO"
 
@@ -25890,9 +25979,6 @@ msgstr ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
 
-msgid "Hamburg (40 cm)"
-msgstr "Hamburgas (40 cm)"
-
 msgid "Hamburg (20 cm)"
 msgstr "Hamburgas (20 cm)"
 
@@ -25920,10 +26006,10 @@ msgstr "Berlyno 2016 m. oro nuotraukos"
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -26324,18 +26410,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr "Liuksemburgo Inspiruota - geležinkeliai"
-
-msgid "Luxembourg Inspire Roads"
-msgstr "Liuksemburgo inspiruota - keliai"
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Nigerio delta - 2012 m. spalis - Landsat"
 
@@ -26359,7 +26433,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -26421,11 +26645,11 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
-msgstr "Geoportal 2: Ortofotomapa (oro nuotrauka)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
-msgstr "Geoportal 2: Ortofotomapa (oro nuotrauka) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
+msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr "Geoportal 2: PRNG (geo pavadinimai)"
@@ -26433,118 +26657,127 @@ msgstr "Geoportal 2: PRNG (geo pavadinimai)"
 msgid "Geoportal 2: ISOK hillshade"
 msgstr "Geoportal 2: ISOK reljefo šešėliai"
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
-msgstr "Bendzinas (Będzin), Lenkija: Ortofotomapa 2013 (oro nuotrauka)"
+msgid "polska.e-mapa.net: Buildings"
+msgstr ""
+
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
+msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
-msgstr "Bendzinas (Będzin), Lenkija: Budynki (pastatai)"
+msgid "Będzin: Buildings"
+msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
-msgstr "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
+msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr "Bytomas (Bytom): Fotoplan 2014 (oro nuotrauka)"
 
-msgid "Bytom: Budynki (buildings)"
-msgstr "Bytomas (Bytom): Budynki (pastatai)"
+msgid "Bytom: Buildings"
+msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
-msgstr "Chožuvas (Chorzów): Budynki (pastatai)"
+msgid "Chorzów: Buildings"
+msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
-msgstr "Čenstakava (Częstochowa): Budynki (pastatai)"
+msgid "Częstochowa: Buildings"
+msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
-msgstr "Čenstakava (Częstochowa): Ortofotomapa 2011 (oro nuotrauka)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
+msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
-msgstr "Čenstakava (Częstochowa): Ortofotomapa 2013 (oro nuotrauka)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
+msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
-msgstr "Čenstakava (Częstochowa): Ortofotomapa 2014 (oro nuotrauka)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
+msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
-msgstr "Glivicė (Gliwice): Ortofotomapa 2013 (oro nuotrauka)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
+msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
-msgstr "Glivicė (Gliwice): Budynki (pastatai)"
+msgid "Gliwice: Buildings"
+msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
-msgstr "Katovicai (Katowice): Ortofotomapa (oro nuotrauka)"
+msgid "Katowice: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
-msgstr "Katovicai: Budynki (pastatai)"
+msgid "Katowice: Buildings"
+msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
-msgstr "Lodzė (Łódź): Budynki (pastatai)"
+msgid "Łódź: Buildings"
+msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
-msgstr "Lodzė: Ortofotomapa (oro nuotrauka)"
+msgid "Łódź: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
-msgstr "Denbickų pavietas: Budynki (pastatai)"
+msgid "Powiat dębicki: Buildings"
+msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
-msgstr "Liubačiovskų pavietas: Budynki (pastatai)"
+msgid "Powiat lubaczowski: Buildings"
+msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
-msgstr "Lancuckų pavietas: Budynki (pastatai)"
+msgid "Powiat łańcucki: Buildings"
+msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
-msgstr "Poznanės pavietas: Budynki (pastatai)"
+msgid "Powiat poznański: Buildings"
+msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
-msgstr "Poznanės pavietas: Ortofotomapa (oro nuotrauka)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
+msgstr ""
+
+msgid "Powiat ropczycko-sędziszowski: Buildings"
+msgstr ""
+
+msgid "Powiat rzeszowski: Buildings"
+msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
-msgstr "Žešuvo pavietas: Budynki (pastatai)"
+msgid "Powiat stalowowolski: Buildings"
+msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
-msgstr "Žešuvo pavietas: Ortofotomapa (Oro nuotrauka)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
+msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
-msgstr "Stalovovolskio pavietas: Budynki (pastatai)"
+msgid "Przemyśl: Buildings"
+msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
-msgstr "Pžemišlis (Peremislis): Budynki (pastatai)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
-msgstr "Pžemišlis (Peremislis): Ortofotomapa (oro nuotrauka)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
-msgstr "Šlionsko Rūda: Ortofotomapa (oro nuotrauka)"
+msgid "Rzeszów: Buildings"
+msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
-msgstr "Žešuvas: Ortofotomapa (oro nuotrauka)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
-msgstr "Žešuvas: Budynki (pastatai)"
+msgid "Siemianowice Śląskie: Buildings"
+msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
-msgstr "Šlionsko Siemianovicai: Ortofotomapa (oro nuotrauka)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
+msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
-msgstr "Šlionsko Siemianovicai: Budynki (pastatai)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
+msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
-msgstr "Šventochlovicai: Ortofotomapa 2008 (oro nuotrauka)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
+msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
-msgstr "Šventochlovicai: Ortofotomapa 2009 (oro nuotrauka)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
+msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
-msgstr "Šventochlovicai: Ortofotomapa 2012 (oro nuotrauka)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
+msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
-msgstr "Zabžė: Ortofotomapa 2011 (oro nuotrauka)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -26681,6 +26914,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr "Argau kantonas 25cm (AGIS 2011)"
 
@@ -29255,15 +29500,12 @@ 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 "Open Mapillary layer"
+msgstr ""
 
 msgid "Mapillary"
 msgstr "Mapillary"
 
-msgid "Create Mapillary layer"
-msgstr "Sukurti Mapillary sluoksnį"
-
 msgid "Download Mapillary images in current view"
 msgstr "Atsiųsti Mapillary vaizdus dabartiniame rodinyje"
 
@@ -29325,14 +29567,8 @@ msgstr ""
 "praneškite apie klaidą per Žinyno meniu. Jei šis pranešimas rodomas pirmą "
 "kartą, kartokite. Tai galėjo būti problema su interneto ryšiu."
 
-msgid "Upload pictures"
-msgstr "Išsiųsti nuotraukas"
-
-msgid "Upload Mapillary pictures"
-msgstr "Išsiųsti Mapillary nuotraukas"
-
-msgid "Upload pictures."
-msgstr "Išsiųsti nuotraukas."
+msgid "Upload Mapillary images"
+msgstr ""
 
 msgid "Walk mode"
 msgstr "Ėjimo veiksena"
@@ -29367,15 +29603,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr "Perrašyti importuotas nuotraukas"
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr "Greičio apribojimas"
 
@@ -29508,6 +29741,11 @@ msgstr "Peržiūrėti nuotraukas užvedus pelę ant piktogramos"
 msgid "Cut off sequences at download bounds"
 msgstr "Nutraukti sekas atsiuntimo ribose"
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -34004,6 +34242,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -35491,9 +35733,6 @@ msgstr "Eksportuoti eismo duomenis į SUMO tinklo failą."
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr "Automatiškai įrašyti LiveData"
 
diff --git a/i18n/po/lv.po b/i18n/po/lv.po
index 73cf074..5f8dff0 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 04:53+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:52+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: lv\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -964,6 +964,12 @@ msgstr "Atsevišķs slānis"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "Izvēlieties, ja datiem jābūt ielādētiem jaunā slānī"
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr "Lejupielādes vieta"
 
@@ -2236,6 +2242,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3039,18 +3070,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr ""
@@ -3067,9 +3086,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8241,12 +8272,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9744,6 +9769,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9848,8 +9879,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9859,6 +9890,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9872,14 +9906,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr "Saglabāt GPX failu"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9922,6 +9979,16 @@ msgstr "Saglabāt slāni"
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10250,40 +10317,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13370,8 +13437,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14034,6 +14101,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19462,6 +19535,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23437,6 +23516,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23757,7 +23842,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24180,6 +24266,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24266,9 +24358,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24296,10 +24385,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24698,18 +24787,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24733,7 +24810,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24795,10 +25022,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24807,118 +25034,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25055,6 +25291,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27583,15 +27831,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27650,13 +27895,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27692,15 +27931,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27833,6 +28069,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32259,6 +32500,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33739,9 +33984,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/mk.po b/i18n/po/mk.po
index 7db2892..43050e6 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 04:55+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:53+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: mk\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -955,6 +955,12 @@ msgstr ""
 msgid "Select if the data should be downloaded into a new layer"
 msgstr ""
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr ""
 
@@ -2227,6 +2233,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3030,18 +3061,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr ""
@@ -3058,9 +3077,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8234,12 +8265,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9733,6 +9758,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9837,8 +9868,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9848,6 +9879,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9861,14 +9895,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr ""
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9911,6 +9968,16 @@ msgstr ""
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10239,40 +10306,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13360,8 +13427,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14024,6 +14091,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19452,6 +19525,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23427,6 +23506,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23747,7 +23832,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24170,6 +24256,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24256,9 +24348,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24286,10 +24375,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24688,18 +24777,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24723,7 +24800,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24785,10 +25012,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24797,118 +25024,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25045,6 +25281,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27573,15 +27821,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27640,13 +27885,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27682,15 +27921,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27823,6 +28059,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32249,6 +32490,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33729,9 +33974,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/mr.po b/i18n/po/mr.po
index fde420d..6563e99 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 04:55+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:54+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: mr\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -971,6 +971,12 @@ msgstr "वेगळा थर"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr ""
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr ""
 
@@ -2251,6 +2257,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3056,18 +3087,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr "दशमान अंश"
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr "द"
@@ -3084,9 +3103,21 @@ msgctxt "compass"
 msgid "E"
 msgstr "पू"
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr "दशमान अंश"
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8259,12 +8290,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9758,6 +9783,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9862,8 +9893,8 @@ msgstr "नाव: {0}"
 msgid "Description: {0}"
 msgstr "वर्णन: {0}"
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9873,6 +9904,9 @@ msgstr ""
 msgid "Length"
 msgstr "लांबी"
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr "लांबी: {0}"
 
@@ -9886,14 +9920,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr "GPX संचिका साठवा"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9936,6 +9993,16 @@ msgstr "थर साठवा"
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10264,29 +10331,20 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
-msgstr "मागील"
+msgid "Next"
+msgstr "पुढील"
 
-msgid "Show previous Image"
-msgstr "मागील प्रतिमा दाखवा"
+msgid "Show next Image"
+msgstr "पुढील प्रतिमा दाखवा"
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
-msgstr ""
-
-msgid "Delete File from disk"
-msgstr ""
-
-msgid "Copy image path"
-msgstr ""
-
-msgid "Next"
-msgstr "पुढील"
+msgid "Previous"
+msgstr "मागील"
 
-msgid "Show next Image"
-msgstr "पुढील प्रतिमा दाखवा"
+msgid "Show previous Image"
+msgstr "मागील प्रतिमा दाखवा"
 
 msgid "Show first Image"
 msgstr "प्रथम प्रतिमा दाखवा"
@@ -10300,6 +10358,15 @@ msgstr ""
 msgid "Zoom best fit and 1:1"
 msgstr ""
 
+msgid "Remove photo from layer"
+msgstr ""
+
+msgid "Delete File from disk"
+msgstr ""
+
+msgid "Copy image path"
+msgstr ""
+
 msgid "Move dialog to the side pane"
 msgstr ""
 
@@ -13395,8 +13462,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14059,6 +14126,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19487,6 +19560,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23462,6 +23541,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23782,7 +23867,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24205,6 +24291,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24291,9 +24383,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24321,10 +24410,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24723,18 +24812,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24758,7 +24835,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24820,10 +25047,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24832,118 +25059,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
+msgstr ""
+
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25080,6 +25316,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27608,15 +27856,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27675,13 +27920,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27717,15 +27956,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27858,6 +28094,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32284,6 +32525,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33764,9 +34009,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/ms.po b/i18n/po/ms.po
index ebdca3f..58b2f9c 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 04:56+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:54+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: ms\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -953,6 +953,12 @@ msgstr ""
 msgid "Select if the data should be downloaded into a new layer"
 msgstr ""
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr ""
 
@@ -2225,6 +2231,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3028,18 +3059,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr ""
@@ -3056,9 +3075,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8231,12 +8262,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9730,6 +9755,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9834,8 +9865,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9845,6 +9876,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9858,14 +9892,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr ""
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9908,6 +9965,16 @@ msgstr ""
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10236,40 +10303,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13356,8 +13423,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14020,6 +14087,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19448,6 +19521,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23423,6 +23502,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23743,7 +23828,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24166,6 +24252,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24252,9 +24344,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24282,10 +24371,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24684,18 +24773,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24719,7 +24796,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24781,10 +25008,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24793,118 +25020,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25041,6 +25277,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27569,15 +27817,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27636,13 +27881,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27678,15 +27917,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27819,6 +28055,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32245,6 +32486,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33725,9 +33970,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/nb.po b/i18n/po/nb.po
index b253935..14f58ce 100644
--- a/i18n/po/nb.po
+++ b/i18n/po/nb.po
@@ -7,16 +7,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-11-26 00:06+0100\n"
-"PO-Revision-Date: 2017-09-21 13:42+0000\n"
-"Last-Translator: Anders Lyngvi Fougner <Unknown>\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\n"
+"PO-Revision-Date: 2017-12-28 07:50+0000\n"
+"Last-Translator: Nka Mapper <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-11-26 04:57+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:56+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: nb\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1009,6 +1009,12 @@ msgstr "Separat lag"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "Velg hvis innholdet skal lastes ned i et eget lag"
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr "Last ned sted"
 
@@ -2329,6 +2335,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3138,18 +3169,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr "allerede registrert en konflikt for primitiv \"{0}\""
 
-msgid "Decimal Degrees"
-msgstr "Desimalgrader"
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr "S"
@@ -3166,9 +3185,21 @@ msgctxt "compass"
 msgid "E"
 msgstr "Ø"
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr "Desimalgrader"
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8385,12 +8416,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9914,6 +9939,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -10020,8 +10051,8 @@ msgstr "Navn: {0}"
 msgid "Description: {0}"
 msgstr "Beskrivelse: {0}"
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -10031,6 +10062,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -10044,14 +10078,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] "{0} waypoint"
 msgstr[1] "{0} waypoints"
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
-msgstr[0] "{0} spor, "
-msgstr[1] "{0} spor, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr "Lagre GPX-fil"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -10094,6 +10151,16 @@ msgstr "Lagre lag"
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10430,28 +10497,19 @@ msgstr "Feil i fil {0}"
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
-msgstr "Forrige"
+msgid "Next"
+msgstr "Neste"
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
-msgstr "Fjern foto fra lag"
-
-msgid "Delete File from disk"
-msgstr ""
-
-msgid "Copy image path"
-msgstr ""
-
-msgid "Next"
-msgstr "Neste"
+msgid "Previous"
+msgstr "Forrige"
 
-msgid "Show next Image"
+msgid "Show previous Image"
 msgstr ""
 
 msgid "Show first Image"
@@ -10466,6 +10524,15 @@ msgstr "Midtstill kartbilde"
 msgid "Zoom best fit and 1:1"
 msgstr "Zoom beste utsnitt 1:1"
 
+msgid "Remove photo from layer"
+msgstr "Fjern foto fra lag"
+
+msgid "Delete File from disk"
+msgstr ""
+
+msgid "Copy image path"
+msgstr ""
+
 msgid "Move dialog to the side pane"
 msgstr ""
 
@@ -13598,8 +13665,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr "Slettet node {0} er del av linje {1}"
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14265,6 +14332,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr "Vil du tillate dette?"
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr "Bekreft Remote Control handlinger"
 
@@ -19703,6 +19776,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23682,6 +23761,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -24002,7 +24087,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24425,6 +24511,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24511,9 +24603,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24541,10 +24630,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24943,18 +25032,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24978,7 +25055,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -25040,10 +25267,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -25052,118 +25279,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
+msgstr ""
+
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25300,6 +25536,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27851,15 +28099,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27918,13 +28163,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27960,15 +28199,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -28101,6 +28337,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32562,6 +32803,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -34042,9 +34287,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr "Eksportér"
-
 msgid "AutoSave LiveData"
 msgstr "Lagre LiveData automatisk"
 
diff --git a/i18n/po/nds.po b/i18n/po/nds.po
index 4d00003..60dc76e 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 04:56+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:55+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -953,6 +953,12 @@ msgstr ""
 msgid "Select if the data should be downloaded into a new layer"
 msgstr ""
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr ""
 
@@ -2225,6 +2231,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3027,18 +3058,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr ""
@@ -3055,9 +3074,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8230,12 +8261,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9729,6 +9754,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9833,8 +9864,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9844,6 +9875,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9857,14 +9891,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr ""
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9907,6 +9964,16 @@ msgstr ""
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10235,40 +10302,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13355,8 +13422,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14019,6 +14086,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19447,6 +19520,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23422,6 +23501,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23742,7 +23827,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24165,6 +24251,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24251,9 +24343,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24281,10 +24370,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24683,18 +24772,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24718,7 +24795,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24780,10 +25007,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24792,118 +25019,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25040,6 +25276,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27568,15 +27816,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27635,13 +27880,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27677,15 +27916,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27818,6 +28054,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32244,6 +32485,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33724,9 +33969,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/nl.po b/i18n/po/nl.po
index d3a5442..935460e 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-11-26 00:06+0100\n"
-"PO-Revision-Date: 2017-11-07 11:32+0000\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\n"
+"PO-Revision-Date: 2017-12-10 12:19+0000\n"
 "Last-Translator: DiGro <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-11-26 04:41+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:41+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: nl\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -455,7 +455,7 @@ msgstr ""
 "verwijder de actieve laag. Verwijdert niet het daaraan verbonden bestand"
 
 msgid "Dialogs panel"
-msgstr ""
+msgstr "paneel Schakelvensters"
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "paneel Schakelvensters , kaartweergave maximaliseren"
@@ -1054,6 +1054,12 @@ msgstr "Laag scheiden"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "Selecteer als de data naar een nieuwe laag moet worden gedownload"
 
+msgid "Zoom to downloaded data"
+msgstr "Zoomen naar gedownloade gegevens"
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr "Selecteren om te zoomen naar de geheel nieuw gedownloade gegevens."
+
 msgid "Download Location"
 msgstr "Locatie voor downloaden"
 
@@ -2470,6 +2476,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr "Bevestiging"
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr "Lijst met recente relaties"
 
@@ -3350,18 +3381,6 @@ msgstr "Het revisie-bestand ''/REVISION'' ontbreekt."
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr "Er werd al een conflict geregistreerd voor primitief ''{0}''."
 
-msgid "Decimal Degrees"
-msgstr "Decimale graden"
-
-msgid "deg° min'' sec\""
-msgstr "grd° min'' sec\""
-
-msgid "deg° min'' (Nautical)"
-msgstr "grd° min'' (Scheepvaart)"
-
-msgid "Projected Coordinates"
-msgstr "Geprojecteerde coördinaten"
-
 msgctxt "compass"
 msgid "S"
 msgstr "Z"
@@ -3378,9 +3397,21 @@ msgctxt "compass"
 msgid "E"
 msgstr "O"
 
+msgid "deg° min'' sec\""
+msgstr "grd° min'' sec\""
+
+msgid "Decimal Degrees"
+msgstr "Decimale graden"
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr "Niet mogelijk te parsen als waarde voor coördinaat: ''{0}''"
 
+msgid "deg° min'' (Nautical)"
+msgstr "grd° min'' (Scheepvaart)"
+
+msgid "Projected Coordinates"
+msgstr "Geprojecteerde coördinaten"
+
 msgid "Date of imagery: {0}"
 msgstr "Datum afbeelding: {0}"
 
@@ -9065,12 +9096,6 @@ msgstr ""
 "keer als JOSM wordt gestart.<br>U kunt het handmatig openen in het menu "
 "Bestand of via de werkbalk.</html>"
 
-msgid "Zoom to downloaded data"
-msgstr "Zoomen naar gedownloade gegevens"
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr "Selecteren om te zoomen naar de geheel nieuw gedownloade gegevens."
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9725,6 +9750,8 @@ msgid ""
 "A background upload is already in progress. Kindly wait for it to finish "
 "before uploading new changes"
 msgstr ""
+"Uploaden in de achtergrond wordt al uitgevoerd. Wacht tot dat is voltooid "
+"voordat u nieuwe wijzigingen uploadt"
 
 msgid "I would like someone to review my edits."
 msgstr "Ik wil graag dat iemand mijn bewerkingen nakijkt."
@@ -10799,6 +10826,12 @@ msgstr "Metadata "
 msgid "Load tile"
 msgstr "Tegel laden"
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr "Maken van bron voor tegels mislukt"
 
@@ -10912,10 +10945,10 @@ msgstr "Naam: {0}"
 msgid "Description: {0}"
 msgstr "Beschrijving: {0}"
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
-msgstr[0] "{0} spoor,"
-msgstr[1] "{0} sporen,"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Timespan"
 msgstr "Tijsduur"
@@ -10923,6 +10956,9 @@ msgstr "Tijsduur"
 msgid "Length"
 msgstr "Lengte"
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr "Lengte: {0}"
 
@@ -10936,14 +10972,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] "{0} wegpunt"
 msgstr[1] "{0} wegpunten"
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
-msgstr[0] "{0} spoor, "
-msgstr[1] "{0} sporen, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] "{0} spoor,"
+msgstr[1] "{0} sporen,"
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr "GPX-bestand opslaan"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr "ID"
 
@@ -10985,6 +11044,17 @@ msgstr "Laag opslaan"
 
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
+"U probeert een gegevenslaag Alleen-lezen in te stellen als bewerkingslaag"
+
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
 
 msgid "{0} note"
 msgid_plural "{0} notes"
@@ -11333,29 +11403,20 @@ msgstr "Fout met bestand {0}"
 msgid "Display geotagged images"
 msgstr "Toon afbeeldingen met geo-tags"
 
-msgid "Previous"
-msgstr "Vorige"
+msgid "Next"
+msgstr "Volgende"
 
-msgid "Show previous Image"
-msgstr "Toon vorige afbeelding"
+msgid "Show next Image"
+msgstr "Toon volgende afbeelding"
 
 msgid "Geoimage: {0}"
 msgstr "Geo-afbeelding: {0}"
 
-msgid "Remove photo from layer"
-msgstr "Verwijder foto uit laag"
-
-msgid "Delete File from disk"
-msgstr "Wis bestand van de schijf"
-
-msgid "Copy image path"
-msgstr "Pad voor afbeelding kopiëren"
-
-msgid "Next"
-msgstr "Volgende"
+msgid "Previous"
+msgstr "Vorige"
 
-msgid "Show next Image"
-msgstr "Toon volgende afbeelding"
+msgid "Show previous Image"
+msgstr "Toon vorige afbeelding"
 
 msgid "Show first Image"
 msgstr "Geef eerste afbeelding weer"
@@ -11369,6 +11430,15 @@ msgstr "Beeld centreren"
 msgid "Zoom best fit and 1:1"
 msgstr "Zoom optimaal en 1:1"
 
+msgid "Remove photo from layer"
+msgstr "Verwijder foto uit laag"
+
+msgid "Delete File from disk"
+msgstr "Wis bestand van de schijf"
+
+msgid "Copy image path"
+msgstr "Pad voor afbeelding kopiëren"
+
 msgid "Move dialog to the side pane"
 msgstr "Verplaats dialoogvenster naar venster aan zijkant"
 
@@ -13265,7 +13335,7 @@ msgid "Show object ID in selection lists"
 msgstr "Object-ID in selectielijsten weergeven"
 
 msgid "Show node coordinates in selection lists"
-msgstr ""
+msgstr "Coördinaten van knopen weergeven in selectielijsten"
 
 msgid "Show localized name in selection lists"
 msgstr "Geef de gelokaliseerde naam weer in selectielijsten"
@@ -14898,11 +14968,11 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr "Verwijderde knoop {0} is deel van weg {1}"
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
-"Weg {0} met {1} knopen heeft incomplete knopen omdat ten minste één knoop "
-"ontbreekt in de geladen gegevens."
+"Weg {0} met {1} knopen is niet compleet omdat tenminste één knoop ontbreekt "
+"in de geladen gegevens."
 
 msgid ""
 "Relation with external id ''{0}'' refers to a missing primitive with "
@@ -15644,6 +15714,12 @@ msgstr "Afstandsbediening is gevraagd om een lokaal bestand te openen."
 msgid "Do you want to allow this?"
 msgstr "Wil je dit toestaan?"
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr "Bevestig actie van Afstandsbediening"
 
@@ -20428,7 +20504,7 @@ msgid "Caravans allowed"
 msgstr "Caravans toegestaan"
 
 msgid "Backcountry"
-msgstr ""
+msgstr "Achterland"
 
 msgid "Group only access"
 msgstr "Alleen voor groepen"
@@ -21348,6 +21424,12 @@ msgstr "Afval"
 msgid "Recycling Centre"
 msgstr "Recyclestation"
 
+msgid "trash"
+msgstr "prullenbak"
+
+msgid "dog_excrement"
+msgstr "honden_uitwerpselen"
+
 msgid "Waste Disposal/Dumpster"
 msgstr "Afvalcontainer"
 
@@ -24516,7 +24598,7 @@ msgstr ""
 
 msgctxt "industrial"
 msgid "brickyard"
-msgstr ""
+msgstr "steenhandel"
 
 msgctxt "industrial"
 msgid "depot"
@@ -25284,12 +25366,14 @@ msgstr ""
 "vernieuwd met doorlopende bijwerkingen."
 
 msgid "DigitalGlobe Premium Imagery Vintage"
-msgstr ""
+msgstr "DigitalGlobe Premium Imagery Vintage"
 
 msgid ""
 "Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
 "higher."
 msgstr ""
+"Grenzen voor afbeeldingen en opslaan datums. Labels verschijnen op "
+"zoomniveau 14 en hoger."
 
 msgid "DigitalGlobe Standard Imagery"
 msgstr "DigitalGlobe Standard Imagery"
@@ -25305,7 +25389,7 @@ msgstr ""
 "2,31 jaar, met enkele gebieden die 2x per jaar worden bijgewerkt."
 
 msgid "DigitalGlobe Standard Imagery Vintage"
-msgstr ""
+msgstr "DigitalGlobe Standard Imagery Vintage"
 
 msgid "Esri World Imagery"
 msgstr "Esri World Imagery"
@@ -25349,6 +25433,13 @@ msgstr "Public Transport (ÖPNV)"
 msgid "Hike & Bike"
 msgstr "Wandelen & Fietsen"
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+"Overlayafbeelding voor in kaart brengen pistes in OSM. Dagelijks bijgewerkt."
+
 msgid "skobbler"
 msgstr "skobbler"
 
@@ -25371,10 +25462,10 @@ msgid "Strava cycling and running heatmap"
 msgstr "Strava fietsen en hardlopen heatmap"
 
 msgid "Strava water sports heatmap"
-msgstr ""
+msgstr "Strava watersport heatmap"
 
 msgid "Strava winter sports heatmap"
-msgstr ""
+msgstr "Strava wintersport heatmap"
 
 msgid "Locator Overlay"
 msgstr "Locator Overlay"
@@ -25684,8 +25775,9 @@ msgstr "Basiskaart van Oostenrijk, gebaseerd op gegevens van de overheid."
 msgid "basemap.at Orthofoto"
 msgstr "basemap.at Orthofoto"
 
-msgid "Orthofoto layer provided by basemap.at. "
-msgstr "Orthofoto-laag verschaft door basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
+msgstr ""
 
 msgid "Geoimage.at MaxRes"
 msgstr "Geoimage.at MaxRes"
@@ -25796,7 +25888,7 @@ msgid "SPW(allonie) most recent aerial imagery"
 msgstr "SPW(allonie) meest recente luchtfoto’s"
 
 msgid "SPW(allonie) 2016 aerial imagery"
-msgstr ""
+msgstr "SPW(allonie) 2016 luchtfoto''s"
 
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr "SPW(allonie) 2015 luchtfoto’s"
@@ -25808,7 +25900,7 @@ msgid "SPW(allonie) 2009-2010 aerial imagery"
 msgstr "SPW(allonie) 2009-2010  luchtfoto’s"
 
 msgid "SPW(allonie) shaded relief"
-msgstr ""
+msgstr "SPW(allonie) schaduwreliëf"
 
 msgid "TEC bus lines"
 msgstr "TEC buslijnen"
@@ -25847,12 +25939,14 @@ msgid "Addresses data from IBGE"
 msgstr "Adresseert gegevens van IBGE"
 
 msgid "Street names IBGE Salvador-BA"
-msgstr ""
+msgstr "Straatnamen IBGE Salvador-BA"
 
 msgid ""
 "Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
 "IBGE."
 msgstr ""
+"Geometrie en namen van straten in Salvador, Bahia. Bron: Faces de Logradouro "
+"- IBGE."
 
 msgid "Rio Mosaic 2013"
 msgstr "Rio Mosaic 2013"
@@ -26126,6 +26220,12 @@ msgstr "Estonia Cadastre (Maaamet)"
 msgid "Estonia Forestry (Maaamet)"
 msgstr "Estonia Forestry (Maaamet)"
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr "Kelkkareitit.fi snowmobiel sporen van OSM (Noordse bedekking)"
+
 msgid "BANO"
 msgstr "BANO"
 
@@ -26214,9 +26314,6 @@ msgstr ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors -  luchtfoto''s "
 "1999 - 1 m"
 
-msgid "Hamburg (40 cm)"
-msgstr "Hamburg (40 cm)"
-
 msgid "Hamburg (20 cm)"
 msgstr "Hamburg (20 cm)"
 
@@ -26244,12 +26341,12 @@ 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"
-
 msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr "Deutsche Bahn VzG lijnen november 2015"
 
+msgid "Deutsche Bahn VzG lines January 2017"
+msgstr ""
+
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
 msgstr "Erlangen luchtfoto''s (2016 5.0 cm)"
 
@@ -26647,7 +26744,7 @@ msgid "Japan GSI ortho Imagery"
 msgstr "Japan GSI ortho Imagery"
 
 msgid "Japan GSI Standard Map"
-msgstr ""
+msgstr "Japan GSI Standard Map"
 
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
@@ -26685,7 +26782,7 @@ msgid "20cm ortho - Latvia - Coastline"
 msgstr "20cm ortho - Letland - kustlijn"
 
 msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
-msgstr ""
+msgstr "Orthophoto 1ste cyclus (1994-1999) - Letland"
 
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Litouwen)"
@@ -26694,19 +26791,7 @@ msgid "geoportail.lu all layers"
 msgstr "geoportail.lu alle lagen"
 
 msgid "geoportail.lu ortho latest"
-msgstr ""
-
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr "Luxemburg Inspire spoorwegen"
-
-msgid "Luxembourg Inspire Roads"
-msgstr "Luxemburg Inspire wegen"
-
-msgid "Luxembourg Inspire Water"
-msgstr "Luxemburg Inspire Water"
+msgstr "geoportail.lu ortho laatste"
 
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Niger Delta Oct 2012 Landsat"
@@ -26732,8 +26817,177 @@ msgstr "LINZ NZ Luchtfoto’s"
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr "LINZ NZ Topo50 Gridless Maps"
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
-msgstr "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr "Kartverket N50 topo"
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+"Topografische kaart N50, equivalent aan Noorwegen 1:50.000 papieren "
+"kaartseries."
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr "Kartverket Nautiscje kaarten"
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+"Noorse nautische kaarten (inclusief Spitsbergen/Svalbard en Antarctica). "
+"Rasterweergave van papieren kaarten. Tweewekelijks bijgewerkt."
+
+msgid "Kartverket Road Network overlay"
+msgstr "Kartverket Wegennetwerk overlay"
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+"Noorse wegennetwerk van de National Road database (NVDB), ook gebruikt in "
+"Vbase en Elveg. Kleuren vertegenwoordigen nationale, provinciale, "
+"stedelijke, private en boswegen + voet-/fietspaden."
+
+msgid "Kartverket Trails overlay"
+msgstr "Kartverket Sporen overlay"
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr "Kartverket Plaatsnamen overlay"
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+"Officiële Noorse plaatsnamen uit de SSR-database. Categorieën te selecteren."
+
+msgid "MTBmap.no"
+msgstr "MTBmap.no"
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+"Noorse mountainbikekaart van OSM (max zoom 14-16, varieert per regio)"
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr "Kartverket DTM Digital Terrain Model"
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+"Geschaduwd reliëf weergave van open Norwegian Digital Terrain Model (DTM) "
+"projecten, d.i. oppervlak van de aarde zonder bomen, gebouwen en andere "
+"objecten. Bezoek hoydedata.no om het jaar van het project te bepalen."
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr "Kartverket DOM Digital Surface Model"
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+"Geschaduwd reliëf weergave van open Norwegian Digital Surface Model (DOM) "
+"projecten, d.i. oppervlak van de aarde inclusief bomen, gebouwen en andere "
+"objecten er bovenop. Bezoek hoydedata.no om het jaar van het project te "
+"bepalen."
+
+msgid "Kartverket Historic maps"
+msgstr "Kartverket Historische kaarten"
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr "Kartverket Administratieve grenzen overlay"
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr "Kartverket Kadastrale overlay"
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr "Miljødirektoratet Beschermde gebieden overlay"
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+"Noorse nationale parken, natuurbeschermingsgebieden en andere beschermde "
+"gebieden en objecten van Naturbase, inclusief Svalbard/Spitsbergen"
+
+msgid "NP Svalbard Orthophoto"
+msgstr "NP Svalbard Luchtfoto"
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
+msgstr ""
+"Luchtfoto voor Svalbard/Spitsbergen van het Norwegian Polar Institute"
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
 msgstr "imagico.de OSM-afbeeldingen voor in kaart brengen: Svalbard mozaïek"
@@ -26805,11 +27059,11 @@ msgstr "Slechte en verouderde afbeeldingen in andere bronnen (ware kleuren)"
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr "Pangasinán/Bulacan (Philippines HiRes)"
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
-msgstr "Geoportal 2: Ortofotomapa (luchtfoto)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
+msgstr "Geoportal 2: Orthophotomap (luchtfoto)"
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
-msgstr "Geoportal 2: Ortofotomapa (luchtfoto) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
+msgstr "Geoportal 2: Orthophotomap (luchtfoto) WMTS"
 
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr "Geoportal 2: PRNG (geo namen)"
@@ -26817,119 +27071,128 @@ msgstr "Geoportal 2: PRNG (geo namen)"
 msgid "Geoportal 2: ISOK hillshade"
 msgstr "Geoportal 2: ISOK hillshade"
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
-msgstr "Będzin: Ortofotomapa 2013 (luchtfoto)"
+msgid "polska.e-mapa.net: Buildings"
+msgstr ""
+
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
+msgstr "Będzin: Orthophotomap 2013 (luchtfoto)"
 
-msgid "Będzin: Budynki (buildings)"
-msgstr "Będzin: Budynki (gebouwen)"
+msgid "Będzin: Buildings"
+msgstr "Będzin: Gebouwen"
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
-msgstr "Bytom: Ortofotomapa 2012 (luchtfoto)"
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
+msgstr "Bytom: Orthophotomap 2012 (luchtfoto)"
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr "Bytom: Fotoplan 2014 (luchtfoto)"
 
-msgid "Bytom: Budynki (buildings)"
-msgstr "Bytom: Budynki (gebouwen)"
+msgid "Bytom: Buildings"
+msgstr "Bytom: Gebouwen"
 
-msgid "Chorzów: Budynki (buildings)"
-msgstr "Chorzów: Budynki (gebouwen)"
+msgid "Chorzów: Buildings"
+msgstr "Chorzów: Gebouwen"
 
-msgid "Częstochowa: Budynki (buildings)"
-msgstr "Częstochowa: Budynki (gebouwen)"
+msgid "Częstochowa: Buildings"
+msgstr "Częstochowa: Gebouwen"
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2011 (luchtfoto)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
+msgstr "Częstochowa: Orthophotomap 2011 (luchtfoto)"
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2013 (luchtfoto)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
+msgstr "Częstochowa: Orthophotomap 2013 (luchtfoto)"
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2014 (luchtfoto)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
+msgstr "Częstochowa: Orthophotomap 2014 (luchtfoto)"
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
-msgstr "Gliwice: Ortofotomapa 2013 (luchtfoto)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
+msgstr "Gliwice: Orthophotomap 2013 (luchtfoto)"
 
-msgid "Gliwice: Budynki (buildings)"
-msgstr "Gliwice: Budynki (gebouwen)"
+msgid "Gliwice: Buildings"
+msgstr "Gliwice: Gebouwen"
 
-msgid "Katowice: Ortofotomapa (aerial image)"
-msgstr "Katowice: Ortofotomapa (luchtfoto)"
+msgid "Katowice: Orthophotomap (aerial image)"
+msgstr "Katowice: Orthophotomap (luchtfoto)"
 
-msgid "Katowice: Budynki (buildings)"
-msgstr "Katowice: Budynki (gebouwen)"
+msgid "Katowice: Buildings"
+msgstr "Katowice: Gebouwen"
 
-msgid "Łódź: Budynki (buildings)"
-msgstr "Łódź: Budynki (gebouwen)"
+msgid "Łódź: Buildings"
+msgstr "Łódź: Gebouwen"
 
-msgid "Łódź: Ortofotomapa (aerial image)"
-msgstr "Łódź: Ortofotomapa (luchtfoto)"
+msgid "Łódź: Orthophotomap (aerial image)"
+msgstr "Łódź: Orthophotomap (luchtfoto)"
 
-msgid "Powiat dębicki: Budynki (buildings)"
-msgstr "Powiat dębicki: Budynki (gebouwen)"
+msgid "Powiat dębicki: Buildings"
+msgstr "Powiat dębicki: Gebouwen"
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
-msgstr "Powiat lubaczowski: Budynki (gebouwen)"
+msgid "Powiat lubaczowski: Buildings"
+msgstr "Powiat lubaczowski: Gebouwen"
 
-msgid "Powiat łańcucki: Budynki (buildings)"
-msgstr "Powiat łańcucki: Budynki (gebouwen)"
+msgid "Powiat łańcucki: Buildings"
+msgstr "Powiat łańcucki: Gebouwen"
 
-msgid "Powiat poznański: Budynki (buildings)"
-msgstr "Powiat poznański: Budynki (gebouwen)"
+msgid "Powiat poznański: Buildings"
+msgstr "Powiat poznański: Gebouwen"
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
-msgstr "Powiat poznański: Ortofotomapa (luchtfoto)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
+msgstr "Powiat poznański: Orthophotomap (luchtfoto)"
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
-msgstr "Powiat ropczycko-sędziszowski: Budynki (gebouwen)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
+msgstr "Powiat ropczycko-sędziszowski: Gebouwen"
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
-msgstr "Powiat rzeszowski: Budynki (gebouwen)"
+msgid "Powiat rzeszowski: Buildings"
+msgstr "Powiat rzeszowski: Gebouwen"
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
-msgstr "Powiat rzeszowski: Ortofotomapa (luchtfoto)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
+msgstr "Powiat rzeszowski: Orthophotomap (luchtfoto)"
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
-msgstr "Powiat stalowowolski: Budynki (gebouwen)"
+msgid "Powiat stalowowolski: Buildings"
+msgstr "Powiat stalowowolski: Gebouwen"
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
-msgstr "Poznań: Ortofotomapa 2014 (luchtfoto)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
+msgstr "Poznań: Orthophotomap 2014 (luchtfoto)"
 
-msgid "Przemyśl: Budynki (buildings)"
-msgstr "Przemyśl: Budynki (gebouwen)"
+msgid "Przemyśl: Buildings"
+msgstr "Przemyśl: Gebouwen"
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
-msgstr "Przemyśl: Ortofotomapa (luchtfoto)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
+msgstr "Przemyśl: Ortophotomap (luchtfoto)"
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
-msgstr "Ruda Śląska: Ortofotomapa (luchtfoto)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
+msgstr "Ruda Śląska: Orthophotomap (luchtfoto)"
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
-msgstr "Rzeszów: Ortofotomapa (luchtfoto)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
+msgstr "Rzeszów: Orthophotomap (luchtfoto)"
 
-msgid "Rzeszów: Budynki (buildings)"
-msgstr "Rzeszów: Budynki (gebouwen)"
+msgid "Rzeszów: Buildings"
+msgstr "Rzeszów: Gebouwen"
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
-msgstr "Siemianowice Śląskie: Ortofotomapa (luchtfoto)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
+msgstr "Siemianowice Śląskie: Orthophotomap (luchtfoto)"
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
-msgstr "Siemianowice Śląskie: Budynki (gebouwen)"
+msgid "Siemianowice Śląskie: Buildings"
+msgstr "Siemianowice Śląskie: Gebouwen"
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2008 (luchtfoto)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
+msgstr "Świętochłowice: Orthophotomap 2008 (luchtfoto)"
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2009 (luchtfoto)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
+msgstr "Świętochłowice: Orthophotomap 2009 (luchtfoto)"
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2012 (luchtfoto)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
+msgstr "Świętochłowice: Orthophotomap 2012 (luchtfoto)"
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
-msgstr "Zabrze: Ortofotomapa 2011 (luchtfoto)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
+msgstr "Zabrze: Orthophotomap 2011 (luchtfoto)"
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
-msgstr "Wrocław: Ortofotomapa 2015 (luchtfoto)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
+msgstr "Wrocław: Orthophotomap 2015 (luchtfoto)"
+
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
+msgstr ""
 
 msgid "ScanEx IRS"
 msgstr "ScanEx IRS"
@@ -27083,6 +27346,18 @@ msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 "Aanvullend aan onvolledige bedekking in andere bronnen (ware kleuren)"
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr "Sneeuwmobielkaart Zweden"
+
+msgid "Snowmobile trails"
+msgstr "Sneeuwmobiel sporen"
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr "Kanton Aargau 25cm (AGIS 2011)"
 
@@ -28437,7 +28712,7 @@ msgid "{0} on a node. Should be used on a way."
 msgstr "{0} op een knoop. Zou moeten worden gebruikt op een weg."
 
 msgid "{0} on a node. Should be used on a way or relation."
-msgstr ""
+msgstr "{0} op een knoop. Zou moeten worden gebruikt op een weg of relatie."
 
 msgid "{0} on a node. Should be drawn as an area."
 msgstr "{0} op een knoop. Zou moeten worden getekend als een gebied."
@@ -28589,10 +28864,10 @@ msgid "numerical key"
 msgstr "numerieke toets"
 
 msgid "{0} value with + sign"
-msgstr ""
+msgstr "{0} waarde met teken +"
 
 msgid "{0} should be an integer value between -5 and 5"
-msgstr ""
+msgstr "{0} zou een waarde van een geheel getal moeten zijn tussen -5 en 5"
 
 msgid "{0} should have numbers only with optional .5 increments"
 msgstr ""
@@ -28645,7 +28920,7 @@ msgid "unusual value of {0}"
 msgstr "ongebruikelijke waarde van {0}"
 
 msgid "{0} must be a numeric value, in meters and without units"
-msgstr ""
+msgstr "{0} moet een numerieke waarde zijn, in meters en zonder eenheden"
 
 msgid "relation without type"
 msgstr "relatie zonder type"
@@ -28654,7 +28929,7 @@ msgid "{0} relation without {0} tag"
 msgstr "{0} relatie zonder {0} tag"
 
 msgid "way with {0} is part of a bicycle route relation"
-msgstr ""
+msgstr "weg met {0} is deel van een fietsrouterelatie"
 
 msgid "religion without denomination"
 msgstr "religie zonder nadere omschrijving"
@@ -28690,7 +28965,7 @@ msgid "Nodes duplicating parent way tags"
 msgstr "Knopen die tags voor \"ouder\"-weg dupliceren"
 
 msgid "{0} together with {1} and {2}. Remove {0}."
-msgstr ""
+msgstr "{0} samen met {1} en {2}. Verwijder {0}."
 
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
@@ -28703,19 +28978,22 @@ msgid "wikipedia tag has an unknown language prefix"
 msgstr ""
 
 msgid "wikipedia tag format is deprecated"
-msgstr ""
+msgstr "indeling wikipedia tag is vervallen"
 
 msgid "''wikipedia''=''language:page title''"
 msgstr "''wikipedia''=''language:page title''"
 
 msgid "wikipedia ''{0}'' language is obsolete, use ''{1}'' instead"
 msgstr ""
+"wikipedia ''{0}'' taal is vervallen, gebruik in plaats daarvan ''{1}''"
 
 msgid "wikipedia ''{0}'' language is invalid, use ''{1}'' instead"
 msgstr ""
+"wikipedia ''{0}'' taal is ongeldig, gebruik in plaats daarvan ''{1}''"
 
 msgid "{0} tag should not have URL-encoded values like ''%27''"
 msgstr ""
+"{0} tag zou geen URL-gecodeerde waarden, zoals ''%27'', moeten hebben"
 
 msgid "wikipedia title should not start with a space after language code"
 msgstr ""
@@ -29665,19 +29943,19 @@ msgid "Importing..."
 msgstr "Aan het importeren..."
 
 msgid "Shape is started incorrectly"
-msgstr ""
+msgstr "Vorm is onjuist begonnen"
 
 msgid "Can''t load SVG diagram"
-msgstr ""
+msgstr "Kan SVG-diagram niet laden"
 
 msgid "Can''t find root SVG element"
-msgstr ""
+msgstr "Kan bron SVG-element niet vinden"
 
 msgid "Import primitives"
-msgstr ""
+msgstr "Primitieven importeren"
 
 msgid "Cannot find configuration file!"
-msgstr ""
+msgstr "Kan configuratiebestand niet vinden!"
 
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr "DXF-bestanden [plug-in ImportDxf] (*.dxf)"
@@ -30081,15 +30359,12 @@ msgstr ""
 "Geeft de laag weer die de kaartobjecten weergeeft die zijn gedetecteerd door "
 "Mapillary"
 
-msgid "Start Mapillary layer"
-msgstr "Laag voor Mapillary beginnen"
+msgid "Open Mapillary layer"
+msgstr ""
 
 msgid "Mapillary"
 msgstr "Mapillary"
 
-msgid "Create Mapillary layer"
-msgstr "Laag voor Mapillary maken"
-
 msgid "Download Mapillary images in current view"
 msgstr "Afbeeldingen van Mapillary in huidige weergave downloaden"
 
@@ -30153,15 +30428,9 @@ msgstr ""
 "nog een keer. Dit zou een probleempje met de internetverbinding geweest "
 "kunnen zijn."
 
-msgid "Upload pictures"
-msgstr "Afbeeldingen uploaden"
-
-msgid "Upload Mapillary pictures"
+msgid "Upload Mapillary images"
 msgstr "Afbeeldingen van Mapillary uploaden"
 
-msgid "Upload pictures."
-msgstr "Afbeeldingen uploaden."
-
 msgid "Walk mode"
 msgstr "Modus Wandeling"
 
@@ -30195,15 +30464,12 @@ msgstr "Geselecteerde afbeeldingen exporteren"
 msgid "Rewrite imported images"
 msgstr "Geïmporteerde afbeeldingen opnieuw schrijven"
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr "Selecteer een map"
 
 msgid "Explore"
 msgstr "Verkennen"
 
-msgid "Select a directory"
-msgstr "Selecteer een map"
-
 msgid "Speed limit"
 msgstr "Maximum snelheid"
 
@@ -30337,6 +30603,11 @@ msgstr "Voorbeeld van afbeeldingen bij bevinden boven pictogram"
 msgid "Cut off sequences at download bounds"
 msgstr "Snijd reeksen af op de randen van de download"
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr "Experimentele bèta-mogelijkheden inschakelen (kunnen onstabiel zijn)"
 
@@ -35235,6 +35506,10 @@ msgstr "Opnieuw proberen"
 msgid "Unable to process file ''{0}'':"
 msgstr "Niet mogelijk bestand ''{0}'' te verwerken:"
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr "Bestand kon niet worden verwijderd!"
 
@@ -36802,9 +37077,6 @@ msgstr "Exporteer verkeersgegevens naar SUMO netwerkbestand."
 msgid "SUMO Export"
 msgstr "SUMO exporteren"
 
-msgid "Export"
-msgstr "Exporteren"
-
 msgid "AutoSave LiveData"
 msgstr "LiveData automatisch opslaan"
 
@@ -39058,7 +39330,7 @@ msgstr[0] "Overschrijf ''{0}'' tag {1} van {2} met nieuwe waarde ''{3}''?"
 msgstr[1] "Overschrijf ''{0}'' tags {1} van {2} met nieuwe waarde ''{3}''?"
 
 msgid "Download from Sophox API"
-msgstr ""
+msgstr "Downloaden van Sophox API"
 
 msgid ""
 "Find places of education at least 2km, and at most 3km from the center of "
@@ -39068,7 +39340,7 @@ msgstr ""
 "3 km van het centrum van de selectie"
 
 msgid "Show/hide Sophox snippet list"
-msgstr ""
+msgstr "Sophox snipperlijst tonen/verbergen"
 
 msgid "help"
 msgstr "help"
diff --git a/i18n/po/nn.po b/i18n/po/nn.po
index ab6e7a8..a612ac6 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 04:57+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:55+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: nn\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -953,6 +953,12 @@ msgstr ""
 msgid "Select if the data should be downloaded into a new layer"
 msgstr ""
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr ""
 
@@ -2225,6 +2231,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3028,18 +3059,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr ""
@@ -3056,9 +3075,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8231,12 +8262,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9730,6 +9755,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9834,8 +9865,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9845,6 +9876,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9858,14 +9892,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr ""
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9908,6 +9965,16 @@ msgstr ""
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10236,40 +10303,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13356,8 +13423,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14020,6 +14087,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19448,6 +19521,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23423,6 +23502,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23743,7 +23828,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24166,6 +24252,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24252,9 +24344,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24282,10 +24371,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24684,18 +24773,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24719,7 +24796,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24781,10 +25008,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24793,118 +25020,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25041,6 +25277,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27569,15 +27817,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27636,13 +27881,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27678,15 +27917,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27819,6 +28055,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32245,6 +32486,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33725,9 +33970,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/oc.po b/i18n/po/oc.po
index 0db034a..e4980dc 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 04:58+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:56+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -959,6 +959,12 @@ msgstr "Calc separat"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "Telecargar las donadas dins un calc novèl"
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr ""
 
@@ -2231,6 +2237,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3034,18 +3065,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr "S"
@@ -3062,9 +3081,21 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8238,12 +8269,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9737,6 +9762,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9841,8 +9872,8 @@ msgstr "Nom : {0}"
 msgid "Description: {0}"
 msgstr "Descripcion : {0}"
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9852,6 +9883,9 @@ msgstr "Durada"
 msgid "Length"
 msgstr "Longor"
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9865,14 +9899,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr "Salvar lo fichièr GPX"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9915,6 +9972,16 @@ msgstr "Salvar lo calc"
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10243,40 +10310,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
-msgstr "Precedent"
+msgid "Next"
+msgstr "Seguent"
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
-msgstr ""
+msgid "Previous"
+msgstr "Precedent"
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
-msgstr "Seguent"
+msgid "Show last Image"
+msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13365,8 +13432,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14029,6 +14096,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19457,6 +19530,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23432,6 +23511,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23752,7 +23837,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24175,6 +24261,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24261,9 +24353,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24291,10 +24380,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24693,18 +24782,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24728,7 +24805,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24790,10 +25017,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24802,118 +25029,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
+msgstr ""
+
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Buildings"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25050,6 +25286,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27578,15 +27826,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27645,13 +27890,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27687,15 +27926,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27828,6 +28064,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32254,6 +32495,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33734,9 +33979,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/pa.po b/i18n/po/pa.po
index 5c4169e..8279824 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\n"
 "PO-Revision-Date: 2011-05-06 15:52+0000\n"
 "Last-Translator: A S Alam <alam.yellow at gmail.com>\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-11-26 04:58+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:57+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: pa\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -953,6 +953,12 @@ msgstr ""
 msgid "Select if the data should be downloaded into a new layer"
 msgstr ""
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr ""
 
@@ -2225,6 +2231,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3028,18 +3059,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr ""
@@ -3056,9 +3075,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8231,12 +8262,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9730,6 +9755,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9834,8 +9865,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9845,6 +9876,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9858,14 +9892,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr ""
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9908,6 +9965,16 @@ msgstr ""
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10236,40 +10303,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13356,8 +13423,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14020,6 +14087,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19448,6 +19521,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23423,6 +23502,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23743,7 +23828,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24166,6 +24252,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24252,9 +24344,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24282,10 +24371,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24684,18 +24773,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24719,7 +24796,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24781,10 +25008,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24793,118 +25020,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25041,6 +25277,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27569,15 +27817,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27636,13 +27881,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27678,15 +27917,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27819,6 +28055,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32245,6 +32486,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33725,9 +33970,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/pl.po b/i18n/po/pl.po
index bdf8171..aa0b7e1 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-11-26 00:06+0100\n"
-"PO-Revision-Date: 2017-11-19 21:09+0000\n"
-"Last-Translator: Daniel Koć <daniel at xn--ko-wla.pl>\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\n"
+"PO-Revision-Date: 2017-12-15 00:36+0000\n"
+"Last-Translator: eBin <Unknown>\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-11-26 04:59+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:57+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: pl\n"
 
 msgid "Cutting"
@@ -1059,6 +1059,12 @@ msgstr "Osobna warstwa"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "Wczytuje dane do nowej warstwy"
 
+msgid "Zoom to downloaded data"
+msgstr "Przybliżenie do pobranych danych"
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr "Przybliża widok do wszystkich nowo pobranych danych"
+
 msgid "Download Location"
 msgstr "Pobieranie położenia"
 
@@ -1673,7 +1679,7 @@ msgstr "Pobierz wybrane"
 msgid ""
 "Updates the currently selected objects from the server (re-downloads data)"
 msgstr ""
-"Aktualizuje obecnie zaznaczone obiekty  z serwerem (pobiera ponownie dane)"
+"Aktualizuje obecnie zaznaczone obiekty z serwerem (pobiera ponownie dane)"
 
 msgid "There are no selected objects to update."
 msgstr "Nie wybrano obiektów do uaktualnienia"
@@ -2473,6 +2479,31 @@ msgstr[2] ""
 msgid "Confirmation"
 msgstr "Potwierdzenie"
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr "Lista ostatnich relacji"
 
@@ -2933,7 +2964,7 @@ msgid "Change nodes of {0}"
 msgstr "Zmień węzły {0}"
 
 msgid "Remove \"{0}\" for node ''{1}''"
-msgstr "Usunięto  „{0}” w węźle „{1}”"
+msgstr "Usunięto \"{0}\" w węźle ''{1}''"
 
 msgid "Remove \"{0}\" for way ''{1}''"
 msgstr "Usunięto „{0}” w linii „{1}”"
@@ -3364,18 +3395,6 @@ msgstr "Brak pliku wersji „/REVISION”."
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr "Konflikt dla elementu „{0}” jest już zarejestrowany."
 
-msgid "Decimal Degrees"
-msgstr "Stopnie dziesiętne"
-
-msgid "deg° min'' sec\""
-msgstr "st° min'' s\""
-
-msgid "deg° min'' (Nautical)"
-msgstr "st° min'' (Morskie)"
-
-msgid "Projected Coordinates"
-msgstr "Odwzorowane współrzędne"
-
 msgctxt "compass"
 msgid "S"
 msgstr "S"
@@ -3392,9 +3411,21 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
+msgid "deg° min'' sec\""
+msgstr "st° min'' s\""
+
+msgid "Decimal Degrees"
+msgstr "Stopnie dziesiętne"
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr "Nie można dopasować wartości współrzędnych: \"{0}\""
 
+msgid "deg° min'' (Nautical)"
+msgstr "st° min'' (Morskie)"
+
+msgid "Projected Coordinates"
+msgstr "Odwzorowane współrzędne"
+
 msgid "Date of imagery: {0}"
 msgstr "Data wykonania zdjęć: {0}"
 
@@ -3610,7 +3641,7 @@ msgid "Changeset {0}"
 msgstr "Zestaw zmian {0}"
 
 msgid "<html>Error in filter <code>{0}</code>:<br>{1}"
-msgstr "<html>Błąd filtra  <code>{0}</code>:<br>{1}"
+msgstr "<html>Błąd filtra <code>{0}</code>:<br>{1}"
 
 msgid "Error in filter"
 msgstr "Błąd w filtrze"
@@ -3739,7 +3770,7 @@ msgid "Cannot parse timestamp ''{0}''"
 msgstr "Nie można przetworzyć datownika „{0}”"
 
 msgid "Expecting {0} after {1}"
-msgstr "Spodziewane {0} po  {1}"
+msgstr "Oczekiwanie {0} po {1}"
 
 msgid "Range of primitive ids expected"
 msgstr "Oczekiwany zakres identyfikatorów elementów"
@@ -6116,7 +6147,7 @@ msgid ""
 "Copy my selected elements before the first selected element in the list of "
 "merged elements."
 msgstr ""
-"Skopuj moje  zaznaczone elementy przed pierwszy zaznaczony element na liście "
+"Skopuj moje zaznaczone elementy przed pierwszy zaznaczony element na liście "
 "połączonej wersji"
 
 msgid "> after"
@@ -8168,7 +8199,7 @@ msgid "Copy of {0}"
 msgstr "Kopia warstwy {0}"
 
 msgid "Copy {1} of {0}"
-msgstr "Kopia {1} warstwy  {0}"
+msgstr "Kopia {1} warstwy {0}"
 
 msgid "Change visibility of the selected layer."
 msgstr "Zmienia widoczność wybranej warstwy"
@@ -9000,12 +9031,6 @@ msgstr ""
 "uruchomieniu programu.<br>Można otworzyć okno pobierania ręcznie wybierając "
 "polecenie z menu Plik lub ikonę paska narzędziowego.</html>"
 
-msgid "Zoom to downloaded data"
-msgstr "Przybliżenie do pobranych danych"
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr "Przybliża widok do wszystkich nowo pobranych danych"
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9211,7 +9236,7 @@ msgid ""
 "\"&\", \"&&\"."
 msgstr ""
 "Podstawowe operatory logiczne są dostępne do tworzenia bardziej "
-"skomplikowanych zapytań. Zamiast  \"or\" można użyć \"|\", \"||\"  a także "
+"skomplikowanych zapytań. Zamiast \"or\" można użyć \"|\", \"||\"  a także "
 "zamiast \"and\" - \"&\", \"&&\"."
 
 msgid "Class Type"
@@ -9638,6 +9663,8 @@ msgid ""
 "A background upload is already in progress. Kindly wait for it to finish "
 "before uploading new changes"
 msgstr ""
+"Trwa wysyłanie danych w tle. Proszę czekać na zakończenie przed wysłaniem "
+"nowych zmian."
 
 msgid "I would like someone to review my edits."
 msgstr "Chcę żeby ktoś przejrzał moje zmiany"
@@ -10730,6 +10757,12 @@ msgstr "Metadane "
 msgid "Load tile"
 msgstr "Wczytaj kafelek"
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr "Nie udało się utworzyć źródła kafelków"
 
@@ -10839,11 +10872,10 @@ msgstr "Nazwa: {0}"
 msgid "Description: {0}"
 msgstr "Opis: {0}"
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
-msgstr[0] "{0} ślad"
-msgstr[1] "{0} ślady"
-msgstr[2] "{0} śladów"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Timespan"
 msgstr "Zakres czasu"
@@ -10851,6 +10883,9 @@ msgstr "Zakres czasu"
 msgid "Length"
 msgstr "Długość"
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr "Długość: {0}"
 
@@ -10866,15 +10901,38 @@ msgstr[0] "{0} punkt"
 msgstr[1] "{0} punkty"
 msgstr[2] "{0} punktów"
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
-msgstr[0] "{0} ślad, "
-msgstr[1] "{0} ślady, "
-msgstr[2] "{0} śladów, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] "{0} ślad"
+msgstr[1] "{0} ślady"
+msgstr[2] "{0} śladów"
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr "Zapisywanie pliku GPX"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr "Id"
 
@@ -10915,6 +10973,16 @@ msgid "Save Layer"
 msgstr "Zapisz warstwę"
 
 msgid "Trying to set a read only data layer as edit layer"
+msgstr "Próbuje ustawić wartwę tylko do odczytu jako edytowalną"
+
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
 msgstr ""
 
 msgid "{0} note"
@@ -11271,29 +11339,20 @@ msgstr "Błąd w pliku {0}"
 msgid "Display geotagged images"
 msgstr "Wyświetl geolokalizowane obrazy"
 
-msgid "Previous"
-msgstr "Poprzedni"
+msgid "Next"
+msgstr "Następny"
 
-msgid "Show previous Image"
-msgstr "Wyświetl poprzedni obraz"
+msgid "Show next Image"
+msgstr "Wyświetl następny obraz"
 
 msgid "Geoimage: {0}"
 msgstr "Geoimage: {0}"
 
-msgid "Remove photo from layer"
-msgstr "Usuń zdjęcie z warstwy"
-
-msgid "Delete File from disk"
-msgstr "Usuń plik z dysku"
-
-msgid "Copy image path"
-msgstr "Skopiuj ścieżkę obrazka"
-
-msgid "Next"
-msgstr "Następny"
+msgid "Previous"
+msgstr "Poprzedni"
 
-msgid "Show next Image"
-msgstr "Wyświetl następny obraz"
+msgid "Show previous Image"
+msgstr "Wyświetl poprzedni obraz"
 
 msgid "Show first Image"
 msgstr "Wyświetl pierwszy obraz"
@@ -11307,6 +11366,15 @@ msgstr "Wyśrodkuj widok"
 msgid "Zoom best fit and 1:1"
 msgstr "Przybliż najlepiej pasujące i 1:1"
 
+msgid "Remove photo from layer"
+msgstr "Usuń zdjęcie z warstwy"
+
+msgid "Delete File from disk"
+msgstr "Usuń plik z dysku"
+
+msgid "Copy image path"
+msgstr "Skopiuj ścieżkę obrazka"
+
 msgid "Move dialog to the side pane"
 msgstr "Przenieś okno dialogowe do panelu bocznego"
 
@@ -11612,7 +11680,7 @@ msgid "Unable to synchronize in layer being played."
 msgstr "Nie można zsynchronizować aktualnie odtwarzanej warstwy."
 
 msgid "Make Audio Marker at Play Head"
-msgstr ""
+msgstr "Utwórz znacznik audio w miejscu głowicy"
 
 msgid ""
 "You need to have paused audio at the point on the track where you want the "
@@ -11625,11 +11693,15 @@ msgid ""
 "You need to drag the play head near to the GPX track whose associated sound "
 "track you were playing (after the first marker)."
 msgstr ""
+"Musisz przesunąć głowicę odtwarzania w pobliże śladu GPX z którym powiązany "
+"jest obecnie odtwarzane nagranie (po pierwszym znaczniku)."
 
 msgid ""
 "You need to SHIFT-drag the play head onto an audio marker or onto the track "
 "point where you want to synchronize."
 msgstr ""
+"Musisz przesunąć z SHIFT-em głowicę odtwarzania na znacznik audio lub na "
+"punkt ścieżki gdzie chcesz zsynchronizować."
 
 msgid "Unable to create new audio marker."
 msgstr "Nie można utworzyć nowego znacznika dźwiękowego."
@@ -11660,7 +11732,7 @@ msgid ""
 "Expected key and value, separated by '':'' character for option {0}, but got "
 "''{1}''"
 msgstr ""
-"Oczekiwano klucza i wartości, oddzielonych znakiem '':''  dla opcji {0}, "
+"Oczekiwano klucza i wartości, oddzielonych znakiem '':'' dla opcji {0}, "
 "otrzymano ''{1}''"
 
 msgid "Expected floating point number for option {0}, but got ''{1}''"
@@ -12129,7 +12201,7 @@ msgstr ""
 "użytkownika OAuth."
 
 msgid "Failed to authorize OAuth request  ''{0}''"
-msgstr "Nie udało się uwierzytelnić żądania OAuth „{0}''"
+msgstr "Nie udało się uwierzytelnić żądania OAuth ''{0}''"
 
 msgid "Authorizing OAuth Request token ''{0}'' at the OSM website ..."
 msgstr "Uwierzytelniam Żeton Żądania OAuth „{0}” na witrynie OSM..."
@@ -12297,6 +12369,9 @@ msgid ""
 "not<br>be able to access any protected resource on this server using this "
 "token.</html>"
 msgstr ""
+"<html>Nie można uzyskać dostępu do serwera OSM ''{0}''<br>używając klucza "
+"dostępu ''{1}''.<br>Serwer odrzuca go jako nieautoryzowany. Nie możesz<br>za "
+"jego pomocą dostać się do żadnego chronionego zasobu na tym serwerze.</html>"
 
 msgid "Test failed"
 msgstr "Test nie udał się"
@@ -12308,6 +12383,11 @@ msgid ""
 "nevertheless use it<br>to upload data, upload GPS traces, and/or access "
 "other protected resources.</html>"
 msgstr ""
+"<html>Klucz dostępu ''{1}'' został rozpoznany przez serwer OSM "
+"''{0}''.<br>Jednak test pobrania danych użytkownika wyszedł "
+"negatywnie.<br>Zależnie od posiadanych uprawnień nadal możesz go użyć do "
+"wysyłania danych, śladów GPS i/lub dostępu do innych chronionych zasobów "
+"serwera.</html>"
 
 msgid "Token allows restricted access"
 msgstr "Token umożliwia ograniczony dostęp"
@@ -12318,17 +12398,26 @@ msgid ""
 "Access Token, but<br>rather a problem with the server configuration. "
 "Carefully check the server<br>URL and your Internet connection.</html>"
 msgstr ""
+"<html>Nie udało się uzyskać informacji na temat aktualnego użytkownika z "
+"serwera OSM ''{0}''.<br>Prawdopodobnie nie jest to problem spowodowany przez "
+"przetestowany<br>klucz dostępu, lecz bardziej problem z konfiguracją "
+"serwera.<br>Sprawdź adres URL serwera i swoje połączenie internetowe.</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>Nie można zatwierdzić żądania do serwera OSM ''{0}'' z kluczem "
+"''{1}''.<br>Klucz ten jest prawdopodobnie nieprawidłowy.</html>"
 
 msgid ""
 "<html>The test failed because the server responded with an internal "
 "error.<br>JOSM could not decide whether the token is valid. Please try again "
 "later.</html>"
 msgstr ""
+"<html>Test zakończony niepowodzeniem ponieważ serwer odpowiedział "
+"wewnętrznym błędem.<br>JOSM nie może zadecydować czy ten klucz jest "
+"prawidłowy.<br>Proszę spróbować ponownie później.</html>"
 
 msgid "Retrieving user info..."
 msgstr "Pobieranie informacji użytkownika..."
@@ -12661,6 +12750,8 @@ msgid ""
 "Put text labels against audio (and image and web) markers as well as their "
 "button icons."
 msgstr ""
+"Wyświetla etykiety naprzeciwko znaczników dźwiękowych (oraz obrazu i sieci) "
+"jak również ich ikony."
 
 msgid "When importing audio, make markers from..."
 msgstr "Źródła znaczników podczas importowania dźwięku..."
@@ -12674,16 +12765,22 @@ msgid ""
 "Automatically create audio markers from trackpoints (rather than explicit "
 "waypoints) with names or descriptions."
 msgstr ""
+"Automatycznie tworzy znaczniki audio z punktów śladów (zamiast jasnych "
+"punktów śladu) z nazwami i opisami."
 
 msgid ""
 "Create audio markers at the position on the track corresponding to the "
 "modified time of each audio WAV file imported."
 msgstr ""
+"Tworzy znaczniki audio na pozycji śladu odpowiadającej czasom modyfikacji "
+"każdego zaimportowanego pliku WAV."
 
 msgid ""
 "The number of seconds to jump forward or back when the relevant button is "
 "pressed"
 msgstr ""
+"Liczba sekund do przeskakiwania w przód lub tył po naciśnięciu odpowiedniego "
+"przycisku"
 
 msgid "Forward/back time (seconds)"
 msgstr "Przewinięcie w przód/tył (sekundy)"
@@ -12705,7 +12802,7 @@ msgid "Lead-in time (seconds)"
 msgstr "Czas rozbiegu (w sekundach)"
 
 msgid "The ratio of voice recorder elapsed time to true elapsed time"
-msgstr ""
+msgstr "Współczynnik czasu upływającego w nagrywarce do prawdziwego czasu"
 
 msgid "Voice recorder calibration"
 msgstr "Kalibracja urządzenia nagrywającego"
@@ -12835,6 +12932,8 @@ msgstr ""
 msgid ""
 "Display buttons to automatically filter numeric values of a predefined tag"
 msgstr ""
+"Wyświetla przyciski do automatycznego filtrowania wartości numerycznych "
+"wcześniej zdefiniowanego znacznika"
 
 msgid "Options that affect drawing performance"
 msgstr "Wydajność rysowania"
@@ -13042,6 +13141,8 @@ msgid ""
 "Apply dynamic alpha-blending and adjust width based on zoom level for all "
 "GPX lines."
 msgstr ""
+"Stosuje dynamiczny alpha-blending i reguluje szerokość bazując na poziomie "
+"przybliżenia dla wszystkich linii GPX."
 
 msgid ""
 "All points and track segments will have the same color. Can be customized in "
@@ -13088,7 +13189,7 @@ msgid "Lower limit of visibility"
 msgstr "Ograniczenie widoczności"
 
 msgid "Adjust the gain of overlay blending."
-msgstr ""
+msgstr "Reguluj stopień pokrycia nakładki."
 
 msgid "Draw all GPX traces that exceed this threshold."
 msgstr "Ustala wartość graniczą wyświetlania wszystkich śladów GPX"
@@ -13122,7 +13223,7 @@ msgid "Show object ID in selection lists"
 msgstr "Identyfikatory obiektu na listach wyboru"
 
 msgid "Show node coordinates in selection lists"
-msgstr ""
+msgstr "Pokazuj współrzędne węzłów na listach"
 
 msgid "Show localized name in selection lists"
 msgstr "Zlokalizowane nazwy na listach"
@@ -13181,7 +13282,7 @@ msgid ""
 "Divide intervals between native resolution levels to smaller steps if they "
 "are much larger than zoom ratio"
 msgstr ""
-"Tworzy przedziały pomiędzy natywnymi poziomami rozdzielczościami  do coraz "
+"Tworzy przedziały pomiędzy natywnymi poziomami rozdzielczościami do coraz "
 "mniejszych stopni jeśli współczynnik powiększenia jest za duży"
 
 msgid "Zoom steps to get double scale"
@@ -13223,7 +13324,7 @@ msgid "{0} is replaced by Y-coordinate of the tile"
 msgstr "{0} jest zamieniany na koordynat Y dla kafelka"
 
 msgid "{0} is replaced by {1} (Yahoo style Y coordinate)"
-msgstr "{0} jest zamieniany na  {1} (Styl Yahoo podawania koordynatu Y)"
+msgstr "{0} jest zamieniany na {1} (Styl Yahoo podawania koordynatu Y)"
 
 msgid ""
 "{0} is replaced by {1} (OSGeo Tile Map Service Specification style Y "
@@ -13401,7 +13502,7 @@ msgid "Max. zoom level: "
 msgstr "Maksymalny stopień przybliżenia: "
 
 msgid "Add to slippymap chooser: "
-msgstr ""
+msgstr "Dodawaj do listy podkładów w mapkach (slippymap): "
 
 msgid "Maximum concurrent downloads: "
 msgstr "Maksymalna liczba jednoczesnych pobrań: "
@@ -14041,11 +14142,16 @@ msgid ""
 "<html>Failed to build URL ''{0}'' for validating the OSM API "
 "server.<br>Please check the spelling of ''{1}'' and validate again.</html>"
 msgstr ""
+"<html>Nie udało się utworzyć adresu URL ''{0}'' w celu sprawdzenia serwera "
+"OSM API.<br>Proszę sprawdzić pisownię ''{1}'' i spróbować ponownie.</html>"
 
 msgid ""
 "<html>Failed to connect to the URL ''{0}''.<br>Please check the spelling of "
 "''{1}'' and your Internet connection and validate again.</html>"
 msgstr ""
+"<html>Nie udało się połączyć z adresem URL ''{0}''.<br>Proszę sprawdzić "
+"pisownię ''{1}'' oraz swoje połączenie internetowe i spróbować "
+"ponownie.</html>"
 
 msgid "Connection to API failed"
 msgstr "Nie udało się połączyć z API"
@@ -14055,12 +14161,18 @@ msgid ""
 "at<br>''{1}''. The server responded with the return code {0} instead of "
 "200.<br>Please check the spelling of ''{1}'' and validate again.</html>"
 msgstr ""
+"<html>Nie udało się otrzymać listy zestawów zmian z serwera OSM API pod "
+"<br>''{1}''. Serwer zwrócił kod odpowiedzi {0} zamiast "
+"200.<br>Proszę sprawdzić pisownię ''{1}'' i spróbować ponownie.</html>"
 
 msgid ""
 "<html>The OSM API server at ''{0}'' did not return a valid response.<br>It "
 "is likely that ''{0}'' is not an OSM API server.<br>Please check the "
 "spelling of ''{0}'' and validate again.</html>"
 msgstr ""
+"<html>Serwer OSM API pod ''{0}'' nie zwrócił poprawnej "
+"odpowiedzi.<br>Wygląda na to, że ''{0}'' nie jest serwerem OSM "
+"API.<br>Proszę sprawdzić pisownię ''{0}'' i spróbować ponownie.</html>"
 
 msgid "Authentication"
 msgstr "Uwierzytelnianie"
@@ -14119,6 +14231,8 @@ msgid ""
 "Specifies the number of days a note needs to be closed to no longer be "
 "downloaded"
 msgstr ""
+"Określa liczbę dni które upłynęły od zamknięcia uwagi, powyżej której nie "
+"zostanie ona pobrana"
 
 msgid "Save to preferences"
 msgstr "Zapisanie do ustawień"
@@ -14135,7 +14249,7 @@ msgid ""
 msgstr "W posiadaniu jest już klucz dostępu do serwera OSM za pomocą OAuth."
 
 msgid "Click to step through the OAuth authorization process"
-msgstr ""
+msgstr "Kliknij aby przejść przez proces autoryzacji OAuth"
 
 msgid "New Access Token"
 msgstr "Nowy klucz dostępu"
@@ -14439,16 +14553,16 @@ msgid "Preset group {0}"
 msgstr "Grupa szablonów {0}"
 
 msgid "Reference {0} is being used before it was defined"
-msgstr ""
+msgstr "Powiązanie {0} jest używane przed zdefiniowaniem go"
 
 msgid "Roles cannot appear more than once"
-msgstr ""
+msgstr "Role nie mogą występywać więcej niż raz"
 
 msgid "Preset role element without parent"
-msgstr ""
+msgstr "Element typu rola bez rodzica"
 
 msgid "Preset sub element without parent"
-msgstr ""
+msgstr "Element podrzędny bez rodzica"
 
 msgid "Error parsing {0}: "
 msgstr "Błąd przetwarzania {0}: "
@@ -14475,32 +14589,42 @@ msgid ""
 "Warning in tagging preset \"{0}-{1}\": Ignoring ''{2}'' attribute as ''{3}'' "
 "elements are given."
 msgstr ""
+"Ostrzeżenie w szablonie \"{0}-{1}\": Ignorowanie atrybutu ''{2}'' jak "
+"''{3}'' elementy są podane."
 
 msgid ""
 "Broken tagging preset \"{0}-{1}\" - Java method given in ''values_from'' is "
 "not \"{2}\""
 msgstr ""
+"Uszkodzony szablon \"{0}-{1}\": Metoda Java podana w ''values_from'' nie "
+"jest \"{2}\""
 
 msgid ""
 "Broken tagging preset \"{0}-{1}\" - Java method given in ''values_from'' "
 "threw {2} ({3})"
 msgstr ""
+"Uszkodzony szablon \"{0}-{1}\": Metoda Java podana w ''values_from'' wyrzuca "
+"{2} ({3})"
 
 msgid ""
 "Broken tagging preset \"{0}-{1}\" - number of items in ''display_values'' "
 "must be the same as in ''values''"
 msgstr ""
+"Uszkodzony schemat \"{0}-{1}\": liczba elementów w ''display_values'' musi "
+"być taka sama jak w ''values''"
 
 msgid "Detailed information: {0} <> {1}"
-msgstr ""
+msgstr "Szczegółowe informacje: {0} <> {1}"
 
 msgid ""
 "Broken tagging preset \"{0}-{1}\" - number of items in "
 "''short_descriptions'' must be the same as in ''values''"
 msgstr ""
+"Uszkodzony schemat \"{0}-{1}\": liczba elementów w ''short_descriptions'' "
+"musi być taka sama jak w ''values''"
 
 msgid "This corresponds to the key ''{0}''"
-msgstr "Odpowiada kluczowi „{0}”"
+msgstr "Odpowiada kluczowi ''{0}''"
 
 msgid "More information about this feature"
 msgstr "Więcej informacji na temat tego obiektu"
@@ -14539,15 +14663,18 @@ msgid ""
 "Adjustable {0} not registered yet. Cannot set participation in synchronized "
 "adjustment."
 msgstr ""
+"Regulacja {0} nie została jeszcze zarejestrowana. Nie można ustawić "
+"synchronicznego regulowania."
 
 msgid "Adjustable {0} not registered yet."
-msgstr ""
+msgstr "Regulacja {0} nie została jeszcze zarejestrowana."
 
 msgid "Some of the key listeners forgot to remove themselves: {0}"
-msgstr ""
+msgstr "Jakieś nasłuchiwacze klawiszy zapomniały się usunąć: {0}"
 
 msgid "Some of the key modifier listeners forgot to remove themselves: {0}"
 msgstr ""
+"Jakieś modyfikatory nasłuchwiaczy klawiszy zapomniały się usunąć: {0}"
 
 msgid "All files (*.*)"
 msgstr "Wszystkie pliki (*.*)"
@@ -14556,30 +14683,38 @@ msgid "Received error page:"
 msgstr "Strona błędu:"
 
 msgid "{0}... [please type its number]"
-msgstr ""
+msgstr "{0}... [proszę wprowadzić numer]"
 
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
 msgstr ""
+"Ustawienie z klucza ''{0}'' nie zawiera ''{1}''. Nie można przywrócić "
+"geometrii okna z ustawień."
 
 msgid ""
 "Preference with key ''{0}'' does not provide an int value for ''{1}''. Got "
 "{2}. Cannot restore window geometry from preferences."
 msgstr ""
+"Ustawienie z klucza ''{0}'' nie jest liczbą całkowitą dla ''{1}''. Odczytano "
+"{2}. Nie można przywrócić geometrii okna z ustawień."
 
 msgid ""
 "Failed to parse field ''{1}'' in preference with key ''{0}''. Exception was: "
 "{2}. Cannot restore window geometry from preferences."
 msgstr ""
+"Nie można dopasować pola ''{1}'' w ustawieniu z kluczem ''{0}''. Wyjątek "
+"wystąpił: {2}. Nie można przywrócić geometrii okna z ustawień."
 
 msgid ""
 "Preference with key ''{0}'' does not exist. Cannot restore window geometry "
 "from preferences."
 msgstr ""
+"Ustawienie z klucza ''{0}'' nie istnieje. Nie można przywrócić geometrii "
+"okna z ustawień."
 
 msgid "Ignoring malformed geometry: {0}"
-msgstr ""
+msgstr "Ignorowanie zniekształconej geometrii: {0}"
 
 msgid "Min. latitude"
 msgstr "Min. szerokość"
@@ -14664,18 +14799,25 @@ msgstr "Brakuje wymaganego atrybutu „{0}”."
 msgid ""
 "Illegal value for mandatory attribute ''{0}'' of type long. Got ''{1}''."
 msgstr ""
+"Nieprawidłowa wartość obowiązkowego atrybutu ''{0}'' typu long. Odczytano "
+"''{1}''."
 
 msgid ""
 "Illegal value for mandatory attribute ''{0}'' of type long (>=0). Got "
 "''{1}''."
 msgstr ""
+"Nieprawidłowa wartość obowiązkowego atrybutu ''{0}'' typu long (>=0). "
+"Odczytano ''{1}''."
 
 msgid "Illegal value for attribute ''{0}'' of type double. Got ''{1}''."
 msgstr ""
+"Nieprawidłowa wartość atrybutu ''{0}'' typu zmiennoprzecinkowego. Odczytano "
+"''{1}''."
 
 msgid ""
 "Illegal value for mandatory attribute ''{0}'' of type boolean. Got ''{1}''."
 msgstr ""
+"Nieprawidłowa wartość atrybutu ''{0}'' typu logicznego. Odczytano ''{1}''."
 
 msgid ""
 "Illegal value for mandatory attribute ''{0}'' of type OsmPrimitiveType. Got "
@@ -14687,14 +14829,18 @@ msgstr ""
 msgid ""
 "Way with external ID ''{0}'' includes missing node with external ID ''{1}''."
 msgstr ""
+"Linia z zewnętrznym ID ''{0}'' zawiera brakujący węzeł z zewnętrznym ID "
+"''{1}''."
 
 msgid "Deleted node {0} is part of way {1}"
 msgstr "Usunięty węzeł {0} jest częścią linii {1}"
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
+"Linia {0} z {1} węzłami jest niekompletna ponieważ przynajmniej jednego "
+"węzła brakuje w załadowanych danych."
 
 msgid ""
 "Relation with external id ''{0}'' refers to a missing primitive with "
@@ -14722,6 +14868,8 @@ msgid ""
 "Failed to open file with extension ''{2}'' and namepart ''{3}'' in zip file "
 "''{0}''. Exception was: {1}"
 msgstr ""
+"Nie można otworzyć pliku z rozszerzeniem ''{2}'' i nazwą ''{3}'' w pliku zip "
+"''{0}''. Wyjątek: {1}"
 
 msgid "The requested URL {0} was not found"
 msgstr "Nie odnaleziono żądanego adresu URL {0}"
@@ -14731,36 +14879,49 @@ msgstr "Nie udało się zmienić nazwy pliku {0} na {1}."
 
 msgid "Failed to load {0}, use cached file and retry next time: {1}"
 msgstr ""
+"Błąd ładowania {0}, używam pliku z pamięci podręcznej i spróbuję ponownie: "
+"{1}"
 
 msgid ""
 "Illegal value of attribute ''{0}'' of element ''{1}'' in server "
 "capabilities. Got ''{2}''"
 msgstr ""
+"Nieprawidłowa wartość atrybutu ''{0}'' elementu ''{1}'' w możliwościach "
+"serwera. Mamy ''{2}''"
 
 msgid ""
 "Error adding certificate {0} - certificate fingerprint mismatch. Expected "
 "{1}, was {2}"
 msgstr ""
+"Błąd dodawania certyfikatu {0} - odcisk palca certyfikatu jest "
+"nieprawidłowy. Oczekiwano {1}, otrzymano {2}"
 
 msgid "Adding certificate for TLS connections: {0}"
 msgstr "Dodawanie certyfikatu dla połączenia TLS: {0}"
 
 msgid "Failed to parse date ''{0}'' replied by server."
-msgstr ""
+msgstr "Nie można dopasować daty ''{0}'' wysłanej przez serwer."
 
 msgid ""
 "Unexpected format of error header for conflict in changeset update. Got "
 "''{0}''"
 msgstr ""
+"Nieoczekiwany format nagłówka błędu dla konfliktu w aktualizacji zestawu "
+"zmian. Otrzymano ''{0}''"
 
 msgid "Illegal longitude value for parameter ''{0}'', got {1}"
 msgstr ""
+"Nieprawidłowa wartość długości geograficznej dla parametru ''{0}'', mamy {1}"
 
 msgid "Illegal latitude value for parameter ''{0}'', got {1}"
 msgstr ""
+"Nieprawidłowa wartość szerokości geograficznej dla parametru ''{0}'', mamy "
+"{1}"
 
 msgid "Unexpected value for ''{0}'' in changeset query url, got {1}"
 msgstr ""
+"Nieoczekiwana wartość dla ''{0}'' w adresie URL zapytania zestawu zmian, "
+"mamy {1}"
 
 msgid ""
 "Cannot create a changeset query including both the query parameters ''uid'' "
@@ -14856,6 +15017,8 @@ msgid ""
 "Server replied with response code 404, retrying with an individual request "
 "for each object."
 msgstr ""
+"Serwer odpowiedział kodem błędu 404, próbowanie osobnego zapytania dla "
+"każdego obiektu."
 
 msgid "Downloading OSM data..."
 msgstr "Pobieranie danych OSM..."
@@ -14895,6 +15058,8 @@ msgid ""
 "It supports protocol version 0.6, while the server says it supports {0} to "
 "{1}."
 msgstr ""
+"Obsługuje to wersję protokołu 0.6, podczas gdy serwer mówi, że to obsługuje "
+"{0} do {1}."
 
 msgid "Unexpected format of ID replied by the server. Got ''{0}''."
 msgstr "Nieoczekiwany format ID zwrócony przez serwer. Otrzymano „{0}”."
@@ -14964,9 +15129,11 @@ msgstr "Serwer odpowiedział błędem o kodzie {0}."
 
 msgid "Prolog of OsmChange document already written. Please write only once."
 msgstr ""
+"Schemat dokumentu OsmChange jest już napisany. Proszę to robić tylko raz."
 
 msgid "Prolog of OsmChange document not written yet. Please write first."
 msgstr ""
+"Schemat dokumentu OsmChange nie został jeszcze napisany. Proszę to zrobić."
 
 msgid "Unsupported version: {0}"
 msgstr "Nieobsługiwana wersja: {0}"
@@ -14975,6 +15142,8 @@ msgid ""
 "Unsupported start element ''{0}'' in changeset content at position "
 "({1},{2}). Skipping."
 msgstr ""
+"Nieobsługiwany element startowy ''{0}'' w zawartości zestawu zmian, na "
+"pozycji ({1},{2}). Pomijanie."
 
 msgid ""
 "Illegal document structure. Found node, way, or relation outside of "
@@ -14987,6 +15156,8 @@ msgid ""
 "Unsupported end element ''{0}'' in changeset content at position ({1},{2}). "
 "Skipping."
 msgstr ""
+"Nieobsługiwany element końcowy ''{0}'' w zawartości zestawu zmian, na "
+"pozycji ({1},{2}). Pomijanie."
 
 msgid "Parsing changeset content ..."
 msgstr "Przetwarzam zawartość zestawu zmian..."
@@ -15012,6 +15183,7 @@ msgstr "Przetwarzam listę zestawów zmian..."
 
 msgid "Failed to sign a HTTP connection with an OAuth Authentication header"
 msgstr ""
+"Nie udało się podpisać połączenia HTTP za pomocą nagłówka autoryzacji OAuth"
 
 msgid "Unexpected value for preference ''{0}''. Got ''{1}''."
 msgstr "Nieoczekiwana wartość dla ustawienia ''{0}''. Jest ''{1}''."
@@ -15026,20 +15198,24 @@ msgid ""
 "Missing mandatory attributes on element ''bounds''. Got "
 "minlon=''{0}'',minlat=''{1}'',maxlon=''{2}'',maxlat=''{3}'', origin=''{4}''."
 msgstr ""
+"Brakujące wymagane atrybuty elementu ''bounds''. Mamy "
+"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 ""
+"Niewłaściwe wartości dla atrybutów ''lat'', ''lon'' na węźle z ID {0}. Jest "
+"''{1}'', ''{2}''."
 
 msgid "Deleted way {0} contains nodes"
 msgstr "Usunięta linia {0} zawiera węzły"
 
 msgid "Missing mandatory attribute ''{0}'' on <nd> of way {1}."
-msgstr ""
+msgstr "Brakuje wymaganego atrybutu ''{0}'' na <nd> drogi {1}."
 
 msgid "Illegal value of attribute ''ref'' of element <nd>. Got {0}."
-msgstr "Niepoprawna wartość atrubutu ''ref'' elementu <nd>. Jest {0}."
+msgstr "Niewłaściwa wartość atrybutu ''ref'' elementu <nd>. Jest {0}."
 
 msgid "Deleted relation {0} contains members"
 msgstr "Usunięta relacja {0} zawiera członków"
@@ -15050,13 +15226,16 @@ msgstr "Brakujący atrybut „ref” członka relacji {0}."
 msgid ""
 "Illegal value for attribute ''ref'' on member in relation {0}. Got {1}"
 msgstr ""
+"Niewłaściwa wartość dla atrybutu ''ref'' na członku relacji {0}. Mamy {1}"
 
 msgid "Missing attribute ''type'' on member {0} in relation {1}."
-msgstr ""
+msgstr "Brakuje atrybutu ''type'' na członku {0} w relacji {1}."
 
 msgid ""
 "Illegal value for attribute ''type'' on member {0} in relation {1}. Got {2}."
 msgstr ""
+"Niewłaściwa wartość dla atrybutu ''type'' na członku {0} w relacji {1}. Mamy "
+"{2}."
 
 msgid "Incomplete <member> specification with ref=0"
 msgstr "Niekompletny opis <member> z ref=0"
@@ -15066,6 +15245,8 @@ msgstr "Brakujący klucz lub wartość znacznika."
 
 msgid "Undefined element ''{0}'' found in input stream. Skipping."
 msgstr ""
+"Niezdefiniowany element ''{0}'' znaleziony w strumieniu danych wejściowych. "
+"Pomijanie."
 
 msgid "Illegal object with ID=0."
 msgstr "Niedozwolony obiekt z id=0"
@@ -15080,9 +15261,11 @@ msgid ""
 "Normalizing value of attribute ''version'' of element {0} to {2}, API "
 "version is ''{3}''. Got {1}."
 msgstr ""
+"Normalizowanie wartości atrybutu ''version'' elementu {0} na {2}, wersja API "
+"to ''{3}''. Jest {1}."
 
 msgid "Unknown or unsupported API version. Got {0}."
-msgstr "Nieznana lub nie obsługiwana wersja API. Otrzymano: {0}."
+msgstr "Nieznana lub nie obsługiwana wersja API. Jest {0}."
 
 msgid "Missing attribute ''version'' on OSM primitive with ID {0}."
 msgstr "Brakujący atrybut „version” na elemencie z ID {0}."
@@ -15091,15 +15274,17 @@ msgid ""
 "Illegal value for attribute ''changeset'' on new object {1}. Got {0}. "
 "Resetting to 0."
 msgstr ""
+"Niewłaściwa wartość atrybutu ''changeset'' na nowym obiekcie {1}. Jest {0}. "
+"Resetowanie na 0."
 
 msgid "Illegal value for attribute ''changeset''. Got {0}."
-msgstr ""
+msgstr "Niewłaściwa wartość atrybutu ''changeset''. Jest {0}."
 
 msgid "Missing required attribute ''{0}''."
 msgstr "Brakuje wymaganego atrybutu „{0}”."
 
 msgid "Illegal long value for attribute ''{0}''. Got ''{1}''."
-msgstr ""
+msgstr "Niewłaściwa wartość typu long atrybutu ''{0}''. Jest ''{1}''."
 
 msgid "Prepare OSM data..."
 msgstr "Przygotowywanie danych OSM..."
@@ -15213,7 +15398,7 @@ msgid "Unexpected id 0 for osm primitive found"
 msgstr "Znaleziono nieoczekiwane ID 0 na elemencie"
 
 msgid "Failed to evaluate {0}"
-msgstr ""
+msgstr "Nie udało się przetworzyć {0}"
 
 msgid "Unexpected value for key ''{0}'' in preferences, got ''{1}''"
 msgstr "Nieoczekiwana wartość klucza „{0}” w preferencjach, otrzymano „{1}”"
@@ -15304,11 +15489,11 @@ msgstr "Czytanie wersji protokołu"
 
 msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
-"Nie można uruchomić serwera IPv4 zdalnego sterowania na procie  {0}: {1}"
+"Nie można uruchomić serwera zdalnego sterowania IPv4 na porcie {0}: {1}"
 
 msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
-"Nie można uruchomić serwera IPv6 zdalnego sterowania na procie  {0}: {1}"
+"Nie można uruchomić serwera zdalnego sterowania IPv6 na porcie {0}: {1}"
 
 msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr "RemoteControl::Połączenia zdalne akceptowane na {0}:{1}"
@@ -15396,6 +15581,12 @@ msgstr "Zdalna kontrola otrzymała zapytanie otworzenia lokalnego pliku."
 msgid "Do you want to allow this?"
 msgstr "Zezwolić na to?"
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr "Potwierdzanie działań zdalnej kotroli"
 
@@ -15437,7 +15628,7 @@ msgid "Include GPX data in the .joz session file."
 msgstr "Załącz dane GPX w pliku sesji .joz."
 
 msgid "No file association"
-msgstr ""
+msgstr "Brak powiązania pliku"
 
 msgid "GPX data will be included in the session file."
 msgstr "Dane GPX powinny zostać zawarte w pliku sesji."
@@ -15449,11 +15640,15 @@ msgid ""
 "Version ''{0}'' of meta data for geoimage layer is not supported. Expected: "
 "0.1"
 msgstr ""
+"Wersja ''{0}'' meta danych dla warstwy geoimage nie jest obsługiwana. "
+"Oczekiwano: 0.1"
 
 msgid ""
 "Version ''{0}'' of meta data for gpx track layer is not supported. Expected: "
 "0.1"
 msgstr ""
+"Wersja ''{0}'' meta danych dla warstwy śladów gpx nie jest obsługiwana. "
+"Oczekiwano: 0.1"
 
 msgid "File name expected for layer no. {0}"
 msgstr "Nazwa pliku oczekiwana dla warstwy nr {0}"
@@ -15462,16 +15657,20 @@ msgid ""
 "Version ''{0}'' of meta data for imagery layer is not supported. Expected: "
 "0.1"
 msgstr ""
-"Wersja „{0}” meta danych dla warstwy podkładu nie jest obsługiwana. "
+"Wersja ''{0}'' meta danych dla warstwy podkładu nie jest obsługiwana. "
 "Oczekiwano: 0.1"
 
 msgid ""
 "Version ''{0}'' of meta data for marker layer is not supported. Expected: 0.1"
 msgstr ""
+"Wersja ''{0}'' meta danych dla warstwy podkładu nie jest obsługiwana. "
+"Oczekiwano: 0.1"
 
 msgid ""
 "Version ''{0}'' of meta data for note layer is not supported. Expected: 0.1"
 msgstr ""
+"Wersja ''{0}'' meta danych dla warstwy uwag nie jest obsługiwana. "
+"Oczekiwano: 0.1"
 
 msgid ""
 "Version ''{0}'' of meta data for osm data layer is not supported. Expected: "
@@ -15484,7 +15683,7 @@ msgid "Session file (*.jos, *.joz)"
 msgstr "Plik sesji (*.jos, *.joz)"
 
 msgid "Unable to locate file  ''{0}''."
-msgstr "Nie można zlokalizować pliku  „{0}”."
+msgstr "Nie można zlokalizować pliku ''{0}''."
 
 msgid "Unsupported scheme ''{0}'' in URI ''{1}''."
 msgstr "Nieobsługiwany schemat „{0}” w adresie „{1}”."
@@ -15508,10 +15707,10 @@ msgid "missing layer with index {0}"
 msgstr "brakująca warstwa z indeksem {0}"
 
 msgid "missing mandatory attribute ''name'' for element ''layer''"
-msgstr ""
+msgstr "brakuje wymaganego atrybutu ''name'' dla elementu ''layer''"
 
 msgid "missing mandatory attribute ''type'' for element ''layer''"
-msgstr ""
+msgstr "brakuje wymaganego atrybutu ''type'' dla elementu ''layer''"
 
 msgid "Unable to load layer"
 msgstr "Nie można wczytać warstwy"
@@ -15519,10 +15718,14 @@ msgstr "Nie można wczytać warstwy"
 msgid ""
 "Cannot load layer of type ''{0}'' because no suitable importer was found."
 msgstr ""
+"Nie można załadować warstwy typu ''{0}'' ponieważ nie znaleziono pasującego "
+"importera."
 
 msgid ""
 "Cannot load layer {0} because it depends on layer {1} which has been skipped."
 msgstr ""
+"Nie można załadować warstwy ''{0}'' ponieważ zależy od warstwy {1} która "
+"została pominięta."
 
 msgid "Error loading layer"
 msgstr "Błąd wczytywania warstwy"
@@ -15537,13 +15740,15 @@ msgid "expected .jos file inside .joz archive"
 msgstr "oczekiwano pliku .jos wewnątrz archiwum .joz"
 
 msgid "Failed to create missing plugin preferences directory: {0}"
-msgstr ""
+msgstr "Nie można utworzyć brakującego katalogu wtyczki dla ustawień: {0}"
 
 msgid "Failed to create missing plugin user data directory: {0}"
 msgstr ""
+"Nie można utworzyć brakującego katalogu wtyczki dla danych użytkownika: {0}"
 
 msgid "Failed to create missing plugin cache directory: {0}"
 msgstr ""
+"Nie można utworzyć brakującego katalogu wtyczki dla pamięci podręcznej: {0}"
 
 msgid "Skip download"
 msgstr "Pomiń pobieranie"
@@ -15630,12 +15835,14 @@ msgid ""
 "disabled."
 msgstr ""
 "Pomijanie aktualizacji wtyczek po uaktualnieniu JOSM. Automatyczna "
-"aktualizacja przy starcie została wyłączona."
+"aktualizacja przy starcie jest wyłączona."
 
 msgid ""
 "Skipping plugin update after elapsed update interval. Automatic update at "
 "startup is disabled."
-msgstr "Pomijanie aktualizacji wtyczek"
+msgstr ""
+"Pomijanie aktualizacji wtyczek po upłyniętym interwale aktualizacji. "
+"Automatyczna aktualizacja przy starcie jest wyłączona."
 
 msgid ""
 "Running plugin update after JOSM upgrade. Automatic update at startup is "
@@ -15648,10 +15855,14 @@ msgid ""
 "Running plugin update after elapsed update interval. Automatic update at "
 "startup is disabled."
 msgstr ""
+"Uruchamianie aktualizacji wtyczek po upłyniętym interwale aktualizacji. "
+"Automatyczna aktualizacja przy starcie jest wyłączona."
 
 msgid ""
 "Unexpected value ''{0}'' for preference ''{1}''. Assuming value ''ask''."
 msgstr ""
+"Nieoczekiwana wartość ''{0}'' dla ustawienia ''{1}''. Przyjmuje wartość "
+"''ask''."
 
 msgid "Click to update the activated plugins"
 msgstr "Uaktualnia aktywne wtyczki"
@@ -15942,7 +16153,7 @@ msgid ""
 "the server URL in your preferences and your internet connection."
 msgstr ""
 "<html>Nie udało się zainicjować połączenia z serwerem OSM{0}.<br>Sprawdź "
-"adres URL  serwera w ustawieniach i swoje połączenie z internetem."
+"adres URL serwera w ustawieniach i swoje połączenie z internetem."
 
 msgid ""
 "<html>Failed to authenticate at the OSM server ''{0}''.<br>You are using "
@@ -15950,6 +16161,9 @@ msgid ""
 "configured.<br>Please open the Preferences Dialog and generate or enter an "
 "Access Token.</html>"
 msgstr ""
+"<html>Nie można uwierzytelnić do serwera OSM ''{0}''.<br>Używasz OAuth ale "
+"nie został jeszcze skonfigurowany<br>klucz dostępu OAuth. Proszę otworzyć "
+"okno ustawień<br>i go wprowadzić lub wygenerować.</html>"
 
 msgid ""
 "<strong>Failed</strong> to delete <strong>node {0}</strong>. It is still "
@@ -16145,6 +16359,9 @@ msgid ""
 "current<br>dataset violates a precondition.<br>The error message "
 "is:<br>{0}</html>"
 msgstr ""
+"<html>Wysyłanie danych do serwera zakończone <strong>niepowodzeniem</strong> "
+"ponieważ obecny<br>zestaw danych narusza warunek konieczny.<br>Treść "
+"błędu:<br>{0}</html>"
 
 msgid ""
 "<html>Authentication at the OSM server with the username ''{0}'' "
@@ -16159,6 +16376,9 @@ msgid ""
 "failed.<br>Please launch the preferences dialog and retrieve another OAuth "
 "token.</html>"
 msgstr ""
+"<html>Uwierzytelnianie do serwera OSM za pomocą klucza dostępu OAuth "
+"''{0}''<br>zostało zakończone niepowodzeniem.<br>Proszę otworzyć ustawienia "
+"i uzyskać nowy klucz.</html>"
 
 msgid ""
 "<html>Authorisation at the OSM server failed.<br>The server reported the "
@@ -16176,6 +16396,10 @@ msgid ""
 "resource<br>''{1}''.<br>Please launch the preferences dialog and retrieve "
 "another OAuth token.</html>"
 msgstr ""
+"<html>Uwierzytelnianie do serwera OSM z użyciem klucza dostępu OAuth "
+"''{0}''<br>zakończone niepowodzeniem. Klucz nie jest uprawniony do "
+"dostępu<br>do chronionego zasobu ''{1}''.<br>Proszę otworzyć ustawienia i "
+"uzyskać nowy klucz.</html>"
 
 msgid ""
 "<html>Communication with the OSM server ''{0}'' timed out. Please retry "
@@ -16193,16 +16417,23 @@ msgid ""
 "message:<br><strong>Error code:<strong> {1}<br><strong>Error message "
 "(untranslated)</strong>: {2}</html>"
 msgstr ""
+"<html>Komunikacja z serwerem OSM ''{0}'' zakończona niepowodzeniem.<br>. "
+"Serwer zwrócił następujący błąd:<br><strong>Kod błędu:<strong> "
+"{1}<br><strong>Treść błędu (nieprzetłumaczona)</strong>: {2}</html>"
 
 msgid ""
 "<html>Closing of changeset <strong>{0}</strong> failed <br>because it has "
 "already been closed."
 msgstr ""
+"<html>Zamykanie zestawu zmian <strong>{0}</strong> "
+"zakończone<br>niepowodzeniem ponieważ jest on już zamknięty."
 
 msgid ""
 "<html>Closing of changeset <strong>{0}</strong> failed<br> because it has "
 "already been closed on {1}."
 msgstr ""
+"<html>Zamykanie zestawu zmian <strong>{0}</strong> "
+"zakończone<br>niepowodzeniem ponieważ został on już zamknięty na {1}."
 
 msgid ""
 "<html>The server reported that it has detected a conflict.<br>Error message "
@@ -16226,11 +16457,16 @@ 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>Nie można nawiązać połączenia ze zdalnym serwerem<br>''{0}''<br>z "
+"powodu bezpieczeństwa. Przyczyną najczęściej jest uruchamianie<br>w aplecie "
+"i nie ładowanie apletu z ''{1}''."
 
 msgid ""
 "<html>Failed to open a connection to the remote server<br>''{0}''.<br>Please "
 "check your internet connection."
 msgstr ""
+"<html>Nie można nawiązać połączenia ze zdalnym "
+"serwerem<br>''{0}''.<br>Proszę sprawdzić swoje połączenie internetowe."
 
 msgid ""
 "<html>Failed to upload data to or download data from<br>''{0}''<br>due to a "
@@ -16243,9 +16479,11 @@ msgid ""
 "<html>Failed to download data. Its format is either unsupported, ill-formed, "
 "and/or inconsistent.<br><br>Details (untranslated): {0}</html>"
 msgstr ""
+"<html>Nie można pobrać danych. Format raczej nie jest obsługiwany, "
+"uszkodzony i/lub niespójny.<br><br>Szczegóły (nieprzetłumaczone): {0}</html>"
 
 msgid "<html>Failed to download data.<br><br>Details: {0}</html>"
-msgstr ""
+msgstr "<html>Nie można pobrać danych.<br><br>Szczegóły: {0}</html>"
 
 msgid ""
 "<html>The OSM server<br>''{0}''<br>reported an internal server "
@@ -16256,7 +16494,7 @@ msgstr ""
 "spróbować ponownie później."
 
 msgid "The OSM server ''{0}'' reported a bad request.<br>"
-msgstr "Serwer OSM „{0}” zgłosił błędne żądanie.<br>"
+msgstr "Serwer OSM ''{0}'' zgłosił błędne żądanie.<br>"
 
 msgid ""
 "The area you tried to download is too big or your request was too "
@@ -16273,12 +16511,19 @@ msgid ""
 "server or you are using an invalid URL to access<br>it. Please carefully "
 "check the server''s address ''{0}'' for typos."
 msgstr ""
+"Serwer OSM ''{0}'' nie ma pojęcia na temat obiektu<br>który próbujesz "
+"odczytać, zaktualizować lub usunąć.<br>Prawdopodobnie obiekt ten nie "
+"istnieje w bazie<br>lub używasz nieprawidłowego adresu URL. Proszę "
+"dokładnie<br>sprawdzić adres serwera ''{0}'' pod względem literówek."
 
 msgid ""
 "<html>Failed to open a connection to the remote server<br>''{0}''.<br>Host "
 "name ''{1}'' could not be resolved. <br>Please check the API URL in your "
 "preferences and your internet connection."
 msgstr ""
+"<html>Nie można uzyskać połączenia ze zdalnym serwerem<br>''{0}''.<br>Nazwa "
+"hosta ''{1}'' nie może zostać uzyskana. <br>Proszę sprawdzić adres API w "
+"ustawieniach i swoje połączenie z internetem."
 
 msgid ""
 "<html>The server reports that an object is deleted.<br><strong>Uploading "
@@ -16286,6 +16531,10 @@ msgid ""
 "<strong>Downloading failed</strong> if you tried to download this "
 "object.<br><br>The error message is:<br>{0}</html>"
 msgstr ""
+"<html>Serwer zgłasza, że ten obiekt został usunięty.<br><strong>Wysyłanie "
+"zakończone niepowodzeniem</strong> jeśli próbowałeś zaktualizować lub usunąć "
+"ten obiekt.<br><strong>Pobieranie zakończone niepowodzeniem</strong> jeśli "
+"próbowałeś pobrać ten obiekt.<br><br>Treść błędu:<br>{0}</html>"
 
 msgid "latitude"
 msgstr "szerokość geograficzna"
@@ -16303,9 +16552,11 @@ msgid ""
 "Unexpected response from HTTP server. Got {0} response without ''Location'' "
 "header. Can''t redirect. Aborting."
 msgstr ""
+"Nieoczekiwana odpowiedź od serwera HTTP. Otrzymano odpowiedź {0} bez "
+"nagłówka ''Location''. Nie można przekierować. Anulowanie."
 
 msgid "Download redirected to ''{0}''"
-msgstr "Pobieranie przekierowanie do „{0}”"
+msgstr "Pobieranie przekierowanie do ''{0}''"
 
 msgid "Too many redirects to the download URL detected. Aborting."
 msgstr ""
@@ -16339,6 +16590,10 @@ msgid ""
 "http://forum.openstreetmap.org/viewtopic.php?id=25677).\n"
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
+"Aby dodać inną warstwę potrzebujesz przydzielić przynajmniej {0,number,#}MB "
+"pamięci dla JOSM, możesz to zrobić używając opcji -Xmx{0,number,#}M zobacz "
+"http://forum.openstreetmap.org/viewtopic.php?id=25677).\n"
+"Obecnie masz przydzielone {1,number,#}MB pamięci"
 
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
@@ -16368,7 +16623,7 @@ msgid ""
 "going to be prompted by Windows to remove this insecure certificate.<br>For "
 "your own safety, <b>please click Yes</b> in next dialog."
 msgstr ""
-"Może to wywołać <b>ryzyko naruszenia bezpieczeństwa</b>.<br><br>Zostaniesz  "
+"Może to wywołać <b>ryzyko naruszenia bezpieczeństwa</b>.<br><br>Zostaniesz "
 "teraz poproszony przez Windows o usunięcie tego niebezpiecznego "
 "certyfikatu.Dla własnego bezpieczeństwa <b>kliknij Tak</b> w następnym "
 "okienku dialogowym."
@@ -16392,6 +16647,12 @@ msgid ""
 "next dialog.<br><br>If unsure, you can also click No then disable HTTPS "
 "support in Remote Control preferences."
 msgstr ""
+"Zdalna kontrola jest skonfigurowana by dostarczać obsługę HTTPS.<br>Wymaga "
+"to dodania własnego certyfikatu wygenerowanego przez JOSM do Windows Root "
+"CA.<br><br>Zostaniesz teraz poproszony przez Windows o potwierdzienie tej "
+"operacji.<br>Aby aktywować obsługę HTTPS, <b>proszę nacisnąć TAK</b> w "
+"następnym oknie.<br><br>Jeśli jesteś niepewny, możesz także nacisnąć Nie a "
+"następnie wyłączyć HTTPS w ustawieniach zdalnej kontroli."
 
 msgid "HTTPS support in Remote Control"
 msgstr "Obsługa HTTPS w zdalnym sterowaniu"
@@ -16401,6 +16662,7 @@ msgstr "Dodawanie certyfikatu localhost JOSM-a do zasobnika kluczy {0}"
 
 msgid "Silent shortcut conflict: ''{0}'' moved by ''{1}'' to ''{2}''."
 msgstr ""
+"Konflikt skrótów klawiszowych: ''{0}'' zmieniony przez ''{1}'' na ''{2}''."
 
 msgid "Unknown territory id: {0}"
 msgstr "Nieznany identyfikator obszaru: {0}"
@@ -16451,33 +16713,42 @@ msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
+"Błąd w wyszukiwaniu na pozycji {0} - prawa strona wyrażenia or(|) musi "
+"zwracać zestaw prymitywów."
 
 msgid ""
 "Error in search expression on position {0} - left side of or(|) expression "
 "must return set of primitives"
 msgstr ""
+"Błąd w wyszukiwaniu na pozycji {0} - lewa strona wyrażenia or(|) musi "
+"zwracać zestaw prymitywów."
 
 msgid ""
 "Error in search expression on position {0} - not(-) cannot be used in this "
 "context"
 msgstr ""
+"Błąd w wyszukiwaniu na pozycji {0} - zaprzeczenie not(-) nie może być użyte "
+"w ten sposób."
 
 msgid ""
 "Error in search expression on position {0} - expression must return "
 "different then current primitive"
 msgstr ""
+"Błąd w wyszukiwaniu na pozycji {0} - wyrażenie musi zwrócić inny niż obecny "
+"prymityw."
 
 msgid "Unexpected token ({0}) on position {1}"
-msgstr ""
+msgstr "Nieoczekiwany znak ({0}) na pozycji {1}"
 
 msgid "Unexpected token on position {0}. Expected {1}, found {2}"
 msgstr ""
+"Nieoczekiwany znak na pozycji {0}. Spodziewano się {1}, znaleziono {2}"
 
 msgid "Error while parsing search expression on position {0}"
-msgstr ""
+msgstr "Błąd parsowania wyrażenia wyszukiwania na pozycji {0}"
 
 msgid "Unexpected char on {0}. Expected {1} found {2}"
-msgstr ""
+msgstr "Nieoczekiwany znak na {0}. Spodziewano się {1}, znaleziono {2}"
 
 msgid "Expected search expression"
 msgstr "Oczekiwane wyrażenie wyszukiwania."
@@ -16503,7 +16774,7 @@ msgstr ""
 "mniejszy obszar lub użyj planet.osm"
 
 msgid "JOSM-Trac login at josm.openstreetmap.de"
-msgstr ""
+msgstr "JOSM-Trac logowanie na josm.openstreetmap.de"
 
 msgid "could not get audio input stream from input URL"
 msgstr ""
@@ -16613,7 +16884,7 @@ msgstr "most"
 
 msgctxt "Relation type"
 msgid "destination_sign"
-msgstr ""
+msgstr "znak kierunku i miejscowości"
 
 msgctxt "Relation type"
 msgid "enforcement"
@@ -16677,7 +16948,7 @@ msgstr "miasteczko"
 
 msgctxt "Place type"
 msgid "borough"
-msgstr ""
+msgstr "dzielnica"
 
 msgctxt "Place type"
 msgid "municipality"
@@ -16736,7 +17007,7 @@ msgid "File Name:"
 msgstr "Nazwa pliku:"
 
 msgid "FileChooser help."
-msgstr ""
+msgstr "Pomoc wybierania pliku."
 
 msgid "Files"
 msgstr "Pliki"
@@ -16919,14 +17190,14 @@ msgstr "zła"
 
 msgid "Robust Wheels: trekking bike, car, rickshaw"
 msgstr ""
-"Solidne koła:  rowery górskie, normalne samochody, ryksze i wszystko poniżej"
+"Solidne koła: rowery górskie, normalne samochody, ryksze i wszystko poniżej"
 
 msgid "very_bad"
 msgstr "bardzo zła"
 
 msgid "High Clearance: light duty off-road vehicle"
 msgstr ""
-"Wysoki prześwit:  samochody z wysokim prześwitem, lekkie, nie uprawnione do "
+"Wysoki prześwit: samochody z wysokim prześwitem, lekkie, nie uprawnione do "
 "jazdy po drogach i wszystko poniżej"
 
 msgid "horrible"
@@ -16953,11 +17224,11 @@ msgstr "Żadne pojazdy kołowe"
 
 msgctxt "riding"
 msgid "horse_riding"
-msgstr ""
+msgstr "stadnina"
 
 msgctxt "riding"
 msgid "pitch"
-msgstr ""
+msgstr "boisko"
 
 msgctxt "riding"
 msgid "sports_centre"
@@ -17046,7 +17317,7 @@ msgstr "brak"
 
 msgctxt "sidewalk"
 msgid "separate"
-msgstr ""
+msgstr "oddzielny"
 
 msgid "Service type"
 msgstr "Użycie"
@@ -17061,7 +17332,7 @@ msgid "spur"
 msgstr "bocznica kolejowa/odnoga"
 
 msgid "crossover"
-msgstr ""
+msgstr "przejście rozjazdowe"
 
 msgid "Electrified"
 msgstr "Elektryfikacja"
@@ -17246,16 +17517,16 @@ msgid "korean"
 msgstr "koreańska"
 
 msgid "donut"
-msgstr ""
+msgstr "donut"
 
 msgid "mediterranean"
-msgstr ""
+msgstr "śródziemnomorska"
 
 msgid "friture"
-msgstr ""
+msgstr "belgijskie frytki"
 
 msgid "crepe"
-msgstr ""
+msgstr "naleśniki francuskie"
 
 msgid "Internet access"
 msgstr "Dostęp do internetu"
@@ -17390,7 +17661,7 @@ msgstr "hokej na trawie"
 
 msgctxt "sport"
 msgid "gaelic_games"
-msgstr ""
+msgstr "sporty gaelickie"
 
 msgctxt "sport"
 msgid "golf"
@@ -17414,7 +17685,7 @@ msgstr "hokej na lodzie"
 
 msgctxt "sport"
 msgid "karting"
-msgstr ""
+msgstr "karting (gokart)"
 
 msgctxt "sport"
 msgid "model_aerodrome"
@@ -17422,7 +17693,7 @@ msgstr "modelarstwo lotnicze"
 
 msgctxt "sport"
 msgid "motocross"
-msgstr ""
+msgstr "motocross"
 
 msgctxt "sport"
 msgid "motor"
@@ -17442,11 +17713,11 @@ msgstr "modelarstwo samochodowe"
 
 msgctxt "sport"
 msgid "rugby_league"
-msgstr ""
+msgstr "rugby league"
 
 msgctxt "sport"
 msgid "rugby_union"
-msgstr ""
+msgstr "rugby union (pot. rugby)"
 
 msgctxt "sport"
 msgid "running"
@@ -17454,7 +17725,7 @@ msgstr "bieganie"
 
 msgctxt "sport"
 msgid "safety_training"
-msgstr ""
+msgstr "bezpieczny trening (?)"
 
 msgctxt "sport"
 msgid "shooting"
@@ -17494,11 +17765,11 @@ msgstr "siatkówka"
 
 msgctxt "sport"
 msgid "9pin"
-msgstr ""
+msgstr "kręgle (9 pinów)"
 
 msgctxt "sport"
 msgid "10pin"
-msgstr ""
+msgstr "bowling (10 pinów)"
 
 msgid "Fee"
 msgstr "Opłata"
@@ -17507,10 +17778,10 @@ msgid "06:00-20:00"
 msgstr "06:00-20:00"
 
 msgid "Mo-Fr 09:00-18:00,Sa 08:00-14:00"
-msgstr ""
+msgstr "Mo-Fr 09:00-18:00,Sa 08:00-14:00"
 
 msgid "May-Sep 09:30-12:30,14:15-19:30"
-msgstr ""
+msgstr "May-Sep 09:30-12:30,14:15-19:30"
 
 msgctxt "parking"
 msgid "multi-storey"
@@ -18014,34 +18285,34 @@ msgid "Placement"
 msgstr "Położenie"
 
 msgid "left_of:1"
-msgstr ""
+msgstr "left_of:1"
 
 msgid "left_of:2"
-msgstr ""
+msgstr "left_of:2"
 
 msgid "left_of:3"
-msgstr ""
+msgstr "left_of:3"
 
 msgid "middle_of:1"
-msgstr ""
+msgstr "middle_of:1"
 
 msgid "middle_of:2"
-msgstr ""
+msgstr "middle_of:2"
 
 msgid "middle_of:3"
-msgstr ""
+msgstr "middle_of:3"
 
 msgid "right_of:1"
-msgstr ""
+msgstr "right_of:1"
 
 msgid "right_of:2"
-msgstr ""
+msgstr "right_of:2"
 
 msgid "right_of:3"
-msgstr ""
+msgstr "right_of:3"
 
 msgid "transition"
-msgstr ""
+msgstr "Kablowe"
 
 msgid "Motorway Link"
 msgstr "Autostrada - dojazd"
@@ -18160,6 +18431,9 @@ msgid ""
 "Emergency lane beside long descending slopes for trucks and other vehicles "
 "to stop safely after brake failure."
 msgstr ""
+"Awaryjna droga przy długich i stromych zjazdach służąca do zatrzymywania "
+"samochodów ciężarowych i innych pojazdów w których nastąpiła awaria układu "
+"hamulcowego."
 
 msgid "Raceway"
 msgstr "Tor wyścigowy"
@@ -18245,7 +18519,7 @@ msgid "roundabout"
 msgstr "rondo"
 
 msgid "jughandle"
-msgstr ""
+msgstr "lewo/prawoskręt"
 
 msgid "Road Restrictions"
 msgstr "Ograniczenia na drodze"
@@ -18489,31 +18763,31 @@ msgstr "Droga rowerowa"
 
 msgctxt "cycleway"
 msgid "lane"
-msgstr ""
+msgstr "jezdnia"
 
 msgctxt "cycleway"
 msgid "track"
-msgstr ""
+msgstr "tor"
 
 msgctxt "cycleway"
 msgid "opposite_lane"
-msgstr ""
+msgstr "kontrapas"
 
 msgctxt "cycleway"
 msgid "opposite_track"
-msgstr ""
+msgstr "osobna ścieżka w przeciwnym kierunku"
 
 msgctxt "cycleway"
 msgid "opposite"
-msgstr ""
+msgstr "droga dwukierunkowa dla rowerów"
 
 msgctxt "cycleway"
 msgid "share_busway"
-msgstr ""
+msgstr "współdzielony buspas"
 
 msgctxt "cycleway"
 msgid "shared_lane"
-msgstr ""
+msgstr "współdzielony pas"
 
 msgid "Cycleway left"
 msgstr "Ścieżka rowerowa (po lewej)"
@@ -18602,7 +18876,7 @@ msgid "backward"
 msgstr "wstecz"
 
 msgid "reversible"
-msgstr ""
+msgstr "zmieniające kierunek"
 
 msgid "Waypoints"
 msgstr "Punkty drogowe"
@@ -18985,6 +19259,7 @@ msgid ""
 "A point where groundwater naturally flows to the surface of the earth from "
 "underground."
 msgstr ""
+"Miejsce w którym woda podziemna naturalnie wypływa na powierzchnię ziemi."
 
 msgid "Waterfall"
 msgstr "Wodospad"
@@ -19481,19 +19756,19 @@ msgstr "Wyciąg orczykowy"
 msgid ""
 "drag_lift (general type - use only if exact type (see values below) is "
 "unknown)"
-msgstr ""
+msgstr "ogólny (użyj tylko jeśli nie znasz dokładnego typu)"
 
 msgid "t-bar"
-msgstr ""
+msgstr "orczykowy typu T"
 
 msgid "j-bar"
-msgstr ""
+msgstr "orczykowy typu J"
 
 msgid "platter"
-msgstr ""
+msgstr "talerzykowy"
 
 msgid "rope_tow"
-msgstr ""
+msgstr "bezpodporowy (linowy, wyrwirączka)"
 
 msgid "Magic Carpet"
 msgstr "Wyciąg dywanowy"
@@ -19581,10 +19856,10 @@ msgid "1/50 mix (mofa/moped)"
 msgstr "Mieszanka 1/50 (motorowery/2-suwy)"
 
 msgid "Additives:"
-msgstr ""
+msgstr "Dodatki:"
 
 msgid "Diesel Exhaust Fluid (AdBlue/AUS32)"
-msgstr ""
+msgstr "Diesel Exhaust Fluid (AdBlue/AUS32)"
 
 msgid "Fuel cards:"
 msgstr "Karty paliwowe:"
@@ -19620,58 +19895,58 @@ msgid "Number of Sockets:"
 msgstr "Liczba wtyczek"
 
 msgid "Type 1 (Yazaki)"
-msgstr ""
+msgstr "Typ 1 (Yazaki)"
 
 msgid "Type 1 Combo"
-msgstr ""
+msgstr "Typ 1 Combo"
 
 msgid "Type 2 (Mennekes)"
-msgstr ""
+msgstr "Typ 2 (Mennekes)"
 
 msgid "Type 2 Combo"
-msgstr ""
+msgstr "Typ 2 Combo"
 
 msgid "Type 3 (SCAME)"
-msgstr ""
+msgstr "Typ 3 (SCAME)"
 
 msgid "CHAdeMO"
-msgstr ""
+msgstr "CHAdeMO"
 
 msgid "Tesla Supercharger"
-msgstr ""
+msgstr "Tesla Supercharger"
 
 msgid "Schuko"
-msgstr ""
+msgstr "Schuko"
 
 msgid "CEE blue"
-msgstr ""
+msgstr "CEE blue"
 
 msgid "CEE red 16A"
-msgstr ""
+msgstr "CEE red 16A"
 
 msgid "CEE red 32A"
-msgstr ""
+msgstr "CEE red 32A"
 
 msgid "NEMA 5-15"
-msgstr ""
+msgstr "NEMA 5-15"
 
 msgid "NEMA 5-20"
-msgstr ""
+msgstr "NEMA 5-20"
 
 msgid "Authentication:"
-msgstr ""
+msgstr "Autoryzacja:"
 
 msgid "Phone call"
-msgstr ""
+msgstr "Połączenie telefoniczne"
 
 msgid "Short message"
-msgstr ""
+msgstr "Wiadomość SMS"
 
 msgid "NFC"
-msgstr ""
+msgstr "zbliżeniowo"
 
 msgid "Membership card"
-msgstr ""
+msgstr "Karta członkowska"
 
 msgid "Wash"
 msgstr "Myjnia samochodowa"
@@ -19690,10 +19965,10 @@ msgstr "tylko"
 
 msgctxt "shop=car_repair"
 msgid "Service"
-msgstr ""
+msgstr "Droga dojazdowa"
 
 msgid "dealer"
-msgstr ""
+msgstr "handlarz"
 
 msgid "repair"
 msgstr "naprawa"
@@ -19822,7 +20097,7 @@ msgid "monorail"
 msgstr "jednotorowa"
 
 msgid "light_rail"
-msgstr ""
+msgstr "miejska"
 
 msgid "stop position"
 msgstr "miejsce zatrzymania"
@@ -19879,7 +20154,7 @@ msgid "Subway Entrance"
 msgstr "Wejście do metra"
 
 msgid "Station or amenities"
-msgstr ""
+msgstr "Dworzec i udogodnienia"
 
 msgid "Bus"
 msgstr "Autobus"
@@ -20052,10 +20327,10 @@ msgid "Guest House/Bed & Breakfast"
 msgstr "Pokoje gościnne/pensjonat"
 
 msgid "Apartment"
-msgstr ""
+msgstr "Mieszkanie"
 
 msgid "Number of apartments"
-msgstr ""
+msgstr "Liczba mieszkań"
 
 msgid "Chalet"
 msgstr "Chata górska"
@@ -20103,19 +20378,19 @@ msgid "Power supply"
 msgstr "Elektryczność"
 
 msgid "Tents allowed"
-msgstr "Namioty dozwolone"
+msgstr "Dozwolone namioty"
 
 msgid "Campsite"
-msgstr ""
+msgstr "Kemping"
 
 msgid "Caravans allowed"
-msgstr ""
+msgstr "Dozwolone przyczepy kempingowe"
 
 msgid "Backcountry"
-msgstr ""
+msgstr "Na odludziu"
 
 msgid "Group only access"
-msgstr ""
+msgstr "Tylko dla członków"
 
 msgid "Food+Drinks"
 msgstr "Wyżywienie"
@@ -20136,7 +20411,7 @@ msgid "Delivery"
 msgstr "Dostawa"
 
 msgid "Mo-Su 12:00-22:00"
-msgstr ""
+msgstr "Mo-Su 12:00-22:00"
 
 msgid "Fast Food"
 msgstr "Bar szybkiej obsługi"
@@ -20261,6 +20536,7 @@ msgstr "Drogowskaz"
 msgid ""
 "A Signpost/Guidepost to indicate the directions to different destinations."
 msgstr ""
+"Drogowskazy i znaki pokazujące kierunki do różnych miejsc przeznaczenia."
 
 msgid "Information Terminal"
 msgstr "Terminal informacyjny"
@@ -20679,7 +20955,7 @@ msgid "Emergency Phone Number"
 msgstr "Numer telefonu alarmowego"
 
 msgid "(Use number as shown on plate.)"
-msgstr ""
+msgstr "(Jeśli jest napisany na znaku.)"
 
 msgid "Veterinary"
 msgstr "Weterynarz"
@@ -20703,10 +20979,10 @@ msgid "Located inside a building?"
 msgstr "Wewnątrz budynku"
 
 msgid "Last check date (YYYY-MM-DD)"
-msgstr ""
+msgstr "Ostatnia data sprawdzenia (RRRR-MM-DD)"
 
 msgid "Last check note"
-msgstr ""
+msgstr "Ostatnia uwaga sprawdzenia"
 
 msgid "Fire Extinguisher"
 msgstr "Gaśnica"
@@ -21026,6 +21302,12 @@ msgstr "Odpady ogólne"
 msgid "Recycling Centre"
 msgstr "Centrum recyklingu"
 
+msgid "trash"
+msgstr "śmieci"
+
+msgid "dog_excrement"
+msgstr "odchody psów"
+
 msgid "Waste Disposal/Dumpster"
 msgstr "Miejsca składowania śmieci"
 
@@ -21100,16 +21382,16 @@ msgid "Valves"
 msgstr "Wentyl"
 
 msgid "Dunlop (Woods)"
-msgstr ""
+msgstr "Dunlop (rowerowy)"
 
 msgid "Schrader"
-msgstr ""
+msgstr "Schrader (samochodowy)"
 
 msgid "Sclaverand (Presta)"
-msgstr ""
+msgstr "Sclaverand (Presta)"
 
 msgid "Regina"
-msgstr ""
+msgstr "Regina (włoski)"
 
 msgid "Advertising Column"
 msgstr "Słup ogłoszeniowy"
@@ -21162,10 +21444,10 @@ msgid "Hole"
 msgstr "Dołek"
 
 msgid "Par"
-msgstr ""
+msgstr "Liczba uderzeń"
 
 msgid "Handicap rating"
-msgstr ""
+msgstr "Handicap"
 
 msgctxt "golf"
 msgid "Pin"
@@ -21219,7 +21501,7 @@ msgstr "centrum sportowe"
 
 msgctxt "running"
 msgid "fitness_centre"
-msgstr ""
+msgstr "centrum fitness"
 
 msgctxt "running"
 msgid "stadium"
@@ -21279,7 +21561,7 @@ msgid "Gymnastics"
 msgstr "Gimnastyka"
 
 msgid "fitness_centre"
-msgstr ""
+msgstr "centrum fitness"
 
 msgid "Ice Skating"
 msgstr "Łyżwiarstwo"
@@ -21312,46 +21594,46 @@ msgid "downhill"
 msgstr "zjazd"
 
 msgid "nordic"
-msgstr ""
+msgstr "nordic"
 
 msgid "skitour"
-msgstr ""
+msgstr "skitour"
 
 msgid "sled"
-msgstr ""
+msgstr "sanki"
 
 msgid "sleigh"
-msgstr ""
+msgstr "zaprzęg"
 
 msgid "snow_park"
-msgstr ""
+msgstr "zimowy park"
 
 msgid "Difficulty"
 msgstr "Poziom trudności"
 
 msgctxt "piste:difficulty"
 msgid "novice"
-msgstr ""
+msgstr "nowicjusz"
 
 msgctxt "piste:difficulty"
 msgid "easy"
-msgstr ""
+msgstr "łatwy"
 
 msgctxt "piste:difficulty"
 msgid "intermediate"
-msgstr ""
+msgstr "średni"
 
 msgctxt "piste:difficulty"
 msgid "advanced"
-msgstr ""
+msgstr "zaawansowany"
 
 msgctxt "piste:difficulty"
 msgid "expert"
-msgstr ""
+msgstr "ekspert"
 
 msgctxt "piste:difficulty"
 msgid "freeride"
-msgstr ""
+msgstr "wolna jazda"
 
 msgid "Grooming"
 msgstr "Rodzaj śniegu"
@@ -21402,16 +21684,16 @@ msgid "Gaelic Games"
 msgstr "Gry gaelickie"
 
 msgid "Hurling"
-msgstr ""
+msgstr "Hurling"
 
 msgid "Football"
-msgstr ""
+msgstr "Futbol"
 
 msgid "Camogie"
-msgstr ""
+msgstr "Camogie"
 
 msgid "Rounders"
-msgstr ""
+msgstr "Rounders"
 
 msgid "Rugby League"
 msgstr "Rugby league"
@@ -21484,7 +21766,7 @@ msgstr "Lotnisko dla modeli"
 
 msgctxt "aerialway"
 msgid "pitch"
-msgstr ""
+msgstr "boisko"
 
 msgctxt "aerialway"
 msgid "sports_centre"
@@ -22079,19 +22361,19 @@ msgid "aqueduct"
 msgstr "akwedukt"
 
 msgid "boardwalk"
-msgstr ""
+msgstr "chodnik z desek"
 
 msgid "cantilever"
-msgstr ""
+msgstr "wspornikowy"
 
 msgid "covered"
 msgstr "zadaszony"
 
 msgid "low_water_crossing"
-msgstr ""
+msgstr "nisko nad wodą"
 
 msgid "trestle"
-msgstr ""
+msgstr "stojakowy"
 
 msgid "viaduct"
 msgstr "Wiadukt"
@@ -22103,31 +22385,31 @@ msgid "arch"
 msgstr "łukowy"
 
 msgid "beam"
-msgstr ""
+msgstr "belkowy"
 
 msgid "truss"
-msgstr ""
+msgstr "kratowy"
 
 msgid "floating"
-msgstr ""
+msgstr "pontonowy"
 
 msgid "suspension"
 msgstr "wiszący"
 
 msgid "cable-stayed"
-msgstr ""
+msgstr "podwieszony (wantowy)"
 
 msgid "simple-suspension"
-msgstr ""
+msgstr "linowy (wiszący na brzegach)"
 
 msgid "humpback"
-msgstr ""
+msgstr "łukowy (wyższy niż brzegi)"
 
 msgid "Movable Bridge"
 msgstr "Most ruchomy"
 
 msgid "bascule"
-msgstr ""
+msgstr "zwodzony"
 
 msgid "drawbridge"
 msgstr "zwodzony"
@@ -22136,28 +22418,28 @@ msgid "lift"
 msgstr "podnoszony"
 
 msgid "submersible"
-msgstr ""
+msgstr "opuszczany"
 
 msgid "swing"
 msgstr "obracany"
 
 msgid "transporter"
-msgstr ""
+msgstr "wciągany"
 
 msgid "Bridge Support"
 msgstr "Filar mostu"
 
 msgid "pier"
-msgstr ""
+msgstr "pionowa podpora (filar)"
 
 msgid "abutment"
-msgstr ""
+msgstr "przyczółek"
 
 msgid "lift_pier"
-msgstr ""
+msgstr "podpora do podnoszenia"
 
 msgid "pivot_pier"
-msgstr ""
+msgstr "podpora do obracania"
 
 msgid "Bridge outline"
 msgstr "Obrys mostu"
@@ -22330,7 +22612,7 @@ msgid "European Pressurized Reactor (EPR)"
 msgstr "Europejski Reaktor Ciśnieniowy (EPR)"
 
 msgid "Inertial Confinement Fusion (ICF)"
-msgstr "Imercyjna synteza zamknięta  (ICF)"
+msgstr "Imercyjna synteza zamknięta (ICF)"
 
 msgid "Pressurized water reactor (PWR)"
 msgstr "Reaktor Wodny Ciśnieniowy (PWR)"
@@ -22342,10 +22624,10 @@ msgid "Reactor Bolshoy Moshchnosti Kanalniy 1500 (RBMK-1500)"
 msgstr "Reaktor Kanałowy Dużej Mocy 1500 (RBMK-1500)"
 
 msgid "stellarator"
-msgstr ""
+msgstr "stellarator"
 
 msgid "tokamak"
-msgstr ""
+msgstr "tokamak"
 
 msgid "Vodo-Vodyanoi Energetichesky Reactor (VVER)"
 msgstr "Wodno-Wodny Reaktor Energetyczny (VVER)"
@@ -22424,7 +22706,7 @@ msgstr "Elektrownia pływowa"
 
 msgctxt "generator method"
 msgid "barrage"
-msgstr ""
+msgstr "pływowa"
 
 msgctxt "generator method"
 msgid "stream"
@@ -22434,7 +22716,7 @@ msgid "horizontal_axis"
 msgstr "oś pozioma"
 
 msgid "barrage"
-msgstr ""
+msgstr "pływowa"
 
 msgid "vertical_axis"
 msgstr "oś pionowa"
@@ -22593,35 +22875,35 @@ msgstr "Typ kompensatora"
 
 msgctxt "power"
 msgid "shunt_reactor"
-msgstr ""
+msgstr "dławik kompensacyjny (bocznikujący)"
 
 msgctxt "power"
 msgid "shunt_capacitor"
-msgstr ""
+msgstr "kondensator bocznikowy (równoległy)"
 
 msgctxt "power"
 msgid "static_var"
-msgstr ""
+msgstr "statyczny kompensator mocy biernej"
 
 msgctxt "power"
 msgid "statcom"
-msgstr ""
+msgstr "statyczny generator mocy biernej"
 
 msgctxt "power"
 msgid "synchronous_condenser"
-msgstr ""
+msgstr "kompensator synchroniczny"
 
 msgctxt "power"
 msgid "filter"
-msgstr ""
+msgstr "filtr harmoniczny"
 
 msgctxt "power"
 msgid "series_reactor"
-msgstr ""
+msgstr "dławik szeregowy"
 
 msgctxt "power"
 msgid "series_capacitor"
-msgstr ""
+msgstr "kondensator szeregowy"
 
 msgid "Power rating (kvar/Mvar)"
 msgstr "Moc (kvar/Mvar)"
@@ -22738,7 +23020,7 @@ msgstr "dwupoziomowy"
 
 msgctxt "power"
 msgid "donau"
-msgstr ""
+msgstr "donau"
 
 msgctxt "power"
 msgid "three-level"
@@ -22754,15 +23036,15 @@ msgstr "asymetryczny"
 
 msgctxt "power"
 msgid "triangle"
-msgstr ""
+msgstr "triangle"
 
 msgctxt "power"
 msgid "flag"
-msgstr ""
+msgstr "flag"
 
 msgctxt "power"
 msgid "donau;one-level"
-msgstr ""
+msgstr "donau;one-level"
 
 msgctxt "power"
 msgid "four-level"
@@ -22774,39 +23056,39 @@ msgstr "sześciopoziomowy"
 
 msgctxt "power"
 msgid "nine-level"
-msgstr ""
+msgstr "dziewięciopoziomowy"
 
 msgctxt "power"
 msgid "delta"
-msgstr ""
+msgstr "delta"
 
 msgctxt "power"
 msgid "delta_two-level"
-msgstr ""
+msgstr "delta_two-level"
 
 msgctxt "power"
 msgid "y-frame"
-msgstr ""
+msgstr "y-frame"
 
 msgctxt "power"
 msgid "x-frame"
-msgstr ""
+msgstr "x-frame"
 
 msgctxt "power"
 msgid "h-frame"
-msgstr ""
+msgstr "h-frame"
 
 msgctxt "power"
 msgid "guyed_h-frame"
-msgstr ""
+msgstr "guyed_h-frame"
 
 msgctxt "power"
 msgid "guyed_v-frame"
-msgstr ""
+msgstr "guyed_v-frame"
 
 msgctxt "power"
 msgid "bipole"
-msgstr ""
+msgstr "bipole"
 
 msgctxt "power"
 msgid "monopolar"
@@ -22907,7 +23189,7 @@ msgid "Castle"
 msgstr "Zamek"
 
 msgid "stately"
-msgstr ""
+msgstr "rezydencja"
 
 msgid "defensive"
 msgstr "obronny"
@@ -22925,16 +23207,16 @@ msgid "Archaeological Site"
 msgstr "Wykopalisko archeologiczne"
 
 msgid "tumulus"
-msgstr ""
+msgstr "kurhan"
 
 msgid "megalith"
-msgstr ""
+msgstr "megality"
 
 msgid "fortification"
-msgstr ""
+msgstr "fortyfikacja"
 
 msgid "settlement"
-msgstr ""
+msgstr "skupiska ludzi"
 
 msgid "necropolis"
 msgstr "nekropolia"
@@ -22946,50 +23228,50 @@ msgid "Palaeontological Site"
 msgstr "Wykopalisko paleontologiczne"
 
 msgid "Grave"
-msgstr ""
+msgstr "Grób"
 
 msgid "Tomb"
-msgstr ""
+msgstr "Nagrobek"
 
 msgctxt "tomb"
 msgid "tumulus"
-msgstr ""
+msgstr "kurhan"
 
 msgctxt "tomb"
 msgid "rock-cut"
-msgstr ""
+msgstr "wykuty w skale"
 
 msgctxt "tomb"
 msgid "hypogeum"
-msgstr ""
+msgstr "hypogeum"
 
 msgctxt "tomb"
 msgid "war_grave"
-msgstr ""
+msgstr "wojenny"
 
 msgctxt "tomb"
 msgid "mausoleum"
-msgstr ""
+msgstr "mauzoleum"
 
 msgctxt "tomb"
 msgid "columbarium"
-msgstr ""
+msgstr "kolumbarium"
 
 msgctxt "tomb"
 msgid "crypt"
-msgstr ""
+msgstr "krypta pod budynkiem"
 
 msgctxt "tomb"
 msgid "pyramid"
-msgstr ""
+msgstr "piramida"
 
 msgctxt "tomb"
 msgid "sarcophagus"
-msgstr ""
+msgstr "sarkofag"
 
 msgctxt "tomb"
 msgid "vault"
-msgstr ""
+msgstr "krypta grobowa"
 
 msgid "Monument"
 msgstr "Monument"
@@ -23371,10 +23653,10 @@ msgid "parking_tickets"
 msgstr "bilety parkingowe"
 
 msgid "parcel_pickup"
-msgstr ""
+msgstr "paczkomat"
 
 msgid "parcel_mail_in"
-msgstr ""
+msgstr "skrzynka nadawcza"
 
 msgid "photos"
 msgstr "zdjęcia"
@@ -23720,16 +24002,16 @@ msgid "Border type"
 msgstr "Typ granicy"
 
 msgid "baseline"
-msgstr ""
+msgstr "linia bazowa"
 
 msgid "territorial"
-msgstr ""
+msgstr "terytorialne morze"
 
 msgid "contiguous"
-msgstr ""
+msgstr "strefa przyległa"
 
 msgid "eez"
-msgstr ""
+msgstr "wyłączna strefa ekonomiczna"
 
 msgid "Places"
 msgstr "Miejsca"
@@ -23769,7 +24051,7 @@ msgid "Suburb"
 msgstr "Dzielnica"
 
 msgid "Quarter"
-msgstr ""
+msgstr "Kwartał"
 
 msgid "Neighbourhood"
 msgstr "Osiedle/Sąsiedztwo"
@@ -23778,10 +24060,10 @@ msgid "Farm"
 msgstr "Farma"
 
 msgid "A farm within a bigger settlement"
-msgstr ""
+msgstr "Farma która jest częścią większej osady"
 
 msgid "(please use isolated_dwelling for an isolated farm)"
-msgstr ""
+msgstr "(proszę używać isolated_dwelling dla odosobnionych farm)"
 
 msgid "Locality"
 msgstr "Miejsce niezaludnione"
@@ -23796,7 +24078,7 @@ msgid "Saddle"
 msgstr "Przełęcz"
 
 msgid "A saddle point between mountains or hills."
-msgstr ""
+msgstr "Najniższy punkt pomiędzy dwoma szczytami gór."
 
 msgid "Glacier"
 msgstr "Lodowiec"
@@ -23850,6 +24132,8 @@ msgid ""
 "A steep rock face exposure, with a significant vertical, or near vertical "
 "(leave the lower face to the right of the way)."
 msgstr ""
+"Pionowa lub prawie pionowa ściana skalna (część dolną należy oznaczyć po "
+"prawej stronie linii)."
 
 msgid "Cave Entrance"
 msgstr "Wejście do jaskini"
@@ -23894,7 +24178,7 @@ msgid "Wood"
 msgstr "Drzewa/las pierwotny"
 
 msgid "Woodland where timber production does not dominate use."
-msgstr ""
+msgstr "Terenu zalesiony w którym produkcja drewna nie jest dominująca."
 
 msgid "Forest"
 msgstr "Las"
@@ -23904,31 +24188,31 @@ msgstr "Przecinka leśna"
 
 msgctxt "cutline"
 msgid "border"
-msgstr ""
+msgstr "granica własności"
 
 msgctxt "cutline"
 msgid "firebreak"
-msgstr ""
+msgstr "przerwa pożarowa"
 
 msgctxt "cutline"
 msgid "hunting"
-msgstr ""
+msgstr "polowania"
 
 msgctxt "cutline"
 msgid "loggingmachine"
-msgstr ""
+msgstr "trasa maszyn do wyrębu"
 
 msgctxt "cutline"
 msgid "pipeline"
-msgstr ""
+msgstr "rurociąg"
 
 msgctxt "cutline"
 msgid "piste"
-msgstr ""
+msgstr "narciarskie szlaki zjazdowe"
 
 msgctxt "cutline"
 msgid "section"
-msgstr ""
+msgstr "sekcja"
 
 msgid "Grassland"
 msgstr "Teren trawiasty"
@@ -23937,6 +24221,8 @@ msgid ""
 "Where vegetation is dominated by grasses (Poaceae) and other herbaceous (non-"
 "woody) plants. Excludes cultivated areas and wetlands."
 msgstr ""
+"Naturalny obszar gdzie dominuje roślinność trawiasta i inne niezdrewniałe "
+"rośliny. Z wyłączeniem łąk wykorzystywanych rolniczo lub podmokłych."
 
 msgid "pampas"
 msgstr "pampa"
@@ -23963,13 +24249,15 @@ msgid "Scree"
 msgstr "Rumowisko"
 
 msgid "An accumulation of loose angular rocks."
-msgstr ""
+msgstr "Nagromadzone okruchy skalne które odpadły od stromego zbocza."
 
 msgid "Shingle"
 msgstr "Żwir rzeczny"
 
 msgid "An accumulation of loose rounded rocks on a beach or riverbed."
 msgstr ""
+"Nagromadzone zaokrąglone fragmenty skał (małe kamienie, żwir) na plaży lub "
+"przy korycie rzeki."
 
 msgid "Fell"
 msgstr "Hala górska"
@@ -23978,6 +24266,7 @@ msgid ""
 "Bare upper lying uncultivated land principally covered with grass and often "
 "grazed."
 msgstr ""
+"Wysoko położone tereny pokryte głównie trawą i często używane do wypasu."
 
 msgid "Scrub"
 msgstr "Zarośla"
@@ -23985,6 +24274,7 @@ msgstr "Zarośla"
 msgid ""
 "Bare lower lying uncultivated land with bushes but little or no tree cover."
 msgstr ""
+"Niżej położone tereny pokryte krzakami i ewentualnie małymi drzewami."
 
 msgid "Heath"
 msgstr "Wrzosowisko"
@@ -23994,6 +24284,8 @@ msgid ""
 "free-draining infertile, acidic soils, and is characterised by open, low-"
 "growing woody vegetation."
 msgstr ""
+"Niżej położone tereny, skupisko krzewów znajdujące się głównie na kwaśnych "
+"glebach, charakteryzują się otwartą, niską wegetacją roślinną."
 
 msgid "Sand"
 msgstr "Piach"
@@ -24008,6 +24300,7 @@ msgid ""
 "For areas of solid visible rock that is sparsely vegetated or not vegetated "
 "at all."
 msgstr ""
+"Dla obszarów z mocno widoczną skałą które są rzadko lub w ogóle porośnięte."
 
 msgid "Rock"
 msgstr "Głaz (przytwierdzony do skały)"
@@ -24016,6 +24309,8 @@ msgid ""
 "A notable rock or group of rocks, with at least one of them firmly attached "
 "to the underlying bedrock."
 msgstr ""
+"Znaczna skała lub grupa skał, gdzie przynajmniej jedna z nich jest "
+"przytwierdzona do podłoża skalnego."
 
 msgid "Tourism attraction"
 msgstr "Atrakcja"
@@ -24027,6 +24322,8 @@ msgid ""
 "A single notable free-standing rock, which may differ from the composition "
 "of the terrain it lies in."
 msgstr ""
+"Pojedyncza znacznej wielkości skała która różni się kompozycją od terenu "
+"wokół."
 
 msgid "Land use"
 msgstr "Zagospodarowanie terenu"
@@ -24088,10 +24385,10 @@ msgid "banana_plants"
 msgstr "bananowce"
 
 msgid "coconut_palms"
-msgstr ""
+msgstr "kokosowce"
 
 msgid "hazel_plants"
-msgstr ""
+msgstr "leszczyna (orzech laskowy)"
 
 msgid "cherry_trees"
 msgstr "wiśnie"
@@ -24121,16 +24418,16 @@ msgid "Plant Nursery"
 msgstr "Szkółka roślin"
 
 msgid "Salt Pond"
-msgstr ""
+msgstr "Salina"
 
 msgid "Aquaculture"
 msgstr "Akwakultura"
 
 msgid "shrimp"
-msgstr ""
+msgstr "krewetka"
 
 msgid "mussels"
-msgstr ""
+msgstr "małże"
 
 msgid "Allotments"
 msgstr "Ogródki działkowe"
@@ -24176,75 +24473,75 @@ msgstr "Obszar przemysłowy"
 
 msgctxt "industrial"
 msgid "bakery"
-msgstr ""
+msgstr "piekarnia"
 
 msgctxt "industrial"
 msgid "brewery"
-msgstr ""
+msgstr "browar"
 
 msgctxt "industrial"
 msgid "brickyard"
-msgstr ""
+msgstr "cegielnia"
 
 msgctxt "industrial"
 msgid "depot"
-msgstr ""
+msgstr "plac samochodowy"
 
 msgctxt "industrial"
 msgid "distributor"
-msgstr ""
+msgstr "dystrybutor produktów"
 
 msgctxt "industrial"
 msgid "factory"
-msgstr ""
+msgstr "fabryka"
 
 msgctxt "industrial"
 msgid "grinding_mill"
-msgstr ""
+msgstr "młyn"
 
 msgctxt "industrial"
 msgid "heating_station"
-msgstr ""
+msgstr "ciepłownia"
 
 msgctxt "industrial"
 msgid "machine_shop"
-msgstr ""
+msgstr "obróbka metali skrawaniem"
 
 msgctxt "industrial"
 msgid "mine"
-msgstr ""
+msgstr "kopalnia"
 
 msgctxt "industrial"
 msgid "oil"
-msgstr ""
+msgstr "ropa"
 
 msgctxt "industrial"
 msgid "port"
-msgstr ""
+msgstr "port"
 
 msgctxt "industrial"
 msgid "salt_pond"
-msgstr ""
+msgstr "solnia"
 
 msgctxt "industrial"
 msgid "sawmill"
-msgstr ""
+msgstr "tartak"
 
 msgctxt "industrial"
 msgid "scrap_yard"
-msgstr ""
+msgstr "złomowisko"
 
 msgctxt "industrial"
 msgid "shipyard"
-msgstr ""
+msgstr "stocznia"
 
 msgctxt "industrial"
 msgid "slaughterhouse"
-msgstr ""
+msgstr "rzeźnia"
 
 msgctxt "industrial"
 msgid "warehouse"
-msgstr ""
+msgstr "magazyn"
 
 msgid "Garages"
 msgstr "Garaże"
@@ -24518,13 +24815,13 @@ msgid "Accuracy"
 msgstr "Dokładność"
 
 msgid "actual"
-msgstr ""
+msgstr "rzeczywista"
 
 msgid "estimate"
-msgstr ""
+msgstr "szacowana"
 
 msgid "potential"
-msgstr ""
+msgstr "potencjalna"
 
 msgid "Contact (Common Schema)"
 msgstr "Kontakt (schemat prosty)"
@@ -24617,19 +24914,19 @@ msgid "Label point"
 msgstr "Miejsce napisu"
 
 msgid "Outline of building"
-msgstr ""
+msgstr "Obrys budynku"
 
 msgid "Inner segment"
-msgstr ""
+msgstr "Wewnętrzna część"
 
 msgid "Roof ridge"
-msgstr ""
+msgstr "Kalenica główna (grzbiet)"
 
 msgid "Roof edge"
-msgstr ""
+msgstr "Kalenica narożna i kosz"
 
 msgid "Building level"
-msgstr ""
+msgstr "Kondygnacja budynku"
 
 msgid "Site"
 msgstr "Teren"
@@ -24638,16 +24935,16 @@ msgid "Site name"
 msgstr "Nazwa terenu"
 
 msgid "where to place the label"
-msgstr ""
+msgstr "miejsce napisu"
 
 msgid "perimeter of the site"
-msgstr ""
+msgstr "obrys terenu"
 
 msgid "entrances to the site, on the perimeter"
-msgstr ""
+msgstr "wejście do terenu"
 
 msgid "members of site"
-msgstr ""
+msgstr "członkowie terenu"
 
 msgid "Turn Restriction"
 msgstr "Zakaz skrętu"
@@ -24705,7 +25002,7 @@ msgid "mindistance"
 msgstr "minimalny dystans pomiędzy pojazdami"
 
 msgid "check"
-msgstr ""
+msgstr "kontrola drogowa"
 
 msgid "Max. height (meters, only if enforcement=maxheight)"
 msgstr "Maksymalna wysokość (metry, tylko jeśli enforcement=maxheight)"
@@ -24736,19 +25033,19 @@ msgstr "Szlak rowerowy"
 
 msgctxt "network"
 msgid "international"
-msgstr ""
+msgstr "międzynarodowa"
 
 msgctxt "network"
 msgid "national"
-msgstr ""
+msgstr "narodowy"
 
 msgctxt "network"
 msgid "regional"
-msgstr ""
+msgstr "regionalna"
 
 msgctxt "network"
 msgid "local"
-msgstr ""
+msgstr "lokalny"
 
 msgid "Mountain Biking Route"
 msgstr "Górski szlak rowerowy"
@@ -24787,7 +25084,7 @@ msgid "Ski Route"
 msgstr "Szlak narciarski"
 
 msgid "alpine"
-msgstr ""
+msgstr "alpejski"
 
 msgid "Detour Route"
 msgstr "Objazd"
@@ -24910,22 +25207,22 @@ msgid "Length (meters)"
 msgstr "Długość (metry)"
 
 msgid "ways supported by (on top of) the bridge"
-msgstr ""
+msgstr "droga obsługiwana przez (on top of) mostu"
 
 msgid "ways passing under the bridge"
 msgstr "drogi przebiegające pod mostem"
 
 msgid "way forming the outline footprint"
-msgstr ""
+msgstr "droga tworząca obrys chodnika"
 
 msgid "edge ways parallel to ''across''"
-msgstr ""
+msgstr "krawędź drogi równoległej do ''across''"
 
 msgid "ways passing through the tunnel"
 msgstr "drogi przebiegające przez tunel"
 
 msgid "edge ways parallel to ''through''"
-msgstr ""
+msgstr "krawędź drogi równoległej do ''through''"
 
 msgid "Landsat"
 msgstr "Landsat"
@@ -24984,7 +25281,7 @@ msgid "OpenStreetMap Carto (Standard)"
 msgstr "OpenStreetMap Carto (Podstawowa)"
 
 msgid "OpenStreetMap (Standard Black & White)"
-msgstr "OpenStreetMap (Czarno-biała, podstawowa)"
+msgstr "OpenStreetMap (czarno-biała, podstawowa)"
 
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr "OpenStreetMap (Mapnik, bez etykiet)"
@@ -25010,6 +25307,12 @@ msgstr "Transport publiczny (ÖPNV)"
 msgid "Hike & Bike"
 msgstr "Hike & Bike"
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr "skobbler"
 
@@ -25065,7 +25368,7 @@ msgid "Waymarked Trails: Winter Sports"
 msgstr "Waymarked Trails: Sporty zimowe"
 
 msgid "Wikimedia Map"
-msgstr ""
+msgstr "Mapy Wikimedia"
 
 msgid "OSM Inspector: Geometry"
 msgstr "OSM Inspector: Geometria"
@@ -25092,7 +25395,7 @@ msgid "OSM Inspector: Coastline (EU)"
 msgstr "OSM Inspector: Linia brzegowa (EU)"
 
 msgid "imagico.de OSM images for mapping: Prokletije Mountains"
-msgstr ""
+msgstr "imagico.de OSM zdjęcia do mapowania: Góry Północnoalbańskie"
 
 msgid ""
 "Late summer imagery where usual sources are severely limited by clouds and "
@@ -25115,7 +25418,7 @@ msgid ""
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Pensacola Mountains"
-msgstr ""
+msgstr "imagico.de OSM zdjęcia do mapowania: Pensacola Mountains"
 
 msgid "imagico.de OSM images for mapping: Elephant Island/Clarence Island"
 msgstr ""
@@ -25330,7 +25633,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr "basemap.at - ortofotomapy"
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -25382,16 +25686,16 @@ msgid "imagico.de OSM images for mapping: Rila and Pirin Mountains"
 msgstr ""
 
 msgid "OpenStreetMap (Belgian Style)"
-msgstr ""
+msgstr "OpenStreetMap (styl belgijski)"
 
 msgid "OpenStreetMap (Belgian Style - French)"
-msgstr ""
+msgstr "OpenStreetMap (styl belgijski - Francja)"
 
 msgid "OpenStreetMap (Belgian Style - Dutch)"
-msgstr ""
+msgstr "OpenStreetMap (styl belgijski - Holandia)"
 
 msgid "OpenStreetMap (Belgian Style - German)"
-msgstr ""
+msgstr "OpenStreetMap (styl belgijski - Niemcy)"
 
 msgid "Orthophoto IGN-NGI"
 msgstr ""
@@ -25418,22 +25722,22 @@ msgid "URBISnl numerical imagery"
 msgstr ""
 
 msgid "URBIS 2009 aerial imagery"
-msgstr "URBIS 2009  zdjęcia lotnicze"
+msgstr "URBIS 2009 zdjęcia lotnicze"
 
 msgid "URBIS 2012 aerial imagery"
-msgstr "URBIS 2012  zdjęcia lotnicze"
+msgstr "URBIS 2012 zdjęcia lotnicze"
 
 msgid "URBIS 2014 aerial imagery"
-msgstr "URBIS 2014  zdjęcia lotnicze"
+msgstr "URBIS 2014 zdjęcia lotnicze"
 
 msgid "URBIS 2015 aerial imagery"
-msgstr "URBIS 2015  zdjęcia lotnicze"
+msgstr "URBIS 2015 zdjęcia lotnicze"
 
 msgid "URBIS 2016 aerial imagery"
-msgstr ""
+msgstr "URBIS 2016 zdjęcia lotnicze"
 
 msgid "URBIS 2017 aerial imagery"
-msgstr ""
+msgstr "URBIS 2017 zdjęcia lotnicze"
 
 msgid "SPW(allonie) PICC numerical imagery"
 msgstr ""
@@ -25442,25 +25746,25 @@ msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2016 aerial imagery"
-msgstr ""
+msgstr "SPW(allonie) 2016 zdjęcia lotnicze"
 
 msgid "SPW(allonie) 2015 aerial imagery"
-msgstr ""
+msgstr "SPW(allonie) 2015 zdjęcia lotnicze"
 
 msgid "SPW(allonie) 2012-2013 aerial imagery"
-msgstr ""
+msgstr "SPW(allonie) 2012-2013 zdjęcia lotnicze"
 
 msgid "SPW(allonie) 2009-2010 aerial imagery"
-msgstr ""
+msgstr "SPW(allonie) 2009-2010 zdjęcia lotnicze"
 
 msgid "SPW(allonie) shaded relief"
 msgstr ""
 
 msgid "TEC bus lines"
-msgstr ""
+msgstr "TEC linie autobusowe"
 
 msgid "TEC bus stops"
-msgstr ""
+msgstr "TEC przystanki autobusowe"
 
 msgid "Benin: Cotonou Pleiade 2016"
 msgstr ""
@@ -25690,7 +25994,7 @@ msgid "Czech RUIAN parcely"
 msgstr ""
 
 msgid "Czech pLPIS"
-msgstr ""
+msgstr "Czechy: pLPIS"
 
 msgid "Praha IPR latest orthophoto"
 msgstr ""
@@ -25699,7 +26003,7 @@ msgid "Praha IPR low-vegetation orthophoto"
 msgstr ""
 
 msgid "SDFE aerial imagery"
-msgstr ""
+msgstr "SDFE zdjęcia lotnicze"
 
 msgid "SDFE Cadastral Parcels INSPIRE View"
 msgstr ""
@@ -25753,6 +26057,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr "BANO"
 
@@ -25817,16 +26127,16 @@ msgid "Route 500™©®"
 msgstr "Route 500™©®"
 
 msgid "Toulouse - Orthophotoplan 2015"
-msgstr ""
+msgstr "Toulouse - Fotoplan 2015"
 
 msgid "Toulouse - Orthophotoplan 2013"
-msgstr ""
+msgstr "Toulouse - Fotoplan 2013"
 
 msgid "Toulouse - Orthophotoplan 2011"
-msgstr ""
+msgstr "Toulouse - Fotoplan 2011"
 
 msgid "Toulouse - Orthophotoplan 2007"
-msgstr ""
+msgstr "Toulouse - Fotoplan 2007"
 
 msgid "Tours - Orthophoto 2013"
 msgstr ""
@@ -25839,50 +26149,47 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr "Hamburg (40 cm)"
-
 msgid "Hamburg (20 cm)"
 msgstr "Hamburg (20 cm)"
 
 msgid "Hamburg (DK5)"
-msgstr ""
+msgstr "Hamburg (DK5)"
 
 msgid "Bavaria (80 cm)"
-msgstr ""
+msgstr "Bavaria (80 cm)"
 
 msgid "Bavaria (2 m)"
-msgstr ""
+msgstr "Bavaria (2 m)"
 
 msgid "Berlin aerial photograph 2011"
-msgstr ""
+msgstr "Berlin: fotografie lotnicze 2011"
 
 msgid "Berlin aerial photograph 2014"
-msgstr ""
+msgstr "Berlin: fotografie lotnicze 2014"
 
 msgid "Berlin aerial photograph 2015"
-msgstr ""
+msgstr "Berlin: fotografie lotnicze 2015"
 
 msgid "Berlin aerial photograph 2016"
-msgstr ""
+msgstr "Berlin: fotografie lotnicze 2016"
 
 msgid "Berlin aerial photograph 2017"
-msgstr ""
-
-msgid "Deutsche Bahn VzG lines Nov 2013"
-msgstr ""
+msgstr "Berlin: fotografie lotnicze 2017"
 
 msgid "Deutsche Bahn VzG lines Nov 2015"
+msgstr "Deutsche Bahn VzG linie Nov 2015"
+
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
-msgstr ""
+msgstr "Erlangen zdjęcia lotnicze (2016 5.0 cm)"
 
 msgid "Erlangen aerial imagery (2013 6.25 cm)"
-msgstr ""
+msgstr "Erlangen zdjęcia lotnicze (2013 6.25 cm)"
 
 msgid "Erlangen aerial imagery (2011 5.0 cm)"
-msgstr ""
+msgstr "Erlangen zdjęcia lotnicze (2011 5.0 cm)"
 
 msgid "Old map of Zwenkau - TK25 Messtischblatt (4739; 1906; PROJ.4-rect)"
 msgstr ""
@@ -25894,7 +26201,7 @@ msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
-msgstr ""
+msgstr "Metropole Ruhr: zdjęcia lotnicze (10 cm)"
 
 msgid ""
 "imagico.de OSM images for mapping: Northern German west coast tidalflats"
@@ -25922,34 +26229,34 @@ msgid "imagico.de OSM images for mapping: North Sea Coast 2017"
 msgstr ""
 
 msgid "Saxony latest aerial imagery"
-msgstr ""
+msgstr "Saksonia: ostatnie zdjęcia lotnicze"
 
 msgid "Saxony latest aerial imagery infrared"
-msgstr ""
+msgstr "Saksonia: ostatnie zdjęcia lotnicze podczerwień"
 
 msgid "Saxony historical aerial imagery 2012-2014"
-msgstr ""
+msgstr "Saksonia: historyczne zdjęcia lotnicze 2012-2014"
 
 msgid "Saxony historical aerial imagery 2005"
-msgstr ""
+msgstr "Saksonia: historyczne zdjęcia lotnicze 2005"
 
 msgid "Saxony WebAtlasSN"
-msgstr ""
+msgstr "Saksonia: WebAtlasSN"
 
 msgid "Saxony topographic map"
-msgstr ""
+msgstr "Saksonia : mapa topograficzna"
 
 msgid "Saxony digital terrain model"
-msgstr ""
+msgstr "Saksonia: cyfrowy model terenu"
 
 msgid "Mainz all aerial imageries"
-msgstr ""
+msgstr "Moguncja (Mainz): wszystkie podkłady lotnicze"
 
 msgid "Mainz latest aerial imagery"
-msgstr ""
+msgstr "Moguncja (Mainz): ostatnie podkłady lotnicze"
 
 msgid "Munich latest aerial imagery 60cm"
-msgstr ""
+msgstr "Monachium: ostatnie zdjęcia lotnicze 60cm"
 
 msgid "imagico.de OSM images for mapping: Qasigiannguit"
 msgstr ""
@@ -26024,16 +26331,16 @@ msgid ""
 msgstr ""
 
 msgid "Drone Imagery (Haiti)"
-msgstr ""
+msgstr "Haiti: zdjęcia z drona"
 
 msgid "Drone Imagery 2014 (Haiti)"
-msgstr ""
+msgstr "Haiti: zdjęcia z drona 2014"
 
 msgid "Drone Imagery Canaan(Haiti) November 2015"
-msgstr ""
+msgstr "Haiti (Canaan): zdjęcia z drona - listopad 2015"
 
 msgid "Drone Imagery Matthew(Haiti) October 2016"
-msgstr ""
+msgstr "Haiti (Canaan): zdjęcia z drona - październik 2016"
 
 msgid "FÖMI orthophoto 2000"
 msgstr ""
@@ -26075,7 +26382,7 @@ msgid "5 cm resolution bald image of 4 settlement"
 msgstr ""
 
 msgid "openstreetmap.hu orthophotos"
-msgstr ""
+msgstr "openstreetmap.hu ortofoto"
 
 msgid "OpenStreetMap Hungary (hiking routes)"
 msgstr ""
@@ -26175,10 +26482,10 @@ msgid "Israel Hiking map"
 msgstr ""
 
 msgid "Israel MTB"
-msgstr ""
+msgstr "Izrael MTB"
 
 msgid "Israel MTB map"
-msgstr ""
+msgstr "Izrael MTB mapa"
 
 msgid "Lodi - Italy"
 msgstr "Lodi - Włochy"
@@ -26196,39 +26503,39 @@ msgid "PCN 2006 - Italy"
 msgstr "PCN 2006 - Włochy"
 
 msgid "PCN 2008 - IT Lazio+Umbria"
-msgstr ""
+msgstr "PCN 2008 - IT Lazio+Umbria"
 
 msgid "PCN 2012 - Italy"
 msgstr "PCN 2012 - Włochy"
 
 msgid "South Tyrol Orthofoto 2011"
-msgstr ""
+msgstr "South Tyrol Ortofoto 2011"
 
 msgid "South Tyrol Orthofoto 2011 (highres)"
-msgstr ""
+msgstr "South Tyrol Ortofoto 2011 (wysoka rozdzielczość)"
 
 msgid ""
 "Orthophoto of South Tyrol from 2011 with up to 20cm resolution (larger "
 "valleys)"
-msgstr ""
+msgstr "South Tyrol Ortofoto 2011 z rozdzielczością do 20cm (większe doliny)"
 
 msgid "South Tyrol Orthofoto 2014"
-msgstr ""
+msgstr "South Tyrol Ortofoto 2014"
 
 msgid "South Tyrol Orthofoto 2014/2015"
-msgstr ""
+msgstr "South Tyrol Ortofoto 2014/2015"
 
 msgid "South Tyrol Topomap"
-msgstr ""
+msgstr "South Tyrol Mapa Topograficzna"
 
 msgid "Topographical basemap of South Tyrol"
 msgstr ""
 
 msgid "Japan GSI ortho Imagery"
-msgstr ""
+msgstr "Japonia GSI orto zdjęcia"
 
 msgid "Japan GSI Standard Map"
-msgstr ""
+msgstr "Japonia GSI Standardowa Mapa"
 
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
@@ -26251,62 +26558,200 @@ msgid "Up-to-date image for glacier mapping (true color)"
 msgstr ""
 
 msgid "USSR - Latvia"
-msgstr ""
+msgstr "USSR - Łotwa"
 
 msgid "50cm ortho - Latvia"
-msgstr ""
+msgstr "50cm orto - Łotwa"
 
 msgid "20cm ortho - Latvia - Coastline"
-msgstr ""
+msgstr "20cm orto - Łotwa - Linia brzegowa"
 
 msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
-msgstr ""
+msgstr "Ortofoto 1wszy cycle (1994-1999) - Łotwa"
 
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Litwa)"
 
 msgid "geoportail.lu all layers"
-msgstr ""
+msgstr "geoportail.lu wszystkie warstwy"
 
 msgid "geoportail.lu ortho latest"
+msgstr "geoportail.lu ostatnia ortofoto"
+
+msgid "Niger Delta Oct 2012 Landsat"
+msgstr "Niger Delta Oct 2012 Landsat"
+
+msgid "INEGI Digital Map of Mexico (WMS)"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
+msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid ""
+"Nationwide data set 25cm resolution color aerial imagery of the most recent "
+"year."
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm (WMTS)"
 msgstr ""
 
-msgid "Luxembourg Inspire Water"
+msgid "LINZ NZ Aerial Imagery"
+msgstr "LINZ NZ zdjęcia lotnicze"
+
+msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Kartverket N50 topo"
 msgstr ""
 
-msgid "INEGI Digital Map of Mexico (WMS)"
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
 msgstr ""
 
-msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
 msgstr ""
 
 msgid ""
-"Nationwide data set 25cm resolution color aerial imagery of the most recent "
-"year."
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
 msgstr ""
 
-msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm (WMTS)"
+msgid "Kartverket Road Network overlay"
 msgstr ""
 
-msgid "LINZ NZ Aerial Imagery"
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
 msgstr ""
 
-msgid "LINZ NZ Topo50 Gridless Maps"
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr "MTBmap.no"
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -26368,10 +26813,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr "Geoportal 2: Ortofotomapa (zdjęcia lotnicze)"
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr "Geoportal 2: Ortofotomapa (zdjęcia lotnicze) WMTS"
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -26380,126 +26825,135 @@ msgstr "Geoportal 2: PRNG (nazwy geograficzne)"
 msgid "Geoportal 2: ISOK hillshade"
 msgstr "Geoportal 2: Cieniowanie rzeźby terenu ISOK"
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
+msgstr ""
+
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr "Będzin: Ortofotomapa 2013 (zdjęcia lotnicze)"
 
-msgid "Będzin: Budynki (buildings)"
-msgstr "Będzin: Budynki (budynki)"
+msgid "Będzin: Buildings"
+msgstr "Będzin: Budynki"
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr "Bytom: Ortofotomapa 2012 (zdjęcia lotnicze)"
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr "Bytom: Fotoplan 2014 (zdjęcia lotnicze)"
 
-msgid "Bytom: Budynki (buildings)"
-msgstr "Bytom: Budynki (budynki)"
+msgid "Bytom: Buildings"
+msgstr "Bytom: Budynki"
 
-msgid "Chorzów: Budynki (buildings)"
-msgstr "Chorzów: Budynki  (budynki)"
+msgid "Chorzów: Buildings"
+msgstr "Chorzów: Budynki"
 
-msgid "Częstochowa: Budynki (buildings)"
-msgstr "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
+msgstr "Częstochowa: Budynki"
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr "Częstochowa: Ortofotomapa 2011 (zdjęcia lotnicze)"
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr "Częstochowa: Ortofotomapa 2013 (zdjęcia lotnicze)"
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr "Częstochowa: Ortofotomapa 2014 (zdjęcia lotnicze)"
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr "Gliwice: Ortofotomapa 2013 (zdjęcia lotnicze)"
 
-msgid "Gliwice: Budynki (buildings)"
-msgstr "Gliwice: Budynki (budynki)"
+msgid "Gliwice: Buildings"
+msgstr "Gliwice: Budynki"
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr "Katowice: Ortofotomapa (zdjęcia lotnicze)"
 
-msgid "Katowice: Budynki (buildings)"
-msgstr "Katowice: Budynki (budynki)"
+msgid "Katowice: Buildings"
+msgstr "Katowice: Budynki"
 
-msgid "Łódź: Budynki (buildings)"
-msgstr "Łódź: Budynki (budynki)"
+msgid "Łódź: Buildings"
+msgstr "Łódź: Budynki"
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr "Łódź: Ortofotomapa (zdjęcia lotnicze)"
 
-msgid "Powiat dębicki: Budynki (buildings)"
-msgstr "Powiat dębicki: Budynki (budynki)"
+msgid "Powiat dębicki: Buildings"
+msgstr "Powiat dębicki: Budynki"
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
-msgstr "Powiat lubaczowski: Budynki (budynki)"
+msgid "Powiat lubaczowski: Buildings"
+msgstr "Powiat lubaczowski: Budynki"
 
-msgid "Powiat łańcucki: Budynki (buildings)"
-msgstr "Powiat łańcucki: Budynki (budynki)"
+msgid "Powiat łańcucki: Buildings"
+msgstr "Powiat łańcucki: Budynki"
 
-msgid "Powiat poznański: Budynki (buildings)"
-msgstr "Powiat poznański: Budynki (budynki)"
+msgid "Powiat poznański: Buildings"
+msgstr "Powiat poznański: Budynki"
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr "Powiat poznański: Ortofotomapa (zdjęcia lotnicze)"
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
-msgstr "Powiat ropczycko-sędziszowski: Budynki (budynki)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
+msgstr "Powiat ropczycko-sędziszowski: Budynki"
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
-msgstr "Powiat rzeszowski: Budynki (budynki)"
+msgid "Powiat rzeszowski: Buildings"
+msgstr "Powiat rzeszowski: Budynki"
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr "Powiat rzeszowski: Ortofotomapa (zdjęcia lotnicze)"
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
-msgstr "Powiat stalowowolski: Budynki (budynki)"
+msgid "Powiat stalowowolski: Buildings"
+msgstr "Powiat stalowowolski: Budynki"
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr "Poznań: Ortofotomapa 2014 (zdjęcia lotnicze)"
 
-msgid "Przemyśl: Budynki (buildings)"
-msgstr "Przemyśl: Budynki (budynki)"
+msgid "Przemyśl: Buildings"
+msgstr "Przemyśl: Budynki"
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr "Przemyśl: Ortofotomapa (zdjęcia lotnicze)"
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr "Ruda Śląska: Ortofotomapa (zdjęcia lotnicze)"
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr "Rzeszów: Ortofotomapa (zdjęcia lotnicze)"
 
-msgid "Rzeszów: Budynki (buildings)"
-msgstr "Rzeszów: Budynki (budynki)"
+msgid "Rzeszów: Buildings"
+msgstr "Rzeszów: Budynki"
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr "Siemianowice Śląskie: Ortofotomapa (zdjęcia lotnicze)"
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
-msgstr "Siemianowice Śląskie: Budynki (budynki)"
+msgid "Siemianowice Śląskie: Buildings"
+msgstr "Siemianowice Śląskie: Budynki"
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr "Świętochłowice: Ortofotomapa 2008 (zdjęcia lotnicze)"
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr "Świętochłowice: Ortofotomapa 2009 (zdjęcia lotnicze)"
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr "Świętochłowice: Ortofotomapa 2012 (zdjęcia lotnicze)"
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr "Zabrze: Ortofotomapa 2011 (zdjęcia lotnicze)"
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr "Wrocław: Ortofotomapa 2015 (zdjęcia lotnicze)"
 
-msgid "ScanEx IRS"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
 msgstr ""
 
-msgid "ScanEx SPOT"
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
+msgid "ScanEx IRS"
+msgstr "ScanEx IRS"
+
+msgid "ScanEx SPOT"
+msgstr "ScanEx SPOT"
+
 msgid "imagico.de OSM images for mapping: Kerch Strait"
 msgstr ""
 
@@ -26541,19 +26995,19 @@ msgid "Recent image showing newest features (true color)"
 msgstr ""
 
 msgid "Freemap.sk Car"
-msgstr ""
+msgstr "Freemap.sk Samochód"
 
 msgid "Freemap.sk Hiking"
-msgstr ""
+msgstr "Freemap.sk Pieszo"
 
 msgid "Freemap.sk Cyclo"
-msgstr ""
+msgstr "Freemap.sk Rower"
 
 msgid "Freemap.sk Ski"
-msgstr ""
+msgstr "Freemap.sk Narty"
 
 msgid "Slovakia Historic Maps"
-msgstr ""
+msgstr "Słowacja: Historyczne Mapy"
 
 msgid "RABA-KGZ: Slovenia farmland use"
 msgstr ""
@@ -26602,16 +27056,16 @@ msgid "imagico.de OSM images for mapping: Shag Rocks"
 msgstr ""
 
 msgid "Catastro Spain"
-msgstr ""
+msgstr "Hiszpania: Kataster"
 
 msgid "PNOA Spain"
-msgstr ""
+msgstr "Hiszpania: PNOA"
 
 msgid "SIGPAC Spain"
-msgstr ""
+msgstr "Hiszpania: SIGPAC"
 
 msgid "GRAFCAN - Canary Islands"
-msgstr ""
+msgstr "Wyspy Kanaryjskie: GRAFCAN"
 
 msgid "ITACyL - Castile and León"
 msgstr ""
@@ -26620,7 +27074,7 @@ msgid "IDEIB - Balearic Islands"
 msgstr "IDEIB - Baleary"
 
 msgid "GRAFCAN Express - Canary Islands"
-msgstr ""
+msgstr "Wyspy Kanaryjskie: GRAFCAN Express"
 
 msgid "imagico.de OSM images for mapping: Adams Bridge"
 msgstr ""
@@ -26628,74 +27082,86 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
-msgid "Kanton Aargau 25cm (AGIS 2011)"
+msgid "Economic Maps (historic)"
 msgstr ""
 
-msgid "Kanton Aargau 25cm (AGIS 2014)"
+msgid "Scan of ´Economic maps´ ca 1950-1980"
 msgstr ""
 
-msgid "Kanton Aargau 25cm (AGIS 2016)"
+msgid "Snowmobile map Sweden"
 msgstr ""
 
-msgid "Kanton Zürich Orthophotos 2014/2015 10cm"
+msgid "Snowmobile trails"
 msgstr ""
 
+msgid "Kanton Aargau 25cm (AGIS 2011)"
+msgstr "Kanton Argowia 25cm (AGIS 2011)"
+
+msgid "Kanton Aargau 25cm (AGIS 2014)"
+msgstr "Kanton Argowia 25cm (AGIS 2014)"
+
+msgid "Kanton Aargau 25cm (AGIS 2016)"
+msgstr "Kanton Argowia 25cm (AGIS 2016)"
+
+msgid "Kanton Zürich Orthophotos 2014/2015 10cm"
+msgstr "Kanton Zurych Orthophotos 2014/2015 10cm"
+
 msgid "Stadt Uster Orthophoto 2008 10cm"
-msgstr ""
+msgstr "Miasto Uster Ortofoto 2008 10cm"
 
 msgid "Stadtplan Zürich"
-msgstr ""
+msgstr "Plan miasta Zürich"
 
 msgid "Stadt Zürich Übersichtsplan (Strassen, Gebäude, Hausnummer)"
 msgstr ""
 
 msgid "Stadt Zürich Luftbild 2011"
-msgstr ""
+msgstr "Miasto Zürich zdjęcia lotnicze 2011"
 
 msgid "Canton Solothurn latest aerial imagery SOGIS RGB"
-msgstr ""
+msgstr "Kanton Solura aktualne zdjęcia lotnicze SOGIS RGB"
 
 msgid "Canton Solothurn latest aerial imagery SOGIS Infrared"
-msgstr ""
+msgstr "Kanton Solura aktualne zdjęcia lotnicze SOGIS Podczerwień"
 
 msgid "Canton de Génève 5cm (SITG 2011)"
-msgstr ""
+msgstr "Kanton Genewa 5cm (SITG 2011)"
 
 msgid "Canton de Neuchâtel 50cm (SITN 2006)"
-msgstr ""
+msgstr "Kanton Neuchâtel 50cm (SITN 2006)"
 
 msgid "Canton du Jura 50cm (RCJU 1998)"
-msgstr ""
+msgstr "Kanton Jura 50cm (RCJU 1998)"
 
 msgid "Canton de Fribourg 50cm (2005)"
-msgstr ""
+msgstr "Kanton Fryburg 50cm (2005)"
 
 msgid "Stadt Bern 10cm/25cm (2012)"
-msgstr ""
+msgstr "Miasto Berno 10cm/25cm (2012)"
 
 msgid "Stadt Bern 10cm (2016)"
-msgstr ""
+msgstr "Miasto Berno 10cm (2016)"
 
 msgid "HEIG-VD / Orthophoto Yverdon-les-Bains 25cm (2007)"
 msgstr ""
 
 msgid "Ville de Nyon - Orthophoto 2010 HD 5cm/pi"
-msgstr ""
+msgstr "Ville de Nyon - Ortofoto 2010 HD 5cm/pi"
 
 msgid "Cartoriviera - Orthophoto 2012"
-msgstr ""
+msgstr "Cartoriviera - Ortofoto 2012"
 
 msgid "SIGIP - Orthophoto 2012"
-msgstr ""
+msgstr "SIGIP - Ortofoto 2012"
 
 msgid "Lausanne - Orthophoto technique 2012"
-msgstr ""
+msgstr "Louzanna - Ortofoto technika 2012"
 
 msgid "Bonvillars Orthophoto 2013"
-msgstr ""
+msgstr "Bonvillars Ortofoto 2013"
 
 msgid "Fiez Orthophoto 2013"
-msgstr ""
+msgstr "Fiez Ortofoto 2013"
 
 msgid "Kanton Basel-Stadt 2015"
 msgstr ""
@@ -26751,10 +27217,10 @@ msgid "USGS Large Scale Imagery"
 msgstr ""
 
 msgid "TIGER Roads 2012"
-msgstr ""
+msgstr "TIGER Drogi 2012"
 
 msgid "TIGER Roads 2014"
-msgstr ""
+msgstr "TIGER Roads 2014"
 
 msgid ""
 "At zoom level 16+, public domain map data from the US Census. At lower "
@@ -26763,7 +27229,7 @@ msgid ""
 msgstr ""
 
 msgid "TIGER Roads 2017"
-msgstr ""
+msgstr "TIGER Roads 2017"
 
 msgid ""
 "Yellow = Public domain map data from the US Census. Red = Data not found in "
@@ -26771,10 +27237,10 @@ msgid ""
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
-msgstr ""
+msgstr "MassGIS L3 Działki"
 
 msgid "NC Latest Orthoimagery"
-msgstr ""
+msgstr "NC Aktualne Ortofoto"
 
 msgid ""
 "Most recent true color imagery for the state of North Carolina. The imagery "
@@ -26815,14 +27281,14 @@ msgid "Tidal flats and glaciers in surrounding mountains (true color)"
 msgstr ""
 
 msgid "NJ 2015 Aerial Imagery (Infrared)"
-msgstr ""
+msgstr "NJ 2015 Zdjęcia lotnicze (podczerwień)"
 
 msgid ""
 "Digital orthophotography of New Jersey, Near Infrared, 1 foot resolution"
 msgstr ""
 
 msgid "NJ 2015 Aerial Imagery (Natural Color)"
-msgstr ""
+msgstr "NJ 2015 Zdjęcia lotnicze (naturalne kolory)"
 
 msgid ""
 "Digital orthophotography of New Jersey, Natural Color, 1 foot resolution"
@@ -26859,10 +27325,10 @@ msgid ""
 msgstr ""
 
 msgid "Texas Orthophoto"
-msgstr ""
+msgstr "Teksas: Ortofoto"
 
 msgid "Philadelphia 2015 Imagery"
-msgstr ""
+msgstr "Filadelfia: Podkład 2015"
 
 msgid "MD Latest 6 Inch Aerial Imagery"
 msgstr ""
@@ -26913,7 +27379,7 @@ msgid "Works only from within Ukraine or with an Ukrainian proxy server."
 msgstr ""
 
 msgid "Ukraine - Kyiv 2014 (DZK)"
-msgstr ""
+msgstr "Ukraina - Kijów 2014 (DZK)"
 
 msgid "7th Series (OS7)"
 msgstr ""
@@ -26922,7 +27388,7 @@ msgid "OS New Popular Edition historic"
 msgstr ""
 
 msgid "OS OpenData StreetView"
-msgstr ""
+msgstr "OS OpenData StreetView"
 
 msgid "OS OpenData Locator"
 msgstr ""
@@ -27558,24 +28024,26 @@ msgid ""
 msgstr ""
 
 msgid "Landsat 233055"
-msgstr ""
+msgstr "Landsat 233055"
 
 msgid "Recent Landsat imagery"
 msgstr "Ostatnie zdjęcia Landsat"
 
 msgid "Even housenumber in odd address interpolation."
-msgstr ""
+msgstr "Parzyste numery domów w nieparzystej interpolacji"
 
 msgid "Odd housenumber in even address interpolation."
-msgstr ""
+msgstr "Nieparzyste numery domów w parzystej interpolacji"
 
 msgid "Way with {0}. Tag each housenumber separately if possible."
-msgstr ""
+msgstr "Linia z {0}. Oznacz każdy housenumber osobno jeśli to możliwe."
 
 msgid ""
 "Object has no {0}, however, it has {1} and {2} whose value looks like a "
 "housenumber."
 msgstr ""
+"Objekt nie ma {0}, ale ma {1} i {2} których wartości wyglądają jak numery "
+"domów."
 
 msgid "Same value of {0} and {1}"
 msgstr "Taka sama wartość {0} i {1}"
@@ -27599,7 +28067,7 @@ msgid "suspicious tag combination"
 msgstr "podejrzane połączenie znaczników"
 
 msgid "two objects, one with {0} and one with {1} + {2} + {3}"
-msgstr ""
+msgstr "dwa obiekty, jeden z {0} i jeden z {1} + {2} + {3}"
 
 msgid "incomplete object: only {0}"
 msgstr "niekompletny obiekt: tylko {0}"
@@ -27611,7 +28079,7 @@ msgid "{0} together with addr:*"
 msgstr "{0} razem z addr:*"
 
 msgid "{0} together with {1} and conflicting values"
-msgstr "{0} razem z {1}  są sprzecznymi wartościami"
+msgstr "{0} razem z {1} są sprzecznymi wartościami"
 
 msgid "{0} on suspicious object"
 msgstr "{0} na podejrzanych obiektach"
@@ -27635,7 +28103,7 @@ msgid "{0} and {1} together with {2} and conflicting values"
 msgstr ""
 
 msgid "{0} on a relation without {1}"
-msgstr ""
+msgstr "{0} na relacji bez {1}"
 
 msgid ""
 "Long waterway with {0} but without a tag which defines it as tunnel or "
@@ -27659,7 +28127,7 @@ msgid "possibly missing {0} tag"
 msgstr "przypuszczalnie brakujący znacznik {0}"
 
 msgid "street with odd number of {0}, but without {1} and {2} or {3}"
-msgstr ""
+msgstr "ulica z nieparzystym numerem {0}, ale bez {1} i {2} lub {3}"
 
 msgid "{0} is deprecated"
 msgstr "{0} jest przestarzały"
@@ -27740,7 +28208,7 @@ msgid "key with uncommon character"
 msgstr "klucz z nietypowym znakiem"
 
 msgid "uncommon short key"
-msgstr ""
+msgstr "niecodzienny krótki klucz"
 
 msgid "{0} is inaccurate"
 msgstr "{0} jest niedokładne"
@@ -27816,7 +28284,7 @@ msgid "Overlapping Identical Landuses"
 msgstr "Nakładające się identyczne użycia terenu"
 
 msgid "isolated node which must be connected to a way"
-msgstr ""
+msgstr "odizolowany węzeł który musi być połączony z linią"
 
 msgid "node connects waterway and bridge"
 msgstr "węzeł łączy wodę i most"
@@ -27870,7 +28338,7 @@ msgid "Ferry route is not connected to a ferry terminal or branches."
 msgstr "Trasa promu nie jest połączona z portem lub innymi."
 
 msgid "abbreviated street name"
-msgstr ""
+msgstr "skrócona nazwa ulicy"
 
 msgid "wrong highway tag on a node"
 msgstr "niewłaściwy znacznik drogi na węźle"
@@ -28656,7 +29124,7 @@ msgid "Markers of "
 msgstr ""
 
 msgid "Show summary after import"
-msgstr ""
+msgstr "Pokaż podsumowanie po imporcie"
 
 msgid "Do not zoom after import"
 msgstr "Nie przybliżaj po imporcie"
@@ -28665,10 +29133,10 @@ msgid "Ignore hdop/vdop/pdop entries"
 msgstr ""
 
 msgid "Warn on missing audio files"
-msgstr ""
+msgstr "Ostrzeżenie przy brakujących plikach audio"
 
 msgid "Warn on conversion errors"
-msgstr ""
+msgstr "Ostrzeżenie o błędach konwersji"
 
 msgid "Error in line "
 msgstr "Błąd w wierszu "
@@ -28885,7 +29353,7 @@ msgid "Please open or create data layer before importing"
 msgstr "Proszę otworzyć lub utworzyć warstwę danych przed importowaniem"
 
 msgid "Import dxf"
-msgstr ""
+msgstr "Import dxf"
 
 msgid "Scale:"
 msgstr "Skala:"
@@ -28936,7 +29404,7 @@ msgid "Gain"
 msgstr ""
 
 msgid "Tracks"
-msgstr ""
+msgstr "Liczba torów"
 
 msgid "Elevation profile for track ''{0}''."
 msgstr "Profil wysokości śladu ''{0}''."
@@ -28966,7 +29434,7 @@ msgid "Auto add tags"
 msgstr ""
 
 msgid "Autosimplify"
-msgstr ""
+msgstr "Automatyczne uproszczanie"
 
 msgid "Simplify with initial epsilon"
 msgstr ""
@@ -29029,7 +29497,7 @@ msgid ""
 msgstr ""
 
 msgid "Line information"
-msgstr ""
+msgstr "Informacje o linii"
 
 msgid "Cannot place node outside of the world."
 msgstr "Nie można wstawiać węzłów poza światem."
@@ -29270,15 +29738,12 @@ msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 "Wyświetla warstwę pokazującą obiekty na mapie wykryte przez Mapillary"
 
-msgid "Start Mapillary layer"
-msgstr "Rozpocznij warstwę Mapillary"
+msgid "Open Mapillary layer"
+msgstr "Otwórz wartwę Mapillary"
 
 msgid "Mapillary"
 msgstr "Mapillary"
 
-msgid "Create Mapillary layer"
-msgstr "Utwórz warstwę Mapillary"
-
 msgid "Download Mapillary images in current view"
 msgstr "Pobierz obrazy Mapillary w obecnym widoku"
 
@@ -29341,14 +29806,8 @@ msgstr ""
 "pierwszy raz, po prostu spróbuj ponownie. Może wystąpiły jakieś problemy z "
 "połączeniem internetowym."
 
-msgid "Upload pictures"
-msgstr "Wyślij zdjęcia"
-
-msgid "Upload Mapillary pictures"
-msgstr "Wyślij zdjęcia Mapillary"
-
-msgid "Upload pictures."
-msgstr "Wyślij obrazy."
+msgid "Upload Mapillary images"
+msgstr "Wyślij obrazy Mapillary"
 
 msgid "Walk mode"
 msgstr "Tryb spaceru"
@@ -29383,15 +29842,12 @@ msgstr "Eksportuj wybrane obrazy"
 msgid "Rewrite imported images"
 msgstr "Przepisz zaimportowane obrazy"
 
-msgid "Select a folder"
-msgstr "Wybierz folder"
+msgid "Select a directory"
+msgstr "Wybierz katalog"
 
 msgid "Explore"
 msgstr "Przeglądaj"
 
-msgid "Select a directory"
-msgstr "Wybierz katalog"
-
 msgid "Speed limit"
 msgstr "Ograniczenie prędkości"
 
@@ -29525,6 +29981,13 @@ msgstr "Podgląd zdjęć po najechaniu na ich ikonę"
 msgid "Cut off sequences at download bounds"
 msgstr "Obetnij sekwencje na granicach pobierania"
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+"Podczas odwierania obrazu Mapillary w przeglądarce, pokaż edytor rozmazania "
+"zamiast podglądu zdjęcia"
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr "Włącz tryb eksperymentalny (może być niestabilny)"
 
@@ -29532,7 +29995,7 @@ msgid "Download mode"
 msgstr "Tryb pobierania"
 
 msgid "Number of images to be pre-fetched (forwards and backwards)"
-msgstr ""
+msgstr "Ilość obrazów które mają być wstępnie pobrane (do przodu i tyłu)"
 
 msgid "You are logged in as ''{0}''."
 msgstr "Jesteś zalogowany jako \"{0}\"."
@@ -30026,16 +30489,16 @@ msgid "Please select address interpolation way for this street"
 msgstr "Zaznacz linię interpolacji adresu powiązaną z ulicą"
 
 msgid "Expected odd numbers for addresses"
-msgstr ""
+msgstr "Oczekiwano nieparzystych numerów dla adresów"
 
 msgid "Expected even numbers for addresses"
-msgstr ""
+msgstr "Oczekiwano parzystych numerów dla adresów"
 
 msgid "Expected valid number for increment"
-msgstr ""
+msgstr "Oczekiwano prawidłowej liczby do inkrementacji"
 
 msgid "Country code must be 2 letters"
-msgstr ""
+msgstr "Kod kraju musi mieć 2 litery"
 
 msgid "Please enter valid number for starting and ending address"
 msgstr "Proszę wpisz poprawne liczby dla początkowego i końcowego adresu"
@@ -30818,7 +31281,7 @@ msgid ""
 msgstr ""
 
 msgid "section"
-msgstr ""
+msgstr "sekcja"
 
 msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
@@ -32576,64 +33039,66 @@ msgid "Offset into background:"
 msgstr ""
 
 msgid "Indoor Mapping Helper"
-msgstr ""
+msgstr "Pomocnik Mapowania W"
 
 msgid "POWER"
-msgstr ""
+msgstr "Aktywuj"
 
 msgid "Activates the plug-in"
-msgstr ""
+msgstr "Aktywuje wtyczkę"
 
 msgid "Working Level"
-msgstr ""
+msgstr "Aktualny poziom"
 
 msgid "Selects the working level."
-msgstr ""
+msgstr "Wybiera aktualnie edytowany poziom"
 
 msgid "Level Name"
-msgstr ""
+msgstr "Nazwa poziomu"
 
 msgid "Optional name-tag for a level."
-msgstr ""
+msgstr "Opcjonalny znacznik name dla piętra"
 
 msgid "The object preset you want to tag."
-msgstr ""
+msgstr "Schemat obiektu jaki chcesz oznaczyć"
 
 msgid "Sets the name tag when the room-object is selected."
-msgstr ""
+msgstr "Ustawia znacznik name jeśli wybrany jest pokój"
 
 msgid "Sets the ref tag when the room-object is selected."
-msgstr ""
+msgstr "Ustawia znacznik ref jeśli wybrany jest pokój"
 
 msgid "Apply Tags"
-msgstr ""
+msgstr "Zatwierdź znaczniki"
 
 msgid "Fitting"
-msgstr ""
+msgstr "Dopasowywanie"
 
 msgid ""
 "<html>Please mind to start fitting your building-plans now.<br>To do so, use "
 "the PicLayer plug-in, which you can install<br>using the JOSM plug-in "
 "management.</html>"
 msgstr ""
+"<html>Pomyśl teraz o dopasowaniu swoich planów budynku.<br>W tym celu użyj "
+"wtyczki PicLayer, którą możesz zainstalować w ustawieniach JOSM.</html>"
 
 msgid "Level Selection"
-msgstr ""
+msgstr "Wybór poziomu"
 
 msgid "Lowest Level"
-msgstr ""
+msgstr "Najniższy poziom"
 
 msgid "The lowest level of your building."
-msgstr ""
+msgstr "Najniższy poziom tego budynku."
 
 msgid "Highest Level"
-msgstr ""
+msgstr "Najwyższy poziom"
 
 msgid "The highest level of your building."
-msgstr ""
+msgstr "Najwyższy poziom tego budynku."
 
 msgid "Toolbox for indoor mapping assistance"
-msgstr ""
+msgstr "Asystent mapowania indoor"
 
 msgid "InfoMode"
 msgstr ""
@@ -34002,6 +34467,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -35491,9 +35960,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr "Eksport"
-
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -35609,10 +36075,10 @@ msgid "List of Numbers"
 msgstr "Lista numerów"
 
 msgid "add to existing associatedStreet relation"
-msgstr ""
+msgstr "dodaj do istniejącej relacji associatedStreet"
 
 msgid "create an associatedStreet relation"
-msgstr ""
+msgstr "utwórz nową relację associatedStreet"
 
 msgid "keep outline way"
 msgstr "zachowaj linię obrysu"
@@ -35630,13 +36096,13 @@ msgid "Highest number"
 msgstr "Największy numer"
 
 msgid "Lowest housenumber cannot be higher than highest housenumber"
-msgstr ""
+msgstr "Najmniejszy numer domu nie może być większy od największego"
 
 msgid "Housenumbers do not match odd/even setting"
-msgstr ""
+msgstr "Numery domów nie pasują do ustawienia parzyste/nieparzyste"
 
 msgid "Segment must be a number greater 1"
-msgstr ""
+msgstr "Segment musi być numerem większym od 1"
 
 msgid "{0} must be greater than 0"
 msgstr "{0} musi być większe nić 0"
@@ -35670,66 +36136,75 @@ msgid ""
 "select a street for the addr:street tag and a node to mark the start of "
 "numbering.)"
 msgstr ""
+"Wybierz pojedynczą, zamkniętą drogę z przynajmniej czterema węzłami. "
+"(Opcjonalnie możesz wybrać ulicę dla znacznika addr:street i węzeł od "
+"którego zacznie się numerowanie.)"
 
 msgid "Terrace"
-msgstr ""
+msgstr "Scalanie"
 
 msgid "Pass over element without marking it"
-msgstr ""
+msgstr "Pomija element i przechodzi do następnego"
 
 msgid "Mark element done"
-msgstr ""
+msgstr "Zaznacza element jako gotowy i przechodzi dalej"
 
 msgid "Todo list"
 msgstr "Lista zadań do wykonania"
 
 msgid "Open the todo list."
-msgstr ""
+msgstr "Otwiera listę zadań do wykonania."
 
 msgid "Zoom to the selected item in the todo list."
-msgstr ""
+msgstr "Przybliża do elementu zaznaczonego na liście zadań"
 
 msgid "Select all Unmarked and Zoom"
-msgstr ""
+msgstr "Wybierz wszystkie niezaznaczone i przybliż"
 
 msgid "Select and zoom to all of the unmarked items in the todo list."
 msgstr ""
+"Wybiera i przybliża na wszystkie niezaznaczone elementy na liście zadań do "
+"wykonania."
 
 msgid "Pass"
-msgstr ""
+msgstr "Pomiń"
 
 msgid "Moves on to the next item but leaves this item in the todo list. ([)."
 msgstr ""
+"Przenosi na następny element ale ten obecny zostawia na liście zadań do "
+"wykonania. ([)."
 
 msgid "Add the selected items to the todo list."
-msgstr ""
+msgstr "Dodaje wybrane elementy do listy zadań."
 
 msgid "Mark selected"
 msgstr "Zaznacz wybrane"
 
 msgid "Mark the selected items (on the map) as done in the todo list."
-msgstr ""
+msgstr "Oznacza wybrane (na mapie) elementy jako gotowe na liście zadań."
 
 msgid "Mark the selected item in the todo list as done. (])."
-msgstr ""
+msgstr "Oznacza wybrany element jako gotowy na liście zadań. (])."
 
 msgid "Mark all"
 msgstr "Zaznacz wszystkie"
 
 msgid "Mark all items in the todo list as done."
-msgstr ""
+msgstr "Zaznacza wszystkie elementy na liście zadań jako gotowe."
 
 msgid "Unmark all"
 msgstr "Odznacz wszystkie"
 
 msgid "Unmark all items in the todo list that have been marked as done."
 msgstr ""
+"Odznacza wszystkie elementy na liście zadań które były oznaczone jako gotowe."
 
 msgid "Clear the todo list"
-msgstr ""
+msgstr "Wyczyść listę"
 
 msgid "Remove all items (marked and unmarked) from the todo list."
 msgstr ""
+"Usuwa wszystkie elementy (zaznaczone i nie zaznaczone) z listy zadań."
 
 msgid "Todo list {0}/{1} ({2}%)"
 msgstr "Lista zadań do wykonania {0}/{1} ({2}%)"
@@ -35756,7 +36231,7 @@ msgid "Select the checkbox to:"
 msgstr ""
 
 msgid "Skip"
-msgstr ""
+msgstr "Pomiń"
 
 msgid "Skip Error"
 msgstr "Pomiń błąd"
@@ -35777,13 +36252,13 @@ msgid "Select a task ..."
 msgstr "Wybierz zadanie..."
 
 msgid "Setting default URL"
-msgstr ""
+msgstr "Ustawianie domyślnego adresu URL"
 
 msgid "Enter the new URL"
-msgstr ""
+msgstr "Wprowadź nowy adres URL"
 
 msgid "Setting new URL: "
-msgstr ""
+msgstr "Ustawianie nowego adresu URL: "
 
 msgid "Set download area (m²)"
 msgstr "Wybierz obszar do pobrania (m²)"
@@ -35882,7 +36357,7 @@ msgid "No set of parameter is active!"
 msgstr "Brak aktywnego zestawu parametrów!"
 
 msgid "Select parameter"
-msgstr ""
+msgstr "Wybierz parametr"
 
 msgid "Tracer2: add a way with {0} points"
 msgstr "Tracer2: dodanie linii z {0} punktami"
@@ -36472,7 +36947,7 @@ msgid ""
 "Updates to this turn restriction can''t be saved unless deleted members are "
 "removed.<br>How to you want to proceed?"
 msgstr ""
-"Poprawki tego ograniczenia skrętu nie mogą być zapisane  chyba, że skasowani "
+"Poprawki tego ograniczenia skrętu nie mogą być zapisane chyba, że skasowani "
 "członkowie zostaną usunięci.<br>Co chcesz zrobić?"
 
 msgid "Remove deleted members and save"
@@ -36725,8 +37200,8 @@ msgid ""
 "Warning: the preference with key ''{0}'' has an unsupported value ''{1}''. "
 "Assuming the default value ''set-a''."
 msgstr ""
-"Ostrzeżenie: klucz preferencji  „{0}” ma nieprawidłową wartość „{1}”. "
-"Przyjmuję wartość domyślną „set-a”."
+"Ostrzeżenie: klucz preferencji ''{0}'' ma nieprawidłową wartość ''{1}''. "
+"Przyjmuję wartość domyślną ''set-a''."
 
 msgid ""
 "This turn restriction uses the way <span class=\"object-name\">{0}</span> "
@@ -37682,7 +38157,7 @@ msgid "Wikidata"
 msgstr "Wikidata"
 
 msgid "Fetches all coordinates from Wikidata in the current view"
-msgstr "Pobieranie wszystkich współrzędnych z  Wikidata w bieżącym widoku"
+msgstr "Pobieranie wszystkich współrzędnych z Wikidata w bieżącym widoku"
 
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr "Pobiera wszystkie współrzędne z Wikipedii dla aktualnego widoku"
diff --git a/i18n/po/pt.po b/i18n/po/pt.po
index 934311e..1e1e65a 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-11-26 00:06+0100\n"
-"PO-Revision-Date: 2017-11-16 13:40+0000\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\n"
+"PO-Revision-Date: 2017-12-12 20:06+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-11-26 05:00+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:58+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: pt\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1053,6 +1053,12 @@ msgid "Select if the data should be downloaded into a new layer"
 msgstr ""
 "Selecione se prefere que os dados sejam descarregados numa nova camada"
 
+msgid "Zoom to downloaded data"
+msgstr "Enquadrar visualização da área descarregada"
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr "Ative para fazer zoom da nova área descarregada."
+
 msgid "Download Location"
 msgstr "Localização do Descarregamento"
 
@@ -2474,6 +2480,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr "Confirmação"
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr "Lista de relações recentes"
 
@@ -3297,7 +3328,7 @@ msgid "Failed to load defaults cache file: {0}"
 msgstr "Não foi possível carregar o ficheiro de cache padrão: {0}"
 
 msgid "Failed to delete faulty defaults cache file: {0}"
-msgstr ""
+msgstr "Não foi possível eliminar o ficheiro temporário padrão: {0}"
 
 msgid "Layer: {0}"
 msgstr "Camada: {0}"
@@ -3353,18 +3384,6 @@ msgstr "Não foi encontrado o ficheiro de revisão do JOSM ''/REVISION''."
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr "Já foi registado o conflito para o objeto ''{0}''."
 
-msgid "Decimal Degrees"
-msgstr "Graus Decimais"
-
-msgid "deg° min'' sec\""
-msgstr "gra° min'' seg\""
-
-msgid "deg° min'' (Nautical)"
-msgstr "gra° min'' (Náutica)"
-
-msgid "Projected Coordinates"
-msgstr "Coordenadas Projetadas"
-
 msgctxt "compass"
 msgid "S"
 msgstr "S"
@@ -3381,9 +3400,21 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
+msgid "deg° min'' sec\""
+msgstr "gra° min'' seg\""
+
+msgid "Decimal Degrees"
+msgstr "Graus Decimais"
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr "Não foi possível processar o valor da coordenada: ''{0}''"
 
+msgid "deg° min'' (Nautical)"
+msgstr "gra° min'' (Náutica)"
+
+msgid "Projected Coordinates"
+msgstr "Coordenadas Projetadas"
+
 msgid "Date of imagery: {0}"
 msgstr "Data das imagens aéreas: {0}"
 
@@ -5825,7 +5856,7 @@ msgid "Click to cancel the current operation"
 msgstr "Clique para cancelar a operação em curso"
 
 msgid "In background"
-msgstr "Em segundo plano"
+msgstr "Passar para segundo plano"
 
 msgid "Click to run job in background"
 msgstr "Clique para fazer a tarefa em segundo plano"
@@ -9062,12 +9093,6 @@ msgstr ""
 "abrir a janela manualmente no menu ''Ficheiro - Descarregar do "
 "OpenStreetMap''.</html>"
 
-msgid "Zoom to downloaded data"
-msgstr "Enquadrar visualização da área descarregada"
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr "Ative para fazer zoom da nova área descarregada."
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9175,7 +9200,7 @@ msgid "Query Wizard"
 msgstr "Construtor de Consultas"
 
 msgid "Your saved queries:"
-msgstr "As suas consultas gravadas:"
+msgstr "Consultas Overpass gravadas:"
 
 msgid "Show/hide Overpass snippet list"
 msgstr "Mostrar / ocultar lista de consultas gravadas"
@@ -9727,6 +9752,8 @@ msgid ""
 "A background upload is already in progress. Kindly wait for it to finish "
 "before uploading new changes"
 msgstr ""
+"Está a decorrer um envio em segundo plano. Espere que este termine antes de "
+"enviar novas alterações."
 
 msgid "I would like someone to review my edits."
 msgstr "Gostaria que alguém verificasse as minhas edições."
@@ -10792,6 +10819,12 @@ msgstr "Metadados "
 msgid "Load tile"
 msgstr "Carregar tela"
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr "Não foi possível criar a fonte das telas"
 
@@ -10906,10 +10939,10 @@ msgstr "Nome: {0}"
 msgid "Description: {0}"
 msgstr "Descrição: {0}"
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
-msgstr[0] "{0} trilho GPS"
-msgstr[1] "{0} trilhos GPS"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Timespan"
 msgstr "Diferença temporal"
@@ -10917,6 +10950,9 @@ msgstr "Diferença temporal"
 msgid "Length"
 msgstr "Distância"
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr "Distância: {0}"
 
@@ -10930,14 +10966,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] "{0} ponto"
 msgstr[1] "{0} pontos"
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
-msgstr[0] "{0} trilho GPS, "
-msgstr[1] "{0} trilhos GPS, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] "{0} trilho GPS"
+msgstr[1] "{0} trilhos GPS"
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr "Gravar ficheiro GPX"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr "Identificador"
 
@@ -10980,6 +11039,16 @@ msgstr "Gravar Camada"
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] "{0} erro reportado"
@@ -11332,29 +11401,20 @@ msgstr "Erro no ficheiro {0}"
 msgid "Display geotagged images"
 msgstr "Mostrar imagens geo-posicionadas"
 
-msgid "Previous"
-msgstr "Anterior"
+msgid "Next"
+msgstr "Seguinte"
 
-msgid "Show previous Image"
-msgstr "Mostrar imagem anterior"
+msgid "Show next Image"
+msgstr "Mostrar imagem seguinte"
 
 msgid "Geoimage: {0}"
 msgstr "Imagem geo-posicionada: {0}"
 
-msgid "Remove photo from layer"
-msgstr "Remover fotografia da camada"
-
-msgid "Delete File from disk"
-msgstr "Eliminar ficheiro do disco"
-
-msgid "Copy image path"
-msgstr "Copiar caminho da imagem"
-
-msgid "Next"
-msgstr "Seguinte"
+msgid "Previous"
+msgstr "Anterior"
 
-msgid "Show next Image"
-msgstr "Mostrar imagem seguinte"
+msgid "Show previous Image"
+msgstr "Mostrar imagem anterior"
 
 msgid "Show first Image"
 msgstr "Mostrar a primeira Imagem"
@@ -11368,6 +11428,15 @@ msgstr "Centrar vista"
 msgid "Zoom best fit and 1:1"
 msgstr "Enquadrar vista melhor e 1:1"
 
+msgid "Remove photo from layer"
+msgstr "Remover fotografia da camada"
+
+msgid "Delete File from disk"
+msgstr "Eliminar ficheiro do disco"
+
+msgid "Copy image path"
+msgstr "Copiar caminho da imagem"
+
 msgid "Move dialog to the side pane"
 msgstr "Mover janela para o painel lateral"
 
@@ -12884,7 +12953,7 @@ msgid "Display discardable keys"
 msgstr "Mostrar chaves descartáveis"
 
 msgid "Use auto filters"
-msgstr ""
+msgstr "Usar filtros automáticos"
 
 msgid "Rule"
 msgstr "Regra"
@@ -12970,6 +13039,8 @@ msgstr ""
 msgid ""
 "Display buttons to automatically filter numeric values of a predefined tag"
 msgstr ""
+"Mostra botões no canto superior esquerdo para filtrar automaticamente de "
+"acordo com uma etiqueta pré-definida"
 
 msgid "Options that affect drawing performance"
 msgstr "Opções que influenciam a performance"
@@ -13218,7 +13289,7 @@ msgid "Overlay gain adjustment"
 msgstr ""
 
 msgid "Lower limit of visibility"
-msgstr ""
+msgstr "Limite inferior de visibilidade"
 
 msgid "Adjust the gain of overlay blending."
 msgstr ""
@@ -13257,7 +13328,7 @@ msgid "Show object ID in selection lists"
 msgstr "Mostrar identificadores dos objetos em listas de seleção"
 
 msgid "Show node coordinates in selection lists"
-msgstr ""
+msgstr "Mostrar coordenadas de nós em listas de seleção"
 
 msgid "Show localized name in selection lists"
 msgstr ""
@@ -14902,11 +14973,9 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr "O nó {0} eliminado faz parte da linha {1}"
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
-"A linha {0} com {1} nós contém nós incompletos porque pelo menos um dos nós "
-"não se encontra nos dados descarregados."
 
 msgid ""
 "Relation with external id ''{0}'' refers to a missing primitive with "
@@ -15658,6 +15727,12 @@ msgstr "Foi pedido ao Controlo Remoto para abrir um ficheiro local."
 msgid "Do you want to allow this?"
 msgstr "Quer permitir isto?"
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr "Confirmar a ação do Controlo Remoto"
 
@@ -21369,6 +21444,12 @@ msgstr "Lixo"
 msgid "Recycling Centre"
 msgstr "Centro de Reciclagem"
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr "excrementos de cães"
+
 msgid "Waste Disposal/Dumpster"
 msgstr "Contentor de lixo"
 
@@ -21789,7 +21870,7 @@ msgid "Boule"
 msgstr "Jogo de Bolas Metálicas (Boule)"
 
 msgid "Lawn Bowling"
-msgstr ""
+msgstr "Lawn Bowling"
 
 msgid "Cricket"
 msgstr "Críquete"
@@ -22885,11 +22966,11 @@ msgstr ""
 
 msgctxt "power"
 msgid "mechanical"
-msgstr ""
+msgstr "mecânico"
 
 msgctxt "power"
 msgid "circuit_breaker"
-msgstr ""
+msgstr "disjuntor"
 
 msgctxt "power"
 msgid "disconnector"
@@ -24016,7 +24097,7 @@ msgid "Blacksmith"
 msgstr "Ferreiro"
 
 msgid "Metal construction"
-msgstr "Contrução metálica"
+msgstr "Construção metálica"
 
 msgid "Geography"
 msgstr "Geografia"
@@ -25380,6 +25461,14 @@ msgstr "Transportes Públicos (ÖPNV)"
 msgid "Hike & Bike"
 msgstr "Hike & Bike"
 
+msgid "OpenSnowMap overlay"
+msgstr "Camada OpenSnowMap"
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+"Camada de imagens aéreas para mapeamento de pistas de esqui no "
+"OpenStreetMap. Atualizado todos os dias."
+
 msgid "skobbler"
 msgstr "skobbler"
 
@@ -25472,11 +25561,13 @@ msgstr ""
 "afetadas por nuvens e neve (cor verdadeira)"
 
 msgid "Municipality of Tirana (Open Labs GeoPortal)"
-msgstr ""
+msgstr "Município de Tirana (Open Labs GeoPortal)"
 
 msgid ""
 "Streets & Builings provided by the Muncipality of Tirana hosted by Open Labs"
 msgstr ""
+"Estradas e edifícios fornecidos pelo Município de Tirana, serviço alojado "
+"pelo Open Labs."
 
 msgid "imagico.de OSM images for mapping: Southern Transantarctic Mountains"
 msgstr "imagico.de imagens OSM para mapear: Montes Transantárticos do Sul"
@@ -25509,7 +25600,7 @@ msgid "IGN topographical map (TMS)"
 msgstr "IGN mapa topográfico (TMS)"
 
 msgid "IGN topographical map (WMTS)"
-msgstr ""
+msgstr "IGN mapa topográfico (WMTS)"
 
 msgid "IGN topographical map (WMS)"
 msgstr "IGN mapa topográfico (WMS)"
@@ -25593,19 +25684,19 @@ msgid "IGN orthophoto Rosario (WMTS)"
 msgstr "IGN ortofoto Rosario (WMTS)"
 
 msgid "IGN orthophoto Salta (WMTS)"
-msgstr ""
+msgstr "IGN ortofoto Salta (WMTS)"
 
 msgid "IGN orthophoto Salta 1 (WMTS)"
-msgstr ""
+msgstr "IGN ortofoto Salta 1 (WMTS)"
 
 msgid "IGN orthophoto Salta 2 (WMTS)"
-msgstr ""
+msgstr "IGN ortofoto Salta 2 (WMTS)"
 
 msgid "IGN orthophoto Salta 3 (WMTS)"
-msgstr ""
+msgstr "IGN ortofoto Salta 3 (WMTS)"
 
 msgid "IGN orthophoto Salta 4 (WMTS)"
-msgstr ""
+msgstr "IGN ortofoto Salta 4 (WMTS)"
 
 msgid "IGN orthophoto Salto Grande (WMTS)"
 msgstr "IGN ortofoto Salto Grande (WMTS)"
@@ -25711,8 +25802,9 @@ 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 "Camada ortofoto fornecida por basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
+msgstr ""
 
 msgid "Geoimage.at MaxRes"
 msgstr "Geoimage.at MaxRes"
@@ -25814,7 +25906,7 @@ msgid "URBIS 2016 aerial imagery"
 msgstr "URBIS 2016 imagens aéreas"
 
 msgid "URBIS 2017 aerial imagery"
-msgstr ""
+msgstr "URBIS 2017 imagens aéreas"
 
 msgid "SPW(allonie) PICC numerical imagery"
 msgstr "SPW(allonie) PICC numerical imagery"
@@ -25875,12 +25967,14 @@ msgid "Addresses data from IBGE"
 msgstr "IBGE Brasil - Dados de endereços"
 
 msgid "Street names IBGE Salvador-BA"
-msgstr ""
+msgstr "Nomes de estradas IBGE Salvador-BA"
 
 msgid ""
 "Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
 "IBGE."
 msgstr ""
+"Geometria das estradas e nomes em Salvador, Bahia. Fonte: Faces de "
+"Logradouro - IBGE."
 
 msgid "Rio Mosaic 2013"
 msgstr "Rio Mosaic 2013"
@@ -25967,19 +26061,19 @@ msgid "DER-ES"
 msgstr "DER-ES"
 
 msgid "IBGE-BC250 Isolated Rural Location"
-msgstr "IBGE-BC250 Brasil - Localização Rural Isolada"
+msgstr "IBGE-BC250 Brasil - Aglomerado Rural Isolado"
 
 msgid "IBGE-BC250 Landing strip"
-msgstr ""
+msgstr "IBGE-BC250 Pista de Pouso"
 
 msgid "IBGE-BC250 River drains"
-msgstr ""
+msgstr "IBGE-BC250 Desaguagens de Rios"
 
 msgid "IBGE-BC250 Highways stretches"
-msgstr ""
+msgstr "IBGE-BC250 Trecho Rodoviário"
 
 msgid "IBGE-BC250 Indigenous Lands"
-msgstr "IBGE-BC250 Solo Indígena"
+msgstr "IBGE-BC250 Terra Indígenas"
 
 msgid "IBGE-BC250 Public Land (Military)"
 msgstr "IBGE-BC250 Solo Público (Militar)"
@@ -25988,7 +26082,7 @@ msgid "IBGE-BC250 Units of Sustainable Use - APA"
 msgstr "IBGE-BC250 Unidades de Uso Sustentável - APA"
 
 msgid "IBGE-BC250 Villages"
-msgstr ""
+msgstr "IBGE-BC250 Vilas"
 
 msgid "IBGE-BCIM Stations for Electrical Power Generation"
 msgstr "IBGE-BCIM Estações para Geração de Energia Elétrica"
@@ -26117,7 +26211,7 @@ msgid "Vejmidte"
 msgstr "Vejmidte"
 
 msgid "imagico.de OSM images for mapping: El Altar"
-msgstr ""
+msgstr "imagico.de OSM imagens para mapear: El Altar"
 
 msgid ""
 "2007 ASTER image offering better glacier coverage than common sources (true "
@@ -26126,6 +26220,7 @@ msgstr ""
 
 msgid "imagico.de OSM images for mapping: Darwin and Wolf islands, Galapagos"
 msgstr ""
+"imagico.de OSM imagens para mapear: ilhas de Darwin e Wolf, Galápagos"
 
 msgid ""
 "Recent image, only old and poor images in other sources currently (true "
@@ -26147,6 +26242,12 @@ msgstr "Estónia - Cadastro (Maaamet)"
 msgid "Estonia Forestry (Maaamet)"
 msgstr "Estónia - Florestas (Maaamet)"
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr "BANO"
 
@@ -26235,9 +26336,6 @@ msgstr ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
 
-msgid "Hamburg (40 cm)"
-msgstr "Hamburgo (40 cm)"
-
 msgid "Hamburg (20 cm)"
 msgstr "Hamburgo (20 cm)"
 
@@ -26263,12 +26361,12 @@ msgid "Berlin aerial photograph 2016"
 msgstr "Berlim fotografias aéreas 2016"
 
 msgid "Berlin aerial photograph 2017"
-msgstr ""
+msgstr "Berlim fotografias aéreas 2017"
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -26670,18 +26768,6 @@ msgstr "geoportail.lu todas as camadas"
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr "Luxemburgo Inspire - Caminho de Ferro"
-
-msgid "Luxembourg Inspire Roads"
-msgstr "Luxemburgo Inspire - Estradas"
-
-msgid "Luxembourg Inspire Water"
-msgstr "Luxembourg Inspire Water"
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Delta do Níger Outubro 2012 Landsat"
 
@@ -26705,8 +26791,158 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
-msgstr "Svalbard -Ortofoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
+msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
 msgstr ""
@@ -26767,11 +27003,11 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
-msgstr "Geoportal 2: Ortofotomapa (imagem aérea)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
-msgstr "Geoportal 2: Ortofotomapa (imagem aérea) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
+msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr "Geoportal 2: PRNG (nomes geográficos)"
@@ -26779,119 +27015,128 @@ msgstr "Geoportal 2: PRNG (nomes geográficos)"
 msgid "Geoportal 2: ISOK hillshade"
 msgstr "Geoportal 2: ISOK hillshade"
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
-msgstr "Będzin: Ortofotomapa 2013 (imagem aérea)"
+msgid "polska.e-mapa.net: Buildings"
+msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
-msgstr "Będzin: Budynki (edifícios)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
+msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
-msgstr "Bytom: Ortofotomapa 2012 (imagem aérea)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
+msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr "Bytom: Fotoplan 2014 (imagens aéreas)"
 
-msgid "Bytom: Budynki (buildings)"
-msgstr "Bytom: Budynki (edifícios)"
+msgid "Bytom: Buildings"
+msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
-msgstr "Chorzów: Budynki (edifícios)"
+msgid "Chorzów: Buildings"
+msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
-msgstr "Częstochowa: Budynki (edifícios)"
+msgid "Częstochowa: Buildings"
+msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2011 (imagem aérea)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
+msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2013 (imagens aéreas)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
+msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2014 (imagens aéreas)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
+msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
-msgstr "Gliwice: Ortofotomapa 2013 (imagem aérea)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
+msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
-msgstr "Gliwice: Budynki (edifícios)"
+msgid "Gliwice: Buildings"
+msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
-msgstr "Katowice: Ortofotomapa (imagem aérea)"
+msgid "Katowice: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
-msgstr "Katowice: Budynki (edifícios)"
+msgid "Katowice: Buildings"
+msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
-msgstr "Łódź: Budynki (edifícios)"
+msgid "Łódź: Buildings"
+msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
-msgstr "Łódź: Ortofotomapa (imagem aérea)"
+msgid "Łódź: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
-msgstr "Condado de Dębica: Budynki (edifícios)"
+msgid "Powiat dębicki: Buildings"
+msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
-msgstr "Polónia, Condado de Lubaczów: Edifícios"
+msgid "Powiat lubaczowski: Buildings"
+msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
-msgstr "Polónia, Condado de Łańcut: Edifícios"
+msgid "Powiat łańcucki: Buildings"
+msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
-msgstr "Condado de Poznań: Budynki (edifícios)"
+msgid "Powiat poznański: Buildings"
+msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
-msgstr "Powiat poznański: Ortofotomapa (imagens aéreas)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
-msgstr "Powiat ropczycko-sędziszowski: Budynki (edifícios)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
+msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
-msgstr "Polónia, Condado de Rzeszów: Edifícios"
+msgid "Powiat rzeszowski: Buildings"
+msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
-msgstr "Polónia, Condado de Rzeszów: Ortofotomapa (imagens aéreas)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
-msgstr "Polónia, Condado de Stalowa Wola: Edifícios"
+msgid "Powiat stalowowolski: Buildings"
+msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
-msgstr "Poznań: Ortofotomapa 2014 (imagens aéreas)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
+msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
-msgstr "Polónia, Przemyśl: Edifícios"
+msgid "Przemyśl: Buildings"
+msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
-msgstr "Polónia, Przemyśl: Ortofotomapa (imagens aéreas)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
+msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
-msgstr "Ruda Śląska: Ortofotomapa (imagem aérea)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
-msgstr "Rzeszów: Ortofotomapa (imagem aérea)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
-msgstr "Rzeszów: Budynki (edifícios)"
+msgid "Rzeszów: Buildings"
+msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
-msgstr "Siemianowice Śląskie: Ortofotomapa (imagem aérea)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
-msgstr "Siemianowice Śląskie: Budynki (edifícios)"
+msgid "Siemianowice Śląskie: Buildings"
+msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2008 (imagens aéreas)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
+msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2009 (imagem aérea)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
+msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2012 (imagens aéreas)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
+msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
-msgstr "Zabrze: Ortofotomapa 2011 (imagem aérea)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
+msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
-msgstr "Wrocław: Ortofotomapa 2015 (imagens aéreas)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
+msgstr ""
+
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
+msgstr ""
 
 msgid "ScanEx IRS"
 msgstr "ScanEx IRS"
@@ -27027,6 +27272,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr "Cantão da Argóvia 25cm (AGIS 2011)"
 
@@ -29823,15 +30080,12 @@ msgstr "Camada de objetos Mapillary"
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr "Mostra a camada com os objetos do mapa detetados pelo Mapillary"
 
-msgid "Start Mapillary layer"
-msgstr "Começar camada Mapillary"
+msgid "Open Mapillary layer"
+msgstr "Abrir camada Mapillary"
 
 msgid "Mapillary"
 msgstr "Mapillary"
 
-msgid "Create Mapillary layer"
-msgstr "Criar camada Mapillary"
-
 msgid "Download Mapillary images in current view"
 msgstr "Descarrregar imagens Mapillary na vista atual"
 
@@ -29891,15 +30145,9 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr "Enviar imagens"
-
-msgid "Upload Mapillary pictures"
+msgid "Upload Mapillary images"
 msgstr "Enviar imagens Mapillary"
 
-msgid "Upload pictures."
-msgstr "Enviar imagens."
-
 msgid "Walk mode"
 msgstr "Modo a pé"
 
@@ -29913,7 +30161,7 @@ msgid "Current Mapillary changeset"
 msgstr "Conjunto de alterações Mapillary atual"
 
 msgid "Open Mapillary changeset dialog"
-msgstr ""
+msgstr "Abrir painel de  conjunto de alterações Mapillary"
 
 msgid "Mapillary changeset"
 msgstr "Conjunto de alterações Mapillary"
@@ -29933,15 +30181,12 @@ msgstr "Exportar imagens selecionadas"
 msgid "Rewrite imported images"
 msgstr "Tornar a gravar as imagens importadas"
 
-msgid "Select a folder"
-msgstr "Selecionar pasta"
+msgid "Select a directory"
+msgstr "Selecionar diretório"
 
 msgid "Explore"
 msgstr "Explorar"
 
-msgid "Select a directory"
-msgstr "Selecionar diretório"
-
 msgid "Speed limit"
 msgstr "Limite de velocidade"
 
@@ -30074,6 +30319,13 @@ msgstr "Pré-visualizar imagens ao passar com o cursor sobre o ícone"
 msgid "Cut off sequences at download bounds"
 msgstr "Cortar sequências nos limites do descarregamento"
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+"Ao abrir a imagem Mapillary no navegador de Internet, mostrar o editor de "
+"desfocagem em vez do visualizador de imagens"
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr "Ativar funcionalidades experimentais beta (pode ser instável)"
 
@@ -30081,7 +30333,7 @@ msgid "Download mode"
 msgstr "Modo de descarregamento"
 
 msgid "Number of images to be pre-fetched (forwards and backwards)"
-msgstr ""
+msgstr "Número de imagens a serem pré-carregadas (anteriores e seguintes)"
 
 msgid "You are logged in as ''{0}''."
 msgstr "Está autenticado como ''{0}''."
@@ -30147,7 +30399,7 @@ msgid "Select directory to import images from"
 msgstr "Selecione a pasta com imagens a importar"
 
 msgid "From existing image layer"
-msgstr ""
+msgstr "Da camada de imagens existente"
 
 msgid "Import exception"
 msgstr "Erro de importação"
@@ -30161,6 +30413,7 @@ 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."
 msgstr ""
+"A etiqueta com a chave <i>{0}</i> já existe no objeto do OSM selecionado."
 
 msgid ""
 "Do you really want to replace the current value <i>{0}</i> with the new "
@@ -30196,7 +30449,7 @@ msgstr ""
 "Mostra informação detalhada sobre a imagem atual selecionada do Mapillary"
 
 msgid "Show detections on top of image"
-msgstr ""
+msgstr "Mostrar deteções por cima da imagem"
 
 msgid "View in browser"
 msgstr "Ver no navegador"
@@ -30208,28 +30461,28 @@ msgid "Add Mapillary tag"
 msgstr "Adicionar etiqueta Mapillary"
 
 msgid "Image detections"
-msgstr ""
+msgstr "Deteções de imagem"
 
 msgid "Image actions"
-msgstr ""
+msgstr "Ações de imagem"
 
 msgid "Image key"
-msgstr ""
+msgstr "Chave da imagem"
 
 msgid "Sequence key"
-msgstr ""
+msgstr "Chave da sequência"
 
 msgid "{0} detections"
-msgstr ""
+msgstr "{0} deteções"
 
 msgid "image has no key"
-msgstr ""
+msgstr "A imagem não tem chave"
 
 msgid "unknown user"
 msgstr "utilizador desconhecido"
 
 msgid "sequence has no key"
-msgstr ""
+msgstr "a sequência não tem chave"
 
 msgid "Could not open the URL {0} in a browser"
 msgstr "Não foi possível abrir o URL {0} no navegador de internet"
@@ -30241,7 +30494,7 @@ msgid "All map objects loaded."
 msgstr "Todos os objetos do mapa carregados."
 
 msgid "Too many map objects, zoom in to see all."
-msgstr ""
+msgstr "Demasiados objetos, aproxime para os ver a todos."
 
 msgid "Downloading map objects failed!"
 msgstr "Não foi possível descarregar objetos do mapa!"
@@ -30335,7 +30588,7 @@ msgid "Total Mapillary images: {0}"
 msgstr "Total de imagens Mapillary: {0}"
 
 msgid "Submitting Mapillary Changeset"
-msgstr ""
+msgstr "Enviar Conjunto de Alterações Mapillary"
 
 msgid "No images found"
 msgstr "Nenhuma imagem encontrada"
@@ -31457,7 +31710,7 @@ msgid "Add \"source=...\" to elements?"
 msgstr "Adicionar \"source=...\" aos objetos?"
 
 msgid "Download from Cadastre"
-msgstr ""
+msgstr "Descarregar de Cadastre"
 
 msgid "Objects:"
 msgstr ""
@@ -34898,6 +35151,10 @@ msgstr "Tentar novamente"
 msgid "Unable to process file ''{0}'':"
 msgstr "Não foi possível processar o ficheiro ''{0}'':"
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr "Não foi possível eliminar o ficheiro!"
 
@@ -36445,9 +36702,6 @@ msgstr "Exportar dados de tráfego para um ficheiro de rede SUMO."
 msgid "SUMO Export"
 msgstr "Exportar SUMO"
 
-msgid "Export"
-msgstr "Exportar"
-
 msgid "AutoSave LiveData"
 msgstr "Gravar Automaticamente"
 
@@ -38694,7 +38948,7 @@ msgstr[1] ""
 "Substituir valores na etiqueta ''{0}'' {1} em {2} pelo novo valor ''{3}''?"
 
 msgid "Download from Sophox API"
-msgstr ""
+msgstr "Descarregar da API Sophox"
 
 msgid ""
 "Find places of education at least 2km, and at most 3km from the center of "
diff --git a/i18n/po/pt_BR.po b/i18n/po/pt_BR.po
index 6152483..7dbd6c4 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-11-26 00:06+0100\n"
-"PO-Revision-Date: 2017-11-17 13:24+0000\n"
-"Last-Translator: Nelson A. de Oliveira <naoliv at debian.org>\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\n"
+"PO-Revision-Date: 2017-12-30 04:32+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-11-26 05:09+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 05:07+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: pt_BR\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -391,7 +391,7 @@ msgid "Update multipolygon"
 msgstr "Atualizar multipolígono"
 
 msgid "Create multipolygon"
-msgstr "Criar múltipolígono"
+msgstr "Criar multipolígono"
 
 msgid "No data loaded."
 msgstr "Sem dados carregados."
@@ -451,10 +451,10 @@ msgid "Delete the active layer. Does not delete the associated file."
 msgstr "Exclua a camada ativa. Não exclua o arquivo associado."
 
 msgid "Dialogs panel"
-msgstr ""
+msgstr "Painel de diálogos"
 
 msgid "Toggle dialogs panel, maximize mapview"
-msgstr "Esconde o painel de diálogos,expande o mapa"
+msgstr "Esconde o painel de diálogos, expande o mapa"
 
 msgid "Toggle dialogs panel"
 msgstr "Mostrar/esconder o painel de diálogos"
@@ -481,7 +481,7 @@ msgid "Download data"
 msgstr "Baixar dados"
 
 msgid "Download map data from a server of your choice"
-msgstr ""
+msgstr "Baixa os dados do mapa a partir de um servidor a sua escolha"
 
 msgid ""
 "<html>This action will require {0} individual<br>download requests. Do you "
@@ -663,7 +663,7 @@ msgid "Are you really sure to continue?"
 msgstr "Tem certeza que quer continuar?"
 
 msgid "Please abort if you are not sure"
-msgstr "Por favor, aborte se você não tem serteza"
+msgstr "Por favor, cancele se não tiver certeza"
 
 msgid "The selected area is incomplete. Continue?"
 msgstr "A área selecionada está incompleta. Continuar?"
@@ -706,7 +706,7 @@ msgid "Fix tag conflicts"
 msgstr "Consertar conflito de etiquetas"
 
 msgid "Split ways into fragments"
-msgstr "Separar caminho em fragmentos"
+msgstr "Dividir caminho em fragmentos"
 
 msgid "Sorry. Cannot handle multipolygon relations with multiple outer ways."
 msgstr ""
@@ -1040,6 +1040,12 @@ msgstr "Separar camadas"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "Indique se os dados devem ser baixados em uma nova camada"
 
+msgid "Zoom to downloaded data"
+msgstr "Aproximar à área baixada"
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr "Selecionar para aproximar à nova área baixada."
+
 msgid "Download Location"
 msgstr "Transferir Local"
 
@@ -1444,7 +1450,7 @@ msgstr[1] ""
 "o caminho também."
 
 msgid "Which way segment should reuse the history of {0}?"
-msgstr "Qual segmento do caminho deve utili\\ar o histórico de {0}?"
+msgstr "Qual segmento do caminho deve utilizar o histórico de {0}?"
 
 msgid " [id: {0}]"
 msgstr " [id: {0}]"
@@ -1462,7 +1468,7 @@ msgid "Search presets"
 msgstr "Buscar predefinição"
 
 msgid "Discourage upload"
-msgstr ""
+msgstr "Desencorajar o envio"
 
 msgid "UnGlue Ways"
 msgstr "Desgrudar caminhos"
@@ -1619,7 +1625,7 @@ msgid "Undo {0}"
 msgstr "Desfazer {0}"
 
 msgid "Unselect All"
-msgstr "Desmarcar todos"
+msgstr "Desmarcar tudo"
 
 msgid "Unselect all objects."
 msgstr "Desmarcar todos objetos."
@@ -2438,6 +2444,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr "Confirmação"
 
+msgid "Export GPX file starting from first member"
+msgstr "Exporta o arquivo GPX iniciando no primeiro membro"
+
+msgid "Export GPX file starting from last member"
+msgstr "Exporta o arquivo GPX iniciando no último membro"
+
+msgid "Convert to GPX layer starting from first member"
+msgstr "Converte para uma camada GPX iniciando no primeiro membro"
+
+msgid "Convert to GPX layer starting from last member"
+msgstr "Converte para uma camada GPX iniciando no último membro"
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr "Relações Selecionadas"
+
 msgid "List of recent relations"
 msgstr "Lista de relações recentes"
 
@@ -2529,19 +2560,19 @@ msgid "MapCSS selector"
 msgstr "Seletor MapCSS"
 
 msgid "Selection settings"
-msgstr ""
+msgstr "Configurações de seleção"
 
 msgid "Additional settings"
-msgstr ""
+msgstr "Configurações adicionais"
 
 msgid "Search syntax"
-msgstr ""
+msgstr "Sintaxe de pesquisa"
 
 msgid "Invalid search expression"
 msgstr "Expressão de busca inválida"
 
 msgid "Search by preset"
-msgstr ""
+msgstr "Pesquisar por predefinição"
 
 msgid "Filter"
 msgstr "Filtro"
@@ -2565,7 +2596,7 @@ msgstr ""
 "{0}"
 
 msgid "Search hints"
-msgstr ""
+msgstr "Sugestões de pesquisa"
 
 msgid "basics"
 msgstr "fundamentos"
@@ -2647,10 +2678,12 @@ msgid "object without useful tags"
 msgstr "objeto sem tags úteis"
 
 msgid "all objects that use the address preset"
-msgstr ""
+msgstr "todos os objetos que usam a predefinição de endereço"
 
 msgid "all objects that use any preset under the Geography/Nature group"
 msgstr ""
+"todos os objetos que usam alguma predefinição dentro do grupo "
+"Geografia/Natureza"
 
 msgid "metadata"
 msgstr "metadado"
@@ -3311,18 +3344,6 @@ msgstr "A revisão do arquivo ''/REVISION'' foi perdida."
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr "já registrado um conflito para a primitiva ''{0}''."
 
-msgid "Decimal Degrees"
-msgstr "Graus decimais"
-
-msgid "deg° min'' sec\""
-msgstr "deg° min'' sec\""
-
-msgid "deg° min'' (Nautical)"
-msgstr "deg° min'' (Náutica)"
-
-msgid "Projected Coordinates"
-msgstr "Coordenadas de Projeto"
-
 msgctxt "compass"
 msgid "S"
 msgstr "S"
@@ -3339,8 +3360,20 @@ msgctxt "compass"
 msgid "E"
 msgstr "L"
 
+msgid "deg° min'' sec\""
+msgstr "deg° min'' sec\""
+
+msgid "Decimal Degrees"
+msgstr "Graus decimais"
+
 msgid "Unable to parse as coordinate value: ''{0}''"
-msgstr ""
+msgstr "Incapaz de analisar o valor de coordenadas: ''{0}''"
+
+msgid "deg° min'' (Nautical)"
+msgstr "deg° min'' (Náutica)"
+
+msgid "Projected Coordinates"
+msgstr "Coordenadas de Projeto"
 
 msgid "Date of imagery: {0}"
 msgstr "Data das imagens: {0}"
@@ -3712,7 +3745,7 @@ msgid "Range of numbers expected"
 msgstr "Intervalo de números esperado"
 
 msgid "Unknown preset name: "
-msgstr ""
+msgstr "Nome da predefinição desconhecido: "
 
 msgid "Failed to parse MapCSS selector"
 msgstr "Falha ao analisar o Selector MapCSS"
@@ -3822,7 +3855,7 @@ msgid "highlight"
 msgstr "ressaltar"
 
 msgid "highlight wireframe"
-msgstr "realcer wireframe"
+msgstr "realçar wireframe"
 
 msgid "untagged"
 msgstr "não marcado"
@@ -3834,16 +3867,18 @@ msgid "areatext"
 msgstr "Área de texto"
 
 msgid "Failed to create missing preferences directory: {0}"
-msgstr ""
+msgstr "Falha ao criar o diretório de preferências ausentes: {0}"
 
 msgid "<html>Failed to create missing preferences directory: {0}</html>"
 msgstr ""
+"<html>Falha ao criar o diretório de preferências ausentes: {0}</html>"
 
 msgid "Failed to create missing user data directory: {0}"
-msgstr ""
+msgstr "Falha ao criar o diretório dos dados de usuários ausentes: {0}"
 
 msgid "<html>Failed to create missing user data directory: {0}</html>"
 msgstr ""
+"<html>Falha ao criar o diretório dos dados de usuários ausentes: {0}</html>"
 
 msgid "Failed to create missing cache directory: {0}"
 msgstr "Falha ao criar diretório de cache ausente: {0}"
@@ -3939,7 +3974,7 @@ msgid "Checks for wrong multiple values"
 msgstr "Verifica a existência de vários valores errados"
 
 msgid "Numeric values"
-msgstr "Valores númericos"
+msgstr "Valores numéricos"
 
 msgid "Checks for wrong numeric values"
 msgstr "Verifica a existência de valores numéricos errados"
@@ -3957,10 +3992,10 @@ msgid "Checks for errors on relations"
 msgstr "Verifica se há erros em relações"
 
 msgid "Territories"
-msgstr ""
+msgstr "Territórios"
 
 msgid "Checks for territories-specific features"
-msgstr ""
+msgstr "Verifica as características específicas dos territórios"
 
 msgid "Unnecessary tags"
 msgstr "Tags desnecessárias"
@@ -4057,48 +4092,54 @@ msgid "Custom Projection"
 msgstr "Projeção personalizada"
 
 msgid "Error: {0}"
-msgstr ""
+msgstr "Erro: {0}"
 
 msgid "JOSM projection command line interface"
-msgstr ""
+msgstr "Interface de linha de comando de projeção JOSM"
 
 msgid "Description"
 msgstr "Descrição"
 
 msgid "Converts coordinates from one coordinate reference system to another."
 msgstr ""
+"Converte coordenadas em um sistema de referências de coordenadas para outro."
 
 msgid "Options"
-msgstr ""
+msgstr "Opções"
 
 msgid "Show this help"
 msgstr "Mostrar essa ajuda"
 
 msgid "Switch input and output crs"
-msgstr ""
+msgstr "Alternar a entrada e saída do SRC"
 
 msgid "Switch order of input coordinates (east/north, lon/lat)"
-msgstr ""
+msgstr "Alternar a ordem das coordenadas de entrada (leste/norte, lon/lat)"
 
 msgid "Switch order of output coordinates (east/north, lon/lat)"
-msgstr ""
+msgstr "Alternar a ordem das coordenadas de saída (leste/norte, lon/lat)"
 
 msgid "<crs>"
-msgstr ""
+msgstr "<SRC>"
 
 msgid ""
 "The format for input and output coordinate reference system is similar to "
 "that of the PROJ.4 software."
 msgstr ""
+"O formato das entradas e saídas do sistema de referência de coordenadas é "
+"similar ao software PROJ.4."
 
 msgid "[file]"
-msgstr ""
+msgstr "[arquivo]"
 
 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ê dados de entrada a partir de um ou mais arquivos listados como argumentos "
+"posicionais. Quando nenhum arquivo é fornecido, ou o nome do arquivo é \"-"
+"\", os dados são lidos a partir da entrada padrão."
 
 msgid "Examples"
 msgstr "Exemplos"
@@ -4106,9 +4147,11 @@ msgstr "Exemplos"
 msgid ""
 "Expected two coordinates, separated by white space, found {0} in ''{1}''"
 msgstr ""
+"Esperadas duas coordenadas, separadas por um espaço em branco, encontrado "
+"{0} em ''{1}''"
 
 msgid "Unable to parse number ''{0}''"
-msgstr ""
+msgstr "Incapaz de analisar o número ''{0}''"
 
 msgid "GRS80"
 msgstr "GRS80"
@@ -4217,7 +4260,7 @@ msgid "URL contains an invalid query: {0}"
 msgstr "A URL contém uma consulta inválida: {0}"
 
 msgid "URL contains an invalid fragment: {0}"
-msgstr "AURL contém um fragmento inválido: {0}"
+msgstr "A URL contém um fragmento inválido: {0}"
 
 msgid "URL validator"
 msgstr "Validador da URL"
@@ -4325,10 +4368,10 @@ msgid "Crossing barriers"
 msgstr "Cruzamento de barreiras"
 
 msgid "Self crossing"
-msgstr ""
+msgstr "Linhas que se cruzam"
 
 msgid "Self-crossing ways"
-msgstr ""
+msgstr "Caminhos que se auto-interceptam"
 
 msgid ""
 "This test checks if two roads, railways, waterways or buildings crosses in "
@@ -4505,7 +4548,7 @@ msgid "Area style way is not closed"
 msgstr "O estilo de caminho da área não está fechado"
 
 msgid "No outer way for boundary"
-msgstr ""
+msgstr "Não há caminho externo para o limite"
 
 msgid "No outer way for multipolygon"
 msgstr "Sem caminho externo para o multipolígono"
@@ -4548,7 +4591,7 @@ msgid "Multipolygon is not closed"
 msgstr "O multipolígono não está fechado"
 
 msgid "Self-intersecting polygon ring"
-msgstr ""
+msgstr "Auto-interseção na borda do polígono"
 
 msgid "Multipolygon rings share node(s)"
 msgstr "Anéis de multipolígono compartilham nó(s)"
@@ -4573,19 +4616,19 @@ msgstr ""
 "A via externa do multipolígono compartilha segmento(s) com outro anel"
 
 msgid "No useful role for multipolygon member"
-msgstr "Nenhuma regra últil para membro multipoligonal"
+msgstr "Nenhuma regra útil para membro multipoligonal"
 
 msgid "Non-Way in boundary"
-msgstr ""
+msgstr "O limite possui um objeto que não é um caminho"
 
 msgid "Non-Way in multipolygon"
 msgstr "Elementos que não são caminhos estão no multipolígono"
 
 msgid "Multipolygon member(s) repeated with different role"
-msgstr ""
+msgstr "Membro(s) do multipolígono repetidos com funções diferentes"
 
 msgid "Multipolygon member(s) repeated with same role"
-msgstr ""
+msgstr "Membro(s) do multipolígono repetidos com funções iguais"
 
 msgid "Missing name:* translation"
 msgstr "Faltando nome:* tradução"
@@ -4712,34 +4755,38 @@ msgid "Relation type is unknown"
 msgstr "Tipo de relação é desconhecida"
 
 msgid "Relation is empty"
-msgstr "Relação está vazio"
+msgstr "Relação está vazia"
 
 msgid ""
 "Role of relation member does not match expression ''{0}'' in template {1}"
 msgstr ""
+"A função do membro da relação não está de acordo com a expressão ''{0}'' no "
+"modelo {1}"
 
 msgid ""
 "Type ''{0}'' of relation member with role ''{1}'' does not match accepted "
 "types ''{2}'' in template {3}"
 msgstr ""
+"O tipo ''{0}'' do membro da relação com a função ''{1}'' não corresponde aos "
+"tipos aceitos ''{2}'' no modelo {3}"
 
 msgid "<empty>"
 msgstr "<vazio>"
 
 msgid "Role ''{0}'' unknown in templates ''{1}''"
-msgstr ""
+msgstr "A função ''{0}'' não é conhecida nos modelos ''{1}''"
 
 msgid "Empty role type found when expecting one of ''{0}''"
-msgstr ""
+msgstr "O tipo de função está vazio enquanto se espera um de ''{0}''"
 
 msgid "Role ''{0}'' missing"
-msgstr ""
+msgstr "A função ''{0}'' está ausente"
 
 msgid "Number of ''{0}'' roles too low ({1})"
-msgstr ""
+msgstr "O número de funções ''{0}'' é muito baixo ({1})"
 
 msgid "Number of ''{0}'' roles too high ({1})"
-msgstr ""
+msgstr "O número de funções ''{0}'' é muito alto ({1})"
 
 msgid "Self-intersecting ways"
 msgstr "Vias que se auto-interceptam"
@@ -5222,12 +5269,14 @@ msgid ""
 "You may face critical Java bugs; we highly recommend you to update to Java "
 "{0}."
 msgstr ""
+"Você poderá encontrar erros críticos do Java; é altamente recomendável que "
+"você atualize para o Java {0}."
 
 msgid "Would you like to update now ?"
 msgstr "Deseja atualizar agora?"
 
 msgid "Starting file watcher"
-msgstr ""
+msgstr "Iniciando o observador de arquivos"
 
 msgid "Executing platform startup hook"
 msgstr "Executando o gancho de inicialização da plataforma"
@@ -5266,23 +5315,26 @@ msgid "usage"
 msgstr "uso"
 
 msgid "commands"
-msgstr ""
+msgstr "comandos"
 
 msgid "launch JOSM (default, performed when no command is specified)"
 msgstr ""
+"executar JOSM (padrão, feito quando não é especificado nenhum comando)"
 
 msgid "render data and save the result to an image file"
-msgstr ""
+msgstr "renderiza os dados e salva o resultado em um arquivo de imagem"
 
 msgid "convert coordinates from one coordinate reference system to another"
 msgstr ""
+"converte coordenadas de um sistema de referência de coordenadas para outro"
 
 msgid ""
 "For details on the {0} and {1} commands, run them with the {2} option."
 msgstr ""
+"Para detalhes sobre os comandos {0} e {1}, execute-os com a opção {2}."
 
 msgid "The remainder of this help page documents the {0} command."
-msgstr ""
+msgstr "O restante desta página de ajuda documenta o comando {0}."
 
 msgid "options"
 msgstr "opções"
@@ -5406,7 +5458,7 @@ msgid "Make sure you load some data if you use --selection."
 msgstr "Tenha certeza de que irá carregar algum dado, caso use --selection."
 
 msgid "Log level is at {0} ({1}, {2})"
-msgstr ""
+msgstr "O nível de registro está em {0} ({1}, {2})"
 
 msgid "Plugin loading skipped"
 msgstr "Pulou-se o carregamento dos plugins"
@@ -5739,10 +5791,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 novamente no botão de filtro para ver todos os "
+"objetos.</p></html>"
 
 msgid "Enlarge"
 msgstr "Ampliar"
@@ -5751,7 +5805,7 @@ msgid "Shrink"
 msgstr "Reduzir"
 
 msgid "Show downloaded area"
-msgstr ""
+msgstr "Mostrar área baixada"
 
 msgid ""
 "<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
@@ -5801,6 +5855,8 @@ msgstr "O valor atual não é um índice de tile válido para este nível de zoo
 msgid ""
 "Opening the bug report failed. Please report manually using this website:"
 msgstr ""
+"A abertura do relatório de erros falhou. Por gentileza reporte manualmente "
+"usando este website:"
 
 msgid "You have encountered a bug in JOSM"
 msgstr "Você encontrou um bug no JOSM"
@@ -5815,13 +5871,13 @@ msgstr ""
 "versão do JOSM, por favor, considere a gentileza de reportar o problema."
 
 msgid "Debug information"
-msgstr ""
+msgstr "Informações de depuração"
 
 msgid "Manually report at:"
-msgstr ""
+msgstr "Reportar manualmente em:"
 
 msgid "Is JOSM up to date?"
-msgstr ""
+msgstr "O JOSM está atualizado?"
 
 msgid "Send bug report"
 msgstr "Enviar relatório de erro"
@@ -5833,12 +5889,17 @@ msgid ""
 "include information on how to reproduce the error and try to supply as much "
 "detail as possible."
 msgstr ""
+"Se você está rodando a versão mais recente do JOSM e dos plugins, envie o "
+"relatório de erro no nosso bugtracker.\n"
+"A informação do erro já deve estar preenchida para você. inclua informações "
+"sobre como reproduzir o erro, tentando fornecer a maior quantidade possível "
+"de detalhes."
 
 msgid "Report Bug"
 msgstr "Relatar um Erro"
 
 msgid "Suppress this error for this session."
-msgstr ""
+msgstr "Suprimir este erro nesta sessão."
 
 msgid "Suppress further error dialogs for this session."
 msgstr "Suprimir novos diálogos de erro para esta sessão."
@@ -5850,10 +5911,10 @@ msgid "Include the system status report."
 msgstr "Incluir o relatório de status do sistema"
 
 msgid "Include information about the data you were working on."
-msgstr ""
+msgstr "Incluir informações sobre os dados em que estava trabalhando."
 
 msgid "Include all stack traces."
-msgstr ""
+msgstr "Incluir todos os stack traces."
 
 msgid "Your current version of JOSM is {0}"
 msgstr "Sua versão atual do JOSM é {0}"
@@ -5863,6 +5924,8 @@ msgstr "O JOSM está procurando por atualizações..."
 
 msgid "An error occured while checking if your JOSM instance is up to date."
 msgstr ""
+"Um erro ocorreu ao tentar verificar se o JOSM que você está utilizando está "
+"atualizado."
 
 msgid "JOSM is up to date."
 msgstr "O JOSM está atualizado"
@@ -5875,6 +5938,8 @@ msgid ""
 "Before you file a bug report make sure you have updated to the latest "
 "version of JOSM here:"
 msgstr ""
+"Antes de enviar um relatório de erros certifique-se de que você tem a última "
+"versão do JOSM disponível em:"
 
 msgid "Update JOSM"
 msgstr "Atualize o JOSM"
@@ -5959,7 +6024,7 @@ msgstr "Conflito em imagem de fundo: soma de todas as etiquetas numéricas"
 
 msgid "Conflict foreground: sum all numeric tags"
 msgstr ""
-"Conflito em imagem de primero plano: soma de todas as etiquetas numéricas"
+"Conflito em imagem de primeiro plano: soma de todas as etiquetas numéricas"
 
 msgid "Conflict background: keep member"
 msgstr "Conflito de fundo: mantar membro"
@@ -6313,6 +6378,8 @@ msgstr "Primitivo"
 
 msgid "Merged members not frozen yet. Cannot build resolution command"
 msgstr ""
+"Os membros mesclados ainda não estão congelados. Não é possível compilar o "
+"comando de resolução."
 
 msgid "<undefined>"
 msgstr "<indefinido>"
@@ -7744,7 +7811,7 @@ msgid "Update the changeset from the OSM server"
 msgstr "Atualiza o changeset a partir do servidor do OSM"
 
 msgid "View changeset"
-msgstr ""
+msgstr "Visualizar o conjunto de alterações"
 
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
@@ -7763,7 +7830,7 @@ msgid ""
 "Zoom to the objects in the content of this changeset in the current data "
 "layer"
 msgstr ""
-"Zoom até os objetos contidos neste changeste na camada de dados atual"
+"Zoom até os objetos contidos neste changeset na camada de dados atual"
 
 msgid "Update changeset discussion"
 msgstr "Atualizar discussão do changeset"
@@ -8006,7 +8073,7 @@ msgstr ""
 "O valor atual não é um ID de usuário. Por gentileza digite um inteiro > 0"
 
 msgid "Please enter an integer value > 0"
-msgstr "Por favor digite um valor iteiro > 0"
+msgstr "Por favor, digite um valor inteiro > 0"
 
 msgid "URL: "
 msgstr "URL: "
@@ -8047,8 +8114,8 @@ msgid ""
 "Only changesets owned by myself (disabled. JOSM is currently run by an "
 "anonymous user)"
 msgstr ""
-"Só changesets de minha prorpriedade (desativado. JOSM é atualmente gerido "
-"por um usuário anônimo)"
+"Só changesets de minha propriedade (desativado. JOSM é atualmente gerido por "
+"um usuário anônimo)"
 
 msgid ""
 "Cannot restrict changeset query to the current user because the current user "
@@ -8141,7 +8208,7 @@ msgid "Move the selected layer one row up."
 msgstr "Mover a camada selecionada uma linha acima."
 
 msgid "Show/hide"
-msgstr "Mostar/Ocultar"
+msgstr "Mostrar/Ocultar"
 
 msgid "Toggle visible state of the selected layer."
 msgstr "Mudar estado de visibilidade do layer selecionado."
@@ -8181,7 +8248,7 @@ msgid "Tags/Memberships"
 msgstr "Tags/Membros"
 
 msgid "Tags for selected objects."
-msgstr "Tagps para objetos selecionados."
+msgstr "Tags para objetos selecionados."
 
 msgid "<different>"
 msgstr "<diferente>"
@@ -8226,7 +8293,7 @@ msgid "Edit the value of the selected key for all objects"
 msgstr "Editar o valor da chave selecionada para todos objetos"
 
 msgid "Edit Tags"
-msgstr "Editar tagas"
+msgstr "Editar tags"
 
 msgid "Go to OSM wiki for tag help"
 msgstr "Ir para a wiki do OSM para ajuda sobre a tag"
@@ -8410,7 +8477,7 @@ msgid "Download all child relations (recursively)"
 msgstr "Baixar todas as relações-filho (recursivamente)"
 
 msgid "Download All Children"
-msgstr "baixar todos os Filhos"
+msgstr "Baixar todos os Filhos"
 
 msgid "Download selected relations"
 msgstr "Baixar relações selecionadas"
@@ -8613,13 +8680,13 @@ msgid "Cancel the updates and close the dialog"
 msgstr "Cancelar atualizações e fechar janela"
 
 msgid "Yes, save the changes and close"
-msgstr "Sim, gravar as modificaçoes e fechar"
+msgstr "Sim, gravar as modificações e fechar"
 
 msgid "Click to save the changes and close this relation editor"
 msgstr "Clique para salvar as alterações e fechar este editor de relação"
 
 msgid "No, discard the changes and close"
-msgstr "Não, ignorar as modificaçoes e fechar"
+msgstr "Não, ignorar as modificações e fechar"
 
 msgid "Click to discard the changes and close this relation editor"
 msgstr "Clique para descartar as alterações e fechar este editor de relação"
@@ -8759,7 +8826,7 @@ msgstr ""
 "resolver este conflito primeiro, em seguida, tente novamente. </html>"
 
 msgid "Select the currently edited relation"
-msgstr ""
+msgstr "Selecionar a relação editada atual"
 
 msgid "Select objects for selected relation members"
 msgstr ""
@@ -8836,7 +8903,7 @@ msgid "Wrong number of arguments for bookmark"
 msgstr "Número de argumentos para marcador errado"
 
 msgid "Home location"
-msgstr ""
+msgstr "Pasta pessoal"
 
 msgid "Error reading bookmark entry: %s"
 msgstr "Erro lendo entrada do marcador: %s"
@@ -8858,7 +8925,7 @@ msgid "Create bookmark"
 msgstr "Criar favorito"
 
 msgid "Add a bookmark for the currently selected download area"
-msgstr "Adicionar um favotiro para a área de download atual selecionada"
+msgstr "Adicionar um favorito para a área de download atual selecionada"
 
 msgid ""
 "Currently, there is no download area selected. Please select an area first."
@@ -8879,7 +8946,7 @@ msgid "Rename the currently selected bookmark"
 msgstr "Renomear o favorito selecionado"
 
 msgid "Download bookmarks for my {0} last changesets"
-msgstr ""
+msgstr "Baixar os marcadores de meus últimos {0} conjuntos de alterações"
 
 msgid "min lat"
 msgstr "lat mín"
@@ -8936,12 +9003,6 @@ msgstr ""
 "que o JOSM for iniciado.<br>Você pode abri-lo manualmente a partir do menu "
 "Arquivo ou barra de ferramentas.</html>"
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -8979,7 +9040,7 @@ msgid "Download referrers (parent relations and ways)"
 msgstr "Baixar referentes (relações e caminhos pais)"
 
 msgid "Download from OSM"
-msgstr ""
+msgstr "Download do OSM"
 
 msgid "Data Sources and Types:"
 msgstr "Tipos e fontes de dados:"
@@ -9025,59 +9086,65 @@ msgid "Download area ok, size probably acceptable to server"
 msgstr "Área para baixar ok, possivelmente será aceito pelo servidor"
 
 msgid "Download from Overpass API"
-msgstr ""
+msgstr "Download do Overpass API"
 
 msgid ""
 "Place your Overpass query below or generate one using the Overpass Turbo "
 "Query Wizard"
 msgstr ""
+"Insira abaixo sua consulta Overpass ou crie uma usando o Assistente de "
+"Consultas Overpass Turbo"
 
 msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
 msgstr ""
+"Constrói uma consulta Overpass usando a ferramenta do Assistente de "
+"Consultas Overpass Turbo"
 
 msgid "Query Wizard"
-msgstr ""
+msgstr "Assistente de Consultas"
 
 msgid "Your saved queries:"
-msgstr ""
+msgstr "Suas consultas salvas:"
 
 msgid "Show/hide Overpass snippet list"
-msgstr ""
+msgstr "Mostrar/ocultar a lista de códigos Overpass"
 
 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 ""
+"Você inseriu uma consulta vazia. Deseja baixar todos os dados nesta área ao "
+"invés disto?"
 
 msgid "Download all data?"
-msgstr ""
+msgstr "Baixar todos os dados?"
 
 msgid "Add new snippet"
-msgstr ""
+msgstr "Adicionar novo código"
 
 msgid "Delete selected snippet"
-msgstr ""
+msgstr "Excluir o código selecionado"
 
 msgid "Edit selected snippet"
-msgstr ""
+msgstr "Editar o código selecionado"
 
 msgid "Overpass Turbo Query Wizard"
-msgstr ""
+msgstr "Assistente de Consultas Overpass Turbo"
 
 msgid "Build query"
 msgstr "Criar consulta"
 
 msgid "Build query and execute"
-msgstr ""
+msgstr "Construir e executar a consulta"
 
 msgid "Search :"
-msgstr ""
+msgstr "Pesquisa :"
 
 msgid "The Overpass wizard could not parse the following query:"
-msgstr ""
+msgstr "O assistente Overpass não conseguiu analisar esta consulta:"
 
 msgid "Parse error"
 msgstr "Erro na análise"
@@ -9086,58 +9153,74 @@ msgid ""
 "Allows you to interact with <i>Overpass API</i> by writing declarative, "
 "human-readable terms."
 msgstr ""
+"Permite que você interaja com o <i>Overpass API</i> escrevendo termos claros "
+"e legíveis por humanos."
 
 msgid ""
 "The <i>Query Wizard</i> tool will transform those to a valid overpass query."
 msgstr ""
+"A ferramenta <i>Assistente de Consulta</i> irá transformá-los em uma "
+"consulta overpass válida."
 
 msgid "For more detailed description see "
-msgstr ""
+msgstr "Para uma descrição mais detalhada veja a "
 
 msgid "<a href=\"{0}\">OSM Wiki</a>."
-msgstr ""
+msgstr "<a href=\"{0}\">Wiki do OSM</a>."
 
 msgid "Hints"
-msgstr ""
+msgstr "Sugestões"
 
 msgid "Download objects of a certain type."
-msgstr ""
+msgstr "Baixa os objetos de um determinado tipo."
 
 msgid "Download object by specifying a specific location. For example,"
-msgstr ""
+msgstr "Baixa os objetos determinando um local específico. Por exemplo,"
 
 msgid "{0} all objects having {1} as attribute are downloaded."
-msgstr ""
+msgstr "{0} todos os objetos que tem {1} como atributo serão baixados."
 
 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 correspondentes ao conjunto de chaves/valores ao redor "
+"de Berlim. Note que o valor padrão do raio é definido como 1000m, mas ele "
+"pode ser alterado 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 tem {1} como atributo."
 
 msgid ""
 "Instead of <i>location</i> any valid place name can be used like address, "
 "city, etc."
 msgstr ""
+"Ao invés de <i>localização</i> qualquer nome de lugar válido pode ser usado, "
+"como endereços, cidades, 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>Baixa objetos que tem um conjunto concreto de chave/valor, apenas a "
+"chave com qualquer conteúdo para o valor, ou o valor corresponde a uma "
+"expressão regular. Operadores \"Not equal\" 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 ""
+"Operadores lógicos básicos podem ser utilizados para criar consultas mais "
+"sofisticadas. Ao invés de \"or\" podem ser utilizados \"|\" e \"||\". E ao "
+"invés de \"and\" podem ser utilizados \"&\" e \"&&\"."
 
 msgid "Class Type"
 msgstr "Tipo de Classe"
@@ -9191,28 +9274,28 @@ msgid "history"
 msgstr "história"
 
 msgid "Please select an item first"
-msgstr ""
+msgstr "Por gentileza selecione um item primeiro"
 
 msgid "Edit item"
-msgstr ""
+msgstr "Editar o item"
 
 msgid "Add snippet"
-msgstr ""
+msgstr "Adicionar código"
 
 msgid "Query cannot be empty"
-msgstr ""
+msgstr "A consulta não pode estar em branco"
 
 msgid "This name can be used for the item"
-msgstr ""
+msgstr "Este nome pode ser usado no item"
 
 msgid "Item with this name already exists"
-msgstr ""
+msgstr "Já existe um item com este nome"
 
 msgid "The item cannot be created with provided name"
-msgstr ""
+msgstr "O item não pode ser criado com o nome inserido"
 
 msgid "The item cannot be created with an empty query"
-msgstr ""
+msgstr "O item não pode ser criado com uma consulta em branco"
 
 msgid "JOSM Help Browser"
 msgstr "Navegador de Help do JOSM"
@@ -9370,10 +9453,10 @@ 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 ""
+msgstr "Visualizar o conjunto de alterações no navegador"
 
 msgid "Open {0}"
-msgstr ""
+msgstr "Abrir {0}"
 
 msgid "Way {0}"
 msgstr "Caminho {0}"
@@ -9385,7 +9468,7 @@ msgid "Object"
 msgstr "Objeto"
 
 msgid "Open Changeset Manager"
-msgstr ""
+msgstr "Abrir o Gerenciador de Conjuntos de Alterações"
 
 msgid "Changeset comment"
 msgstr "Comentário do Changeset"
@@ -9530,8 +9613,8 @@ msgid ""
 "Click <strong>{0}</strong> to load them now.<br>If necessary JOSM will "
 "create conflicts which you can resolve in the Conflict Resolution Dialog."
 msgstr ""
-"Clique <strong>{0}</strong> para carregá-los agora.<br>Se necessário, JOSM "
-"criará conflitos que podem ser resolvidos no diálog de resolução de "
+"Clique <strong>{0}</strong> para carregá-los agora.<br>Se necessário, o JOSM "
+"criará conflitos que podem ser resolvidos no diálogo de resolução de "
 "conflitos."
 
 msgid "Object still in use"
@@ -9561,6 +9644,8 @@ msgid ""
 "A background upload is already in progress. Kindly wait for it to finish "
 "before uploading new changes"
 msgstr ""
+"Um envio em segundo plano já está em progresso. Aguarde seu término para "
+"enviar novas alterações."
 
 msgid "I would like someone to review my edits."
 msgstr "Eu desejo que alguém revise minhas edições."
@@ -9924,7 +10009,7 @@ msgid "Exit now!"
 msgstr "Sair agora!"
 
 msgid "Exit JOSM without saving. Unsaved changes are lost."
-msgstr "Saindo do JOSM sem salvar. Mudanção não salvas serão perdidas."
+msgstr "Saindo do JOSM sem salvar. Mudanças não salvas serão perdidas."
 
 msgid "Restart now!"
 msgstr "Reiniciar agora!"
@@ -10521,7 +10606,7 @@ msgid "Zero coordinates: {0}"
 msgstr "Zero coordenadas: {0}"
 
 msgid "NMEA import success:"
-msgstr "Sucesso naimportação NMEA:"
+msgstr "Sucesso na importação NMEA:"
 
 msgid "NMEA import failure!"
 msgstr "Falha na importação NMEA!"
@@ -10573,7 +10658,7 @@ msgid "Open OSM file"
 msgstr "Abrir arquivo OSM"
 
 msgid "Validation Error Files"
-msgstr ""
+msgstr "Arquivos da Validação de Erros"
 
 msgid "WMS Files (*.wms)"
 msgstr "Arquivos WMS (*.wms)"
@@ -10588,10 +10673,10 @@ msgid "Offset"
 msgstr "Deslocamento:"
 
 msgid "Tile download projection"
-msgstr ""
+msgstr "Projeção do download do mosaico de imagens"
 
 msgid "Tile display projection"
-msgstr ""
+msgstr "Projeção de exibição do mosaico de imagens"
 
 msgid "Current zoom"
 msgstr "Aproximação atual"
@@ -10603,22 +10688,22 @@ msgid "Tile Info"
 msgstr "Informação de Imagem de Fundo"
 
 msgid "Tile name"
-msgstr ""
+msgstr "Nome do mosaico de imagens"
 
 msgid "Tile URL"
-msgstr ""
+msgstr "URL do mosaico de imagens"
 
 msgid "Tile size"
-msgstr ""
+msgstr "Tamanho do mosaico"
 
 msgid "Tile display size"
-msgstr ""
+msgstr "Tamanho da exibição do mosaico"
 
 msgid "Reprojection"
 msgstr "Reprojeção"
 
 msgid "Reprojected tile size"
-msgstr ""
+msgstr "Tamanho do mosaico reprojetado"
 
 msgid "Metadata "
 msgstr "Metadados "
@@ -10626,6 +10711,12 @@ msgstr "Metadados "
 msgid "Load tile"
 msgstr "Carregar tile"
 
+msgid "Get tile status"
+msgstr "Obter o statos do mosaico"
+
+msgid "Force tile rendering"
+msgstr "Forçar a renderização do mosaico"
+
 msgid "Failed to create tile source"
 msgstr "Falha na criação da fonte de imagem de fundo"
 
@@ -10735,10 +10826,10 @@ msgstr "Nome: {0}"
 msgid "Description: {0}"
 msgstr "Descrição: {0}"
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
-msgstr[0] "{0} trilha"
-msgstr[1] "{0} trilhas"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
+msgstr[0] "{0} trilha, {1} segmento de trilha"
+msgstr[1] "{0} trilhas, {1} segmentos de trilha"
 
 msgid "Timespan"
 msgstr "Vigência"
@@ -10746,6 +10837,9 @@ msgstr "Vigência"
 msgid "Length"
 msgstr "Comprimento"
 
+msgid "Number of<br/>Segments"
+msgstr "Número de<br/>Segmentos"
+
 msgid "Length: {0}"
 msgstr "Comprimento: {0}"
 
@@ -10759,14 +10853,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] "{0} ponto da via"
 msgstr[1] "{0} pontos da via"
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
-msgstr[0] "{0} trilha, "
-msgstr[1] "{0} trilhas, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] "{0} trilha"
+msgstr[1] "{0} trilhas"
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
+msgstr[0] " ({0} segmento)"
+msgstr[1] " ({0} segmentos)"
 
 msgid "Save GPX file"
 msgstr "Salvar arquivo GPX"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr "Coleta segmentos de todas as trilhas e combina em uma trilha única."
+
+msgid "Combine tracks of this layer"
+msgstr "Combina as trilhas desta camada"
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr "Divide múltiplos segmentos de uma trilha em múltiplas trilhas."
+
+msgid "Split track segments to tracks"
+msgstr "Divide segmentos de trilhas para trilhas"
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr "Divide as trilhas nesta camada para uma nova camada individual."
+
+msgid "Split tracks to new layers"
+msgstr "Divide as trilhas para novas camadas"
+
 msgid "Id"
 msgstr "Id"
 
@@ -10792,7 +10909,7 @@ msgid "Jump to previous marker"
 msgstr "Ir para a marca anterior"
 
 msgid "All projections are supported"
-msgstr "Todas as projecções são suportadas"
+msgstr "Todas as projeções são suportadas"
 
 msgid "The layer {0} does not support the new projection {1}."
 msgstr "A camada {0} não suporta a nova projeção {1}."
@@ -10808,6 +10925,21 @@ msgstr "Salvar Camada"
 
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
+"Tentando definir uma camada de dados somente leitura para uma camada editável"
+
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+"Tentando excluir uma camada com envio em segundo plano. Por gentileza espere "
+"até que o envio esteja finalizado."
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+"Um envio em segundo plano já está em progresso. Não é possível redefinir o "
+"estado até finalizar este envio."
 
 msgid "{0} note"
 msgid_plural "{0} notes"
@@ -10815,7 +10947,7 @@ msgstr[0] "{0} nota"
 msgstr[1] "{0} notas"
 
 msgid "Notes layer"
-msgstr "Ccamada de notas"
+msgstr "Camada de notas"
 
 msgid "Total notes:"
 msgstr "Total de notas:"
@@ -10824,7 +10956,7 @@ msgid "Changes need uploading?"
 msgstr "As mudanças precisam de atualização?"
 
 msgid "Save Note file"
-msgstr ""
+msgstr "Salvar arquivo de Notas"
 
 msgid "outside downloaded area"
 msgstr "fora da área baixada"
@@ -10902,7 +11034,7 @@ msgid "No validation errors"
 msgstr "Sem erros de validação"
 
 msgid "Save Validation errors file"
-msgstr ""
+msgstr "Salvar arquivo com os erros de Validação"
 
 msgid "Set WMS Bookmark"
 msgstr "Adicionar marcador para esta camada WMS"
@@ -11156,29 +11288,20 @@ msgstr "Erro no arquivo {0}"
 msgid "Display geotagged images"
 msgstr "Mostrar imagens com tags geográficas"
 
-msgid "Previous"
-msgstr "Anterior"
+msgid "Next"
+msgstr "Próximo"
 
-msgid "Show previous Image"
-msgstr "Mostrar imagem anterior"
+msgid "Show next Image"
+msgstr "Mostrar a próxima imagem"
 
 msgid "Geoimage: {0}"
 msgstr "Geoimagem: {0}"
 
-msgid "Remove photo from layer"
-msgstr "Remover foto da camada"
-
-msgid "Delete File from disk"
-msgstr "Apagar arquivo do disco"
-
-msgid "Copy image path"
-msgstr "Copiar caminho da imagem"
-
-msgid "Next"
-msgstr "Próximo"
+msgid "Previous"
+msgstr "Anterior"
 
-msgid "Show next Image"
-msgstr "Mostrar a próxima imagem"
+msgid "Show previous Image"
+msgstr "Mostrar imagem anterior"
 
 msgid "Show first Image"
 msgstr "Mostrar primeira imagem"
@@ -11192,6 +11315,15 @@ msgstr "Centralizar vista"
 msgid "Zoom best fit and 1:1"
 msgstr "Zoom melhor ajuste e 1:1"
 
+msgid "Remove photo from layer"
+msgstr "Remover foto da camada"
+
+msgid "Delete File from disk"
+msgstr "Apagar arquivo do disco"
+
+msgid "Copy image path"
+msgstr "Copiar caminho da imagem"
+
 msgid "Move dialog to the side pane"
 msgstr "Mova a janela para o painel lateral"
 
@@ -11371,7 +11503,7 @@ msgid "Velocity, {0}"
 msgstr "Velocidade, {0}"
 
 msgid "Audio files (*.wav, *.mp3, *.aac, *.aif, *.aiff)"
-msgstr ""
+msgstr "Arquivos de áudio (*.wav, *.mp3, *.aac, *.aif, *.aiff)"
 
 msgid "Import Audio"
 msgstr "Importar Áudio"
@@ -11505,7 +11637,7 @@ msgid ""
 "You need to drag the play head near to the GPX track whose associated sound "
 "track you were playing (after the first marker)."
 msgstr ""
-"Você precisa arrastar o buscador de audio para perto da trilha GPX cuja "
+"Você precisa arrastar o buscador de áudio para perto da trilha GPX cuja "
 "trilha sonora associada estava tocando (depois do primeiro marcador)."
 
 msgid ""
@@ -11528,130 +11660,161 @@ msgid "Select the map painting styles"
 msgstr "Selecione os estilos de pintura do mapa"
 
 msgid "Error - file not found: ''{0}''"
-msgstr ""
+msgstr "Erro - arquivo não encontrado: ''{0}''"
 
 msgid "Expected integer number for option {0}, but got ''{1}''"
 msgstr ""
+"É esperado um número inteiro para a opção {0}, entretanto foi obtido ''{1}''"
 
 msgid "Expected integer number >= 0 for option {0}, but got ''{1}''"
 msgstr ""
+"É esperado um número inteiro >= 0 para a opção {0}, entretanto foi obtido "
+"''{1}''"
 
 msgid "Unable to parse {0} parameter: {1}"
-msgstr ""
+msgstr "Incapaz de processar o parâmetro {0} : {1}"
 
 msgid ""
 "Expected key and value, separated by '':'' character for option {0}, but got "
 "''{1}''"
 msgstr ""
+"É esperado a chave e o valor, separados pelo caractere '':'' para a opção "
+"{0}, entretanto foi obtido ''{1}''"
 
 msgid "Expected floating point number for option {0}, but got ''{1}''"
 msgstr ""
+"É esperado o número do ponto flutuante para a opção {0}, entretanto foi "
+"obtido ''{1}''"
 
 msgid ""
 "Expected two coordinates, separated by comma, for option {0}, but got ''{1}''"
 msgstr ""
+"São esperadas duas coordenadas, separadas por vírgula, para a opção {0}, "
+"entretanto foi obtido ''{1}''"
 
 msgid "In option {0}: {1}"
-msgstr ""
+msgstr "Na opção {0}: {1}"
 
 msgid "Expected floating point number > 0 for option {0}, but got ''{1}''"
 msgstr ""
+"É esperado um número de ponto flutuante > 0 para a opção {0}, entretanto foi "
+"obtido ''{1}''"
 
 msgid "Expected integer number > 0 for option {0}, but got ''{1}''"
 msgstr ""
+"É esperado um número inteiro > 0 para a opção {0}, entretanto foi obtido "
+"''{1}''"
 
 msgid "JOSM rendering command line interface"
-msgstr ""
+msgstr "Interface de linha de comando da renderização do JOSM"
 
 msgid "Renders data and saves the result to an image file."
-msgstr ""
+msgstr "Renderiza os dados e salva o resultado em um arquivo de imagem."
 
 msgid "Input data file name (.osm)"
-msgstr ""
+msgstr "Nome do arquivo de entrada (.osm)"
 
 msgid "Output image file name (.png); defaults to ''{0}''"
-msgstr ""
+msgstr "Nome do arquivo de imagem de saída (.png); o padrão é ''{0}''"
 
 msgid "Style file to use for rendering (.mapcss or .zip)"
-msgstr ""
+msgstr "Arquivo de estilo para ser usado na renderização (.mapcss or .zip)"
 
 msgid "This option can be repeated to load multiple styles."
-msgstr ""
+msgstr "Esta opção pode ser repetida para carregar múltiplos estilos."
 
 msgid ""
 "Style setting (in JOSM accessible in the style list dialog right click menu)"
 msgstr ""
+"Configurações de estilo (no JOSM é acessível pelo menu do clique direito do "
+"mouse dentro do painel da lista de estilos)"
 
 msgid "Applies to the last style loaded with the {0} option."
-msgstr ""
+msgstr "Aplica-se ao último estilo carregado com a opção {0}."
 
 msgid ""
 "Select zoom level to render. (integer value, 0=entire earth, 18=street level)"
 msgstr ""
+"Selecionar o nível de aproximação ao renderizar. (número inteiro, 0= todo o "
+"planeta, 18= nível da rua)"
 
 msgid "Select the map scale"
-msgstr ""
+msgstr "Selecionar a escala do mapa"
 
 msgid ""
 "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)"
 msgstr ""
+"O valor 10000 representa a escala de 1:10000 (1 cm no mapa equivale a 100 m "
+"no solo; resolução da exibição: 96 dpi)"
 
 msgid "Options {0} and {1} are mutually exclusive."
-msgstr ""
+msgstr "As opções {0} e {1} são mutualmente exclusivas."
 
 msgid "Area to render, default value is ''{0}''"
-msgstr ""
+msgstr "Área para renderizar, o valor padrão é ''{0}''"
 
 msgid ""
 "With keyword ''{0}'', the downloaded area in the .osm input file will be "
 "used (if recorded)."
 msgstr ""
+"Com a palavra-chave ''{0}'', será usada a área baixada no arquivo .osm de "
+"entrada (se gravado)."
 
 msgid "Specify bottom left corner of the rendering area"
-msgstr ""
+msgstr "Defina o canto esquerdo inferior da área de renderização"
 
 msgid ""
 "Used in combination with width and height options to determine the area to "
 "render."
 msgstr ""
+"Usado na combinação entre a largura e altura para determinar a área que será "
+"renderizada."
 
 msgid "Width of the rendered area, in meter"
-msgstr ""
+msgstr "Largura da área de renderização, em metros"
 
 msgid "Height of the rendered area, in meter"
-msgstr ""
+msgstr "Altura da área renderizada, em metros"
 
 msgid "Width of the target image, in pixel"
-msgstr ""
+msgstr "Largura da imagem desejada, em pixels"
 
 msgid "Height of the target image, in pixel"
-msgstr ""
+msgstr "Altura da imagem desejada, em pixels"
 
 msgid "Projection to use, default value ''{0}'' (web-Mercator)"
-msgstr ""
+msgstr "Projeção a usar, o valor padrão é ''{0}'' (web-Mercator)"
 
 msgid ""
 "Maximum image width/height in pixel (''{0}'' means no limit), default value: "
 "{1}"
 msgstr ""
+"Largura e altura máximas da imagem (''{0}'' significa sem limite), o valor "
+"padrão é: {1}"
 
 msgid ""
 "To specify the rendered area and scale, the options can be combined in "
 "various ways"
 msgstr ""
+"Para especificar a área de renderização e a escala, as opções podem ser "
+"combinadas de várias maneiras"
 
 msgid ""
 "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."
 msgstr ""
+"Se não for fornecido ''{0}'' nem''{1}'', o valor padrão {2} assim como os "
+"limites da área baixada no arquivo .osm de entrada serão utilizados."
 
 msgid ""
 "Argument {0} given, but scale cannot be determined from remaining arguments"
 msgstr ""
+"O argumento {0} foi fornecido, entretanto a escala não pode ser determinada "
+"nos argumentos restantes."
 
 msgid "Argument {0} given, expected {1} or {2}"
-msgstr ""
+msgstr "O argumento {0} foi fornecido, era esperado {1} ou {2}"
 
 msgid "{0} mode, but no bounds found in osm data input file"
 msgstr ""
@@ -11673,6 +11836,8 @@ msgid ""
 "Image dimensions ({0}x{1}) exceeds maximum image size {2} (use option {3} to "
 "change limit)"
 msgstr ""
+"As dimensões da imagem ({0}x{1}) excedem o tamanho máximo de imagem {2} (use "
+"a opção {3} para alterar o limite)"
 
 msgid "Style setting not found: ''{0}''"
 msgstr ""
@@ -11716,7 +11881,7 @@ msgid ""
 "to use the Access Token in this JOSM session only.</html>"
 msgstr ""
 "<html>Selecione para salvar o Token de Acesso nas preferências do "
-"JOSM.<br>Deselecione para usar o Token de Acesso apenas nessa sessão do "
+"JOSM.<br>Desmarque para usar o Token de Acesso apenas nesta sessão do "
 "JOSM.</html>"
 
 msgid "Use default settings"
@@ -12008,7 +12173,7 @@ msgstr "Permite enviar dados do mapa"
 
 msgid "Select to grant JOSM the right to upload map data on your behalf"
 msgstr ""
-"Selecione para dar ao JSOM o direito de enviar dados do mapa com sua "
+"Selecione para dar ao JOSM o direito de enviar dados do mapa com sua "
 "permissão"
 
 msgid "Allow to upload GPS traces"
@@ -12016,7 +12181,7 @@ msgstr "Permite enviar traços GPS"
 
 msgid "Select to grant JOSM the right to upload GPS traces on your behalf"
 msgstr ""
-"Selecione para dar ao JSOM o direito de enviar trilhas GPS com sua permissão"
+"Selecione para dar ao JOSM o direito de enviar trilhas GPS com sua permissão"
 
 msgid "Allow to download your private GPS traces"
 msgstr "Permite baixar seus traços GPS privados"
@@ -12025,7 +12190,7 @@ msgid ""
 "Select to grant JOSM the right to download your private GPS traces into JOSM "
 "layers"
 msgstr ""
-"Selecione para dar ao JSOM o direito de baixar suas trilhas GPS privadas em "
+"Selecione para dar ao JOSM o direito de baixar suas trilhas GPS privadas em "
 "camadas do JOSM"
 
 msgid "Allow to read your preferences"
@@ -12033,14 +12198,14 @@ msgstr "Permite ler suas preferências"
 
 msgid "Select to grant JOSM the right to read your server preferences"
 msgstr ""
-"Selecione para dar ao JSOM o direito de ler suas configurações do servidor"
+"Selecione para dar ao JOSM o direito de ler suas configurações do servidor"
 
 msgid "Allow to write your preferences"
 msgstr "Permite que você escreva suas preferências"
 
 msgid "Select to grant JOSM the right to write your server preferences"
 msgstr ""
-"Selecione para dar ao JSOM o direito de escrever suas preferências do "
+"Selecione para dar ao JOSM o direito de escrever suas preferências do "
 "servidor"
 
 msgid "Allow modifications of notes"
@@ -12115,7 +12280,7 @@ msgid ""
 "this token. JOSM will use it in the future for authentication and "
 "authorization to the OSM server.<br><br>The access token is: </html>"
 msgstr ""
-"<html>JOSM recuperou com sucesso o token de acesso. Vocẽ pode agora aceitar "
+"<html>JOSM recuperou com sucesso o token de acesso. Você pode agora aceitar "
 "este token. O JOSM irá usá-lo no futuro para autenticação e autorização no "
 "servidor do OSM.<br><br>O token de acesso é: </html>"
 
@@ -12208,7 +12373,7 @@ msgid ""
 "later.</html>"
 msgstr ""
 "<html>O teste falhou pelo fato do servidor tem respondido com um erro "
-"interno.<br>JOSM náo pode decidir se o token é válido. Por favor, tente "
+"interno.<br>JOSM não pode decidir se o token é válido. Por favor, tente "
 "novamente mais tarde.</html>"
 
 msgid "Retrieving user info..."
@@ -12288,7 +12453,7 @@ msgid "Tooltip"
 msgstr "Dica"
 
 msgid "Icon"
-msgstr "Icone"
+msgstr "Ícone"
 
 msgid "Remove from toolbar"
 msgstr "Remover da barra de ferramentas"
@@ -12306,7 +12471,7 @@ msgid "Actions"
 msgstr "Ações"
 
 msgid "Toolbar customization"
-msgstr "Personalização da barra de ferrametnas"
+msgstr "Personalização da barra de ferramentas"
 
 msgid "Customize the elements on the toolbar."
 msgstr "Personaliza os elementos na barra de ferramentas."
@@ -12496,7 +12661,7 @@ msgstr "Valor padrão é ''{0}''."
 
 msgid "Default value currently unknown (setting has not been used yet)."
 msgstr ""
-"O valor padrãoé desconhecido atualmente (configuração ainda não foi feita)."
+"O valor padrão é desconhecido atualmente (configuração ainda não foi feita)."
 
 msgid "Change string setting"
 msgstr "Alterar as configurações de string"
@@ -12667,10 +12832,10 @@ msgid "Display discardable keys"
 msgstr "Mostrar chaves descartáveis"
 
 msgid "Use auto filters"
-msgstr ""
+msgstr "Usar filtros automáticos"
 
 msgid "Rule"
-msgstr ""
+msgstr "Regra"
 
 msgid "Highlight target ways and nodes"
 msgstr "Destacar vias alvo e nós"
@@ -12798,7 +12963,7 @@ msgid "Draw large GPS points"
 msgstr "Desenhe grandes pontos de GPS"
 
 msgid "Draw a circle from HDOP value"
-msgstr "Desenha um círculo apartir do valor HDOP"
+msgstr "Desenha um círculo a partir do valor HDOP"
 
 msgid "Velocity (red = slow, green = fast)"
 msgstr "Velocidade (vermelho = lento, verde = rápido)"
@@ -12857,7 +13022,7 @@ msgid "Heat"
 msgstr "Calor"
 
 msgid "Use points instead of lines for heat map"
-msgstr ""
+msgstr "Usar pontos ao invés de linhas para o mapa de calor"
 
 msgid "Create markers when reading GPX"
 msgstr "Criar marcadores quando lendo GPX"
@@ -13031,7 +13196,7 @@ msgid "Show object ID in selection lists"
 msgstr "Mostrar ID de objetos nas listas de seleção"
 
 msgid "Show node coordinates in selection lists"
-msgstr ""
+msgstr "Mostrar as coordenadas do nó nas listas de seleção"
 
 msgid "Show localized name in selection lists"
 msgstr "Mostra o nome traduzido nas listas de seleção"
@@ -13051,7 +13216,7 @@ msgstr ""
 "filtros de arquivo)"
 
 msgid "Reverse zoom with mouse wheel"
-msgstr ""
+msgstr "Inverter o sentido de aproximação pela roda do mouse"
 
 msgid "Intermediate steps between native resolutions"
 msgstr "Passos intermediários entre as resoluções nativas"
@@ -13099,6 +13264,8 @@ msgstr ""
 msgid ""
 "Higher value means more steps needed, therefore zoom steps will be smaller"
 msgstr ""
+"Valores maiores representam mais passos, portanto a escala de aproximação "
+"será menor"
 
 msgid "Look and Feel"
 msgstr "Aparência"
@@ -13130,7 +13297,7 @@ msgid "{0} is replaced by Y-coordinate of the tile"
 msgstr "{0} é substituído pela coordenada Y do tile"
 
 msgid "{0} is replaced by {1} (Yahoo style Y coordinate)"
-msgstr "{0} foi substituido por {1} (Yahoo style Y coordinate)"
+msgstr "{0} foi substituído por {1} (Yahoo style Y coordinate)"
 
 msgid ""
 "{0} is replaced by {1} (OSGeo Tile Map Service Specification style Y "
@@ -13234,7 +13401,7 @@ msgid "TMS Settings"
 msgstr "Configurações TMS"
 
 msgid "Imagery providers"
-msgstr "Provedores do Imagery"
+msgstr "Provedores das Imagens"
 
 msgid "Offset bookmarks"
 msgstr "Marcadores de deslocamento"
@@ -13250,15 +13417,16 @@ msgstr "Entradas padrão disponíveis:"
 
 msgid "New default entries can be added in the <a href=\"{0}\">Wiki</a>."
 msgstr ""
+"Novos registros padrões podem ser adicionados na <a href=\"{0}\">Wiki</a>."
 
 msgid "Selected entries:"
-msgstr "Entradas selecionadas:"
+msgstr "Registros selecionados:"
 
 msgid "Add a new {0} entry by entering the URL"
-msgstr "Adiciona uma nova {0} entrada, digitando a URL"
+msgstr "Adiciona um novo registro {0} digitando sua URL"
 
 msgid "Remove entry"
-msgstr "Remover entrada"
+msgstr "Remover registro"
 
 msgid "copy selected defaults"
 msgstr "copiar padrões selecionados"
@@ -13267,13 +13435,13 @@ msgid "Please select at least one row to copy."
 msgstr "Por gentileza selecione ao menos uma linha para copiar."
 
 msgid "Menu Name"
-msgstr "Nome do Menu"
+msgstr "Nome no Menu"
 
 msgid "Imagery URL"
 msgstr "URL da camada"
 
 msgid "Menu Name (Default)"
-msgstr "Nome do Menu (Padrão)"
+msgstr "Nome no Menu (Padrão)"
 
 msgid "Imagery URL (Default)"
 msgstr "URL da camada (padrão)"
@@ -13285,7 +13453,7 @@ msgid "Malformed URL for the EULA licence: {0}"
 msgstr "URL malformada para o EULA da licença: {0}"
 
 msgid "Layer"
-msgstr "Layer"
+msgstr "Camada"
 
 msgid "Easting"
 msgstr "Ao Leste"
@@ -13300,7 +13468,7 @@ msgid "Autoload tiles by default: "
 msgstr "Carregar quadros automaticamente por padrão: "
 
 msgid "Min. zoom level: "
-msgstr "Nível min. zoom: "
+msgstr "Nível mínimo de zoom: "
 
 msgid "Max. zoom level: "
 msgstr "Nível máximo de zoom: "
@@ -13474,7 +13642,7 @@ msgid "Tagging Presets"
 msgstr "Padrões de predefinições"
 
 msgid "Available presets:"
-msgstr "Predefinições disponiveis:"
+msgstr "Predefinições disponíveis:"
 
 msgid "Active presets:"
 msgstr "Predefinições ativas:"
@@ -13556,7 +13724,7 @@ msgid "<br>Error message(untranslated): {0}"
 msgstr "<br> Mensagem de erro(não traduzida): {0}"
 
 msgid "Please restart JOSM to activate the downloaded plugins."
-msgstr "Por favor reinicie o JOSM para ativar os plugine baixados."
+msgstr "Por favor, reinicie o JOSM para ativar os plugins baixados."
 
 msgid "Update plugins"
 msgstr "Atualizar plugins"
@@ -13701,7 +13869,7 @@ msgid "Central meridian"
 msgstr "meridiano central"
 
 msgid "Scaling factor"
-msgstr "Ftor de escala"
+msgstr "Fator de escala"
 
 msgid "Ellipsoid name"
 msgstr "Nome elipsóide"
@@ -13716,7 +13884,7 @@ msgid "3 or 7 term datum transform parameters"
 msgstr "3 ou 7 dado a duração de transformar os parâmetros"
 
 msgid "NTv2 grid file"
-msgstr "Arquivo de gradeNTv2"
+msgstr "Arquivo de grade NTv2"
 
 msgid "Built-in:"
 msgstr "Construído em:"
@@ -13782,10 +13950,10 @@ 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 ""
@@ -13800,7 +13968,7 @@ msgid "Map Projection"
 msgstr "Projeção do Mapa"
 
 msgid "The projection {0} could not be activated. Using Mercator"
-msgstr "A projeção {0} nâo pode ser ativada. Usando Mercator"
+msgstr "A projeção {0} não pode ser ativada. Usando o Mercator"
 
 msgid "PUWG 1992 (Poland)"
 msgstr "PUWG 1992 (Poland)"
@@ -13899,7 +14067,7 @@ msgstr "Instalar certificado local do JOSM para o sistema/navegador"
 msgid ""
 "Uninstall JOSM localhost certificate from system/browser root keystores"
 msgstr ""
-"Desintalar Certificado local do JOSM do sistema/navegador root keystores"
+"Desinstalar Certificado local do JOSM do sistema/navegador root keystores"
 
 msgid "Certificate:"
 msgstr "Certificado:"
@@ -14011,7 +14179,7 @@ msgid "Failed to retrieve OSM credentials from credential manager."
 msgstr "Falha ao obter credenciais OSM de gerente de credencial."
 
 msgid "Failed to save OSM credentials to credential manager."
-msgstr "Falha ao salvar as credenciais OSM no gerenciador de credecniais."
+msgstr "Falha ao salvar as credenciais OSM no gerenciador de credenciais."
 
 msgid "Periodically check for new messages"
 msgstr "Verifique periodicamente se há novas mensagens"
@@ -14193,7 +14361,7 @@ msgstr ""
 "programas de edição."
 
 msgid "Available rules:"
-msgstr "Regras disponiveis:"
+msgstr "Regras disponíveis:"
 
 msgid "Active rules:"
 msgstr "Regras ativas:"
@@ -14432,7 +14600,7 @@ msgid "Unknown requisite: {0}"
 msgstr "Requisito desconhecido: {0}"
 
 msgid "Unknown regexp value: {0}"
-msgstr ""
+msgstr "Valor de expressão regular desconhecido: {0}"
 
 msgid "Illegal member expression: {0}"
 msgstr "Membro ilegal na expressão: {0}"
@@ -14485,7 +14653,7 @@ msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
 msgstr ""
-"Preferência com a chave ''{0}'' não enclui ''{1}''. Não é possível restaurar "
+"Preferência com a chave ''{0}'' não inclui ''{1}''. Não é possível restaurar "
 "a geometria da janela de preferências."
 
 msgid ""
@@ -14590,7 +14758,7 @@ msgid "Cut"
 msgstr "Recortar"
 
 msgid "Right click = copy to clipboard"
-msgstr "Clique esquerdo = copiar para a área de tranferência"
+msgstr "Clique esquerdo = copiar para a área de transferência"
 
 msgid "Missing mandatory attribute ''{0}''."
 msgstr "Faltando atributo mandatório ''{0}''."
@@ -14633,10 +14801,10 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr "Nó {0} excluído é parte da via {1}"
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
-"Via {0} com {1} nós tem nós incompletos, porque pelo menos um nó estava "
+"O caminho {0} com {1} nós está incompleto, porque pelo menos um nó estava "
 "faltando nos dados carregados."
 
 msgid ""
@@ -14647,7 +14815,7 @@ msgstr ""
 "externo ''{1}''."
 
 msgid "Deleted member {0} is used by relation {1}"
-msgstr "Membro excluido {0} é usado pela relação {1}"
+msgstr "Membro excluído {0} é usado pela relação {1}"
 
 msgid "Downloading points {0} to {1}..."
 msgstr "Baixando pontos {0} a {1}..."
@@ -14672,7 +14840,7 @@ msgid "The requested URL {0} was not found"
 msgstr "A URL requisitada {0} não foi encontrada"
 
 msgid "Failed to rename file {0} to {1}."
-msgstr "Falha ao renomerar arquivo {0} para {1}."
+msgstr "Falha ao renomear o arquivo {0} para {1}."
 
 msgid "Failed to load {0}, use cached file and retry next time: {1}"
 msgstr ""
@@ -14739,7 +14907,7 @@ msgid ""
 "Unexpected value for preference ''{0}'' found. Got ''{1}''. Will use no "
 "proxy."
 msgstr ""
-"Encontrado valor inesperado de preferência ''{0}'' . Recuparado ''{1}''. Não "
+"Encontrado valor inesperado de preferência ''{0}'' . Recuperado ''{1}''. Não "
 "será usado proxy."
 
 msgid ""
@@ -14757,7 +14925,7 @@ msgstr ""
 msgid ""
 "Connection to proxy ''{0}'' for URI ''{1}'' failed. Exception was: {2}"
 msgstr ""
-"Conecção ao proxy ''{0}'' para a URI ''{1}'' falhou. A exceção foi: {2}"
+"Conexão ao proxy ''{0}'' para a URI ''{1}'' falhou. A exceção foi: {2}"
 
 msgid ""
 "The JVM is not configured to lookup proxies from the system settings. The "
@@ -15046,7 +15214,7 @@ msgid ""
 "{1}."
 msgstr ""
 "Valor ilegal para o atributo ''version'' no OSM primitivo com ID {0}. "
-"Recuprerado {1}."
+"Recuperado {1}."
 
 msgid ""
 "Normalizing value of attribute ''version'' of element {0} to {2}, API "
@@ -15065,7 +15233,7 @@ msgid ""
 "Illegal value for attribute ''changeset'' on new object {1}. Got {0}. "
 "Resetting to 0."
 msgstr ""
-"Valor ilegal para o atributo ''cnageset'' em novo objeto {1}. Recuperado "
+"Valor ilegal para o atributo ''changeset'' em novo objeto {1}. Recuperado "
 "{0}. Redefinindo a 0."
 
 msgid "Illegal value for attribute ''changeset''. Got {0}."
@@ -15153,7 +15321,7 @@ msgid "Reading user info ..."
 msgstr "Lendo informações do usuário ..."
 
 msgid "Reading user preferences ..."
-msgstr ""
+msgstr "Lendo as preferências do usuário ..."
 
 msgid "Starting to upload with one request per primitive ..."
 msgstr "Começando a fazer o upload com um pedido por primitivo..."
@@ -15310,7 +15478,7 @@ msgid "There is no layer opened to add node"
 msgstr "Não há nenhuma camada aberta para adicionar nó"
 
 msgid "Remote Control has been asked to create a new way."
-msgstr "Controle remoto foi solicitadoa criar uma nova via."
+msgstr "Controle remoto foi solicitado para criar uma nova via."
 
 msgid "Invalid coordinates: {0}"
 msgstr "Coordenadas inválidas: {0}"
@@ -15372,11 +15540,17 @@ msgstr "Controle Remoto foi solicitado a abrir um arquivo local."
 msgid "Do you want to allow this?"
 msgstr "Você quer permitir isto?"
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr "Confirmar ação do Controle remoto"
 
 msgid "The following keys are mandatory, but have not been provided: {0}"
-msgstr ""
+msgstr "As seguintes chaves são obrigatórias, mas não foram fornecidas: {0}"
 
 msgid ""
 "Remote Control has been asked to report its protocol version. This enables "
@@ -15404,13 +15578,13 @@ msgid "Link to a OSM data file on your local disk."
 msgstr "Link para um arquivo de dados OSM em seu disco local."
 
 msgid "Include OSM data in the .joz session file."
-msgstr "Incluidos dados OSM no arquivo da sessão .joz."
+msgstr "Incluídos dados OSM no arquivo da sessão .joz."
 
 msgid "Link to a GPX data file on your local disk."
 msgstr "Link para um arquivo de dados GPX em seu disco local."
 
 msgid "Include GPX data in the .joz session file."
-msgstr "Incluidos dados GPX no arquivo da sessão .joz."
+msgstr "Incluídos dados GPX no arquivo da sessão .joz."
 
 msgid "No file association"
 msgstr "Nenhuma associação de arquivo"
@@ -15545,7 +15719,7 @@ msgid "JOSM version {0} required for plugin {1}."
 msgstr "Versão do JOSM {0} necessário para plugin {1}."
 
 msgid "Download skipped"
-msgstr "Baixar pulados"
+msgstr "Baixar ignorados"
 
 msgid ""
 "Cannot download plugin ''{0}''. Its download link is not known. Skipping "
@@ -15636,7 +15810,7 @@ msgid ""
 "Running plugin update after elapsed update interval. Automatic update at "
 "startup is disabled."
 msgstr ""
-"Rodanod atualização do plugin após intervalo de atualização decorrido. "
+"Executando a atualização do plugin após intervalo de atualização decorrido. "
 "Atualização automática na inicialização está desativada."
 
 msgid ""
@@ -15719,7 +15893,7 @@ msgstr[0] "O plugin não vai ser carregado."
 msgstr[1] "Os plugins não vão ser carregados."
 
 msgid "Determining plugins to load..."
-msgstr ""
+msgstr "Determinando plugins para carregar..."
 
 msgid "Removing deprecated plugins..."
 msgstr "Removendo plugins obsoletos..."
@@ -15934,7 +16108,7 @@ msgstr ""
 "<html>Falha na autenticação com o servidor OSM ''{0}''.<br>Você está usando "
 "OAuth para autenticação, mas atualmente não há nenhum<br>OAuth token "
 "configurado.<br>Por favor, abra a caixa de diálogo Preferências e crie ou "
-"entrer um token de acesso. </html>"
+"indique um token de acesso. </html>"
 
 msgid ""
 "<strong>Failed</strong> to delete <strong>node {0}</strong>. It is still "
@@ -15946,11 +16120,11 @@ msgid_plural ""
 "the node, and upload again."
 msgstr[0] ""
 "<strong>Falha</strong> ao excluir <strong>o nó {0}</strong>. Ele ainda é "
-"referido pelo nó {1}.<br>Por favor, carrege o nó, remova a referência ao nó, "
-"e faça o upload novamente."
+"referido pelo nó {1}.<br>Por favor, carregue o nó, remova a referência ao "
+"nó, e faça o upload novamente."
 msgstr[1] ""
 "<strong>Falha</strong> ao excluir <strong>o nó {0}</strong>. Ele ainda é "
-"referido pelos nós {1}.<br>Por favor carrege os nós, remova a referência ao "
+"referido pelos nós {1}.<br>Por favor carregue os nós, remova a referência ao "
 "nó, e faça o upload novamente."
 
 msgid ""
@@ -15963,11 +16137,11 @@ msgid_plural ""
 "the node, and upload again."
 msgstr[0] ""
 "<strong>Falha</strong> ao excluir <strong>o nó {0}</strong>. Ele ainda é "
-"referido pela via {1}.<br>Por favor, carrege a via, remova a referência ao "
+"referido pela via {1}.<br>Por favor, carregue a via, remova a referência ao "
 "nó, e faça o upload novamente."
 msgstr[1] ""
 "<strong>Falha</strong> ao excluir <strong>o nó {0}</strong>. Ele ainda é "
-"referido pelas vias {1}.<br>Por favor, carrege as vias, remova a referência "
+"referido pelas vias {1}.<br>Por favor, carregue as vias, remova a referência "
 "ao nó, e faça o upload novamente."
 
 msgid ""
@@ -15980,11 +16154,11 @@ msgid_plural ""
 "reference to the node, and upload again."
 msgstr[0] ""
 "<strong>Falha</strong> ao excluir <strong>o nó {0}</strong>. Ele ainda é "
-"referido pela relação {1}.<br>Por favor, carrege a  relação, remova a "
+"referido pela relação {1}.<br>Por favor, carregue a  relação, remova a "
 "referência ao nó, e faça o upload novamente."
 msgstr[1] ""
 "<strong>Falha</strong> ao excluir <strong>o nó {0}</strong>. Ele ainda é "
-"referido pelas relações {1}.<br>Por favor, carrege as relações, remova a "
+"referido pelas relações {1}.<br>Por favor, carregue as relações, remova a "
 "referência ao nó, e faça o upload novamente."
 
 msgid ""
@@ -15997,11 +16171,11 @@ msgid_plural ""
 "the way, and upload again."
 msgstr[0] ""
 "<strong>Falha</strong> ao excluir <strong>a via {0}</strong>. Ela ainda é "
-"referida pelo nó {1}.<br>Por favor, carrege o nó, remova a referência a "
+"referida pelo nó {1}.<br>Por favor, carregue o nó, remova a referência a "
 "relação, e faça o upload novamente."
 msgstr[1] ""
 "<strong>Falha</strong> ao excluir <strong>a via {0}</strong>. Ela ainda é "
-"referida pelos nós {1}.<br>Por favor, carrege os nós, remova a referência a "
+"referida pelos nós {1}.<br>Por favor, carregue os nós, remova a referência a "
 "relação, e faça o upload novamente."
 
 msgid ""
@@ -16014,11 +16188,11 @@ msgid_plural ""
 "the way, and upload again."
 msgstr[0] ""
 "<strong>Falha</strong> ao excluir <strong>a via {0}</strong>. Ela ainda é "
-"referida pela via {1}.<br>Por favor, carrege a via, remova a referência a "
+"referida pela via {1}.<br>Por favor, carregue a via, remova a referência a "
 "via, e faça o upload novamente."
 msgstr[1] ""
 "<strong>Falha</strong> ao excluir <strong>a via {0}</strong>. Ela ainda é "
-"referida pelas vias {1}.<br>Por favor, carrege as vias, remova a referência "
+"referida pelas vias {1}.<br>Por favor, carregue as vias, remova a referência "
 "a via, e faça o upload novamente."
 
 msgid ""
@@ -16031,11 +16205,11 @@ msgid_plural ""
 "reference to the way, and upload again."
 msgstr[0] ""
 "<strong>Falha</strong> ao excluir <strong>a via {0}</strong>. Ela ainda é "
-"referida pela relação {1}.<br>Por favor, carrege a relação, remova a "
+"referida pela relação {1}.<br>Por favor, carregue a relação, remova a "
 "referência a via, e faça o upload novamente."
 msgstr[1] ""
 "<strong>Falha</strong> ao excluir <strong>a via {0}</strong>. Ela ainda é "
-"referida pelas relações {1}.<br>Por favor, carrege as relações, remova a "
+"referida pelas relações {1}.<br>Por favor, carregue as relações, remova a "
 "referência a via, e faça o upload novamente."
 
 msgid ""
@@ -16048,11 +16222,11 @@ msgid_plural ""
 "the relation, and upload again."
 msgstr[0] ""
 "<strong>Falha</strong> ao excluir <strong>a relação {0}</strong>. Ela ainda "
-"é referida pelo nó {1}.<br>Por favor, carrege o nó, remova a referência a "
+"é referida pelo nó {1}.<br>Por favor, carregue o nó, remova a referência a "
 "relação, e faça o upload novamente."
 msgstr[1] ""
 "<strong>Falha</strong> ao excluir <strong>a relação {0}</strong>. Ela ainda "
-"é referida pelos nós {1}.<br>Por favor, carrege os nós, remova a referência "
+"é referida pelos nós {1}.<br>Por favor, carregue os nós, remova a referência "
 "a relação, e faça o upload novamente."
 
 msgid ""
@@ -16065,11 +16239,11 @@ msgid_plural ""
 "the relation, and upload again."
 msgstr[0] ""
 "<strong>Falha</strong> ao excluir <strong>a relação {0}</strong>. Ela ainda "
-"é referida pela via {1}.<br>Por favor, carrege a via, remova a referência a "
+"é referida pela via {1}.<br>Por favor, carregue a via, remova a referência a "
 "relação, e faça o upload novamente."
 msgstr[1] ""
 "<strong>Falha</strong> ao excluir <strong>a relação {0}</strong>. Ela ainda "
-"é referida pelas vias {1}.<br>Por favor, carrege as vias, remova a "
+"é referida pelas vias {1}.<br>Por favor, carregue as vias, remova a "
 "referência a relação, e faça o upload novamente."
 
 msgid ""
@@ -16082,11 +16256,11 @@ msgid_plural ""
 "reference to the relation, and upload again."
 msgstr[0] ""
 "<strong>Falha</strong> ao excluir <strong>a relação {0}</strong>. Ela ainda "
-"é referida pela relação {1}.<br>Por favor, carrege a relação, remova a "
+"é referida pela relação {1}.<br>Por favor, carregue a relação, remova a "
 "referência a relação, e faça o upload novamente."
 msgstr[1] ""
 "<strong>Falha</strong> ao excluir <strong>a relação {0}</strong>. Ela ainda "
-"é referida pelas relações {1}.<br>Por favor, carrege as relações, remova a "
+"é referida pelas relações {1}.<br>Por favor, carregue as relações, remova a "
 "referência a relação, e faça o upload novamente."
 
 msgid ""
@@ -16159,14 +16333,14 @@ msgid ""
 "<html>Closing of changeset <strong>{0}</strong> failed <br>because it has "
 "already been closed."
 msgstr ""
-"<html>Fechamento do changest <strong>{0}</strong> falhou <br> porque já "
+"<html>Fechamento do changeset <strong>{0}</strong> falhou <br> porque já "
 "havia sido fechado."
 
 msgid ""
 "<html>Closing of changeset <strong>{0}</strong> failed<br> because it has "
 "already been closed on {1}."
 msgstr ""
-"<html>Fechamento do changest <strong>{0}</strong> falhou <br> porque já "
+"<html>Fechamento do changeset <strong>{0}</strong> falhou <br> porque já "
 "havia sido fechado em {1}."
 
 msgid ""
@@ -16538,11 +16712,11 @@ msgstr "terras agrícolas"
 
 msgctxt "landuse"
 msgid "farmyard"
-msgstr ""
+msgstr "pátio da fazenda"
 
 msgctxt "landuse"
 msgid "cemetery"
-msgstr ""
+msgstr "cemitério"
 
 msgctxt "landuse"
 msgid "residential"
@@ -16550,23 +16724,23 @@ msgstr "residencial"
 
 msgctxt "landuse"
 msgid "greenfield"
-msgstr ""
+msgstr "campo"
 
 msgctxt "landuse"
 msgid "village_green"
-msgstr ""
+msgstr "espaço verde"
 
 msgctxt "landuse"
 msgid "quarry"
-msgstr ""
+msgstr "pedreira"
 
 msgctxt "landuse"
 msgid "allotments"
-msgstr ""
+msgstr "horta urbana"
 
 msgctxt "landuse"
 msgid "vineyard"
-msgstr ""
+msgstr "vinhedo"
 
 msgctxt "natural"
 msgid "scrub"
@@ -16578,27 +16752,27 @@ msgstr "floresta"
 
 msgctxt "natural"
 msgid "grassland"
-msgstr ""
+msgstr "pradaria"
 
 msgctxt "natural"
 msgid "wetland"
-msgstr ""
+msgstr "zona úmida"
 
 msgctxt "natural"
 msgid "heath"
-msgstr ""
+msgstr "matagal"
 
 msgctxt "amenity"
 msgid "fire_station"
-msgstr ""
+msgstr "estação de bombeiros"
 
 msgctxt "leisure"
 msgid "park"
-msgstr ""
+msgstr "parque"
 
 msgctxt "leisure"
 msgid "track"
-msgstr ""
+msgstr "pista"
 
 msgctxt "building"
 msgid "industrial"
@@ -16658,7 +16832,7 @@ msgstr "estrada"
 
 msgctxt "Relation type"
 msgid "tunnel"
-msgstr "tunel"
+msgstr "túnel"
 
 msgctxt "Relation type"
 msgid "waterway"
@@ -16912,7 +17086,7 @@ msgid "Thin Wheels: racing bike"
 msgstr "Bicicleta de corrida, por exemplo"
 
 msgid "intermediate"
-msgstr "intemediária"
+msgstr "intermediária"
 
 msgid "Wheels: city bike, wheelchair, scooter"
 msgstr "Bicicletas urbanas, cadeira de rodas e scooters, por exemplo"
@@ -17050,7 +17224,7 @@ msgstr "não"
 
 msgctxt "sidewalk"
 msgid "separate"
-msgstr ""
+msgstr "separada"
 
 msgid "Service type"
 msgstr "Tipo de serviço"
@@ -17121,7 +17295,7 @@ msgid "Minimum age"
 msgstr "Idade mínima"
 
 msgid "Maximum age"
-msgstr ""
+msgstr "Idade máxima"
 
 msgid "Reference"
 msgstr "Referência"
@@ -17250,16 +17424,16 @@ msgid "korean"
 msgstr "coreana"
 
 msgid "donut"
-msgstr ""
+msgstr "rosquinhas"
 
 msgid "mediterranean"
-msgstr ""
+msgstr "mediterrânea"
 
 msgid "friture"
-msgstr ""
+msgstr "frituras"
 
 msgid "crepe"
-msgstr ""
+msgstr "crepe"
 
 msgid "Internet access"
 msgstr "Acesso à Internet"
@@ -17783,14 +17957,14 @@ msgstr "plataforma"
 
 msgctxt "power"
 msgid "rooftop"
-msgstr ""
+msgstr "na cobertura"
 
 msgctxt "power"
 msgid "kiosk"
 msgstr "kiosk"
 
 msgid "Start date"
-msgstr "Data de ínicio"
+msgstr "Data de início"
 
 msgid "Output forms of energy:"
 msgstr "Formas de saída de energia:"
@@ -18015,7 +18189,7 @@ msgid "Destination reference"
 msgstr "Referência de destino"
 
 msgid "Placement"
-msgstr "Placement"
+msgstr "Situação"
 
 msgid "left_of:1"
 msgstr "left_of:1"
@@ -18214,7 +18388,7 @@ msgstr "terciária"
 
 msgctxt "Highway"
 msgid "tertiary_link"
-msgstr "lligação terciária"
+msgstr "Ligação terciária"
 
 msgctxt "Highway"
 msgid "bus_guideway"
@@ -18276,7 +18450,7 @@ msgid "Vehicles per type"
 msgstr "Veículos por tipo"
 
 msgid "All vehicles"
-msgstr "Todos os veiculos"
+msgstr "Todos os veículos"
 
 msgid "use_sidepath"
 msgstr "pela ciclovia"
@@ -18481,7 +18655,7 @@ msgstr "boa"
 
 msgctxt "trail_visibility"
 msgid "intermediate"
-msgstr "intemediária"
+msgstr "intermediária"
 
 msgctxt "trail_visibility"
 msgid "bad"
@@ -18508,41 +18682,41 @@ msgid "Cycle Lane/Track"
 msgstr "Ciclofaixa/Ciclovia"
 
 msgid "Cycleway"
-msgstr "Ciclovia"
+msgstr "Via Ciclável"
 
 msgctxt "cycleway"
 msgid "lane"
-msgstr ""
+msgstr "faixa"
 
 msgctxt "cycleway"
 msgid "track"
-msgstr ""
+msgstr "pista segregada"
 
 msgctxt "cycleway"
 msgid "opposite_lane"
-msgstr ""
+msgstr "faixa em sentido contrário"
 
 msgctxt "cycleway"
 msgid "opposite_track"
-msgstr ""
+msgstr "pista segregada em sentido contrário"
 
 msgctxt "cycleway"
 msgid "opposite"
-msgstr ""
+msgstr "sentido contrário"
 
 msgctxt "cycleway"
 msgid "share_busway"
-msgstr ""
+msgstr "compartilhada com faixa de ônibus"
 
 msgctxt "cycleway"
 msgid "shared_lane"
-msgstr ""
+msgstr "faixa compartilhada"
 
 msgid "Cycleway left"
-msgstr "Ciclovia na esquerda"
+msgstr "Via Ciclável na esquerda"
 
 msgid "Cycleway right"
-msgstr "Ciclovia na direita"
+msgstr "Via Ciclável na direita"
 
 msgid "Oneway (bicycle)"
 msgstr "Mão única (bicicleta)"
@@ -18551,7 +18725,7 @@ msgid "Edit Highway Attributes:"
 msgstr "Editar atributos da rodovia:"
 
 msgid "Highway"
-msgstr "Highway"
+msgstr "Tipo de via"
 
 msgid "Dedicated Cycleway"
 msgstr "Ciclovia Exclusiva"
@@ -19170,6 +19344,8 @@ msgid ""
 "An area of water mostly surrounded by land but with level connection to the "
 "ocean or a lake."
 msgstr ""
+"Uma área de água geralmente cercada por terra, mas com uma conexão no mesmo "
+"nível com um lago ou oceano."
 
 msgid "Shipping"
 msgstr "Navegação"
@@ -19607,13 +19783,13 @@ msgid "1/50 mix (mofa/moped)"
 msgstr "1/50 mix (mofa/moped)"
 
 msgid "Additives:"
-msgstr ""
+msgstr "Aditivos"
 
 msgid "Diesel Exhaust Fluid (AdBlue/AUS32)"
-msgstr ""
+msgstr "ARLA (AdBlue/AUS32)"
 
 msgid "Fuel cards:"
-msgstr "Fuel cards:"
+msgstr "Cartões de abastecimento:"
 
 msgid "DKV"
 msgstr "DKV"
@@ -19634,7 +19810,7 @@ msgid "Amperage"
 msgstr "Amperagem"
 
 msgid "Types of vehicles which can be charged:"
-msgstr ""
+msgstr "Tipos de veículos que podem ser carregados:"
 
 msgid "Scooter"
 msgstr ""
@@ -19643,22 +19819,22 @@ msgid "Truck"
 msgstr "Caminhão"
 
 msgid "Number of Sockets:"
-msgstr ""
+msgstr "Número de Soquetes"
 
 msgid "Type 1 (Yazaki)"
-msgstr ""
+msgstr "Tipo 1 (Yazaki)"
 
 msgid "Type 1 Combo"
-msgstr ""
+msgstr "Tipo 1 Combo"
 
 msgid "Type 2 (Mennekes)"
-msgstr ""
+msgstr "Tipo 2 (Mennekes)"
 
 msgid "Type 2 Combo"
-msgstr ""
+msgstr "Tipo 2 Combo"
 
 msgid "Type 3 (SCAME)"
-msgstr ""
+msgstr "Tipo 3 (SCAME)"
 
 msgid "CHAdeMO"
 msgstr ""
@@ -19685,25 +19861,25 @@ msgid "NEMA 5-20"
 msgstr ""
 
 msgid "Authentication:"
-msgstr ""
+msgstr "Autenticação:"
 
 msgid "Phone call"
-msgstr ""
+msgstr "Chamada telefônica"
 
 msgid "Short message"
-msgstr ""
+msgstr "Mensagem curta"
 
 msgid "NFC"
-msgstr ""
+msgstr "NFC"
 
 msgid "Membership card"
-msgstr ""
+msgstr "Cartão de associado"
 
 msgid "Wash"
 msgstr "Lava Jato"
 
 msgid "Self Service"
-msgstr ""
+msgstr "Auto Serviço"
 
 msgid "Car Dealer"
 msgstr "Concessionária"
@@ -19719,19 +19895,19 @@ msgstr "Oficina"
 
 msgctxt "shop=car_repair"
 msgid "Service"
-msgstr ""
+msgstr "Serviço"
 
 msgid "dealer"
-msgstr ""
+msgstr "revendedor"
 
 msgid "repair"
-msgstr ""
+msgstr "reparo"
 
 msgid "parts"
-msgstr ""
+msgstr "peças"
 
 msgid "tyres"
-msgstr ""
+msgstr "pneus"
 
 msgid "Parts"
 msgstr "Autopeça"
@@ -19866,7 +20042,7 @@ msgid "platform"
 msgstr "plataforma"
 
 msgid "platform (exit only)"
-msgstr "plataforma (apenas saida)"
+msgstr "plataforma (apenas saída)"
 
 msgid "platform (entry only)"
 msgstr "plataforma (apenas entrada)"
@@ -20135,16 +20311,16 @@ msgid "Tents allowed"
 msgstr "Tendas permitidas"
 
 msgid "Campsite"
-msgstr ""
+msgstr "Área de Acampamento"
 
 msgid "Caravans allowed"
-msgstr ""
+msgstr "Permitido para caravanas"
 
 msgid "Backcountry"
-msgstr ""
+msgstr "Acampamento rústico"
 
 msgid "Group only access"
-msgstr ""
+msgstr "Acesso apenas a grupos"
 
 msgid "Food+Drinks"
 msgstr "Comida e Bebida"
@@ -20712,10 +20888,10 @@ msgid "Point Name"
 msgstr "Nome do ponto"
 
 msgid "Emergency Phone Number"
-msgstr ""
+msgstr "Número de Telefone de Emergência"
 
 msgid "(Use number as shown on plate.)"
-msgstr ""
+msgstr "(Use o número como é mostrado na placa.)"
 
 msgid "Veterinary"
 msgstr "Veterinária"
@@ -20730,7 +20906,7 @@ msgid "Automated Defibrillator"
 msgstr "Desfibrilador automático"
 
 msgid "Location description"
-msgstr ""
+msgstr "Descrição do local"
 
 msgid "Phone Number"
 msgstr "Número de telefone"
@@ -20852,7 +21028,7 @@ msgid "Nursing Home"
 msgstr "Lar de idosos"
 
 msgid "Nursing Home (Legacy)"
-msgstr ""
+msgstr "Lar de Idosos (legado)"
 
 msgid "Group Home"
 msgstr "Centro de Cuidados"
@@ -21062,6 +21238,12 @@ msgstr "Resíduos"
 msgid "Recycling Centre"
 msgstr "Centro de Reciclagem"
 
+msgid "trash"
+msgstr "lixo"
+
+msgid "dog_excrement"
+msgstr "excrementos de cachorro"
+
 msgid "Waste Disposal/Dumpster"
 msgstr "Contentor de Lixo"
 
@@ -21118,10 +21300,10 @@ msgstr "Stand de caça"
 
 msgctxt "hunting stand"
 msgid "Hide"
-msgstr ""
+msgstr "Fechado"
 
 msgid "Lockable"
-msgstr ""
+msgstr "Trancável"
 
 msgid "Water Point"
 msgstr "Ponto de água"
@@ -21315,10 +21497,10 @@ msgid "Gymnastics"
 msgstr "Ginástica"
 
 msgid "fitness_centre"
-msgstr ""
+msgstr "academia"
 
 msgid "Ice Skating"
-msgstr ""
+msgstr "Patinação no Gelo"
 
 msgid "ice_rink"
 msgstr "ice_rink"
@@ -21336,7 +21518,7 @@ msgid "swimming_pool"
 msgstr "piscina olímpica"
 
 msgid "water_park"
-msgstr "water_park"
+msgstr "parque aquático"
 
 msgid "Scuba Diving"
 msgstr "Mergulho"
@@ -21360,7 +21542,7 @@ msgid "sleigh"
 msgstr "sleigh"
 
 msgid "snow_park"
-msgstr "snow_park"
+msgstr "parque de neve"
 
 msgid "Difficulty"
 msgstr "Dificuldade"
@@ -21375,11 +21557,11 @@ msgstr "fácil"
 
 msgctxt "piste:difficulty"
 msgid "intermediate"
-msgstr "intermiediária"
+msgstr "intermediária"
 
 msgctxt "piste:difficulty"
 msgid "advanced"
-msgstr "avancado"
+msgstr "avançado"
 
 msgctxt "piste:difficulty"
 msgid "expert"
@@ -21501,10 +21683,10 @@ msgid "Racquetball"
 msgstr "Raquetebol"
 
 msgid "Table Tennis/Ping-Pong"
-msgstr "Ténis de Mesa/Ping-Pong"
+msgstr "Tênis de Mesa/Ping-Pong"
 
 msgid "Tennis"
-msgstr "Tenis"
+msgstr "Tênis"
 
 msgid "Motorsport"
 msgstr "Esporte Automotivo"
@@ -21774,7 +21956,7 @@ msgstr "escada"
 
 msgctxt "entrance"
 msgid "home"
-msgstr ""
+msgstr "casa"
 
 msgid "Entrance number"
 msgstr "Número da entrada"
@@ -22573,23 +22755,23 @@ msgid "Power Switch"
 msgstr "Interruptor de alimentação"
 
 msgid "Type of switch"
-msgstr ""
+msgstr "Tipo do interruptor"
 
 msgctxt "power"
 msgid "mechanical"
-msgstr ""
+msgstr "mecânico"
 
 msgctxt "power"
 msgid "circuit_breaker"
-msgstr ""
+msgstr "disjuntor"
 
 msgctxt "power"
 msgid "disconnector"
-msgstr ""
+msgstr "secionador"
 
 msgctxt "power"
 msgid "earthing"
-msgstr ""
+msgstr "secionador de terra"
 
 msgid "Power Converter"
 msgstr "Conversor de energia"
@@ -22806,7 +22988,7 @@ msgstr "four-level"
 
 msgctxt "power"
 msgid "six-level"
-msgstr "mível-seis"
+msgstr "nível-seis"
 
 msgctxt "power"
 msgid "nine-level"
@@ -22858,13 +23040,13 @@ msgid "Pole"
 msgstr "Poste"
 
 msgid "Pole with Switch"
-msgstr ""
+msgstr "Poste com Interruptor"
 
 msgid "Pole Attributes:"
 msgstr "Atributos do poste:"
 
 msgid "Switch Attributes:"
-msgstr ""
+msgstr "Atributos do Interruptor:"
 
 msgid "Pole with Transformer"
 msgstr "Poste com transformador"
@@ -22961,19 +23143,19 @@ msgid "Archaeological Site"
 msgstr "Sítio Arqueológico"
 
 msgid "tumulus"
-msgstr ""
+msgstr "mamoa"
 
 msgid "megalith"
-msgstr ""
+msgstr "megálito"
 
 msgid "fortification"
-msgstr ""
+msgstr "fortificação"
 
 msgid "settlement"
-msgstr ""
+msgstr "assentamento"
 
 msgid "necropolis"
-msgstr ""
+msgstr "necrópole"
 
 msgid "Battlefield"
 msgstr "Campo de Batalha"
@@ -22982,46 +23164,46 @@ msgid "Palaeontological Site"
 msgstr "Sítio paleontológico"
 
 msgid "Grave"
-msgstr ""
+msgstr "Sepultura"
 
 msgid "Tomb"
-msgstr ""
+msgstr "Tumba"
 
 msgctxt "tomb"
 msgid "tumulus"
-msgstr ""
+msgstr "mamoa"
 
 msgctxt "tomb"
 msgid "rock-cut"
-msgstr ""
+msgstr "escavado em rocha"
 
 msgctxt "tomb"
 msgid "hypogeum"
-msgstr ""
+msgstr "hipogeu"
 
 msgctxt "tomb"
 msgid "war_grave"
-msgstr ""
+msgstr "túmulo de guerra"
 
 msgctxt "tomb"
 msgid "mausoleum"
-msgstr ""
+msgstr "mausoléu"
 
 msgctxt "tomb"
 msgid "columbarium"
-msgstr ""
+msgstr "columbário"
 
 msgctxt "tomb"
 msgid "crypt"
-msgstr ""
+msgstr "cripta"
 
 msgctxt "tomb"
 msgid "pyramid"
-msgstr ""
+msgstr "pirâmide"
 
 msgctxt "tomb"
 msgid "sarcophagus"
-msgstr ""
+msgstr "sarcófago"
 
 msgctxt "tomb"
 msgid "vault"
@@ -23341,7 +23523,7 @@ msgid "Variety Store"
 msgstr "Loja de variedades"
 
 msgid "Charity"
-msgstr ""
+msgstr "Loja de Caridade"
 
 msgid "Bookmaker"
 msgstr "Casa de apostas"
@@ -23368,10 +23550,10 @@ msgid "Vending products"
 msgstr "Produtos à venda"
 
 msgid "admission_tickets"
-msgstr ""
+msgstr "bilhetes de entrada"
 
 msgid "animal_feed"
-msgstr ""
+msgstr "comida para animais"
 
 msgid "bicycle_tube"
 msgstr "câmaras de ar (bicicletas)"
@@ -23389,7 +23571,7 @@ msgid "drinks"
 msgstr "bebidas"
 
 msgid "elongated_coin"
-msgstr ""
+msgstr "moeda alongada"
 
 msgid "excrement_bags"
 msgstr "sacos para fezes"
@@ -23407,10 +23589,10 @@ msgid "parking_tickets"
 msgstr "bilhete de estacionamento"
 
 msgid "parcel_pickup"
-msgstr ""
+msgstr "recebimento de encomendas"
 
 msgid "parcel_mail_in"
-msgstr ""
+msgstr "depósito de encomendas"
 
 msgid "photos"
 msgstr "fotos"
@@ -23741,7 +23923,7 @@ msgid "ward"
 msgstr "ward"
 
 msgid "National Park"
-msgstr "Parque nacional"
+msgstr "Parque Nacional"
 
 msgid "Protected Area"
 msgstr "Área protegida"
@@ -23805,7 +23987,7 @@ msgid "Suburb"
 msgstr "Bairro"
 
 msgid "Quarter"
-msgstr ""
+msgstr "Sub-bairro"
 
 msgid "Neighbourhood"
 msgstr "Vizinhança"
@@ -24175,7 +24357,7 @@ msgid "Plant Nursery"
 msgstr "Viveiro de plantas"
 
 msgid "Salt Pond"
-msgstr ""
+msgstr "Salina"
 
 msgid "Aquaculture"
 msgstr "Aquicultura"
@@ -24230,55 +24412,55 @@ msgstr "Industrial"
 
 msgctxt "industrial"
 msgid "bakery"
-msgstr ""
+msgstr "padaria"
 
 msgctxt "industrial"
 msgid "brewery"
-msgstr ""
+msgstr "cervejaria"
 
 msgctxt "industrial"
 msgid "brickyard"
-msgstr ""
+msgstr "cerâmica"
 
 msgctxt "industrial"
 msgid "depot"
-msgstr ""
+msgstr "garagem"
 
 msgctxt "industrial"
 msgid "distributor"
-msgstr ""
+msgstr "distribuidora"
 
 msgctxt "industrial"
 msgid "factory"
-msgstr ""
+msgstr "fábrica"
 
 msgctxt "industrial"
 msgid "grinding_mill"
-msgstr ""
+msgstr "moinho"
 
 msgctxt "industrial"
 msgid "heating_station"
-msgstr ""
+msgstr "estação de aquecimento"
 
 msgctxt "industrial"
 msgid "machine_shop"
-msgstr ""
+msgstr "oficina de máquinas"
 
 msgctxt "industrial"
 msgid "mine"
-msgstr ""
+msgstr "mineração"
 
 msgctxt "industrial"
 msgid "oil"
-msgstr ""
+msgstr "óleo"
 
 msgctxt "industrial"
 msgid "port"
-msgstr ""
+msgstr "porto"
 
 msgctxt "industrial"
 msgid "salt_pond"
-msgstr ""
+msgstr "salina"
 
 msgctxt "industrial"
 msgid "sawmill"
@@ -24286,11 +24468,11 @@ msgstr "serraria"
 
 msgctxt "industrial"
 msgid "scrap_yard"
-msgstr ""
+msgstr "desmanche de veículos"
 
 msgctxt "industrial"
 msgid "shipyard"
-msgstr ""
+msgstr "estaleiro"
 
 msgctxt "industrial"
 msgid "slaughterhouse"
@@ -24298,7 +24480,7 @@ msgstr "abatedouro"
 
 msgctxt "industrial"
 msgid "warehouse"
-msgstr ""
+msgstr "armazém"
 
 msgid "Garages"
 msgstr "Garagens"
@@ -24671,19 +24853,19 @@ msgid "Label point"
 msgstr "Ponto de renderização do nome"
 
 msgid "Outline of building"
-msgstr ""
+msgstr "Contorno da edificação"
 
 msgid "Inner segment"
-msgstr ""
+msgstr "Segmento interno"
 
 msgid "Roof ridge"
-msgstr ""
+msgstr "Cumeeira"
 
 msgid "Roof edge"
-msgstr ""
+msgstr "Espigão"
 
 msgid "Building level"
-msgstr ""
+msgstr "Nível da edificação"
 
 msgid "Site"
 msgstr "Local"
@@ -24789,19 +24971,19 @@ msgstr "Rota de bicicleta"
 
 msgctxt "network"
 msgid "international"
-msgstr ""
+msgstr "internacional"
 
 msgctxt "network"
 msgid "national"
-msgstr ""
+msgstr "nacional"
 
 msgctxt "network"
 msgid "regional"
-msgstr ""
+msgstr "regional"
 
 msgctxt "network"
 msgid "local"
-msgstr ""
+msgstr "local"
 
 msgid "Mountain Biking Route"
 msgstr "Rota de Mountain Biking"
@@ -24975,7 +25157,7 @@ msgid "edge ways parallel to ''across''"
 msgstr "linhas de borda paralelas à estrada sobre a ponte (across)"
 
 msgid "ways passing through the tunnel"
-msgstr "caminhos que passam pelo tunel"
+msgstr "caminhos que passam pelo túnel"
 
 msgid "edge ways parallel to ''through''"
 msgstr "linhas de borda paralelas à estrada sob o túnel (through)"
@@ -24993,36 +25175,46 @@ msgid "Mapbox Satellite"
 msgstr "Satélite Mapbox"
 
 msgid "DigitalGlobe Premium Imagery"
-msgstr ""
+msgstr "Imagem Premium da DigitalGlobe"
 
 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 ""
+"A Imagem Premium da DigitalGlobe é um mosaico composto por ortofotos da "
+"DigitalGlobe em regiões selecionadas cobertas com imagens +Vivid ou áreas "
+"personalizadas com imagens interessantes. Tem resolução de 50cm ou melhor e "
+"é atualizada com mais frequência, com atualizações em andamento."
 
 msgid "DigitalGlobe Premium Imagery Vintage"
-msgstr ""
+msgstr "Imagem Vintage Premium da DigitalGlobe"
 
 msgid ""
 "Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
 "higher."
 msgstr ""
+"Limites das imagens e suas datas de captura. As informações aparecem a "
+"partir do nível de zoom 14."
 
 msgid "DigitalGlobe Standard Imagery"
-msgstr ""
+msgstr "Imagens Standard da DigitalGlobe"
 
 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 ""
+"Imagens Standard da DigitalGlobe são um conjunto de imagens selecionadas que "
+"cobrem 86% da massa terrestre, com 30-60cm de resolução quando disponível, "
+"ou preenchido por imagens Landsat. A idade média das imagens é de 2,31 anos, "
+"com algumas áreas atualizadas 2x por ano."
 
 msgid "DigitalGlobe Standard Imagery Vintage"
-msgstr ""
+msgstr "Imagens Vintage Standard da DigitalGlobe"
 
 msgid "Esri World Imagery"
-msgstr ""
+msgstr "Imagem Mundial da Esri"
 
 msgid "OpenCycleMap"
 msgstr "OpenCycleMap"
@@ -25052,7 +25244,7 @@ msgid "OpenStreetMap GPS Traces"
 msgstr "OpenStreetMap GPS Traces"
 
 msgid "Public GPS traces uploaded to OpenStreetMap."
-msgstr ""
+msgstr "Trilhas GPS públicas enviadas ao OpenStreetMap."
 
 msgid "OpenTopoMap"
 msgstr ""
@@ -25063,6 +25255,14 @@ msgstr "Transportes Públicos (ÖPNV)"
 msgid "Hike & Bike"
 msgstr "Hike & Bike"
 
+msgid "OpenSnowMap overlay"
+msgstr "Sobreposição do OpenSnowMap"
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+"Imagens de sobreposição para o mapeamento de pistas no OSM. Atualizado "
+"diariamente."
+
 msgid "skobbler"
 msgstr "skobbler"
 
@@ -25082,13 +25282,13 @@ msgid "Strava running heatmap"
 msgstr "Strava running heatmap"
 
 msgid "Strava cycling and running heatmap"
-msgstr ""
+msgstr "Strava - mapa de calor de ciclismo e corrida"
 
 msgid "Strava water sports heatmap"
-msgstr ""
+msgstr "Strava - mapa de calor de esportes aquáticos"
 
 msgid "Strava winter sports heatmap"
-msgstr ""
+msgstr "Strava - mapa de calor de esportes de inverno"
 
 msgid "Locator Overlay"
 msgstr "Locator Overlay"
@@ -25118,7 +25318,7 @@ msgid "Waymarked Trails: Winter Sports"
 msgstr "Waymarked Trails: Winter Sports"
 
 msgid "Wikimedia Map"
-msgstr ""
+msgstr "Mapa da Wikimedia"
 
 msgid "OSM Inspector: Geometry"
 msgstr "OSM Inspector: Geometria"
@@ -25133,7 +25333,7 @@ msgid "OSM Inspector: Highways"
 msgstr "OSM Inspector: Rodovias"
 
 msgid "OSM Inspector: Area"
-msgstr ""
+msgstr "OSM Inspector: Áreas"
 
 msgid "OSM Inspector: Routing"
 msgstr "OSM Inspector: Roteamento"
@@ -25142,7 +25342,7 @@ msgid "OSM Inspector: Addresses"
 msgstr "OSM Inspector: Endereços"
 
 msgid "OSM Inspector: Coastline (EU)"
-msgstr ""
+msgstr "OSM Inspector: Linha costeira (UE)"
 
 msgid "imagico.de OSM images for mapping: Prokletije Mountains"
 msgstr ""
@@ -25383,7 +25583,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr "basemap.at Orthofoto"
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -25435,16 +25636,16 @@ msgid "imagico.de OSM images for mapping: Rila and Pirin Mountains"
 msgstr ""
 
 msgid "OpenStreetMap (Belgian Style)"
-msgstr ""
+msgstr "OpenStreetMap (Estilo Belga)"
 
 msgid "OpenStreetMap (Belgian Style - French)"
-msgstr ""
+msgstr "OpenStreetMap (Estilo Belga - Francês)"
 
 msgid "OpenStreetMap (Belgian Style - Dutch)"
-msgstr ""
+msgstr "OpenStreetMap (Estilo Belga - Neerlandês)"
 
 msgid "OpenStreetMap (Belgian Style - German)"
-msgstr ""
+msgstr "OpenStreetMap (Estilo Belga - Alemão)"
 
 msgid "Orthophoto IGN-NGI"
 msgstr ""
@@ -25531,24 +25732,26 @@ msgid "For more accurate coastline and glacier mapping (true color)"
 msgstr ""
 
 msgid "IBGE Map of urban areas"
-msgstr ""
+msgstr "IBGE - Mapa das áreas urbanas"
 
 msgid "IBGE Map of rural areas"
-msgstr ""
+msgstr "IBGE - Mapa das áreas rurais"
 
 msgid "IBGE federal district"
-msgstr ""
+msgstr "IBGE - Distrito Federal"
 
 msgid "Addresses data from IBGE"
-msgstr ""
+msgstr "Dados de endereço do IBGE"
 
 msgid "Street names IBGE Salvador-BA"
-msgstr ""
+msgstr "Nomes de ruas do IBGE - Salvador-BA"
 
 msgid ""
 "Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
 "IBGE."
 msgstr ""
+"Geometria e nomes das ruas de Salvador, Bahia. Origem: Face de Logradouro - "
+"IBGE."
 
 msgid "Rio Mosaic 2013"
 msgstr "Rio Mosaico 2013"
@@ -25635,34 +25838,34 @@ msgid "DER-ES"
 msgstr ""
 
 msgid "IBGE-BC250 Isolated Rural Location"
-msgstr ""
+msgstr "IBGE-BC250 Localidades Rurais Isoladas"
 
 msgid "IBGE-BC250 Landing strip"
-msgstr ""
+msgstr "IBGE-BC250 Pistas de Pouso"
 
 msgid "IBGE-BC250 River drains"
-msgstr ""
+msgstr "IBGE-BC250 Rios e Drenagem"
 
 msgid "IBGE-BC250 Highways stretches"
-msgstr ""
+msgstr "IBGE-BC250 Trechos de Estradas"
 
 msgid "IBGE-BC250 Indigenous Lands"
-msgstr ""
+msgstr "IBGE-BC250 Terras Indígenas"
 
 msgid "IBGE-BC250 Public Land (Military)"
-msgstr ""
+msgstr "IBGE-BC250 Terras Públicas (Militares)"
 
 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 Hydrography"
@@ -25806,6 +26009,12 @@ msgstr "Estônia Cadastre (Maaamet)"
 msgid "Estonia Forestry (Maaamet)"
 msgstr "Estônia Forestry (Maaamet)"
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr "BANO"
 
@@ -25894,9 +26103,6 @@ msgstr ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
 
-msgid "Hamburg (40 cm)"
-msgstr "Hamburg (40 cm)"
-
 msgid "Hamburg (20 cm)"
 msgstr "Hamburg (20 cm)"
 
@@ -25924,10 +26130,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -26310,10 +26516,10 @@ msgid "USSR - Latvia"
 msgstr "USSR - Latvia"
 
 msgid "50cm ortho - Latvia"
-msgstr "50 cm orto - Letónia"
+msgstr "50 cm orto - Letônia"
 
 msgid "20cm ortho - Latvia - Coastline"
-msgstr "20 cm orto - Letónia - Litoral"
+msgstr "20 cm orto - Letônia - Litoral"
 
 msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
@@ -26327,18 +26533,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr "Luxembourg Inspire Railway"
-
-msgid "Luxembourg Inspire Roads"
-msgstr "Luxembourg Inspire Roads"
-
-msgid "Luxembourg Inspire Water"
-msgstr "Luxembourg Inspire Water"
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Niger Delta Oct 2012 Landsat"
 
@@ -26362,8 +26556,158 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
-msgstr "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
+msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
 msgstr ""
@@ -26424,11 +26768,11 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
-msgstr "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
-msgstr "Geoportal 2: Ortofotomapa (imagem aérea) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
+msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr "Geoportal 2: PRNG (geo names)"
@@ -26436,119 +26780,128 @@ msgstr "Geoportal 2: PRNG (geo names)"
 msgid "Geoportal 2: ISOK hillshade"
 msgstr "Geoportal 2: ISOK hillshade"
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
-msgstr "Będzin: Ortofotomapa 2013 (imagem aérea)"
+msgid "polska.e-mapa.net: Buildings"
+msgstr ""
+
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
+msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
-msgstr "Będzin: Budynki (edifícios)"
+msgid "Będzin: Buildings"
+msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
-msgstr "Bytom: Ortofotomapa 2012 (imagem aérea)"
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
+msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr "Bytom: Fotoplan 2014 (imagem aérea)"
 
-msgid "Bytom: Budynki (buildings)"
-msgstr "Bytom: Budynki (edifícios)"
+msgid "Bytom: Buildings"
+msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
-msgstr "Chorzów: Budynki (prédios)"
+msgid "Chorzów: Buildings"
+msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
-msgstr "Częstochowa: Budynki (prédios)"
+msgid "Częstochowa: Buildings"
+msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
+msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2013 (imagem aérea)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
+msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2014 (imagem aérea)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
+msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
-msgstr "Gliwice: Ortofotomapa 2013 (imagem aérea)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
+msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
-msgstr "Gliwice: Budynki (prédios)"
+msgid "Gliwice: Buildings"
+msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
-msgstr "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
-msgstr "Katowice: Budynki (prédios)"
+msgid "Katowice: Buildings"
+msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
-msgstr "Łódź: Budynki (prédios)"
+msgid "Łódź: Buildings"
+msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
-msgstr "Łódź: Ortofotomapa (imagme aéria)"
+msgid "Łódź: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
-msgstr "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat dębicki: Buildings"
+msgstr ""
+
+msgid "Powiat lubaczowski: Buildings"
+msgstr ""
+
+msgid "Powiat łańcucki: Buildings"
+msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
-msgstr "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
+msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
-msgstr "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
-msgstr "Powiat poznański: Budynki (buildings)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
+msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
-msgstr "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat rzeszowski: Buildings"
+msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
-msgstr "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat stalowowolski: Buildings"
+msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
-msgstr "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
+msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
-msgstr "Powiat stalowowolski: Budynki (buildings)"
+msgid "Przemyśl: Buildings"
+msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
-msgstr "Przemyśl: Budynki (buildings)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
-msgstr "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
-msgstr "Ruda Śląska: Ortofotomapa (imagem aérea)"
+msgid "Rzeszów: Buildings"
+msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
-msgstr "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
-msgstr "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Buildings"
+msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
-msgstr "Siemianowice Śląskie: Ortofotomapa (imagem aéria)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
+msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
-msgstr "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
+msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
+msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2009 (imagens aéreas)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
+msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
+msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2011 (imagem aérea)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
-msgstr "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
+msgstr ""
 
 msgid "ScanEx IRS"
 msgstr "fator de escala"
@@ -26684,6 +27037,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr "Kanton Aargau 25cm (AGIS 2011)"
 
@@ -27617,21 +27982,24 @@ msgid "Landsat 233055"
 msgstr "Landsat 233055"
 
 msgid "Recent Landsat imagery"
-msgstr ""
+msgstr "Imagens recentes do Landsat"
 
 msgid "Even housenumber in odd address interpolation."
-msgstr ""
+msgstr "Mesmo número de casa na interpolação dos endereços ímpares."
 
 msgid "Odd housenumber in even address interpolation."
-msgstr ""
+msgstr "Número de casa impar na mesma interpolação de endereços."
 
 msgid "Way with {0}. Tag each housenumber separately if possible."
 msgstr ""
+"Caminho com {0}. Marque cada número de casa separadamente, se possível."
 
 msgid ""
 "Object has no {0}, however, it has {1} and {2} whose value looks like a "
 "housenumber."
 msgstr ""
+"O objeto não possui {0}, entretanto, possui {1} e {2} cujos valores sem "
+"assemelham a um número de casa."
 
 msgid "Same value of {0} and {1}"
 msgstr "Mesmo valor de {0} e {1}"
@@ -27652,10 +28020,10 @@ msgid "{0} together with {1}"
 msgstr "{0} junto com {1}"
 
 msgid "suspicious tag combination"
-msgstr ""
+msgstr "combinação suspeita de etiquetas"
 
 msgid "two objects, one with {0} and one with {1} + {2} + {3}"
-msgstr ""
+msgstr "dois objetos, um com {0} e um com {1} + {2} + {3}"
 
 msgid "incomplete object: only {0}"
 msgstr "elemento incompleto: somente {0}"
@@ -27691,31 +28059,37 @@ msgid "{0} and {1} together with {2} and conflicting values"
 msgstr "{0} e {1} junta com {2} e valores conflitantes"
 
 msgid "{0} on a relation without {1}"
-msgstr ""
+msgstr "{0} na relação sem {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 ""
+"Curso de água longo com {0} entretanto não possui uma etiqueta que o define "
+"como um túnel ou subterrâneo. Remova {1} ou adicione a etiqueta de túnel se "
+"for aplicável. Verifique também as pontes que se cruzam e suas etiquetas {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 ""
+"Curso de água curto com {0} entretanto não possui uma etiqueta que o define "
+"como um túnel ou subterrâneo. Remova {1} ou adicione a etiqueta de túnel se "
+"for aplicável. Verifique também as pontes que se cruzam e suas etiquetas {1}."
 
 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úmero de faixas diferente nas chaves {0} e {1}"
 
 msgid "possibly missing {0} tag"
-msgstr ""
+msgstr "possível ausência da etiqueta {0}"
 
 msgid "street with odd number of {0}, but without {1} and {2} or {3}"
-msgstr ""
+msgstr "rua com o número ímpar de {0}, entretanto sem {1} e {2} ou {3}"
 
 msgid "{0} is deprecated"
 msgstr "{0} está obsoleta"
@@ -27751,6 +28125,8 @@ msgid ""
 "{0} is unspecific. Instead use the key fixme with the information what "
 "exactly should be fixed in the value of fixme."
 msgstr ""
+"{0} não é específico. Ao invés disto, utilize a chave fixme com a exata "
+"informação que deve ser corrigida no valor de fixme."
 
 msgid "{0} is deprecated. Please use instead a multipolygon."
 msgstr "{0} é depreciado. Por favor, use um multipolígono."
@@ -27771,7 +28147,7 @@ msgstr ""
 "{0}={1} é inespecífico. Por favor, substitua ''{1}'' por um valor específico."
 
 msgid "{0} should be replaced with {1}"
-msgstr "{0} deve ser substituido por {1}"
+msgstr "{0} deve ser substituído por {1}"
 
 msgid "{0} = {1}; remove {0}"
 msgstr "{0} = {1}; apagar {0}"
@@ -27801,7 +28177,7 @@ msgid "{0}"
 msgstr ""
 
 msgid "key with uncommon character"
-msgstr "chave com caráter incomum"
+msgstr "chave com caractere incomum"
 
 msgid "uncommon short key"
 msgstr "chave curta incomum"
@@ -27816,28 +28192,28 @@ msgid "{0} is deprecated. Use the {1}: key prefix instead."
 msgstr "{0} é depreciado. Use o prefixo-chave: {1} em vez disso."
 
 msgid "questionable key (ending with a number)"
-msgstr ""
+msgstr "chave questionável (terminando com um número)"
 
 msgid "The key {0} has an uncommon value."
-msgstr ""
+msgstr "A chave {0} tem um valor incomum."
 
 msgid "misspelled value"
-msgstr ""
+msgstr "valor com erros de grafia"
 
 msgid "wrong value: {0}"
-msgstr ""
+msgstr "valor errado: {0}"
 
 msgid "{0} on a node. Should be used on a way."
 msgstr "{0} em um nó. Deveria ser usado em uma via."
 
 msgid "{0} on a node. Should be used on a way or relation."
-msgstr ""
+msgstr "{0} está em um nó. Deve ser utilizado em um caminho ou relação."
 
 msgid "{0} on a node. Should be drawn as an area."
 msgstr "{0} em um nó. Deveria ser desenhado como uma área."
 
 msgid "{0} on a node. Should be used in a relation"
-msgstr ""
+msgstr "{0} está em um nó. Deve ser utilizado em uma relação"
 
 msgid "{0} on a way. Should be used on a node."
 msgstr "{0} em uma linha. Deveria ser usado em um ponto."
@@ -27846,15 +28222,17 @@ msgid "{0} on a way. Should be used in a relation"
 msgstr "{0} em uma via. Deveria ser utilizado em uma relação"
 
 msgid "node connects highway and building"
-msgstr ""
+msgstr "o nó conecta uma via a um edifício"
 
 msgid ""
 "Object at Position 0.00E 0.00N. There is nothing at this position except an "
 "already mapped weather buoy."
 msgstr ""
+"Objeto na posição 0.00E 0.00N. Não existe nada nesta posição além de uma "
+"boia meteorológica já mapeada."
 
 msgid "{0} together with {1} on a node. Remove {0}."
-msgstr ""
+msgstr "{0} está junto com {1} em um nó. Remova {0}."
 
 msgid "{0} on a node"
 msgstr "{0} em um nó"
@@ -27884,16 +28262,16 @@ msgid "node connects waterway and bridge"
 msgstr "pontos conectam via aquática e ponte"
 
 msgid "{0} node connected to a highway"
-msgstr ""
+msgstr "O nó {0} está conectado a uma via"
 
 msgid "suspicious roundabout direction"
 msgstr "direção da rotatória suspeita"
 
 msgid "{0} on a large area"
-msgstr ""
+msgstr "{0} em uma grande área"
 
 msgid "{0} on a small area"
-msgstr ""
+msgstr "{0} em uma pequena área"
 
 msgid "Too large building"
 msgstr "Prédio muito grande"
@@ -27902,14 +28280,18 @@ msgid ""
 "Node connects a power line or cable with an object which is not related to "
 "the power infrastructure."
 msgstr ""
+"O nó conecta uma linha de energia ou cabo com um objeto que não é "
+"relacionado a infraestrutura elétrica."
 
 msgid ""
 "Waterway ends without a connection to another waterway or the direction of "
 "the waterway is wrong."
 msgstr ""
+"O curso d’água termina sem uma conexão com outro curso d’água ou a direção "
+"do curso d’água está errada."
 
 msgid "Coastline inside {1}"
-msgstr ""
+msgstr "A linha de costa está dentro de {1}"
 
 msgid "{0} should be on the node where {1} and {2} intersect"
 msgstr "{0} deve ser no nó onde {1} e {2} se cruzam"
@@ -27918,12 +28300,15 @@ msgid ""
 "{0} is the tag for the linear waterway. To tag the water area use {1} + {2} "
 "instead."
 msgstr ""
+"{0} é uma etiqueta para um curso de água linear. Para marcar uma área com "
+"água use {1} + {2} ao invés disto."
 
 msgid "Ferry route is not connected to the road network or branches."
-msgstr ""
+msgstr "A rota de balsa não está conectada a rede rodoviária ou ramais."
 
 msgid "Ferry route is not connected to a ferry terminal or branches."
 msgstr ""
+"A rota de balsa não está conectada a um terminal de embarque ou ramais."
 
 msgid "abbreviated street name"
 msgstr "nome da rua abreviado"
@@ -27941,13 +28326,15 @@ msgid "highway without a reference"
 msgstr "highway sem referência"
 
 msgid "Unspecific highway type"
-msgstr ""
+msgstr "Tipo de via não especificada"
 
 msgid "{0} used with {1}"
 msgstr "{0} use com {1}"
 
 msgid "{0} is deprecated, use {1} instead. Also check similar tags like {2}"
 msgstr ""
+"{0} está obsoleto, utilize {1} ao invés disto. Verifique também as etiquetas "
+"similares como {2}"
 
 msgid ""
 "Value of ''{0}'' should either be ''{1}'' or ''{2}''. For sidewalks use "
@@ -27956,10 +28343,10 @@ msgstr ""
 "Valor de ''{0}'' deve ser ''{1}'' ou ''{2}''. Para calçadas use ''{3}''."
 
 msgid "pedestrian railway crossing without {0}"
-msgstr ""
+msgstr "travessia ferroviária de pedestre sem {0}"
 
 msgid "railway crossing without {0}"
-msgstr ""
+msgstr "travessia ferroviária sem {0}"
 
 msgid "{0} with multiple values"
 msgstr "{0} com múltiplos valores"
@@ -27968,16 +28355,16 @@ msgid "empty value in semicolon-separated ''{0}''"
 msgstr "valor vazio no separados por ponto e vírgula ''{0}''"
 
 msgid "numerical key"
-msgstr "chave númerica"
+msgstr "chave numérica"
 
 msgid "{0} value with + sign"
-msgstr ""
+msgstr "valor {0} com sinal +"
 
 msgid "{0} should be an integer value between -5 and 5"
-msgstr ""
+msgstr "{0} deve ser um valor inteiro entre -5 e 5"
 
 msgid "{0} should have numbers only with optional .5 increments"
-msgstr ""
+msgstr "{0} deve ter números apenas com incrementos opcionais de .5"
 
 msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
@@ -28008,7 +28395,7 @@ msgid "unusual {0} specification"
 msgstr "especificação {0} incomum"
 
 msgid "unusual train track gauge; use mm with no separator"
-msgstr "bitola ferroviáriain comum ; usar mm sem separador"
+msgstr "bitola ferroviária incomum ; usar mm sem separador"
 
 msgid "unusual incline; use percentages/degrees or up/down"
 msgstr "inclinação incomum; usar percentagens/graus ou para acima/abaixo"
@@ -28032,7 +28419,7 @@ 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 ""
+msgstr "a via com {0} faz parte de uma relação de rota ciclística"
 
 msgid "religion without denomination"
 msgstr "religião sem denominação"
@@ -28050,45 +28437,48 @@ msgid "street name contains ss"
 msgstr "nome da ruas contem ss"
 
 msgid "street name contains ß"
-msgstr ""
+msgstr "o nome da rua contém ß"
 
 msgid "{0} is unnecessary"
 msgstr "{0} é desnecessário"
 
 msgid "unnecessary tag"
-msgstr ""
+msgstr "tag desnecessária"
 
 msgid "{0} is unnecessary for {1}"
 msgstr "{0} é desnecessário para {1}"
 
 msgid "{0} makes no sense"
-msgstr ""
+msgstr "{0} não faz sentido"
 
 msgid "Nodes duplicating parent way tags"
 msgstr "Nós duplicando tags pai"
 
 msgid "{0} together with {1} and {2}. Remove {0}."
-msgstr ""
+msgstr "{0} está junto com {1} e {2}. Remova {0}."
 
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
 msgstr ""
+"a etiqueta wikipedia não informa o idioma, utilize "
+"\"wikipedia\"=\"idioma:título da página\""
 
 msgid "wikipedia tag has an unknown language prefix"
-msgstr ""
+msgstr "a etiqueta wikipedia possui um prefixo de idioma desconhecido"
 
 msgid "wikipedia tag format is deprecated"
-msgstr ""
+msgstr "o formato da etiqueta wikipedia está obsoleto"
 
 msgid "''wikipedia''=''language:page title''"
 msgstr "''wikipedia''=''idioma:título da página''"
 
 msgid "wikipedia ''{0}'' language is obsolete, use ''{1}'' instead"
-msgstr ""
+msgstr "o idioma da wikipedia ''{0}'' é obsoleto, use ''{1}'' ao invés disto"
 
 msgid "wikipedia ''{0}'' language is invalid, use ''{1}'' instead"
 msgstr ""
+"o idioma da wikipedia ''{0}'' é inválido, utilize ''{1}'' ao invés disto"
 
 msgid "{0} tag should not have URL-encoded values like ''%27''"
 msgstr ""
@@ -28132,7 +28522,7 @@ msgid "Display street labels (at high zoom)"
 msgstr "Exibir rótulos de rua (com zoom alto)"
 
 msgid "Use alternative turn restriction icon set"
-msgstr "Usa conjunto alternativo de icones para restrição de sentido"
+msgstr "Usa conjunto alternativo de ícones para restrição de sentido"
 
 msgid "Display fill colour of areas with place=*"
 msgstr "Mostrar cor de preenchimento de áreas com lugar=*"
@@ -28334,7 +28724,7 @@ msgid "Simple tool to tag house numbers."
 msgstr "Ferramenta simples para etiquetar os números da casa."
 
 msgid "Generate Imagery XML bounds from a multipolygon"
-msgstr "Gera imagens XML dos limites de um multipolígno"
+msgstr "Gera imagens XML dos limites de um multipolígono"
 
 msgid "Export tiles from the imagery layer cache into the file system."
 msgstr ""
@@ -28443,7 +28833,7 @@ msgid ""
 "segments, area surrounded by a (simple) closed way and create measurement "
 "paths (which also can be imported from a gps layer)."
 msgstr ""
-"Forneçe um diálogo de medição e uma camada para medir o comprimento e ângulo "
+"Fornece um diálogo de medição e uma camada para medir o comprimento e ângulo "
 "de segmentos, área cercada por uma forma (simples) fechada e criar caminhos "
 "de medição (que também podem ser importados a partir de uma camada de gps)."
 
@@ -28472,7 +28862,7 @@ msgid ""
 "Disallow using JOSM forever (WARNING: this plugin prevents JOSM from loading "
 "and is hard to rid of)"
 msgstr ""
-"Proibe o uso do JOSM para sempre (ATENÇÃO: este plugin impede o JOSM de "
+"Proíbe o uso do JOSM para sempre (ATENÇÃO: este plugin impede o JOSM de "
 "carregar e é difícil de remover)"
 
 msgid "Import OSM data in o5m format"
@@ -28506,7 +28896,7 @@ msgid ""
 "Recommends categories/tags on newly created OSM entities by analysing "
 "spatial entities into training features and using SVM classification"
 msgstr ""
-"Categorias/tags ecomendadas em entidades OSM recém-criadas através da "
+"Categorias/tags recomendadas em entidades OSM recém-criadas através da "
 "análise de entidades espaciais em recursos de treinamento e utilizando a "
 "classificação SVM"
 
@@ -28574,7 +28964,7 @@ msgid "Relation and multipolygon creating and editing panel."
 msgstr "Painel de criação e edição de relação e multipolígono."
 
 msgid "Plugin for reverting changesets"
-msgstr "Plugin para revertir changesets"
+msgstr "Plugin para reverter changesets"
 
 msgid ""
 "Expand a simple intersection to a roundabout in gradual steps. Select an "
@@ -28672,7 +29062,7 @@ msgid ""
 "Integrate to-fix http://osmlab.github.io/to-fix/ into JOSM to repair errors "
 "in OpenStreetMap"
 msgstr ""
-"Reparoe integrado http://osmlab.github.io/to-fix/ no JOSM para reparar erros "
+"Reparo integrado http://osmlab.github.io/to-fix/ no JOSM para reparar erros "
 "no OpenStreetMap"
 
 msgid ""
@@ -28753,7 +29143,7 @@ msgid "Columbus V-900 CSV Files"
 msgstr "Arquivos CSV Columbus V-900"
 
 msgid "Importing CSV file ''%s''..."
-msgstr "Importanodo arquivo CSV ''%s''..."
+msgstr "Importando arquivo CSV ''%s''..."
 
 msgid "Markers of "
 msgstr "Marcas de "
@@ -28829,7 +29219,7 @@ msgid "Missing definition of new object with id {0}."
 msgstr "Faltando definição de novo objeto com ID {0}."
 
 msgid "Missing mandatory attribute ''{0}'' on <member> of relation {1}."
-msgstr "Faltando atributo obrigatório ''{0}'' no <membror> da relação {1}."
+msgstr "Faltando atributo obrigatório ''{0}'' no <member> da relação {1}."
 
 msgid "Illegal value for attribute ''uid''. Got ''{0}''."
 msgstr "Valor ilegal para o atributo ''uid''. Recuperado ''{0}''."
@@ -29075,7 +29465,7 @@ msgid "Enter key mode"
 msgstr "Entre no modo de chave"
 
 msgid "Auto add tags"
-msgstr "Adição automática de tagas"
+msgstr "Adição automática de tags"
 
 msgid "Autosimplify"
 msgstr "Autosimplify"
@@ -29153,7 +29543,7 @@ msgid "Line information"
 msgstr "Informações da linha"
 
 msgid "Cannot place node outside of the world."
-msgstr "Não é possível colocar o nó pora do mundo."
+msgstr "Não é possível colocar o nó fora do mundo."
 
 msgid "Draw the way by mouse"
 msgstr "Desenhe o caminho com o mouse"
@@ -29391,15 +29781,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
-msgstr "Iniciar camada do Mapillary"
+msgid "Open Mapillary layer"
+msgstr ""
 
 msgid "Mapillary"
 msgstr "Mapillary"
 
-msgid "Create Mapillary layer"
-msgstr "Criar camada do Mapillary"
-
 msgid "Download Mapillary images in current view"
 msgstr "Obtendo imagens do Mapillary na visão atual"
 
@@ -29458,14 +29845,8 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr "Enviar imagens"
-
-msgid "Upload Mapillary pictures"
-msgstr "Atualizar imagens do Mapillary"
-
-msgid "Upload pictures."
-msgstr "Enviar imagens."
+msgid "Upload Mapillary images"
+msgstr ""
 
 msgid "Walk mode"
 msgstr "Modo caminhada"
@@ -29500,15 +29881,12 @@ msgstr "Exportação imagens selecionadas"
 msgid "Rewrite imported images"
 msgstr "Reescreve imagens importadas"
 
-msgid "Select a folder"
-msgstr "Selecione uma pasta"
+msgid "Select a directory"
+msgstr "Selecione um diretório"
 
 msgid "Explore"
 msgstr "Explorar"
 
-msgid "Select a directory"
-msgstr "Selecione um diretório"
-
 msgid "Speed limit"
 msgstr "Limite de velocidade"
 
@@ -29641,6 +30019,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -29676,7 +30059,7 @@ msgid "Wait for full quality pictures"
 msgstr "Espere por imagens de qualidade total"
 
 msgid "Follow selected image"
-msgstr "Sigir imagem selecionada"
+msgstr "Seguir imagem selecionada"
 
 msgid "Go forward"
 msgstr "Ir para a frente"
@@ -30071,7 +30454,7 @@ msgid "Potential"
 msgstr "Potencial"
 
 msgid "Relation: {0}"
-msgstr "Relaçã: {0}"
+msgstr "Relação: {0}"
 
 msgid "Associate with street using:"
 msgstr "Associado com a rua usando:"
@@ -30205,7 +30588,7 @@ msgstr ""
 "Este é um cenário não suportado.\n"
 
 msgid "Undocumented problem occured.\n"
-msgstr "Ocurrou um problema não documentado.\n"
+msgstr "Ocorreu um problema não documentado.\n"
 
 msgid "AlignWayS: Alignment not possible"
 msgstr "AlignWayS: Alinhamento não possível"
@@ -30540,10 +30923,10 @@ msgid "Tag Building"
 msgstr "Tag prédio"
 
 msgid "Tools: {0}"
-msgstr "Ferrmamentas: {0}"
+msgstr "Ferramentas: {0}"
 
 msgid "Area Selection"
-msgstr "Área de seleção"
+msgstr "Seleção de área"
 
 msgid "Select an area (e.g. building) from an underlying image."
 msgstr ""
@@ -30632,7 +31015,7 @@ msgid ""
 msgstr ""
 "O limite de cor define o quanto a cor pode ser diferente da cor selecionada. "
 "Os valores de vermelho, verde e azul devem estar na gama de (selecionado - "
-"limiar) para (+ limiar seleccionado). (Padrão: {0})."
+"limiar) para (+ limiar selecionado). (Padrão: {0})."
 
 msgid "Color Threshold"
 msgstr "Limiar de cor"
@@ -30781,7 +31164,7 @@ msgid "Use address nodes under buildings"
 msgstr "Use endereço dos nós abaixo dos prédios"
 
 msgid "Buildings width:"
-msgstr "Largura do edificío:"
+msgstr "Largura do edifício:"
 
 msgid "Length step:"
 msgstr "Comprimento do passo:"
@@ -30992,7 +31375,7 @@ msgid "on polygon"
 msgstr "no polígono"
 
 msgid "Helping tool for tag address"
-msgstr "Ferrametna de ajuda para tag endereços"
+msgstr "Ferramenta de ajuda para tag endereços"
 
 msgid "CadastreFR - Buildings"
 msgstr "CadastreFR - Prédio"
@@ -31001,7 +31384,7 @@ msgid "Next no"
 msgstr "Próximo"
 
 msgid "Enter addresses"
-msgstr "Insira o endereçõ"
+msgstr "Insira o endereço"
 
 msgid "Adjust WMS"
 msgstr "Ajustar WMS"
@@ -31085,13 +31468,13 @@ msgid "Cadastre Edigeo files"
 msgstr ""
 
 msgid "Replace original background by JOSM background color."
-msgstr "Substui o plano de fundo original por cor."
+msgstr "Substitui o plano de fundo original por cor."
 
 msgid "Reverse grey colors (for black backgrounds)."
 msgstr "Cores cinza reversa (para fundos pretos)."
 
 msgid "Set background transparent."
-msgstr "Definir transparencia do fundo."
+msgstr "Definir transparência do fundo."
 
 msgid "Draw boundaries of downloaded data."
 msgstr "Estabelecer limites de dados baixados."
@@ -31300,7 +31683,7 @@ msgid ""
 "(No = new cache)"
 msgstr ""
 "Localização \"{0}\" encontrada no cache.\n"
-"Caregar do cache primeiro?\n"
+"Carregar do cache primeiro?\n"
 "(Não = novo cache)"
 
 msgid "Select Feuille"
@@ -31339,7 +31722,7 @@ msgid ""
 "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."
+"Servidor em manutenção ou temporariamente sobrecarregado."
 
 msgid ""
 "Town/city {0} not found or not available\n"
@@ -31378,7 +31761,7 @@ msgid "Extract SVG ViewBox..."
 msgstr "Extraia SVG ViewBox ..."
 
 msgid "Extract best fitting boundary..."
-msgstr "Extrai melhor aguste do limete da fronteira..."
+msgstr "Extrai o melhor ajuste do limite da fronteira..."
 
 msgid "Create boundary"
 msgstr "Criar fronteira"
@@ -31436,7 +31819,7 @@ msgid ""
 "correctly. Retry please."
 msgstr ""
 "Ooops. Não consegui pegar todas as coordenadas\n"
-" correctamente. Tente novamente, por favor."
+"corretamente. Tente novamente, por favor."
 
 msgid "Enter cadastre east,north position"
 msgstr "Insira a posição leste, norte para cadastro"
@@ -31481,7 +31864,7 @@ msgid "Image size (px): {0}/{1}"
 msgstr "Tamanho da imagem (px): {0}/{1}"
 
 msgid "Is vectorized."
-msgstr "Está veterozado."
+msgstr "Está vetorizado."
 
 msgid "Commune bbox: {0}"
 msgstr "Comuna de bbox: {0}"
@@ -31490,8 +31873,8 @@ msgid ""
 "Unsupported cache file version; found {0}, expected {1}\n"
 "Create a new one."
 msgstr ""
-"Não há suporte a versão do arquivo cache; encontrado {0}, esperadp {1}\n"
-"Criar uma novo."
+"Não há suporte a versão do arquivo cache; encontrado {0}, esperado {1}\n"
+"Criar um novo."
 
 msgid "Cache Format Error"
 msgstr "Erro na formatação do cache"
@@ -31500,7 +31883,7 @@ msgid "Lambert zone {0} in cache incompatible with current Lambert zone {1}"
 msgstr "Zona Lambert {0} no cache incompatível com a atual zona Lambert {1}"
 
 msgid "Cache Lambert Zone Error"
-msgstr "Erro no chace Lambert Zone"
+msgstr "Erro no cache Lambert Zone"
 
 msgid "canvec tile helper"
 msgstr "canvec tile helper"
@@ -32395,7 +32778,7 @@ msgid "Worst tracktype (1-5) the vehicle can still use, 0 for none"
 msgstr "Worst tracktype (1-5), o veículo ainda pode usar, 0 para nenhum"
 
 msgid "Change bookmark"
-msgstr "Mudarr bookmark"
+msgstr "Alterar bookmark"
 
 msgid "Edit access parameters"
 msgstr "Editar parâmetros de acesso"
@@ -32559,7 +32942,7 @@ msgid "Save Imagery XML file"
 msgstr "Salvar arquivo de imagem XML"
 
 msgid "XML Imagery Bounds"
-msgstr "Limites das imagnes XML"
+msgstr "Limites das imagens XML"
 
 msgid "Generate Imagery XML bounds for the selection"
 msgstr "Gera imagens XML dos limites da seleção"
@@ -33200,7 +33583,7 @@ msgid "Tracing"
 msgstr "Traçando"
 
 msgid "checking cache..."
-msgstr "verificanod cache..."
+msgstr "verificando cache..."
 
 msgid "Running vertex reduction..."
 msgstr "Executando redução de vértice..."
@@ -33326,7 +33709,7 @@ msgstr ""
 msgid ""
 "Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
 msgstr ""
-"Resolução dos quadroso do Landsat, medida em pixels por grau. Padrão 4000."
+"Resolução dos quadros do Landsat, medida em pixels por grau. Padrão 4000."
 
 msgid "Size of one landsat tile, measured in pixels. Default 2000."
 msgstr "Tamanho de um quadro landsat, medido em pixels. Padrão 2000."
@@ -33517,14 +33900,14 @@ msgstr ""
 
 msgid "No thanks, use JOSM''s plain text preferences storage"
 msgstr ""
-"Não, obrigado, use o armazenamento em texto simple das preferências do JOSM"
+"Não, obrigado, use o armazenamento em texto simples das preferências do JOSM"
 
 msgid ""
 "Found sensitive data that is still saved in JOSM''s preference file (plain "
 "text)."
 msgstr ""
-"Enconrados dados sensíveis que ainda são guardados no arquivo de preferência "
-"do JOSM (texto simples)."
+"Encontrados dados sensíveis que ainda são guardados no arquivo de "
+"preferência do JOSM (texto simples)."
 
 msgid "Transfer to password manager and remove from preference file"
 msgstr ""
@@ -33683,7 +34066,7 @@ msgid "I understand and accept these terms and conditions"
 msgstr "Eu compreendo e aceito os termos e condições"
 
 msgid "View the full text of this license"
-msgstr "Ver todoo o texto desta licença"
+msgstr "Ver todo o texto desta licença"
 
 msgid "I refuse these terms and conditions. Cancel download."
 msgstr "Eu recuso estes termos e condições. Cancelar download."
@@ -33713,7 +34096,7 @@ msgstr[0] "O download do seguinte módulo <strong>falhou</strong>:"
 msgstr[1] "O download dos seguintes módulos {0} <strong>falhou</strong>:"
 
 msgid "Modules"
-msgstr "Modulos:"
+msgstr "Módulos"
 
 msgid "Accept the new module sites and close the dialog"
 msgstr "Aceitar os novos sites do módulo e fechar o diálogo"
@@ -33756,7 +34139,7 @@ msgid "Open Data Module description URL"
 msgstr "Abrir URL do Data Module description"
 
 msgid "Download OSM data corresponding to the current data set."
-msgstr "Baixar dados OSM corespondentes ao data set atual."
+msgstr "Baixar dados OSM que correspondem ao data set atual."
 
 msgid "Diff"
 msgstr "Diferença"
@@ -33788,7 +34171,7 @@ msgid ""
 msgstr ""
 "Um manipulador especial para vários portais de dados aberto <br/><br/>Por "
 "favor, leia os Termos e Condições de Uso de cada site<br/>antes de qualquer "
-"upload dee dados carregados por este plugin."
+"upload de dados carregados por este plugin."
 
 msgid "General settings"
 msgstr "Definições gerais"
@@ -33874,7 +34257,7 @@ msgid "KML/KMZ files"
 msgstr "Arquivos KML/KMZ"
 
 msgid "MapInfo files"
-msgstr "Arquvos MapInfo"
+msgstr "Arquivos MapInfo"
 
 msgid "Shapefiles"
 msgstr "Shapefiles"
@@ -34054,7 +34437,7 @@ msgid "Keep module"
 msgstr "Módulo Keep"
 
 msgid "Click to keep the module ''{0}''"
-msgstr "Clique para mantar o módulo ''{0}''"
+msgstr "Clique para manter o módulo ''{0}''"
 
 msgid "Warning: failed to delete outdated module ''{0}''."
 msgstr "Aviso: falha ao excluir o módulo desatualizado ''{0}''."
@@ -34110,7 +34493,7 @@ msgstr ""
 "módulo. Ignorando."
 
 msgid "Processing module site cache icon files..."
-msgstr "Processando módulo do cache dos arquivos de icones locais..."
+msgstr "Processando módulo do cache dos arquivos de ícones locais..."
 
 msgid "Processing module files..."
 msgstr "Processando arquivos de módulo..."
@@ -34435,6 +34818,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr "O arquivo não pôde ser removido!"
 
@@ -34699,7 +35086,7 @@ msgid "Point transformed"
 msgstr "Ponto transformado"
 
 msgid "Transform point on the picture"
-msgstr "Tranformar ponto na imagem"
+msgstr "Transformar ponto na imagem"
 
 msgid "PicLayer: {0}"
 msgstr "PicLayer: {0}"
@@ -34767,10 +35154,10 @@ msgid "Add new address point"
 msgstr "Adicionar novo ponto de endereço"
 
 msgid "Tags copied to clipboard."
-msgstr "Tags copiadas para a área de tranferência."
+msgstr "Tags copiadas para a área de transferência."
 
 msgid "New address point added."
-msgstr "Novo ponto de enereço adicionado"
+msgstr "Novo ponto de endereço adicionado."
 
 msgid "Download Osmosis poly"
 msgstr "Baixar Osmosis poly"
@@ -34855,15 +35242,17 @@ msgid "Printing has failed."
 msgstr "Impressão falhou."
 
 msgid "Repeat last fix"
-msgstr ""
+msgstr "Repete a última correção"
 
 msgid ""
 "The relation has incomplete members. Do you want to download them and "
 "continue with the sorting?"
 msgstr ""
+"A relação está incompleta. Deseja baixar os membros ausentes e continuar a "
+"classificação?"
 
 msgid "Incomplete Members"
-msgstr ""
+msgstr "Membros Ausentes"
 
 msgid "Do you want to make the roundabout round?"
 msgstr ""
@@ -35213,7 +35602,7 @@ msgid "Time on your stopwatch"
 msgstr "Tempo em seu cronômetro"
 
 msgid "Time window"
-msgstr "janela de tempoJ"
+msgstr "Janela de tempo"
 
 msgid "seconds"
 msgstr "segundos"
@@ -35334,7 +35723,7 @@ msgid "Change role"
 msgstr "Alterar função"
 
 msgid "Enter role for selected members"
-msgstr "Enter a função para os membros seleccionados"
+msgstr "Indique a função para os membros selecionados"
 
 msgid "Relation Toolbox: {0}"
 msgstr "Caixa de ferramentas de relação: {0}"
@@ -35349,10 +35738,10 @@ msgid "Clear the chosen relation"
 msgstr "Limpar a relação escolhida"
 
 msgid "Create a multipolygon from selected objects"
-msgstr "Criar um multipolígonoa partir dos objetos selecionados"
+msgstr "Criar um multipolígono a partir dos objetos selecionados"
 
 msgid "Create multipolygons from rings"
-msgstr "Criar multipolígonos de circulos"
+msgstr "Criar multipolígonos de círculos"
 
 msgid "Move tags from ways to relation"
 msgstr "Move tags de vias para relação"
@@ -35519,7 +35908,7 @@ msgid "Downloading changeset"
 msgstr "Baixando changeset"
 
 msgid "See {0}"
-msgstr "Vejá {0}"
+msgstr "Veja {0}"
 
 msgid "Revert changeset #{0}"
 msgstr "Reverter changeset #{0}"
@@ -35850,7 +36239,7 @@ msgid "Delete overlay"
 msgstr ""
 
 msgid "Simplify Area"
-msgstr "Área simplificada"
+msgstr "Simplificar área"
 
 msgid "Delete unnecessary nodes from an area."
 msgstr "Apaga nós desnecessários de uma área."
@@ -35966,9 +36355,6 @@ msgstr "Exportar dados de tráfego para SUMO network file."
 msgid "SUMO Export"
 msgstr "Exportar SUMO"
 
-msgid "Export"
-msgstr "Exportar"
-
 msgid "AutoSave LiveData"
 msgstr "AutoSave LiveData"
 
@@ -36062,7 +36448,7 @@ msgstr "Tagging Preset Tester"
 msgid ""
 "Open the tagging preset test tool for previewing tagging preset dialogs."
 msgstr ""
-"Abre a ferramenta de teste de tags de pedefinições para pré-visualizar os "
+"Abre a ferramenta de teste de tags de predefinições para pré-visualizar os "
 "diálogos de tags de predefinições."
 
 msgid "You have to specify tagging preset sources in the preferences first."
@@ -36142,7 +36528,7 @@ msgid "Cannot reverse!"
 msgstr "Não é possível reverter!"
 
 msgid "Reverse Terrace"
-msgstr "Reverter um terraçoReverse Terrace"
+msgstr "Reverter um terraço"
 
 msgid "Terrace a building"
 msgstr "Terraço de um prédio"
@@ -36375,7 +36761,7 @@ msgid "Select parameter"
 msgstr "Selecionar parâmetro"
 
 msgid "Tracer2: add a way with {0} points"
-msgstr "Tracer2: adicionou umvia com {0} pontos"
+msgstr "Tracer2: adicionou uma via com {0} pontos"
 
 msgid "Tracer2: modify way to {0} points"
 msgstr "Tracer2: modificou a via para {0} pontos"
@@ -36427,7 +36813,7 @@ msgid ""
 "If you don''t have the server, please download it from\n"
 "{0}."
 msgstr ""
-"Tracer2Server não está emexecução. Por favor, inicie o servidor.\n"
+"O Tracer2Server não está em execução. Por favor, inicie o servidor.\n"
 "Se você não tem o servidor, faça o download de\n"
 "{0}."
 
@@ -36441,7 +36827,7 @@ msgid "GPG"
 msgstr "GPG"
 
 msgid "Export sigs..."
-msgstr "Exportanto sigs..."
+msgstr "Exportando sigs..."
 
 msgid "Export all signatures to XML file."
 msgstr "Exportar todas as assinaturas para o arquivo XML."
@@ -36996,7 +37382,7 @@ msgid "Cancel and return to editor"
 msgstr "Cancelar e retornar para o editor"
 
 msgid "Deleted members in turn restriction"
-msgstr "Membros excluidos em restrição de sentido"
+msgstr "Membros excluídos em restrição de sentido"
 
 msgid "Create a conflict and close this turn restriction editor"
 msgstr "Criar um conflito e fechar este editor de restrição de sentido"
@@ -37250,7 +37636,7 @@ msgid ""
 msgstr ""
 "Esta restrição de sentido usa a via <span class=\"object-name\">{0}</span> "
 "com a função <tt>de</tt> <strong>e</strong> com função<tt>para</tt>. Em uma "
-"restrição de sentido, a via com a função <tt>de</tt> deve ser difernete da "
+"restrição de sentido, a via com a função <tt>de</tt> deve ser diferente da "
 "via com função <tt>para</tt>."
 
 msgid "Delete ''from''"
@@ -37298,7 +37684,7 @@ msgstr ""
 "O <strong>de</strong>-via <span class=\"nome-objeto\">{0}</span> e o "
 "<strong>para</strong>-via <span class=\"object-name\">{1}</span> se cruzam "
 "no nó <span class=\"nome-objeto\">{2}</span> mas esse nó não é uma "
-"<strong>via</strong>-objetot.<br> É recomendado defini-lo como uma única "
+"<strong>via</strong>-objeto.<br> É recomendado defini-lo como uma única "
 "<strong>via</strong>-objeto."
 
 msgid "Set via-Object"
@@ -37330,8 +37716,7 @@ msgstr ""
 "sentido."
 
 msgid "Please go to the Basic editor and manually choose a way."
-msgstr ""
-"Por favor, vá para o editor Básico e escolhar manualmente um caminho."
+msgstr "Por favor, vá para o editor Básico e escolha um caminho manualmente."
 
 msgid "Add in editor"
 msgstr "Adicionar no editor"
@@ -37460,7 +37845,7 @@ msgstr ""
 msgid "Unable to undelete relation {0}. Object has likely been redacted"
 msgstr ""
 "Não é possível desfazer a exclusão da relação {0}. Objeto foi provavelmente "
-"etitado"
+"editado"
 
 msgid "Undelete object..."
 msgstr "Retornar objetos apagados..."
@@ -37594,7 +37979,7 @@ msgid "Copy tags from previous selection"
 msgstr "Copiar tags da seleção prévia"
 
 msgid "Pastes tags of previously selected object(s)"
-msgstr "Colar tags de objeto(s) selecionado(s) préviamente"
+msgstr "Colar tags de objeto(s) selecionado(s) previamente"
 
 msgid "Add Source Tag"
 msgstr "Adicionar tag Fonte"
@@ -37666,7 +38051,7 @@ msgid ""
 msgstr ""
 "Por favor, edite as URLs personalizadas e selecione uma linha para usar com "
 "a ferramenta<br/> <b>{chave}</b> é substituída com o valor da "
-"tag<br/> <b>{#id}</b> é substituidído com o elemento ID<br/> "
+"tag<br/> <b>{#id}</b> é substituído com o elemento ID<br/> "
 "<b>{#tipo}</b> é substituído com \"nó\",\"via\" ou \"relação\" "
 "<br/> <b>{#lat} , {#lon}</b> são substituídos com a "
 "latitude/longitude do centro do mapa<br/> Você pode carregar manualmente as "
@@ -37815,7 +38200,7 @@ msgid "Replace geometry for way {0}"
 msgstr "Substitui a geometria para a via {0}"
 
 msgid "Replace Membership"
-msgstr ""
+msgstr "Substituir Membro Associado"
 
 msgid ""
 "In relations where the selected object is member of, replace it with a new "
@@ -37834,10 +38219,10 @@ msgid "Range of child primitives count"
 msgstr "Contagem do intervalo de filhos primitivos"
 
 msgid "Range of parent primitives count"
-msgstr "Contagaem do intervalo de pais privimitovos"
+msgstr "Contagem do intervalo de pais primitivos"
 
 msgid "Range of referencing relation count"
-msgstr "Contagem de referêcias de relações"
+msgstr "Contagem de referências de relações"
 
 msgid "Range of attached ways count"
 msgstr "Contagem do intervalo de vias ligadas"
@@ -37889,7 +38274,7 @@ msgid "Select middle nodes"
 msgstr "Selecionar nós do meio"
 
 msgid "Please select two nodes connected by way!"
-msgstr "Por favor, seleccione dois nós conectados por uma via!"
+msgstr "Por favor, selecione dois nós conectados por uma via!"
 
 msgid "Too many ways are added: {0}!"
 msgstr "Muitas vias foram adicionadas: {0}!"
@@ -37908,7 +38293,7 @@ msgstr ""
 "multipolígonos para encontrar todas as primitivas dentro delas!"
 
 msgid "Area boundary [testing]"
-msgstr "Área de fronteira [teste]"
+msgstr "Limite da área [teste]"
 
 msgid "Select relation or all ways that forms area boundary"
 msgstr "Selecionar relação ou todos as vias que formam a área de fronteira"
@@ -37917,7 +38302,7 @@ msgid ""
 "Nothing found. Please select way that is a part of some polygon formed by "
 "connected ways"
 msgstr ""
-"Nada foi encontrado. Por favor, seleccione a forma que é uma parte de algum "
+"Nada foi encontrado. Por favor, selecione a forma que é uma parte de algum "
 "polígono formado pelas vias conectadas"
 
 msgid "Select Highway"
@@ -38214,10 +38599,10 @@ msgid "Target key: "
 msgstr ""
 
 msgid "Search Wikipedia category"
-msgstr ""
+msgstr "Buscar categoria da Wikipedia"
 
 msgid "Load category"
-msgstr ""
+msgstr "Carregar categoria"
 
 msgid "Fetch Wikipedia articles with coordinates"
 msgstr "Buscar artigos da Wikipédia com coordenadas"
@@ -38318,22 +38703,22 @@ msgid "Test"
 msgstr "Testar"
 
 msgid "View website"
-msgstr ""
+msgstr "Visualizar website"
 
 msgid "View URL"
-msgstr ""
+msgstr "Visualizar URL"
 
 msgid "Send Email"
-msgstr ""
+msgstr "Enviar Email"
 
 msgid "View image"
-msgstr ""
+msgstr "Visualizar imagem"
 
 msgid "View %name% article"
-msgstr ""
+msgstr "Ver artigo %name%"
 
 msgid "View Wikidata page"
-msgstr ""
+msgstr "Ver página da Wikidata"
 
 msgid "View Wikispecies page"
 msgstr ""
diff --git a/i18n/po/rm.po b/i18n/po/rm.po
index bf4ab14..ea27a0b 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 05:00+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:58+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -953,6 +953,12 @@ msgstr ""
 msgid "Select if the data should be downloaded into a new layer"
 msgstr ""
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr ""
 
@@ -2225,6 +2231,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3028,18 +3059,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr ""
@@ -3056,9 +3075,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8231,12 +8262,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9730,6 +9755,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9834,8 +9865,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9845,6 +9876,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9858,14 +9892,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr ""
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9908,6 +9965,16 @@ msgstr ""
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10236,40 +10303,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13356,8 +13423,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14020,6 +14087,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19448,6 +19521,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23423,6 +23502,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23743,7 +23828,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24166,6 +24252,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24252,9 +24344,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24282,10 +24371,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24684,18 +24773,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24719,7 +24796,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24781,10 +25008,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24793,118 +25020,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25041,6 +25277,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27569,15 +27817,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27636,13 +27881,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27678,15 +27917,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27819,6 +28055,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32245,6 +32486,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33725,9 +33970,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/ro.po b/i18n/po/ro.po
index 0784397..2d10a5b 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 05:01+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:59+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "X-Poedit-Country: ROMANIA\n"
 "Language: ro\n"
 "X-Poedit-Language: Romanian\n"
@@ -1003,6 +1003,12 @@ msgstr ""
 "Selectaţi în cazul în care datele ar trebui să fie descărcate într-un nou "
 "strat"
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr ""
 
@@ -2275,6 +2281,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3080,18 +3111,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr ""
@@ -3108,9 +3127,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8287,12 +8318,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9786,6 +9811,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9890,8 +9921,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9901,6 +9932,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9914,14 +9948,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr "Salvează fișier GPX"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9964,6 +10021,16 @@ msgstr "Salvează Strat"
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10294,40 +10361,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13419,8 +13486,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14083,6 +14150,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19511,6 +19584,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23486,6 +23565,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23806,7 +23891,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24229,6 +24315,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24315,9 +24407,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24345,10 +24434,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24747,18 +24836,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24782,7 +24859,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24844,10 +25071,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24856,118 +25083,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25104,6 +25340,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27632,15 +27880,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27699,13 +27944,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27741,15 +27980,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27882,6 +28118,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32308,6 +32549,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33788,9 +34033,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/ru.po b/i18n/po/ru.po
index 76cc3f3..1765172 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-11-26 00:06+0100\n"
-"PO-Revision-Date: 2017-11-23 23:10+0000\n"
-"Last-Translator: Мокринский Павел <Unknown>\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\n"
+"PO-Revision-Date: 2017-12-29 05:53+0000\n"
+"Last-Translator: Nkolay Parukhin <parukhin at gmail.com>\n"
 "Language-Team: Koptev Oleg <koptev.oleg at gmail.com>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
 "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Launchpad-Export-Date: 2017-11-26 05:01+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:59+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: ru_RU\n"
 
 msgid "Use OAuth"
@@ -1065,6 +1065,12 @@ msgstr "На отдельный слой"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "Отметьте, если данные должны быть скачаны в новый слой"
 
+msgid "Zoom to downloaded data"
+msgstr "Приблизиться к загруженным данным"
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr "Выберите, чтобы приблизиться к последним загруженным данным"
+
 msgid "Download Location"
 msgstr "Скачивание по ссылке"
 
@@ -1215,7 +1221,7 @@ msgid ""
 "Some of the objects are modified.<br> Proceed, if these changes should be "
 "discarded.</html>"
 msgstr ""
-"Часть объектов было изменено.<br>Если продолжить, то эти изменения будут "
+"Часть объектов была изменена.<br>Если продолжить, то эти изменения будут "
 "отменены.</html>"
 
 msgid "Clear Undo/Redo buffer"
@@ -2481,6 +2487,35 @@ msgstr[2] ""
 msgid "Confirmation"
 msgstr "Подтверждение"
 
+msgid "Export GPX file starting from first member"
+msgstr "Экспортировать в файл GPX, начиная с первого участника"
+
+msgid "Export GPX file starting from last member"
+msgstr "Экспортировать в файл GPX, начиная с последнего участника"
+
+msgid "Convert to GPX layer starting from first member"
+msgstr "Преобразовать в слой GPX, начиная с первого участника"
+
+msgid "Convert to GPX layer starting from last member"
+msgstr "Преобразовать в слой GPX, начиная с последнего участника"
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+"Рекурсивно преобразовать это отношение в один gpx-трек, начиная с первого "
+"участника(ов) и заканчивая последним."
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+"Рекурсивно преобразовать это отношение в один gpx-трек, начиная с последнего "
+"участника(ов) и заканчивая первым."
+
+msgid "Selected Relations"
+msgstr "Выбранные отношения"
+
 msgid "List of recent relations"
 msgstr "Список последних отношений"
 
@@ -3374,18 +3409,6 @@ msgstr "Файл ревизий ''/REVISION'' отсутствует."
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr "Конфликт уже зарегистрирован для элемента ''{0}''"
 
-msgid "Decimal Degrees"
-msgstr "Десятичные градусы"
-
-msgid "deg° min'' sec\""
-msgstr "град° мин'' сек\""
-
-msgid "deg° min'' (Nautical)"
-msgstr "град° мин'' (морской формат)"
-
-msgid "Projected Coordinates"
-msgstr "Предполагаемые координаты"
-
 msgctxt "compass"
 msgid "S"
 msgstr "Ю"
@@ -3402,9 +3425,21 @@ msgctxt "compass"
 msgid "E"
 msgstr "В"
 
+msgid "deg° min'' sec\""
+msgstr "град° мин'' сек\""
+
+msgid "Decimal Degrees"
+msgstr "Десятичные градусы"
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr "Невозможно разобрать значение координаты: ''{0}''"
 
+msgid "deg° min'' (Nautical)"
+msgstr "град° мин'' (морской формат)"
+
+msgid "Projected Coordinates"
+msgstr "Предполагаемые координаты"
+
 msgid "Date of imagery: {0}"
 msgstr "Дата снимка: {0}"
 
@@ -5709,10 +5744,10 @@ msgid "Move left"
 msgstr "Движение влево"
 
 msgid "Move up"
-msgstr "Движение вверх"
+msgstr "Переместить вверх"
 
 msgid "Move down"
-msgstr "Движение вниз"
+msgstr "Переместить вниз"
 
 msgid "Zoom in"
 msgstr "Увеличить масштаб"
@@ -9028,12 +9063,6 @@ msgstr ""
 "JOSM.<br>Его можно открыть вручную из меню «Файл» или панели "
 "инструментов.</html>"
 
-msgid "Zoom to downloaded data"
-msgstr "Приблизиться к загруженным данным"
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr "Выберите, чтобы приблизиться к последним загруженным данным"
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -10784,6 +10813,12 @@ msgstr "Метаданные "
 msgid "Load tile"
 msgstr "Скачать квадрат"
 
+msgid "Get tile status"
+msgstr "Получить состояние квадрата"
+
+msgid "Force tile rendering"
+msgstr "Принудительная отрисовка квадрата"
+
 msgid "Failed to create tile source"
 msgstr "Не удалось создать источник тайлов"
 
@@ -10893,11 +10928,11 @@ msgstr "Название: {0}"
 msgid "Description: {0}"
 msgstr "Описание: {0}"
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
-msgstr[0] "{0} трек"
-msgstr[1] "{0} трека"
-msgstr[2] "{0} треков"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
+msgstr[0] "{0} трек, {1} сегментов трека"
+msgstr[1] "{0} трека, {1} сегментов трека"
+msgstr[2] "{0} треков, {1} сегментов трека"
 
 msgid "Timespan"
 msgstr "Период"
@@ -10905,6 +10940,9 @@ msgstr "Период"
 msgid "Length"
 msgstr "Длина"
 
+msgid "Number of<br/>Segments"
+msgstr "Число <br/>сегментов"
+
 msgid "Length: {0}"
 msgstr "Длина: {0}"
 
@@ -10920,15 +10958,40 @@ msgstr[0] "{0} путевая точка"
 msgstr[1] "{0} путевые точки"
 msgstr[2] "{0} путевых точек"
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
-msgstr[0] "{0} дорожка, "
-msgstr[1] "{0} дорожки, "
-msgstr[2] "{0} дорожек, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] "{0} трек"
+msgstr[1] "{0} трека"
+msgstr[2] "{0} треков"
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
+msgstr[0] " ({0} сегмент)"
+msgstr[1] " ({0} сегмента)"
+msgstr[2] " ({0} сегментов)"
 
 msgid "Save GPX file"
 msgstr "Сохранить файл GPX"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr "Объединить сегменты всех треков в один трек."
+
+msgid "Combine tracks of this layer"
+msgstr "Объединить треки этого слоя"
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+"Разделить несколько сегментов одного трека на несколько отдельных треков."
+
+msgid "Split track segments to tracks"
+msgstr "Разделить сегменты трека на треки"
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr "Разделить треки этого слоя, создав для каждого новый слой."
+
+msgid "Split tracks to new layers"
+msgstr "Разделить треки на новые слои"
+
 msgid "Id"
 msgstr "Идентификатор"
 
@@ -10972,6 +11035,20 @@ msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 "Попытка выбрать слой только для чтения в качестве редактируемого слоя"
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+"Попытка удаления слоя во время фоновой отправки данных. Подождите, пока "
+"передача данных не завершится."
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+"Идёт фоновая отправка данных. Невозможно сбросить состояние, пока она не "
+"завершится."
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] "{0} заметка"
@@ -11328,29 +11405,20 @@ msgstr "Ошибка в файле {0}"
 msgid "Display geotagged images"
 msgstr "Показать изображение с геотегами"
 
-msgid "Previous"
-msgstr "Предыдущее"
+msgid "Next"
+msgstr "Следующее"
 
-msgid "Show previous Image"
-msgstr "Показать предыдущее изображение"
+msgid "Show next Image"
+msgstr "Показать следующее изображение"
 
 msgid "Geoimage: {0}"
 msgstr "Геоизображение: {0}"
 
-msgid "Remove photo from layer"
-msgstr "Удалить фото из слоя"
-
-msgid "Delete File from disk"
-msgstr "Удалить файл с диска"
-
-msgid "Copy image path"
-msgstr "Копировать путь к изображению"
-
-msgid "Next"
-msgstr "Следующее"
+msgid "Previous"
+msgstr "Предыдущее"
 
-msgid "Show next Image"
-msgstr "Показать следующее изображение"
+msgid "Show previous Image"
+msgstr "Показать предыдущее изображение"
 
 msgid "Show first Image"
 msgstr "Показать первое изображение"
@@ -11364,6 +11432,15 @@ msgstr "Центрировать вид"
 msgid "Zoom best fit and 1:1"
 msgstr "Масштабировать, чтобы вписать с соотношением сторон 1:1"
 
+msgid "Remove photo from layer"
+msgstr "Удалить фото из слоя"
+
+msgid "Delete File from disk"
+msgstr "Удалить файл с диска"
+
+msgid "Copy image path"
+msgstr "Копировать путь к изображению"
+
 msgid "Move dialog to the side pane"
 msgstr "Передвинуть диалог на боковую панель"
 
@@ -14827,11 +14904,11 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr "Удалённая точка {0} это часть линии {1}"
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
-"Линия {0} с {1} точками содержит незавершённые точки, потому что, по крайней "
-"мере, одна точка отсутствовала в данных, загруженных с сервера."
+"Линия {0} с {1} точками неполная, так как по меньшей мере одна из точек "
+"отсутствует в скачанных данных."
 
 msgid ""
 "Relation with external id ''{0}'' refers to a missing primitive with "
@@ -15576,6 +15653,12 @@ msgstr "Удалённое управление запросило открыт
 msgid "Do you want to allow this?"
 msgstr "Разрешить действие?"
 
+msgid "Yes, always"
+msgstr "Да, всегда"
+
+msgid "Yes, once"
+msgstr "Да, один раз"
+
 msgid "Confirm Remote Control action"
 msgstr "Подтверждение действия Удалённого управления"
 
@@ -16795,7 +16878,7 @@ msgstr "зона под застройку"
 
 msgctxt "landuse"
 msgid "village_green"
-msgstr ""
+msgstr "общественное пространство (village green)"
 
 msgctxt "landuse"
 msgid "quarry"
@@ -18367,7 +18450,7 @@ msgid "Living Street"
 msgstr "Жилая улица"
 
 msgid "Pedestrian"
-msgstr "Пешеходная"
+msgstr "Пешеходная улица"
 
 msgid "Area"
 msgstr "Полигон"
@@ -20383,7 +20466,7 @@ msgid "Caravans allowed"
 msgstr "Разрешены дома на колёсах"
 
 msgid "Backcountry"
-msgstr ""
+msgstr "Вне обитаемых мест"
 
 msgid "Group only access"
 msgstr "Доступ только в группе"
@@ -21301,6 +21384,12 @@ msgstr "Общий контейнер для утиля"
 msgid "Recycling Centre"
 msgstr "Пункт приёма перерабатываемых отходов"
 
+msgid "trash"
+msgstr "мусор"
+
+msgid "dog_excrement"
+msgstr "собачьи экскременты"
+
 msgid "Waste Disposal/Dumpster"
 msgstr "Мусорный бак"
 
@@ -24269,7 +24358,7 @@ msgid ""
 msgstr "Невозделываемая земля, заросшая кустарником. Деревьев нет или мало."
 
 msgid "Heath"
-msgstr "Вереск"
+msgstr "Пустошь"
 
 msgid ""
 "Bare lower lying uncultivated land with a shrubland habitat found mainly on "
@@ -24432,7 +24521,7 @@ msgid "Grass"
 msgstr "Газон"
 
 msgid "Village Green"
-msgstr "Площадка для праздников"
+msgstr "Общественное пространство (Village Green)"
 
 msgid "Common"
 msgstr "Общественные земли"
@@ -25241,7 +25330,7 @@ msgstr ""
 "часто."
 
 msgid "DigitalGlobe Premium Imagery Vintage"
-msgstr ""
+msgstr "DigitalGlobe Premium Imagery Vintage"
 
 msgid ""
 "Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
@@ -25264,7 +25353,7 @@ msgstr ""
 "обновляются 2 раза в год."
 
 msgid "DigitalGlobe Standard Imagery Vintage"
-msgstr ""
+msgstr "DigitalGlobe Standard Imagery Vintage"
 
 msgid "Esri World Imagery"
 msgstr "Спутниковые снимки Esri"
@@ -25308,6 +25397,12 @@ msgstr "Общественный транспорт (ÖPNV)"
 msgid "Hike & Bike"
 msgstr "Hike & Bike"
 
+msgid "OpenSnowMap overlay"
+msgstr "OpenSnowMap"
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr "Оверлей для картирования лыжных трасс  в OSM. Ежедневное обновление."
+
 msgid "skobbler"
 msgstr "skobbler"
 
@@ -25638,8 +25733,10 @@ msgstr "Базовая карта Австрии на основе правит
 msgid "basemap.at Orthofoto"
 msgstr "basemap.at ортофото"
 
-msgid "Orthofoto layer provided by basemap.at. "
-msgstr "Слой ортоснимков, предоставленных basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
+msgstr ""
+"Слой ортоснимков, предоставленный basemap.at. \"Преемник\" слоя geoimage.at."
 
 msgid "Geoimage.at MaxRes"
 msgstr "Geoimage.at MaxRes"
@@ -26023,7 +26120,7 @@ msgid "SDFE aerial imagery"
 msgstr "Аэрофотоснимки SDFE"
 
 msgid "SDFE Cadastral Parcels INSPIRE View"
-msgstr ""
+msgstr "SDFE Cadastral Parcels INSPIRE View"
 
 msgid "SDFE DTK Kort25"
 msgstr "SDFE цифровые топографические карты 1:25 000 (Kort25)"
@@ -26035,13 +26132,13 @@ msgid "SDFE Surface Shadow Map (40 cm)"
 msgstr "SDFE - теневая карта поверхности (40 см)"
 
 msgid "SDFE Skærmkort"
-msgstr ""
+msgstr "SDFE Skærmkort"
 
 msgid "Stevns"
 msgstr "Стевнс"
 
 msgid "Vejmidte"
-msgstr ""
+msgstr "Vejmidte"
 
 msgid "imagico.de OSM images for mapping: El Altar"
 msgstr "Снимки с imagico.de: вулкан Алтар"
@@ -26079,6 +26176,12 @@ msgstr "Эстония: кадастр (Maaamet)"
 msgid "Estonia Forestry (Maaamet)"
 msgstr "Эстония: лесные массивы (Maaamet)"
 
+msgid "Nordic snowmobile overlay"
+msgstr "Оверлей снегоходных трасс Скандинавии"
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr "Kelkkareitit.fi - снегоходные трассы из OSM (Скандинавия)"
+
 msgid "BANO"
 msgstr "BANO"
 
@@ -26165,9 +26268,6 @@ msgid ""
 "- 1 m"
 msgstr "Веркор - заповедник горного массива Веркор - ортофото 1999 - 1 м"
 
-msgid "Hamburg (40 cm)"
-msgstr "Гамбург (40 см)"
-
 msgid "Hamburg (20 cm)"
 msgstr "Гамбург (20 см)"
 
@@ -26195,12 +26295,12 @@ msgstr "Берлин - аэрофотосъёмка 2016"
 msgid "Berlin aerial photograph 2017"
 msgstr "Берлин - аэрофотосъёмка 2017"
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
-msgstr "Deutsche Bahn - ж/д линии VzG, ноябрь 2013"
-
 msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr "Deutsche Bahn - ж/д линии VzG, ноябрь 2015"
 
+msgid "Deutsche Bahn VzG lines January 2017"
+msgstr "Deutsche Bahn - ж/д линии VzG, январь 2017"
+
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
 msgstr "Эрланген - аэрофотосъёмка (2016 5.0 cm)"
 
@@ -26579,7 +26679,7 @@ msgid "Japan GSI ortho Imagery"
 msgstr "Япония: ортоснимки GSI"
 
 msgid "Japan GSI Standard Map"
-msgstr ""
+msgstr "Япония: стандартная карта GSI"
 
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr "Снимки с imagico.de: Аральское море (низкий уровень воды)"
@@ -26614,7 +26714,7 @@ msgid "20cm ortho - Latvia - Coastline"
 msgstr "20см ортфото - Латвия - побережье"
 
 msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
-msgstr ""
+msgstr "Ортоснимки 1-й цикл (1994-1999) - Латвия"
 
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Литва)"
@@ -26623,19 +26723,7 @@ msgid "geoportail.lu all layers"
 msgstr "geoportail.lu все слои"
 
 msgid "geoportail.lu ortho latest"
-msgstr ""
-
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr "Luxembourg Inspire: железные дороги"
-
-msgid "Luxembourg Inspire Roads"
-msgstr "Luxembourg Inspire: дороги"
-
-msgid "Luxembourg Inspire Water"
-msgstr "Luxembourg Inspire: водная карта"
+msgstr "geoportail.lu - самые новые ортоснимки"
 
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Дельта Нигера, окт. 2012 Landsat"
@@ -26662,8 +26750,197 @@ msgstr "LINZ NZ - аэрофотоснимки"
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr "LINZ NZ Topo50 - бессеточные карты"
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
-msgstr "Шпицберген - ортофото 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr "Kartverket N50 topo"
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+"Топографическая карта N50, эквивалентная бумажным картам Норвегии масштаба "
+"1:50000."
+
+msgid "Kartverket Hillshade overlay"
+msgstr "Kartverket - отмывка рельефа"
+
+msgid "Hillshade for Norway"
+msgstr "Свето-теневая отмывка рельефа Норвегии"
+
+msgid "Kartverket Nautical Charts"
+msgstr "Kartverket - морские навигационные карты"
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+"Норвежские морские карты (включают Шпицберген и Антарктику). Растровое "
+"представление бумажных карт. Обновляется раз в 2 недели."
+
+msgid "Kartverket Road Network overlay"
+msgstr "Kartverket - оверлей дорожной сети"
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+"Дорожная сеть Норвегии из Национальной базы данных дорог (NVDB), "
+"используемой также в Vbase и Elveg. Цветами обозначены национальные, "
+"региональные, муниципальные, частные и лесные дороги + "
+"пешеходные/велосипедные дорожки."
+
+msgid "Kartverket Trails overlay"
+msgstr "Kartverket - оверлей маршрутов"
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+"Маршруты из норвежской базы данных `Tur og Friluftsruter´. Выбор по "
+"категориям для пеших, велосипедных и лыжных маршрутов."
+
+msgid "Kartverket Place Names overlay"
+msgstr "Kartverket - оверлей географических названий"
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+"Официальные норвежские географические названия из базы данных SSR. Доступен "
+"выбор категории."
+
+msgid "MTBmap.no"
+msgstr "MTBmap.no"
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+"Норвежская карта маршрутов горных велосипедов из OSM (макс. масштаб 14-16, "
+"зависит от региона)"
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr "Kartverket DTM (цифровая модель рельефа)"
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+"Представление данных открытых проектов Norwegian Digital Terrain Model (DTM) "
+"в виде теневого рельефа, т.е поверхность земли без деревьев, зданий и других "
+"объектов. Посетите hoydedata.no, чтобы определить год проекта."
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr "Kartverket DOM (цифровая модель поверхности)"
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+"Представление открытых проектов Norwegian Digital Surface Model (DOM) в виде "
+"теневой карты, т.е. земная поверхность вместе с деревьями, зданиями и "
+"другими объектами. Посетите hoydedata.no, чтобы определить год проекта."
+
+msgid "Kartverket Historic maps"
+msgstr "Kartverket - исторические карты"
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr "Исторические карты - `Amtskartserien´ 1826-1917."
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr "Kartverket - экономические карты (исторические)"
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+"1-я редакция исторических экономических карт Норвегии 1960-90 гг. "
+"(`Økonomisk kartverk´). Доступна, начиная с масштаба 16. Не забудьте "
+"поправить локальное смещение снимка."
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr "Kartverket - оверлей административных границ"
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+"Официальные административные границы национального, регионального и "
+"муниципального уровня"
+
+msgid "Kartverket Cadastral overlay"
+msgstr "Kartverket - кадастровый оверлей"
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+"Границы земельных владений из официального земельного регистра "
+"(`matrikkelen´). Ежемесячное обновление."
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr "Kartverket - оверлей препятствий для летательных аппаратов"
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+"Вертикальные препятствия для летательных аппаратов, выше 15 м в сельских "
+"областях и 30 м в городских (мачты, башни, высокие здания, линии "
+"электропередачи и т.п.)"
+
+msgid "NVE Electricity Network overlay"
+msgstr "NVE - оверлей электросетей"
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+"Линии электропередачи (высоковольтная сеть), включая трансформаторы, "
+"подводные кабели и  опоры. Локальные распределительные сети не включены."
+
+msgid "NVE Hydropower Plants overlay"
+msgstr "NVE - оверлей гидроэлектростанций"
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+"Гидроэлектростанции, включая водные пути (туннели, каналы, трубопроводы) и "
+"плотины"
+
+msgid "NVE Wind Power Plants overlay"
+msgstr "NVE - оверлей ветроэлектростанций"
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+"Ветроэнергетические турбины, фермы и концессионные зоны. Красный цвет = "
+"отказ от концессии."
+
+msgid "NPD Offshore Installations overlay"
+msgstr "NPD - прибрежные нефтегазовые сооружения"
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+"Платформы и месторождения нефти и газа на норвежском континентальном шельфе"
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr "Miljødirektoratet - оверлей природоохранных зон"
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+"Норвежские национальные парки, заповедники и другие природоохранные зоны и "
+"объекты из Naturbase, включая Шпицберген"
+
+msgid "NP Svalbard Orthophoto"
+msgstr "NP - ортоснимки Шпицбергена"
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
+msgstr "Ортоснимки Шпицбергена от Норвежского Полярного Института"
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
 msgstr "Снимки с imagico.de: мозаика Шпицбергена"
@@ -26734,11 +27011,11 @@ msgstr "Плохие и устаревшие снимки в других ист
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr "Пангасинан/Булакан (Филиппины HiRes)"
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
-msgstr "Geoportal 2: ортофото"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
+msgstr "Geoportal 2: ортофотокарта (спутниковые снимки)"
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
-msgstr "Geoportal 2: ортофотокарта (аэроснимок) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
+msgstr "Geoportal 2: ортофотокарта (спутниковые снимки) WMTS"
 
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr "Geoportal 2: PRNG (топонимы)"
@@ -26746,119 +27023,128 @@ msgstr "Geoportal 2: PRNG (топонимы)"
 msgid "Geoportal 2: ISOK hillshade"
 msgstr "Geoportal 2: отмывка рельефа ISOK"
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
-msgstr "Бендзин: Ortofotomapa 2013 (аэрофотосъёмка)"
+msgid "polska.e-mapa.net: Buildings"
+msgstr "polska.e-mapa.net: здания"
+
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
+msgstr "Бендзин: спутниковые ортоснимки 2013"
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Buildings"
 msgstr "Бендзин: здания"
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
-msgstr "Бытом: ортофото 2012"
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
+msgstr "Бытом: ортофотокарта 2012 (спутниковые снимки)"
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr "Бытом: фотоплан 2014"
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
 msgstr "Бытом: здания"
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Chorzów: Buildings"
 msgstr "Хожув: здания"
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr "Ченстохова: здания"
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
-msgstr "Ченстохова: ортофото 2011"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
+msgstr "Ченстохова: ортофотокарта 2011 (спутниковые снимки)"
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
-msgstr "Ченстохова: ортофотокарта 2013"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
+msgstr "Ченстохова: ортофотокарта 2013 (спутниковые снимки)"
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
-msgstr "Ченстохова: ортофотокарта 2014"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
+msgstr "Ченстохова: ортофотокарта 2014 (спутниковые снимки)"
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
-msgstr "Гливице: ортофото 2013"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
+msgstr "Гливице: ортофотокарта 2013 (спутниковые снимки)"
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Gliwice: Buildings"
 msgstr "Гливице: здания"
 
-msgid "Katowice: Ortofotomapa (aerial image)"
-msgstr "Катовице: ортофото"
+msgid "Katowice: Orthophotomap (aerial image)"
+msgstr "Катовице: ортофотокарта (спутниковые снимки)"
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Katowice: Buildings"
 msgstr "Катовице: здания"
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr "Лодзь: здания"
 
-msgid "Łódź: Ortofotomapa (aerial image)"
-msgstr "Лодзь: ортофото"
+msgid "Łódź: Orthophotomap (aerial image)"
+msgstr "Лодзь: ортофотокарта (спутниковые снимки)"
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat dębicki: Buildings"
 msgstr "Дембицкий повят: здания"
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr "Любачувский повят: здания"
 
-msgid "Powiat łańcucki: Budynki (buildings)"
-msgstr "Ланцутский повят: здания"
+msgid "Powiat łańcucki: Buildings"
+msgstr "Ланьцутский повят: здания"
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr "Познанский повят: здания"
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
-msgstr "Познанский повят: ортофотокарта"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
+msgstr "Познанский повят: ортофотокарта (спутниковые снимки)"
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr "Ропчицко-Сендзишувский повят: здания"
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr "Жешувский повят: здания"
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
-msgstr "Жешувский повят: ортофотокарта"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
+msgstr "Жешувский повят: ортофотокарта (спутниковые снимки)"
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr "Сталёвовольский повят: здания"
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
-msgstr "Познань: ортофотокарта 2014 (аэрофотоснимок)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
+msgstr "Познань: ортофотокарта 2014 (спутниковые снимки)"
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Buildings"
 msgstr "Пшемысль: здания"
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
-msgstr "Пшемысль: ортофотокарта"
+msgid "Przemyśl: Ortophotomap (aerial image)"
+msgstr "Пшемысль: ортофотокарта (спутниковые снимки)"
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
-msgstr "Руда-Слёнска: ортофото"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
+msgstr "Руда-Слёнска: ортофотокарта (спутниковые снимки)"
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
-msgstr "Жешув: ортофото"
+msgid "Rzeszów: Orthophotomap (aerial image)"
+msgstr "Жешув: ортофотокарта (спутниковые снимки)"
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Rzeszów: Buildings"
 msgstr "Жешув: здания"
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
-msgstr "Семяновице-Слёнске: ортофото"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
+msgstr "Семяновице-Слёнске: ортофотокарта (спутниковые снимки)"
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr "Семяновице-Слёнске: здания"
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
-msgstr "Свентохловице: ортофотокарта 2008"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
+msgstr "Свентохловице: ортофотокарта 2008 (спутниковые снимки)"
+
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
+msgstr "Свентохловице: ортофотокарта 2009 (спутниковые снимки)"
+
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
+msgstr "Свентохловице: ортофотокарта 2012 (спутниковые снимки)"
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
-msgstr "Свентохловице: ортофото 2009"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
+msgstr "Забже: ортофотокарта 2011 (спутниковые снимки)"
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
-msgstr "Свентохловице: ортофотокарта 2012"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
+msgstr "Вроцлав: ортофотокарта 2015 (спутниковые снимки)"
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
-msgstr "Забже: ортофото 2011"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr "Ортофото DGRF 2004-2006 (WMS)"
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
-msgstr "Вроцлав: ортофото 2015 (аэрофотосъёмка)"
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
+msgstr "Ортофото побережья DGT 2014-2015 (WMS)"
 
 msgid "ScanEx IRS"
 msgstr "ScanEx IRS"
@@ -27005,6 +27291,18 @@ msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 "Пополняющие неполное покрытие в других источниках (естественные цвета)"
 
+msgid "Economic Maps (historic)"
+msgstr "Экономические карты (исторические)"
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr "Сканированные \"Экономические карты\" (1950-1980)"
+
+msgid "Snowmobile map Sweden"
+msgstr "Снегоходные трассы (Швеция)"
+
+msgid "Snowmobile trails"
+msgstr "Снегоходные трассы"
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr "Кантон Аргау 25см (AGIS 2011)"
 
@@ -29955,15 +30253,12 @@ msgstr "Слой объектов Mapillary"
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr "Отображает слой с объектами карты, обнаруженными Mapillary"
 
-msgid "Start Mapillary layer"
-msgstr "Создать слой Mapillary"
+msgid "Open Mapillary layer"
+msgstr "Открыть слой Mapillary"
 
 msgid "Mapillary"
 msgstr "Mapillary"
 
-msgid "Create Mapillary layer"
-msgstr "Создать слой Mapillary"
-
 msgid "Download Mapillary images in current view"
 msgstr "Скачать снимки Mapillary в текущей области"
 
@@ -30029,15 +30324,9 @@ msgstr ""
 "Если это сообщение появилось впервые, просто попробуйте ещё раз: возможно "
 "это была проблема с подключением к Интернету."
 
-msgid "Upload pictures"
-msgstr "Отправить снимки"
-
-msgid "Upload Mapillary pictures"
+msgid "Upload Mapillary images"
 msgstr "Отправить снимки Mapillary"
 
-msgid "Upload pictures."
-msgstr "Отправить снимки."
-
 msgid "Walk mode"
 msgstr "Режим прогулки"
 
@@ -30071,15 +30360,12 @@ msgstr "Экспортировать выбранные снимки"
 msgid "Rewrite imported images"
 msgstr "Перезаписать импортированные изображения"
 
-msgid "Select a folder"
-msgstr "Выберите папку"
+msgid "Select a directory"
+msgstr "Выберите каталог"
 
 msgid "Explore"
 msgstr "Обзор"
 
-msgid "Select a directory"
-msgstr "Выберите каталог"
-
 msgid "Speed limit"
 msgstr "Ограничение скорости"
 
@@ -30214,6 +30500,13 @@ msgstr "Предпросмотр изображения при наведени
 msgid "Cut off sequences at download bounds"
 msgstr "Обрезать последовательности по границам скачанной области"
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+"При открытии снимка Mapillary в браузере показывать редактор размытий вместо "
+"просмотра снимка"
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr "Включить экспериментальные функции (могут быть нестабильными)"
 
@@ -31670,6 +31963,7 @@ msgstr "район"
 
 msgid "Select to download localities in the selected download area."
 msgstr ""
+"Выберите для скачивания населённых пунктов в выделенной области загрузки."
 
 msgid "commune"
 msgstr "коммуна"
@@ -31689,10 +31983,10 @@ msgid "Download cadastre data"
 msgstr "Скачать данные кадастра"
 
 msgid "Recipient"
-msgstr ""
+msgstr "Получатель"
 
 msgid "Diffusion restriction"
-msgstr ""
+msgstr "Ограничение распространения"
 
 msgid "Cadastre Edigeo files"
 msgstr "Файлы кадастра Edigeo"
@@ -35054,6 +35348,10 @@ msgstr "Повторить"
 msgid "Unable to process file ''{0}'':"
 msgstr "Не удалось обработать файл ''{0}'':"
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr "Файл не может быть удалён!"
 
@@ -36607,9 +36905,6 @@ msgstr "Экспортировать данные о трафике в network-
 msgid "SUMO Export"
 msgstr "Экспорт в SUMO"
 
-msgid "Export"
-msgstr "Экспорт"
-
 msgid "AutoSave LiveData"
 msgstr "Автосохранение данных позиционирования"
 
diff --git a/i18n/po/sk.po b/i18n/po/sk.po
index dd89eca..7444f11 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-11-26 00:06+0100\n"
-"PO-Revision-Date: 2017-11-25 13:39+0000\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\n"
+"PO-Revision-Date: 2017-12-29 23:39+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-11-26 05:03+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 05:01+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: sk\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1043,6 +1043,13 @@ msgstr "Samostatná vrstva"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "Vyberte ak dáta majú byť stiahnuté na novú vrstvu"
 
+msgid "Zoom to downloaded data"
+msgstr "Priblížiť na stiahnuté dáta"
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+"Zvoľte ak chcete priblížiť tak, aby bolo vidieť všetky nové stiahnuté dáta."
+
 msgid "Download Location"
 msgstr "Priečinok sťahovania"
 
@@ -2444,6 +2451,35 @@ msgstr[2] ""
 msgid "Confirmation"
 msgstr "Potvrdenie"
 
+msgid "Export GPX file starting from first member"
+msgstr "Exportovať súbor GPX od prvého člena"
+
+msgid "Export GPX file starting from last member"
+msgstr "Exportovať súbor GPX od posledného člena"
+
+msgid "Convert to GPX layer starting from first member"
+msgstr "Konvertovať na vrstvu GPX od prvého člena"
+
+msgid "Convert to GPX layer starting from last member"
+msgstr "Konvertovať na vrstvu GPX od posledného člena"
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+"Rekurzívne zlúčiť túto reláciu do jednej stopy GPX, začínajúc prvým členom "
+"po posledného."
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+"Rekurzívne zlúčiť túto reláciu do jednej stopy GPX, začínajúc posledným "
+"členom po prvého."
+
+msgid "Selected Relations"
+msgstr "Vybrané relácie"
+
 msgid "List of recent relations"
 msgstr "Zoznam nedávnych relácií"
 
@@ -3331,18 +3367,6 @@ msgstr "Súbor revízií \"/REVISION\" chýba."
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr "So základným objektom \"{0}\" už existuje konflikt."
 
-msgid "Decimal Degrees"
-msgstr "Stupne v desatinnom formáte"
-
-msgid "deg° min'' sec\""
-msgstr "stupne° min'' sec\""
-
-msgid "deg° min'' (Nautical)"
-msgstr "stupne° min'' (Námorné)"
-
-msgid "Projected Coordinates"
-msgstr "Premietané súradnice"
-
 msgctxt "compass"
 msgid "S"
 msgstr "J"
@@ -3359,9 +3383,21 @@ msgctxt "compass"
 msgid "E"
 msgstr "V"
 
+msgid "deg° min'' sec\""
+msgstr "stupne° min'' sec\""
+
+msgid "Decimal Degrees"
+msgstr "Stupne v desatinnom formáte"
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr "Nepodarilo sa prečítať hodnotu súradníc: \"{0}\""
 
+msgid "deg° min'' (Nautical)"
+msgstr "stupne° min'' (Námorné)"
+
+msgid "Projected Coordinates"
+msgstr "Premietané súradnice"
+
 msgid "Date of imagery: {0}"
 msgstr "Dátum snímky: {0}"
 
@@ -8972,13 +9008,6 @@ msgstr ""
 "<html>Autom. spustenie okna ''Stiahnuť z OSM'' vždy po spustení JOSM-"
 "u.<br>Môžete ho otvoriť ručne z ponuky Súbor alebo panela nástrojov.</html>"
 
-msgid "Zoom to downloaded data"
-msgstr "Priblížiť na stiahnuté dáta"
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-"Zvoľte ak chcete priblížiť tak, aby bolo vidieť všetky nové stiahnuté dáta."
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -10700,6 +10729,12 @@ msgstr "Metaúdaje "
 msgid "Load tile"
 msgstr "Načítať dlaždicu"
 
+msgid "Get tile status"
+msgstr "Získať stav dlaždice"
+
+msgid "Force tile rendering"
+msgstr "Vynútiť vykreslenie dlaždice"
+
 msgid "Failed to create tile source"
 msgstr "Nepodarilo sa vytvoriť zdroj dlaždíc"
 
@@ -10807,11 +10842,11 @@ msgstr "Meno: {0}"
 msgid "Description: {0}"
 msgstr "Popis: {0}"
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
-msgstr[0] "{0} stôp(track)"
-msgstr[1] "{0} stopa(track)"
-msgstr[2] "{0} stopy(track)"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
+msgstr[0] "{0} stôp, {1} úsekov stôp"
+msgstr[1] "{0} stopa, {1} úsekov stôp"
+msgstr[2] "{0} stopy, {1} úsekov stôp"
 
 msgid "Timespan"
 msgstr "Časový interval"
@@ -10819,6 +10854,9 @@ msgstr "Časový interval"
 msgid "Length"
 msgstr "Dĺžka"
 
+msgid "Number of<br/>Segments"
+msgstr "Počet<br/>úsekov"
+
 msgid "Length: {0}"
 msgstr "Dĺžka: {0}"
 
@@ -10834,15 +10872,39 @@ msgstr[0] "{0} waypointov (bodov cesty)"
 msgstr[1] "{0} waypoint (bod cesty)"
 msgstr[2] "{0} waypointy (body cesty)"
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
-msgstr[0] "{0} stôp(track), "
-msgstr[1] "{0} stopa(track), "
-msgstr[2] "{0} stopy(track), "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] "{0} stôp(track)"
+msgstr[1] "{0} stopa(track)"
+msgstr[2] "{0} stopy(track)"
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
+msgstr[0] " ({0} úsekov)"
+msgstr[1] " ({0} úsek)"
+msgstr[2] " ({0} úseky)"
 
 msgid "Save GPX file"
 msgstr "Uložiť GPX súbor"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr "Zlúčiť úseky všetkých stôp do jednej stopy."
+
+msgid "Combine tracks of this layer"
+msgstr "Zlúčiť stopy z tejto vrstvy"
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr "Rozdeliť úseky jednej stopy do viacerých stôp."
+
+msgid "Split track segments to tracks"
+msgstr "Rozdeliť úseky do stôp"
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr "Rozdeliť stopy z tejto vrstvy na samostatné nové vrstvy pre každú."
+
+msgid "Split tracks to new layers"
+msgstr "Rozdeliť stopy na nové vrtsvy"
+
 msgid "Id"
 msgstr "Id"
 
@@ -10885,6 +10947,20 @@ msgstr "Uložiť vrstvu"
 msgid "Trying to set a read only data layer as edit layer"
 msgstr "Pokus o nastavenie vrstvy len na čítanie ako upravovanej vrstvy"
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+"Pokúšate sa odstrániť vrstvu, kde prebieha odosielanie na pozadí. Prosím "
+"počkajte na ukončenie odosielania."
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+"Odosielanie na pozadí už prebieha. Nie je možné zmeniť stav, kým nebude "
+"odosielanie ukončené."
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] "{0} poznámok"
@@ -11240,29 +11316,20 @@ msgstr "Chyba v súbore {0}"
 msgid "Display geotagged images"
 msgstr "Zobraziť obrázky s geotagmi"
 
-msgid "Previous"
-msgstr "Predchádzajúci"
+msgid "Next"
+msgstr "Nasledujúci"
 
-msgid "Show previous Image"
-msgstr "Zobraziť predchádzajúci obrázok"
+msgid "Show next Image"
+msgstr "Zobraziť nasledujúci obrázok"
 
 msgid "Geoimage: {0}"
 msgstr "Geoobrázok: {0}"
 
-msgid "Remove photo from layer"
-msgstr "Odstraniť fotku z vrstvy"
-
-msgid "Delete File from disk"
-msgstr "Zmazať súbor z disku"
-
-msgid "Copy image path"
-msgstr "Kopírovať cestu k obrázku"
-
-msgid "Next"
-msgstr "Nasledujúci"
+msgid "Previous"
+msgstr "Predchádzajúci"
 
-msgid "Show next Image"
-msgstr "Zobraziť nasledujúci obrázok"
+msgid "Show previous Image"
+msgstr "Zobraziť predchádzajúci obrázok"
 
 msgid "Show first Image"
 msgstr "Zobraziť prvý obrázok"
@@ -11276,6 +11343,15 @@ msgstr "Stredový pohľad"
 msgid "Zoom best fit and 1:1"
 msgstr "Najvhodnejšie zväčšenie a 1:1"
 
+msgid "Remove photo from layer"
+msgstr "Odstraniť fotku z vrstvy"
+
+msgid "Delete File from disk"
+msgstr "Zmazať súbor z disku"
+
+msgid "Copy image path"
+msgstr "Kopírovať cestu k obrázku"
+
 msgid "Move dialog to the side pane"
 msgstr "Presunúť dialóg na bočný panel"
 
@@ -14733,11 +14809,11 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr "Vymazaný bod {0} je súčasťou cesty {1}"
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
-"Cesta {0} s {1} bodmi neobsahuje všetky body, pretože aspoň jeden bod chýbal "
-"v nahratých dátach."
+"Cesta {0} s {1} bodmi je nekompletná pretože aspoň jeden bod chýbal v "
+"načítaných dátach."
 
 msgid ""
 "Relation with external id ''{0}'' refers to a missing primitive with "
@@ -15493,6 +15569,12 @@ msgstr "Diaľkové ovládanie bolo požiadané o otvorenie lokálneho súboru."
 msgid "Do you want to allow this?"
 msgstr "Chcete toto povoliť?"
 
+msgid "Yes, always"
+msgstr "Áno, vždy"
+
+msgid "Yes, once"
+msgstr "Áno, raz"
+
 msgid "Confirm Remote Control action"
 msgstr "Potvrdiť činnosť vzdialenej kontroly"
 
@@ -17299,7 +17381,7 @@ msgid "yes"
 msgstr "áno"
 
 msgid "limited"
-msgstr "omedzený"
+msgstr "obmedzený"
 
 msgid "no"
 msgstr "nie"
@@ -21219,6 +21301,12 @@ msgstr "Komunálny odpad"
 msgid "Recycling Centre"
 msgstr "Recyklačné stredisko"
 
+msgid "trash"
+msgstr "odpadky"
+
+msgid "dog_excrement"
+msgstr "psie exkrementy"
+
 msgid "Waste Disposal/Dumpster"
 msgstr "Zhromaždisko odpadu (kontajner)"
 
@@ -25223,6 +25311,12 @@ msgstr "Hromadná doprava (ÖPNV)"
 msgid "Hike & Bike"
 msgstr "Turistika & Cyklistika"
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr "skobbler"
 
@@ -25544,7 +25638,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr "basemap.at Orthofoto"
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -25967,6 +26062,12 @@ msgstr "Estónsky kataster (Maaamet)"
 msgid "Estonia Forestry (Maaamet)"
 msgstr "Estónsko, Lesníctvo (Maaamet)"
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr "BANO"
 
@@ -26055,9 +26156,6 @@ msgstr ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Ortofoto 1999 - "
 "1 m"
 
-msgid "Hamburg (40 cm)"
-msgstr "Hamburg (40 cm)"
-
 msgid "Hamburg (20 cm)"
 msgstr "Hamburg (20 cm)"
 
@@ -26085,12 +26183,12 @@ 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"
-
 msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr "Deutsche Bahn VzG linky Nov 2015"
 
+msgid "Deutsche Bahn VzG lines January 2017"
+msgstr ""
+
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
 msgstr "Erlangen letecké snímky (2016 5.0 cm)"
 
@@ -26491,18 +26589,6 @@ msgstr "geoportail.lu všetky vrstvy"
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr "Luxembourg Inspire Železnice"
-
-msgid "Luxembourg Inspire Roads"
-msgstr "Luxembourg Inspire Cesty"
-
-msgid "Luxembourg Inspire Water"
-msgstr "Luxembourg Inspire Water"
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Delta Nigeru Okt 2012 Landsat"
 
@@ -26526,8 +26612,158 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
-msgstr "Svalbard - Ortofoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
+msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
 msgstr ""
@@ -26590,11 +26826,11 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
-msgstr "Geoportal 2: Ortofotomapa (letecké snímky)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
-msgstr "Geoportal 2: Ortofotomapa (letecké snímky) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
+msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr "Geoportal 2: PRNG (geografické názvy)"
@@ -26602,119 +26838,128 @@ msgstr "Geoportal 2: PRNG (geografické názvy)"
 msgid "Geoportal 2: ISOK hillshade"
 msgstr "Geoportal 2: ISOK tieňovaný reliéf"
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
-msgstr "Będzin: Ortofotomapa 2013 (letecké snímky)"
+msgid "polska.e-mapa.net: Buildings"
+msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
-msgstr "Będzin: Budynki (budovy)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
+msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
-msgstr "Bytom: Ortofotomapa 2012 (letecké snímky)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
+msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr "Bytom: Fotoplan 2014 (letecký snímok)"
 
-msgid "Bytom: Budynki (buildings)"
-msgstr "Bytom: Budynki (budovy)"
+msgid "Bytom: Buildings"
+msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
-msgstr "Chorzów: Budynki (budovy)"
+msgid "Chorzów: Buildings"
+msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
-msgstr "Częstochowa: Budynki (budovy)"
+msgid "Częstochowa: Buildings"
+msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2011 (letecké snímky)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
+msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2013 (letecký snímok)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
+msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2014 (letecký snímok)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
+msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
-msgstr "Gliwice: Ortofotomapa 2013 (letecké snímky)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
+msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
-msgstr "Gliwice: Budynki (budovy)"
+msgid "Gliwice: Buildings"
+msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
-msgstr "Katowice: Ortofotomapa (letecké snímky)"
+msgid "Katowice: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
-msgstr "Katowice: Budynki (budovy)"
+msgid "Katowice: Buildings"
+msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
-msgstr "Łódź: Budynki (budovy)"
+msgid "Łódź: Buildings"
+msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
-msgstr "Łódź: Ortofotomapa (letecké snímky)"
+msgid "Łódź: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
-msgstr "Powiat dębicki: Budynki (budovy)"
+msgid "Powiat dębicki: Buildings"
+msgstr ""
+
+msgid "Powiat lubaczowski: Buildings"
+msgstr ""
+
+msgid "Powiat łańcucki: Buildings"
+msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
-msgstr "Powiat lubaczowski: Budynki (budovy)"
+msgid "Powiat poznański: Buildings"
+msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
-msgstr "Powiat łańcucki: Budynki (budovy)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
-msgstr "Powiat poznański: Budynki (budovy)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
+msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
-msgstr "Powiat poznański: Ortofotomapa (Letecký snímok)"
+msgid "Powiat rzeszowski: Buildings"
+msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
-msgstr "Powiat ropczycko-sędziszowski: Budynki (budovy)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
-msgstr "Powiat rzeszowski: Budynki (budovy)"
+msgid "Powiat stalowowolski: Buildings"
+msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
-msgstr "Powiat rzeszowski: Ortofotomapa (Letecké snímky)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
+msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
-msgstr "Powiat stalowowolski: Budynki (budovy)"
+msgid "Przemyśl: Buildings"
+msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
-msgstr "Poznań: Ortofotomapa 2014 (letecké snímky)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
+msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
-msgstr "Przemyśl: Budynki (budovy)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
-msgstr "Przemyśl: Ortofotomapa (Letecké snímky)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
-msgstr "Ruda Śląska: Ortofotomapa (letecké snímky)"
+msgid "Rzeszów: Buildings"
+msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
-msgstr "Rzeszów: Ortofotomapa (letecké snímky)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
-msgstr "Rzeszów: Budynki (budovy)"
+msgid "Siemianowice Śląskie: Buildings"
+msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
-msgstr "Siemianowice Śląskie: Ortofotomapa (letecké snímky)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
+msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
-msgstr "Siemianowice Śląskie: Budynki (budovy)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
+msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2008 (letecký snímok)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
+msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2009 (letecké snímky)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
+msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2012 (letecký snímok)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
+msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
-msgstr "Zabrze: Ortofotomapa 2011 (letecké snímky)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
-msgstr "Wrocław: Ortofotomapa 2015 (letecké snímky)"
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
+msgstr ""
 
 msgid "ScanEx IRS"
 msgstr "ScanEx IRS"
@@ -26850,6 +27095,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr "Kanton Aargau 25cm (AGIS 2011)"
 
@@ -29572,15 +29829,12 @@ 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 "Open Mapillary layer"
+msgstr ""
 
 msgid "Mapillary"
 msgstr "Mapillary"
 
-msgid "Create Mapillary layer"
-msgstr "Vytvoriť vrstvu Mapillary"
-
 msgid "Download Mapillary images in current view"
 msgstr "Stiahnuť obrázky z Mapillary pre aktuálny pohľad"
 
@@ -29643,14 +29897,8 @@ msgstr ""
 "skúste odoslanie znovu. Mohol to byť dočasný problém s pripojením na "
 "Internet."
 
-msgid "Upload pictures"
-msgstr "Odoslať obrázky"
-
-msgid "Upload Mapillary pictures"
-msgstr "Odoslať obrázky Mapillary"
-
-msgid "Upload pictures."
-msgstr "Odoslať obrázky."
+msgid "Upload Mapillary images"
+msgstr ""
 
 msgid "Walk mode"
 msgstr "Režim chôdze"
@@ -29685,15 +29933,12 @@ msgstr "Exportovať vybrané obrázky"
 msgid "Rewrite imported images"
 msgstr "Prepísať importované obrázky"
 
-msgid "Select a folder"
-msgstr "Vybrať prečinok"
+msgid "Select a directory"
+msgstr "Vybrať priečinok"
 
 msgid "Explore"
 msgstr "Preskúmať"
 
-msgid "Select a directory"
-msgstr "Vybrať priečinok"
-
 msgid "Speed limit"
 msgstr "Rýchlostné obmedzenie"
 
@@ -29826,6 +30071,11 @@ msgstr "Zobraziť náhľady obrázkov pri prejdení nad ich ikonou"
 msgid "Cut off sequences at download bounds"
 msgstr "Odseknúť postupnosť na hranici stiahnutej oblasti"
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr "Zapnúť experimentálne vyvíjané funkcie (môžu byť nestabilné)"
 
@@ -34368,6 +34618,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr "Súbor nemohol byť zmazaný!"
 
@@ -35866,9 +36120,6 @@ msgstr "Exportovať dopravné údaje do súboru siete SUMO."
 msgid "SUMO Export"
 msgstr "SUMO Export"
 
-msgid "Export"
-msgstr "Export"
-
 msgid "AutoSave LiveData"
 msgstr "Automatické ukladanie LiveData"
 
diff --git a/i18n/po/sl.po b/i18n/po/sl.po
index 61e9bb1..788fb03 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 05:03+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 05:01+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: sl\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -958,6 +958,12 @@ msgstr "Ločena plast"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "Izberi, če naj se podatki prenesejo v novo plast"
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr "Mesto vira sprejema"
 
@@ -2237,6 +2243,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3044,18 +3075,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr "Decimalne stopinje"
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr "J"
@@ -3072,9 +3091,21 @@ msgctxt "compass"
 msgid "E"
 msgstr "V"
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr "Decimalne stopinje"
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8266,12 +8297,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9780,6 +9805,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9884,8 +9915,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr "Opis: {0}"
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9895,6 +9926,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9908,14 +9942,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr "Shrani datoteko GPX"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9958,6 +10015,16 @@ msgstr ""
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10286,28 +10353,19 @@ msgstr "Napaka v datoteki {0}"
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
-msgstr "Odstrani fotografijo iz plasti"
-
-msgid "Delete File from disk"
-msgstr ""
-
-msgid "Copy image path"
-msgstr ""
-
-msgid "Next"
+msgid "Previous"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Show previous Image"
 msgstr ""
 
 msgid "Show first Image"
@@ -10322,6 +10380,15 @@ msgstr ""
 msgid "Zoom best fit and 1:1"
 msgstr ""
 
+msgid "Remove photo from layer"
+msgstr "Odstrani fotografijo iz plasti"
+
+msgid "Delete File from disk"
+msgstr ""
+
+msgid "Copy image path"
+msgstr ""
+
 msgid "Move dialog to the side pane"
 msgstr ""
 
@@ -13414,8 +13481,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14080,6 +14147,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19512,6 +19585,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23487,6 +23566,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23807,7 +23892,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24230,6 +24316,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24316,9 +24408,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24346,10 +24435,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24748,18 +24837,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24783,7 +24860,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24845,10 +25072,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24857,118 +25084,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
+msgstr ""
+
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Buildings"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25105,6 +25341,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27633,15 +27881,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27700,13 +27945,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27742,15 +27981,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27883,6 +28119,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32311,6 +32552,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33791,9 +34036,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/sq.po b/i18n/po/sq.po
index aa58097..3dc36c1 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 04:33+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 04:33+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -953,6 +953,12 @@ msgstr ""
 msgid "Select if the data should be downloaded into a new layer"
 msgstr ""
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr ""
 
@@ -2225,6 +2231,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3028,18 +3059,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr ""
@@ -3056,9 +3075,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8231,12 +8262,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9730,6 +9755,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9834,8 +9865,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9845,6 +9876,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9858,14 +9892,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr ""
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9908,6 +9965,16 @@ msgstr ""
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10236,40 +10303,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13356,8 +13423,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14020,6 +14087,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19448,6 +19521,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23423,6 +23502,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23743,7 +23828,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24166,6 +24252,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24252,9 +24344,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24282,10 +24371,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24684,18 +24773,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24719,7 +24796,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24781,10 +25008,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24793,118 +25020,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25041,6 +25277,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27569,15 +27817,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27636,13 +27881,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27678,15 +27917,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27819,6 +28055,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32245,6 +32486,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33725,9 +33970,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/sr.po b/i18n/po/sr.po
index 130cac7..6ecb7a3 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 05:02+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 05:00+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: sr\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -954,6 +954,12 @@ msgstr "Посебан слој"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr ""
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr ""
 
@@ -2226,6 +2232,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3029,18 +3060,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr ""
@@ -3057,9 +3076,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8232,12 +8263,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9732,6 +9757,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9836,8 +9867,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9847,6 +9878,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9860,14 +9894,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr ""
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9910,6 +9967,16 @@ msgstr ""
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10238,40 +10305,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13358,8 +13425,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14022,6 +14089,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19450,6 +19523,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23425,6 +23504,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23745,7 +23830,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24168,6 +24254,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24254,9 +24346,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24284,10 +24373,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24686,18 +24775,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24721,7 +24798,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24783,10 +25010,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24795,118 +25022,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25043,6 +25279,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27571,15 +27819,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27638,13 +27883,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27680,15 +27919,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27821,6 +28057,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32247,6 +32488,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33727,9 +33972,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/sv.po b/i18n/po/sv.po
index dde0fb3..95e2b4f 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-11-26 00:06+0100\n"
-"PO-Revision-Date: 2017-10-31 17:32+0000\n"
-"Last-Translator: Tomas Marklund <tomasmarklund75 at gmail.com>\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\n"
+"PO-Revision-Date: 2017-12-28 07:48+0000\n"
+"Last-Translator: Nka Mapper <Unknown>\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-11-26 05:04+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 05:02+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: sv\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1023,6 +1023,12 @@ msgstr "Skilda lager"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "Välj om datan ska hämtas som ett nytt lager"
 
+msgid "Zoom to downloaded data"
+msgstr "Zooma till nedladdat data"
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr "Hämta plats"
 
@@ -2410,6 +2416,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr "Bekräftelse"
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr "Lista över de senaste relationerna"
 
@@ -3273,18 +3304,6 @@ msgstr "Revisionsfilen \"/REVISION\" saknas."
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr "Redan registrerat en konflikt för primitiv \"{0}\"."
 
-msgid "Decimal Degrees"
-msgstr "Decimalgrader"
-
-msgid "deg° min'' sec\""
-msgstr "grader° minuter'' sekunder\""
-
-msgid "deg° min'' (Nautical)"
-msgstr "grader° minuter''"
-
-msgid "Projected Coordinates"
-msgstr "Projicerade Koordinater"
-
 msgctxt "compass"
 msgid "S"
 msgstr "S"
@@ -3301,9 +3320,21 @@ msgctxt "compass"
 msgid "E"
 msgstr "Ö"
 
+msgid "deg° min'' sec\""
+msgstr "grader° minuter'' sekunder\""
+
+msgid "Decimal Degrees"
+msgstr "Decimalgrader"
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr "grader° minuter''"
+
+msgid "Projected Coordinates"
+msgstr "Projicerade Koordinater"
+
 msgid "Date of imagery: {0}"
 msgstr "Datum av bakgrund: {0}"
 
@@ -8608,12 +8639,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr "Zooma till nedladdat data"
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -10163,6 +10188,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -10267,10 +10298,10 @@ msgstr "Namn: {0}"
 msgid "Description: {0}"
 msgstr "Beskrivning: {0}"
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
-msgstr[0] "{0} spår"
-msgstr[1] "{0} spår"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Timespan"
 msgstr ""
@@ -10278,6 +10309,9 @@ msgstr ""
 msgid "Length"
 msgstr "Längd"
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr "Längd: {0}"
 
@@ -10291,14 +10325,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] "{0} sträckpunkt"
 msgstr[1] "{0} sträckpunkter"
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
-msgstr[0] "{0} spår, "
-msgstr[1] "{0} spår, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] "{0} spår"
+msgstr[1] "{0} spår"
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr "Spara GPX-fil"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -10341,6 +10398,16 @@ msgstr "Spara Lager"
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] "{0} anteckning"
@@ -10677,29 +10744,20 @@ msgstr "Fel i fil {0}"
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
-msgstr "Föregående"
+msgid "Next"
+msgstr "Nästa"
 
-msgid "Show previous Image"
-msgstr "Visa föregående bild"
+msgid "Show next Image"
+msgstr "Visa nästa bild"
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
-msgstr "Ta bort foto från lagret"
-
-msgid "Delete File from disk"
-msgstr "Radera fil från disk"
-
-msgid "Copy image path"
-msgstr ""
-
-msgid "Next"
-msgstr "Nästa"
+msgid "Previous"
+msgstr "Föregående"
 
-msgid "Show next Image"
-msgstr "Visa nästa bild"
+msgid "Show previous Image"
+msgstr "Visa föregående bild"
 
 msgid "Show first Image"
 msgstr "Visa den första bilden"
@@ -10713,6 +10771,15 @@ msgstr "Centrera visning"
 msgid "Zoom best fit and 1:1"
 msgstr ""
 
+msgid "Remove photo from layer"
+msgstr "Ta bort foto från lagret"
+
+msgid "Delete File from disk"
+msgstr "Radera fil från disk"
+
+msgid "Copy image path"
+msgstr ""
+
 msgid "Move dialog to the side pane"
 msgstr ""
 
@@ -13882,11 +13949,9 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr "Borttagen nod {0} ingår i sträcka  {1}"
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
-"Sträcka {0} med {1} noder har ofullständiga noder eftersom åtminstone en nod "
-"saknades i inläst data."
 
 msgid ""
 "Relation with external id ''{0}'' refers to a missing primitive with "
@@ -14555,6 +14620,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr "Vill du tillåta detta?"
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr "Bekräfta fjärrstyrd handling"
 
@@ -20084,6 +20155,12 @@ msgstr "Avfall"
 msgid "Recycling Centre"
 msgstr "Återvinningscentral"
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr "Soptunna/Sopcontainer"
 
@@ -24070,6 +24147,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -24390,7 +24473,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24813,6 +24897,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24899,9 +24989,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24929,10 +25016,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -25331,18 +25418,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -25366,7 +25441,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -25428,10 +25653,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -25440,118 +25665,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
+msgstr ""
+
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25688,6 +25922,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -28230,15 +28476,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -28297,13 +28540,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -28339,15 +28576,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -28480,6 +28714,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32940,6 +33179,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr "Filen kunde inte tas bort!"
 
@@ -34420,9 +34663,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr "Spara LiveData automatiskt"
 
diff --git a/i18n/po/ta.po b/i18n/po/ta.po
index ddde051..07cea9f 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 05:05+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 05:03+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "X-Poedit-Country: INDIA\n"
 "Language: ta\n"
 "X-Poedit-Language: Tamil\n"
@@ -974,6 +974,12 @@ msgstr "தனியான அடுக்கு"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr ""
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr "இறக்க வேண்டிய இடம்"
 
@@ -2258,6 +2264,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3064,18 +3095,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr "S"
@@ -3092,9 +3111,21 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8268,12 +8299,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9767,6 +9792,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9871,8 +9902,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9882,6 +9913,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9895,14 +9929,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr "GPX கோப்பைக் காக்க"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9945,6 +10002,16 @@ msgstr "அடுக்கைக் காக்க்"
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10275,40 +10342,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13395,8 +13462,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14059,6 +14126,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19487,6 +19560,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23462,6 +23541,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23782,7 +23867,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24205,6 +24291,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24291,9 +24383,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24321,10 +24410,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24723,18 +24812,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24758,7 +24835,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24820,10 +25047,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24832,118 +25059,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25080,6 +25316,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27608,15 +27856,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27675,13 +27920,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27717,15 +27956,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27858,6 +28094,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32284,6 +32525,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33764,9 +34009,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/te.po b/i18n/po/te.po
index 3772cc9..4d96e52 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 05:05+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 05:03+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: te\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -953,6 +953,12 @@ msgstr ""
 msgid "Select if the data should be downloaded into a new layer"
 msgstr ""
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr ""
 
@@ -2225,6 +2231,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3028,18 +3059,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr ""
@@ -3056,9 +3075,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8231,12 +8262,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9730,6 +9755,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9834,8 +9865,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9845,6 +9876,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9858,14 +9892,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr ""
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9908,6 +9965,16 @@ msgstr ""
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10236,40 +10303,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13356,8 +13423,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14020,6 +14087,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19448,6 +19521,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23423,6 +23502,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23743,7 +23828,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24166,6 +24252,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24252,9 +24344,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24282,10 +24371,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24684,18 +24773,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24719,7 +24796,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24781,10 +25008,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24793,118 +25020,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25041,6 +25277,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27569,15 +27817,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27636,13 +27881,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27678,15 +27917,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27819,6 +28055,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32245,6 +32486,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33725,9 +33970,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/th.po b/i18n/po/th.po
index e1a82c9..1a237bb 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 05:06+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 05:03+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: th\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -953,6 +953,12 @@ msgstr ""
 msgid "Select if the data should be downloaded into a new layer"
 msgstr ""
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr ""
 
@@ -2225,6 +2231,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3028,18 +3059,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr ""
@@ -3056,9 +3075,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8231,12 +8262,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9730,6 +9755,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9834,8 +9865,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9845,6 +9876,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9858,14 +9892,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr ""
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9908,6 +9965,16 @@ msgstr ""
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10236,40 +10303,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13356,8 +13423,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14020,6 +14087,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19448,6 +19521,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23423,6 +23502,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23743,7 +23828,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24166,6 +24252,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24252,9 +24344,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24282,10 +24371,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24684,18 +24773,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24719,7 +24796,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24781,10 +25008,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24793,118 +25020,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25041,6 +25277,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27569,15 +27817,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27636,13 +27881,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27678,15 +27917,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27819,6 +28055,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32245,6 +32486,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33725,9 +33970,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/tr.po b/i18n/po/tr.po
index 4716645..3c39726 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 05:06+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 05:04+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -974,6 +974,12 @@ msgstr "Farklı Katman"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "{"
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr "İndirme Konumu"
 
@@ -2271,6 +2277,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3076,18 +3107,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr "Ondalık Derece"
-
-msgid "deg° min'' sec\""
-msgstr "derece° dak'' san\""
-
-msgid "deg° min'' (Nautical)"
-msgstr "derece° dak'' (gemicilik’te)"
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr "G"
@@ -3104,9 +3123,21 @@ msgctxt "compass"
 msgid "E"
 msgstr "D"
 
+msgid "deg° min'' sec\""
+msgstr "derece° dak'' san\""
+
+msgid "Decimal Degrees"
+msgstr "Ondalık Derece"
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr "derece° dak'' (gemicilik’te)"
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8297,12 +8328,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9800,6 +9825,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9904,8 +9935,8 @@ msgstr "İsim: {0}"
 msgid "Description: {0}"
 msgstr "Tanım: {0}"
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9915,6 +9946,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9928,14 +9962,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] "{0} yol noktaları"
 msgstr[1] "{0} yol noktaları"
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
-msgstr[0] "{0} iz, "
-msgstr[1] "{0} izler, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr "GPX olarak sakla"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9978,6 +10035,16 @@ msgstr "Katmanı Kaydet"
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10311,28 +10378,19 @@ msgstr "Dosyada Hata {0}"
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
-msgstr "Önceki"
+msgid "Next"
+msgstr "Sonraki"
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
-msgstr "Fotoğrafı tabakadan kaldır"
-
-msgid "Delete File from disk"
-msgstr ""
-
-msgid "Copy image path"
-msgstr ""
-
-msgid "Next"
-msgstr "Sonraki"
+msgid "Previous"
+msgstr "Önceki"
 
-msgid "Show next Image"
+msgid "Show previous Image"
 msgstr ""
 
 msgid "Show first Image"
@@ -10347,6 +10405,15 @@ msgstr "Merkezi görünüm"
 msgid "Zoom best fit and 1:1"
 msgstr "Görüntüyü Ekrana oturt 1:1"
 
+msgid "Remove photo from layer"
+msgstr "Fotoğrafı tabakadan kaldır"
+
+msgid "Delete File from disk"
+msgstr ""
+
+msgid "Copy image path"
+msgstr ""
+
 msgid "Move dialog to the side pane"
 msgstr ""
 
@@ -13452,8 +13519,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14118,6 +14185,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr "Buna izin veriyormusunuz?"
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr "uzak kontrol haereketini onayla"
 
@@ -19553,6 +19626,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23528,6 +23607,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23848,7 +23933,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24271,6 +24357,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24357,9 +24449,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24387,10 +24476,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24789,18 +24878,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24824,7 +24901,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24886,10 +25113,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24898,118 +25125,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
+msgstr ""
+
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Buildings"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25146,6 +25382,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27674,15 +27922,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27741,13 +27986,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27783,15 +28022,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27924,6 +28160,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32364,6 +32605,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33844,9 +34089,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr "Canlı veriyi otomatik sakla"
 
diff --git a/i18n/po/ug.po b/i18n/po/ug.po
index bf6a360..061d0b5 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 05:07+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 05:04+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -953,6 +953,12 @@ msgstr ""
 msgid "Select if the data should be downloaded into a new layer"
 msgstr ""
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr ""
 
@@ -2225,6 +2231,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3028,18 +3059,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr ""
@@ -3056,9 +3075,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8231,12 +8262,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9730,6 +9755,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9834,8 +9865,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9845,6 +9876,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9858,14 +9892,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr ""
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9908,6 +9965,16 @@ msgstr ""
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10236,40 +10303,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13356,8 +13423,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14020,6 +14087,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19448,6 +19521,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23423,6 +23502,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23743,7 +23828,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24166,6 +24252,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24252,9 +24344,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24282,10 +24371,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24684,18 +24773,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24719,7 +24796,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24781,10 +25008,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24793,118 +25020,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25041,6 +25277,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27569,15 +27817,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27636,13 +27881,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27678,15 +27917,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27819,6 +28055,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32245,6 +32486,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33725,9 +33970,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/uk.po b/i18n/po/uk.po
index 6211f35..b1690cf 100644
--- a/i18n/po/uk.po
+++ b/i18n/po/uk.po
@@ -7,17 +7,17 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-11-26 00:06+0100\n"
-"PO-Revision-Date: 2017-11-23 23:16+0000\n"
-"Last-Translator: Мокринский Павел <Unknown>\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\n"
+"PO-Revision-Date: 2017-12-28 17:48+0000\n"
+"Last-Translator: Don-vip <Unknown>\n"
 "Language-Team: Ukrainian <uk at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=n%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-11-26 05:07+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 05:05+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: uk\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1053,6 +1053,12 @@ msgstr "Окремий шар"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "Позначте, якщо дані повинні бути завантажені у новий шар"
 
+msgid "Zoom to downloaded data"
+msgstr "Масштабувати до завантажених даних"
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr "Позначте, щоб масштабуватись до всієї ново завантаженої ділянки"
+
 msgid "Download Location"
 msgstr "Шлях для завантаження"
 
@@ -2475,6 +2481,35 @@ msgstr[2] ""
 msgid "Confirmation"
 msgstr "Підтвердждення"
 
+msgid "Export GPX file starting from first member"
+msgstr "Експортувати файл GPX починаючи з першого елемента"
+
+msgid "Export GPX file starting from last member"
+msgstr "Експортувати файл GPX починаючи з останнього елемента"
+
+msgid "Convert to GPX layer starting from first member"
+msgstr "Перетворити на шар GPX починаючи з першого елемента"
+
+msgid "Convert to GPX layer starting from last member"
+msgstr "Перетворити на шар GPX починаючи  з останнього елемента"
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+"Спростити цей зв’язок до одного gpx-треку рекурсивно, починаючи від першого "
+"члена (-ів), послідовно продовжуючи до останнього."
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+"Спростити цей зв’язок до одного gpx-треку рекурсивно, починаючи від "
+"останнього члена (-ів), послідовно продовжуючи до першого."
+
+msgid "Selected Relations"
+msgstr "Виділені зв’язки"
+
 msgid "List of recent relations"
 msgstr "Перелік останніх звʼязків"
 
@@ -3363,18 +3398,6 @@ msgstr "Відсутній файл ревізії ''/REVISION''."
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr "Конфлікт вже зареєстровано для елемента ''{0}''."
 
-msgid "Decimal Degrees"
-msgstr "Десяткові Градуси"
-
-msgid "deg° min'' sec\""
-msgstr "град° хв'' сек\""
-
-msgid "deg° min'' (Nautical)"
-msgstr "град° хв'' (Морські)"
-
-msgid "Projected Coordinates"
-msgstr "Прогнозовані Координати"
-
 msgctxt "compass"
 msgid "S"
 msgstr "Пд"
@@ -3391,9 +3414,21 @@ msgctxt "compass"
 msgid "E"
 msgstr "Сх"
 
+msgid "deg° min'' sec\""
+msgstr "град° хв'' сек\""
+
+msgid "Decimal Degrees"
+msgstr "Десяткові Градуси"
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr "Неможливо розібрати значення координат: ''{0}''"
 
+msgid "deg° min'' (Nautical)"
+msgstr "град° хв'' (Морські)"
+
+msgid "Projected Coordinates"
+msgstr "Прогнозовані Координати"
+
 msgid "Date of imagery: {0}"
 msgstr "Дата знімка: {0}"
 
@@ -9009,12 +9044,6 @@ msgstr ""
 "JOSM.<br>Ви можете відкрити його вручну через меню Файл або з панелі "
 "інструментів.</html>"
 
-msgid "Zoom to downloaded data"
-msgstr "Масштабувати до завантажених даних"
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr "Позначте, щоб масштабуватись до всієї ново завантаженої ділянки"
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -10745,6 +10774,12 @@ msgstr "Метадані "
 msgid "Load tile"
 msgstr "Завантажити квадрат"
 
+msgid "Get tile status"
+msgstr "Інформація про тайл"
+
+msgid "Force tile rendering"
+msgstr "Примусове перестворення тайла"
+
 msgid "Failed to create tile source"
 msgstr "Збій створення джерела квадратів мапи"
 
@@ -10855,11 +10890,11 @@ msgstr "Назва: {0}"
 msgid "Description: {0}"
 msgstr "Опис: {0}"
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
-msgstr[0] "{0} трек"
-msgstr[1] "{0} треки"
-msgstr[2] "{0} треків"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
+msgstr[0] "{0} трек, {1} сегментів трека"
+msgstr[1] "{0} треки, {1} сегментів трека"
+msgstr[2] "{0} треків, {1} сегментів трека"
 
 msgid "Timespan"
 msgstr "Період"
@@ -10867,6 +10902,9 @@ msgstr "Період"
 msgid "Length"
 msgstr "Довжина"
 
+msgid "Number of<br/>Segments"
+msgstr "Кількість <br/>сегментів"
+
 msgid "Length: {0}"
 msgstr "Довжина: {0}"
 
@@ -10882,15 +10920,39 @@ msgstr[0] "{0} маршрутна точка"
 msgstr[1] "{0} маршрутні точки"
 msgstr[2] "{0} маршрутних точок"
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
-msgstr[0] "{0} трек, "
-msgstr[1] "{0} треки, "
-msgstr[2] "{0} треків, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] "{0} трек"
+msgstr[1] "{0} треки"
+msgstr[2] "{0} треків"
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
+msgstr[0] " ({0} сегмент)"
+msgstr[1] " ({0} сегменти)"
+msgstr[2] " ({0} сегментів)"
 
 msgid "Save GPX file"
 msgstr "Зберегти файл GPX"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr "Об’єднати сегменти всіх треків в один трек."
+
+msgid "Combine tracks of this layer"
+msgstr "Об’єднати треки цього шару"
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr "Розділити кілька сегментів одного трека на кілька окремих треків."
+
+msgid "Split track segments to tracks"
+msgstr "Розділити сегменти треку на треки"
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr "Розділити треки цього шару, створивши для кожного новий шар."
+
+msgid "Split tracks to new layers"
+msgstr "Розділити треки до нових шарів"
+
 msgid "Id"
 msgstr "Ід."
 
@@ -10934,6 +10996,20 @@ msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 "Спроба встановити шар даних, який є лише для читання, як редагований шар"
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+"Спроба вилучення шару, під час фонового надсилання даних. Будь ласка, "
+"зачекайте, поки надсилання не буде завершено."
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+"Відбувається фонове надсилання даних. Неможливо оновити стан, доки "
+"надсилання не закінчиться."
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] "{0} нотатка"
@@ -11288,29 +11364,20 @@ msgstr "Помилка в файлі {0}"
 msgid "Display geotagged images"
 msgstr "Показати зображення з геотеґами"
 
-msgid "Previous"
-msgstr "Попереднє"
+msgid "Next"
+msgstr "Наступне"
 
-msgid "Show previous Image"
-msgstr "Показати попереднє зображення"
+msgid "Show next Image"
+msgstr "Показати наступне зображення"
 
 msgid "Geoimage: {0}"
 msgstr "Геозображення: {0}"
 
-msgid "Remove photo from layer"
-msgstr "Вилучити фото із шару"
-
-msgid "Delete File from disk"
-msgstr "Вилучити файл з диску"
-
-msgid "Copy image path"
-msgstr "Копіювати шлях зображення"
-
-msgid "Next"
-msgstr "Наступне"
+msgid "Previous"
+msgstr "Попереднє"
 
-msgid "Show next Image"
-msgstr "Показати наступне зображення"
+msgid "Show previous Image"
+msgstr "Показати попереднє зображення"
 
 msgid "Show first Image"
 msgstr "Показати перше зображення"
@@ -11324,6 +11391,15 @@ msgstr "Центрувати вид"
 msgid "Zoom best fit and 1:1"
 msgstr "Масштабувати, щоб вписати зі співвідношенням сторін 1:1"
 
+msgid "Remove photo from layer"
+msgstr "Вилучити фото із шару"
+
+msgid "Delete File from disk"
+msgstr "Вилучити файл з диску"
+
+msgid "Copy image path"
+msgstr "Копіювати шлях зображення"
+
 msgid "Move dialog to the side pane"
 msgstr "Пересунути діалог на бічну панель"
 
@@ -14783,10 +14859,10 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr "Вилучена точка {0} є частиною лінії {1}"
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
-"Лінія {0} з {1} точками має неповні точки, тому що принаймні одна точка "
+"Лінія {0} з {1} точками не є повною, через те щонайменше одна з точок "
 "відсутня у завантажених даних."
 
 msgid ""
@@ -15538,6 +15614,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr "Дозволити?"
 
+msgid "Yes, always"
+msgstr "Так, завжди"
+
+msgid "Yes, once"
+msgstr "Тільки, цього разу"
+
 msgid "Confirm Remote Control action"
 msgstr "Підтверджувати дії Дистанційного керування"
 
@@ -21254,6 +21336,12 @@ msgstr "Відходи"
 msgid "Recycling Centre"
 msgstr "Центр переробки відходів"
 
+msgid "trash"
+msgstr "сміття"
+
+msgid "dog_excrement"
+msgstr "собачі екскременти"
+
 msgid "Waste Disposal/Dumpster"
 msgstr "Утилізація відходів/Контейнер для сміття"
 
@@ -21870,7 +21958,7 @@ msgstr "синагога"
 
 msgctxt "building"
 msgid "transformer_tower"
-msgstr "трасформаторна башта"
+msgstr "трансформаторна башта"
 
 msgctxt "building"
 msgid "public"
@@ -22864,10 +22952,10 @@ msgid "5 Mvar"
 msgstr "5 Мвар"
 
 msgid "Power Street Cabinet"
-msgstr "Трасформаторна будка"
+msgstr "Трансформаторна будка"
 
 msgid "Transformer Tower"
-msgstr "Трасформаторна башта"
+msgstr "Трансформаторна башта"
 
 msgid "Power Portal"
 msgstr "Портальна опора"
@@ -25266,6 +25354,12 @@ msgstr "Громадський транспорт (ÖPNV)"
 msgid "Hike & Bike"
 msgstr "Піший та велотуризм"
 
+msgid "OpenSnowMap overlay"
+msgstr "OpenSnowMap"
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr "Шар для нанесення лижних трас в OSM. Оновлюється щотижня."
+
 msgid "skobbler"
 msgstr "skobbler"
 
@@ -25594,8 +25688,10 @@ msgstr "Базова мапа Австрії, на основі урядових
 msgid "basemap.at Orthofoto"
 msgstr "basemap.at ортофото"
 
-msgid "Orthofoto layer provided by basemap.at. "
-msgstr "Шар ортофотознімків від basemap.at "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
+msgstr ""
+"Шар ортофотознімків, що надається basemap.at. \"Наступник\" шару geoimage.at."
 
 msgid "Geoimage.at MaxRes"
 msgstr "Geoimage.at MaxRes"
@@ -26033,6 +26129,12 @@ msgstr "Естонія кадастр (Maaamet)"
 msgid "Estonia Forestry (Maaamet)"
 msgstr "Естонія ліси (Maaamet)"
 
+msgid "Nordic snowmobile overlay"
+msgstr "Шар шляхів для снігоходів в Скандинавії"
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr "Kelkkareitit.fi - шляхи для снігоходів з OSM (Скандинавія)"
+
 msgid "BANO"
 msgstr "BANO"
 
@@ -26119,9 +26221,6 @@ msgid ""
 "- 1 m"
 msgstr "Веркор - заповідник Хайлендс Веркор - ортофото 1999 - 1 м"
 
-msgid "Hamburg (40 cm)"
-msgstr "Гамбург (40 см)"
-
 msgid "Hamburg (20 cm)"
 msgstr "Гамбург (20 см)"
 
@@ -26149,12 +26248,12 @@ msgstr "Берлін - аерофото 2016"
 msgid "Berlin aerial photograph 2017"
 msgstr "Берлін - аерофото 2017"
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
-msgstr "Німецька залізниця Маршрути VzG Листопад 2013"
-
 msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr "Німецька залізниця Маршрути VzG Листопад 2015"
 
+msgid "Deutsche Bahn VzG lines January 2017"
+msgstr "Deutsche Bahn - залізничні лінії VzG, січень 2017"
+
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
 msgstr "Ерланген - аерофото (2016 5.0 см)"
 
@@ -26534,7 +26633,7 @@ msgid "Japan GSI ortho Imagery"
 msgstr "Японія: ортознімки GSI"
 
 msgid "Japan GSI Standard Map"
-msgstr ""
+msgstr "Японія: стандартна мапа GSI"
 
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
@@ -26570,7 +26669,7 @@ msgid "20cm ortho - Latvia - Coastline"
 msgstr "20см ортофото - Латвія - Берегова лінія"
 
 msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
-msgstr ""
+msgstr "Ортознімки 1-й цикл (1994-1999) - Латвія"
 
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Литва)"
@@ -26579,19 +26678,7 @@ msgid "geoportail.lu all layers"
 msgstr "geoportail.lu всі шари"
 
 msgid "geoportail.lu ortho latest"
-msgstr ""
-
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr "Люксембург Inspire Залізниця"
-
-msgid "Luxembourg Inspire Roads"
-msgstr "Люксембург Inspire Дороги"
-
-msgid "Luxembourg Inspire Water"
-msgstr "Люксембург Inspire Води"
+msgstr "geoportail.lu - найновіші ортознімки"
 
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Дельта Нігера, жовт. 2012 Landsat"
@@ -26618,8 +26705,198 @@ msgstr "LINZ NZ - аерофотознімки"
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr "LINZ NZ Topo50 - мапа без сітки"
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
-msgstr "Шпіцберген - ортофото 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr "Kartverket N50 topo"
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+"Топографічна мапа N50, еквівалентна паперовим мапам Норвегії масштабу 1: "
+"50000."
+
+msgid "Kartverket Hillshade overlay"
+msgstr "Kartverket - шар рельєфу"
+
+msgid "Hillshade for Norway"
+msgstr "Рельєф Норвегії"
+
+msgid "Kartverket Nautical Charts"
+msgstr "Kartverket - морські навігаційні мапи"
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+"Норвезькі морські мапи (включають Шпіцберген і Антарктику). Растрове подання "
+"паперових мап. Оновлюється раз у 2 тижні."
+
+msgid "Kartverket Road Network overlay"
+msgstr "Kartverket - шар дорожньої мережі"
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+"Норвезька дорожня мережа з Національної бази дорожньої мережі (NVDB), також "
+"використовується в Vbase та Elveg. Кольори представляють національні, "
+"повітові, муніципальні, приватні та лісові дороги + пішохідні / велосипедні "
+"шляхи."
+
+msgid "Kartverket Trails overlay"
+msgstr "Kartverket - шар туристичних маршрутів"
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+"Маршрути з норвезької бази даних \"Tur og Friluftsruter\". Вибір по "
+"категоріях для піших, велосипедних та лижних трас."
+
+msgid "Kartverket Place Names overlay"
+msgstr "Kartverket - шар з назвами місць"
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+"Офіційні норвезькі географічні назви з бази даних SSR. Вибір по категоріях."
+
+msgid "MTBmap.no"
+msgstr "MTBmap.no"
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+"Норвезька мапа маршрутів для  гірських велосипедів від OSM (максимальний "
+"масштаб 14-16, залежить від регіону)"
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr "Kartverket DTM (цифрова модель рельєфу)"
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+"Затінене рельєфне зображення на основі відкритих даних проекту Norwegian "
+"Digital Terrain Model (DTM), тобто поверхні землі без дерев, будівель та "
+"інших об’єктів. Будь ласка, відвідайте hoydedata.no, щоб визначити рік "
+"проекту."
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr "Kartverket DOM (цифрова модель поверхні)"
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+"Затінене рельєфне зображення на основі відкритих даних проекту Norwegian "
+"Digital Surface Model (DOM), тобто поверхню землі, включаючи дерева, будівлі "
+"та інші об’єкти на поверхні. Будь ласка, відвідайте hoydedata.no, щоб "
+"визначити рік проекту."
+
+msgid "Kartverket Historic maps"
+msgstr "Kartverket - історичні мапи"
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr "Історичні мапи - `Amtskartserien´ 1826-1917."
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr "Kartverket - економічні карти (історичні)"
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+"1-а редакція історичних економічних карт Норвегії 1960-90 рр. ( ''Økonomisk "
+"kartverk''). Доступна, починаючи з масштабу 16. Не забудьте поправити "
+"локальне зміщення знімка."
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr "Kartverket - шар адміністративних кордонів"
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+"Офіційні адміністративні кордони національного, регіонального та "
+"муніципального рівнів"
+
+msgid "Kartverket Cadastral overlay"
+msgstr "Kartverket - шар кадастру"
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+"Межі земельних володінь з офіційного земельного регістра (`matrikkelen´). "
+"Щомісячне оновлення."
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr "Kartverket - шар з перешкодами для літальних апаратів"
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+"Вертикальні перешкоди для літальних апаратів, вище 15 м в сільській "
+"місцевості та 30 м в міській (щогли, вежі, високі будівлі, лінії "
+"електропередачі та т.п.)"
+
+msgid "NVE Electricity Network overlay"
+msgstr "NVE - шар електромереж"
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+"Лінії електромережі (високовольтна мережа), включаючи трансформатори, "
+"підводні кабелі і опори. Локальні розподільні мережі не включені."
+
+msgid "NVE Hydropower Plants overlay"
+msgstr "NVE - шар гідроелектростанцій"
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+"Гідроелектростанції, включаючи водні шляхи (тунелі, канали, трубопроводи) і "
+"греблі"
+
+msgid "NVE Wind Power Plants overlay"
+msgstr "NVE - шар вітроелектростанцій"
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+"Вітряки, ферми та концесійні території. Червоний колір = в концесії "
+"відмовлено."
+
+msgid "NPD Offshore Installations overlay"
+msgstr "NPD - прибережні нафтогазові споруди"
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+"Платформи і родовища нафти і газу на норвезькому континентальному шельфі"
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr "Miljødirektoratet - шар природоохоронних зон"
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+"Норвезькі національні парки, заповідники та інші природоохоронні території "
+"та об’єкти з Naturbase, включаючи Свальбард/Шпіцберген"
+
+msgid "NP Svalbard Orthophoto"
+msgstr "NP - Свальбард/Шпіцберген ортофото"
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
+msgstr "Ортофото  Свальбарда/Шпіцбергена від Норвезького Полярного Інституту"
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
 msgstr "imagico.de - знімки OSM для мапінгу: мозаїка Шпіцбергену"
@@ -26687,11 +26964,11 @@ msgstr "Низькоякісні чи застаріли знімки в інш
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr "Пангасінан/Булакан (Філіппіни HiRes)"
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
-msgstr "Geoportal 2: ортофото"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
+msgstr "Geoportal 2: ортофотомапа (супутникові знімки)"
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
-msgstr "Geoportal 2: Ортофотомапа (супутник) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
+msgstr "Geoportal 2: ортофотомапа (супутникові знімки) WMTS"
 
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr "Geoportal 2: PRNG (топоніми)"
@@ -26699,119 +26976,128 @@ msgstr "Geoportal 2: PRNG (топоніми)"
 msgid "Geoportal 2: ISOK hillshade"
 msgstr "Geoportal 2: ISOK рельєф"
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
-msgstr "Бедзін: Ортофото 2013 (аерофото)"
+msgid "polska.e-mapa.net: Buildings"
+msgstr ""
+
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
+msgstr "Бендзин:  Ортофотомапа 2013 (супутникові знімки)"
 
-msgid "Będzin: Budynki (buildings)"
-msgstr "Бендзин: будівлі"
+msgid "Będzin: Buildings"
+msgstr "Бендзин: Будинки"
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
-msgstr "Битом: ортофото 2012 (аерофото)"
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
+msgstr "Битом: Ортофотомапа 2012 (супутникові знімки)"
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr "Битом: Фотоплан 2014 (супутник)"
 
-msgid "Bytom: Budynki (buildings)"
-msgstr "Битом: будівлі"
+msgid "Bytom: Buildings"
+msgstr "Bytom: Будинки"
 
-msgid "Chorzów: Budynki (buildings)"
-msgstr "Хожув: будівлі"
+msgid "Chorzów: Buildings"
+msgstr "Хожув: Будинки"
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr "Ченстохова: Будинки"
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
-msgstr "Ченстохова: ортофото 2011 (аерофото)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
+msgstr "Ченстохова: Ортофотомапа 2011 (супутникові знімки)"
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
-msgstr "Ченстохова: Ортофотомапа 2013 (супутник)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
+msgstr "Ченстохова: Ортофотомапа 2013 (супутникові знімки)"
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
-msgstr "Ченстохова: Ортофотомапа 2014 (супутник)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
+msgstr "Ченстохова: Ортофотомапа 2014 (супутникові знімки)"
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
-msgstr "Глівіце: ортофото 2013 (аерофото)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
+msgstr "Глівіце: Ортофотомапа 2013 (супутникові знімки)"
 
-msgid "Gliwice: Budynki (buildings)"
-msgstr "Глівіце: будинки"
+msgid "Gliwice: Buildings"
+msgstr "Глівіце: Будинки"
 
-msgid "Katowice: Ortofotomapa (aerial image)"
-msgstr "Катовіце: ортофото (аерофото)"
+msgid "Katowice: Orthophotomap (aerial image)"
+msgstr "Катовіце: Ортофотомапа (супутникові знімки)"
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Katowice: Buildings"
 msgstr "Катовіце: Будинки"
 
-msgid "Łódź: Budynki (buildings)"
-msgstr "Лодзь: будівлі"
+msgid "Łódź: Buildings"
+msgstr "Човен: Будинки"
 
-msgid "Łódź: Ortofotomapa (aerial image)"
-msgstr "Лодзь: ортофото (аерофото)"
+msgid "Łódź: Orthophotomap (aerial image)"
+msgstr "Лодзь: Ортофотомапа (супутникові знімки)"
 
-msgid "Powiat dębicki: Budynki (buildings)"
-msgstr "Дембіцький повіт: будівлі"
+msgid "Powiat dębicki: Buildings"
+msgstr "Дембицький повіт: Будинки"
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr "Любачівський повіт: Будинки"
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr "Ланьцутський повіт: Будинки"
 
-msgid "Powiat poznański: Budynki (buildings)"
-msgstr "Познанський повіт: будівлі"
+msgid "Powiat poznański: Buildings"
+msgstr "Познанський повіт: Будинки"
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
-msgstr "Познанський повіт: Ортофотомапа (супутник)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
+msgstr "Познанський повіт:  Ортофотомапа (супутникові знімки)"
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr "Ропчицько-Сендзішовський повіт: Будинки"
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr "Ряшівський повіт: Будинки"
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
-msgstr "Ряшівський повіт: Ортофотомапа"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
+msgstr "Жешувський повіт:  Ортофотомапа (супутникові знімки)"
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr "Стальововольський повіт: Будинки"
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
-msgstr "Познань: ортофотомапа 2014 (аерофото)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
+msgstr "Познань:  Ортофотомапа 2014 (супутникові знімки)"
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Buildings"
 msgstr "Перемишль: Будинки"
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
-msgstr "Перемишль: Ортофотомапа"
+msgid "Przemyśl: Ortophotomap (aerial image)"
+msgstr "Пшемисль:  Ортофотомапа (супутникові знімки)"
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
-msgstr "Руда-Шльонська: ортофото (аерофото)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
+msgstr "Руда Сілезька: Ортофотомапа (супутникові знімки)"
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
-msgstr "Жешув: ортофото (аерофото)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
+msgstr "Жешув: Ортофотомапа (супутникові знімки)"
 
-msgid "Rzeszów: Budynki (buildings)"
-msgstr "Жешув: будинки"
+msgid "Rzeszów: Buildings"
+msgstr "Ряшів: Будинки"
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
-msgstr "Семяновіце-Шльонські: ортофото (аерофото)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
+msgstr "Сіміановице Сілезьке: Ортофотомапа (супутникові знімки)"
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr "Семяновіце-Шльонські: Будинки"
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
-msgstr "Свентохловіце: Ортофотомапа 2008 (супутник)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
+msgstr "Свентохловіце: Ортофотомапа 2008 (супутникові знімки)"
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
-msgstr "Свентохловіце: ортофото 2009 (аерофото)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
+msgstr "Свентохловіце: Ортофотомапа 2009 (супутникові знімки)"
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
-msgstr "Свентохловіце: Ортофотомапа 2012 (супутник)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
+msgstr "Свентохловіце: Ортофотомапа 2012 (супутникові знімки)"
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
-msgstr "Забже: ортофото 2011"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
+msgstr "Забже: Ортофотомапа 2011 (супутникові знімки)"
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
-msgstr "Вроцлав: ортофото 2015 (аерофотознімки)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
+msgstr "Вроцлав: Ортофотомапа 2015 (супутникові знімки)"
+
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr "Ортофото DGRF 2004-2006 (WMS)"
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
+msgstr "Ортофото Літораль DGT 2014-2015 (WMS)"
 
 msgid "ScanEx IRS"
 msgstr "ScanEx IRS"
@@ -26956,6 +27242,18 @@ msgstr "imagico.de - знімки OSM для мапінгу: Адамів міс
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr "Доповнюють неповне покриття з інших джерел (true color)"
 
+msgid "Economic Maps (historic)"
+msgstr "Економічні мапи (історичні)"
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr "Скановані \"Економічні мапи\" приблизно 1950-1980 рр"
+
+msgid "Snowmobile map Sweden"
+msgstr "Мапа шляхів для снігоходів (Швеція)"
+
+msgid "Snowmobile trails"
+msgstr "Шляхи для снігоходів"
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr "Кантон Аргау 25 см (AGIS 2011)"
 
@@ -29877,15 +30175,12 @@ msgstr "Шар обʼєктів Mapillary"
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr "Показує шар з обʼєктами, що були виявлені Mapillary"
 
-msgid "Start Mapillary layer"
-msgstr "Запустити шар Mapillary"
+msgid "Open Mapillary layer"
+msgstr "Відкрити шар Mapillary"
 
 msgid "Mapillary"
 msgstr "Mapillary"
 
-msgid "Create Mapillary layer"
-msgstr "Створити шар Mapillary"
-
 msgid "Download Mapillary images in current view"
 msgstr "Заватнажити знімки Mapillary для поточного виду"
 
@@ -29948,14 +30243,8 @@ msgstr ""
 "меню Довідка). Якщо це повідомлення зʼявилось вперше – спробуйте ще раз, "
 "можливо у вас виникла проблем з мережевим зʼєднанням."
 
-msgid "Upload pictures"
-msgstr "Завантажити знімки"
-
-msgid "Upload Mapillary pictures"
-msgstr "Завантажити знімки Mapillary"
-
-msgid "Upload pictures."
-msgstr "Завантажити знімки."
+msgid "Upload Mapillary images"
+msgstr "Надіслати знімки Mapillary"
 
 msgid "Walk mode"
 msgstr "Пішохідний режим"
@@ -29990,15 +30279,12 @@ msgstr "Експортувати виділені знімки"
 msgid "Rewrite imported images"
 msgstr "Перезаписати імпортовані зображення"
 
-msgid "Select a folder"
-msgstr "Оберіть теку"
+msgid "Select a directory"
+msgstr "Виберіть теку"
 
 msgid "Explore"
 msgstr "Оглянути"
 
-msgid "Select a directory"
-msgstr "Виберіть теку"
-
 msgid "Speed limit"
 msgstr "Обмеження швидкості"
 
@@ -30132,6 +30418,13 @@ msgstr "Попередній перегляд зображень при наве
 msgid "Cut off sequences at download bounds"
 msgstr "Обмежити послідовність межами завантаженої ділянки"
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+"Під час відкривання знімка Mapillary у веб-оглядачі, показувати редактор "
+"розмивання замість перегляду знімка"
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr "Увімкнути експериментальні бета-функції (можуть бути нестабільними)"
 
@@ -34966,6 +35259,10 @@ msgstr "Повторити"
 msgid "Unable to process file ''{0}'':"
 msgstr "Неможливо обробити файл ''{0}'':"
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr "Файл не може бути знищений!"
 
@@ -36517,9 +36814,6 @@ msgstr "Експорт даних трафіку в файл мережі SUMO."
 msgid "SUMO Export"
 msgstr "Експорт SUMO"
 
-msgid "Export"
-msgstr "Експорт"
-
 msgid "AutoSave LiveData"
 msgstr "Автозбереження редагованих даних"
 
diff --git a/i18n/po/ur.po b/i18n/po/ur.po
index bf8958f..7bc7765 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 05:08+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 05:05+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: ur\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -953,6 +953,12 @@ msgstr ""
 msgid "Select if the data should be downloaded into a new layer"
 msgstr ""
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr ""
 
@@ -2225,6 +2231,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3028,18 +3059,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr ""
@@ -3056,9 +3075,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8231,12 +8262,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9730,6 +9755,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9834,8 +9865,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9845,6 +9876,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9858,14 +9892,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr ""
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9908,6 +9965,16 @@ msgstr ""
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10236,40 +10303,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13356,8 +13423,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14020,6 +14087,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19448,6 +19521,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23423,6 +23502,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23743,7 +23828,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24166,6 +24252,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24252,9 +24344,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24282,10 +24371,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24684,18 +24773,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24719,7 +24796,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24781,10 +25008,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24793,118 +25020,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25041,6 +25277,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27569,15 +27817,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27636,13 +27881,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27678,15 +27917,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27819,6 +28055,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32245,6 +32486,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33725,9 +33970,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/vi.po b/i18n/po/vi.po
index b3c6f1c..c47499a 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 05:08+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 05:06+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: vi\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1018,6 +1018,12 @@ msgstr "Layer riêng biệt"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "Chọn nếu các dữ liệu cần được tải về vào một layer mới"
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr "Download Location"
 
@@ -2383,6 +2389,31 @@ msgstr[0] ""
 msgid "Confirmation"
 msgstr "Xác nhận"
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3224,18 +3255,6 @@ msgstr "Các tập tin sửa đổi '' / RÀ SOÁT '' là mất tích."
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr "Đã đăng ký một cuộc xung đột với nguyên thủy '' {0} ''."
 
-msgid "Decimal Degrees"
-msgstr "Degrees Decimal"
-
-msgid "deg° min'' sec\""
-msgstr "° ° min '' sec \""
-
-msgid "deg° min'' (Nautical)"
-msgstr "° ° min '' (Nautical)"
-
-msgid "Projected Coordinates"
-msgstr "Dự Tọa độ"
-
 msgctxt "compass"
 msgid "S"
 msgstr "S"
@@ -3252,9 +3271,21 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
+msgid "deg° min'' sec\""
+msgstr "° ° min '' sec \""
+
+msgid "Decimal Degrees"
+msgstr "Degrees Decimal"
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr "° ° min '' (Nautical)"
+
+msgid "Projected Coordinates"
+msgstr "Dự Tọa độ"
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8708,12 +8739,6 @@ msgstr ""
 "<Html> Autostart '' Download từ OSM '' hộp thoại mỗi khi JOSM làBắt đầu. "
 "<br> Bạn có thể mở nó bằng tay từ menu File hoặc thanh công cụ. </ Html>"
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -10348,6 +10373,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -10452,9 +10483,10 @@ msgstr "Name: {0}"
 msgid "Description: {0}"
 msgstr "Mô tả: {0}"
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
-msgstr[0] "{0} theo dõi"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Timespan"
 msgstr "khoảng thời gian"
@@ -10462,6 +10494,9 @@ msgstr "khoảng thời gian"
 msgid "Length"
 msgstr "Length"
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr "Chiều dài: {0}"
 
@@ -10473,13 +10508,36 @@ msgid "{0} waypoint"
 msgid_plural "{0} waypoints"
 msgstr[0] "{0} waypoint"
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
-msgstr[0] "{0} theo dõi, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] "{0} theo dõi"
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr "Lưu tập tin GPX"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr "Id"
 
@@ -10522,6 +10580,16 @@ msgstr "Lưu Layer"
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10859,29 +10927,20 @@ msgstr "Lỗi trên tập {0}"
 msgid "Display geotagged images"
 msgstr "Hiển thị hình ảnh gắn thẻ địa lý"
 
-msgid "Previous"
-msgstr "trước"
+msgid "Next"
+msgstr "Next"
 
-msgid "Show previous Image"
-msgstr "Show Image trước"
+msgid "Show next Image"
+msgstr "Hiển thị hình bên cạnh"
 
 msgid "Geoimage: {0}"
 msgstr "Geoimage: {0}"
 
-msgid "Remove photo from layer"
-msgstr "Xóa ảnh từ layer"
-
-msgid "Delete File from disk"
-msgstr "Xóa tập tin từ đĩa"
-
-msgid "Copy image path"
-msgstr "Copy đường dẫn hình ảnh"
-
-msgid "Next"
-msgstr "Next"
+msgid "Previous"
+msgstr "trước"
 
-msgid "Show next Image"
-msgstr "Hiển thị hình bên cạnh"
+msgid "Show previous Image"
+msgstr "Show Image trước"
 
 msgid "Show first Image"
 msgstr "Hiển thị ảnh đầu tiên"
@@ -10895,6 +10954,15 @@ msgstr "Trung tâm xem"
 msgid "Zoom best fit and 1:1"
 msgstr "Zoom phù hợp nhất và 1: 1"
 
+msgid "Remove photo from layer"
+msgstr "Xóa ảnh từ layer"
+
+msgid "Delete File from disk"
+msgstr "Xóa tập tin từ đĩa"
+
+msgid "Copy image path"
+msgstr "Copy đường dẫn hình ảnh"
+
 msgid "Move dialog to the side pane"
 msgstr "Di chuyển hộp thoại để các cửa sổ bên"
 
@@ -14264,11 +14332,9 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr "nút Deleted {0} là một phần của đường {1}"
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
-"Way {0} với {1} các nút có các nút không đầy đủ vì ít nhất một nút làMất "
-"tích trong việc nạp dữ liệu."
 
 msgid ""
 "Relation with external id ''{0}'' refers to a missing primitive with "
@@ -14988,6 +15054,12 @@ msgstr "điều khiển từ xa đã được yêu cầu để mở một tập
 msgid "Do you want to allow this?"
 msgstr "Bạn có muốn cho phép không?"
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr "Xác nhận hành động điều khiển từ xa"
 
@@ -20603,6 +20675,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr "xử lý chất thải / Dumpster"
 
@@ -24603,6 +24681,12 @@ msgstr "Giao thông vận tải công cộng (ÖPNV)"
 msgid "Hike & Bike"
 msgstr "Hike & Bike"
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr "skobbler"
 
@@ -24923,7 +25007,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr "basemap.at Orthofoto"
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -25346,6 +25431,12 @@ msgstr "Estonia Địa chính (Maaamet)"
 msgid "Estonia Forestry (Maaamet)"
 msgstr "Estonia Lâm nghiệp (Maaamet)"
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr "Bano"
 
@@ -25434,9 +25525,6 @@ msgstr ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999-"
 " 1 m"
 
-msgid "Hamburg (40 cm)"
-msgstr "Hamburg (40 cm)"
-
 msgid "Hamburg (20 cm)"
 msgstr "Hamburg (20 cm)"
 
@@ -25464,10 +25552,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -25866,18 +25954,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr "Luxembourg Inspire đường sắt"
-
-msgid "Luxembourg Inspire Roads"
-msgstr "Luxembourg Inspire Đường"
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Niger Delta tháng 10 năm 2012 Landsat"
 
@@ -25901,7 +25977,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -25963,10 +26189,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
-msgstr "Geoportal 2: Ortofotomapa (hình ảnh trên không)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -25975,118 +26201,127 @@ msgstr "Geoportal 2: PRNG (tên địa lý)"
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
-msgstr "Bedzin: Ortofotomapa 2013 (ảnh trên không)"
+msgid "polska.e-mapa.net: Buildings"
+msgstr ""
+
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
+msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
-msgstr "Bedzin: Budynki (tòa nhà)"
+msgid "Będzin: Buildings"
+msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
-msgstr "Bytom: Ortofotomapa 2012 (ảnh trên không)"
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
+msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
-msgstr "Bytom: Budynki (tòa nhà)"
+msgid "Bytom: Buildings"
+msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
-msgstr "Chorzów: Budynki (tòa nhà)"
+msgid "Chorzów: Buildings"
+msgstr ""
+
+msgid "Częstochowa: Buildings"
+msgstr ""
+
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
+msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2011 (ảnh trên không)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
+msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
-msgstr "Gliwice: Ortofotomapa 2013 (ảnh trên không)"
+msgid "Katowice: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
-msgstr "Gliwice: Budynki (tòa nhà)"
+msgid "Katowice: Buildings"
+msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
-msgstr "Katowice: Ortofotomapa (hình ảnh trên không)"
+msgid "Łódź: Buildings"
+msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
-msgstr "Łódź: Ortofotomapa (hình ảnh trên không)"
+msgid "Powiat lubaczowski: Buildings"
+msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
-msgstr "Ruda Slaska: Ortofotomapa (hình ảnh trên không)"
+msgid "Rzeszów: Buildings"
+msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
-msgstr "Rzeszów: Ortofotomapa (hình ảnh trên không)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
-msgstr "Rzeszów: Budynki (tòa nhà)"
+msgid "Siemianowice Śląskie: Buildings"
+msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
-msgstr "Siemianowice Śląskie: Ortofotomapa (hình ảnh trên không)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
+msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2009 (ảnh trên không)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
+msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
-msgstr "Zabrze: Ortofotomapa 2011 (ảnh trên không)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -26223,6 +26458,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr "Kanton Aargau 25cm (AGIS 2011)"
 
@@ -28905,15 +29152,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr "Mapillary"
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -28972,13 +29216,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -29014,15 +29252,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -29155,6 +29390,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -33872,6 +34112,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr "File không thể xóa được!"
 
@@ -35401,9 +35645,6 @@ msgstr "dữ liệu lưu lượng xuất khẩu vào tập tin mạng SUMO."
 msgid "SUMO Export"
 msgstr "SUMO xuất khẩu"
 
-msgid "Export"
-msgstr "xuất khẩu"
-
 msgid "AutoSave LiveData"
 msgstr "Tự động lưu LiveData"
 
diff --git a/i18n/po/wae.po b/i18n/po/wae.po
index e664133..fe3ee78 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-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\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-11-26 05:13+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 05:10+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
 msgstr ""
@@ -952,6 +952,12 @@ msgstr ""
 msgid "Select if the data should be downloaded into a new layer"
 msgstr ""
 
+msgid "Zoom to downloaded data"
+msgstr ""
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr ""
 
@@ -2224,6 +2230,31 @@ msgstr[1] ""
 msgid "Confirmation"
 msgstr ""
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr ""
 
@@ -3027,18 +3058,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr ""
 
-msgid "Decimal Degrees"
-msgstr ""
-
-msgid "deg° min'' sec\""
-msgstr ""
-
-msgid "deg° min'' (Nautical)"
-msgstr ""
-
-msgid "Projected Coordinates"
-msgstr ""
-
 msgctxt "compass"
 msgid "S"
 msgstr ""
@@ -3055,9 +3074,21 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
 msgid "Date of imagery: {0}"
 msgstr ""
 
@@ -8230,12 +8261,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
 
-msgid "Zoom to downloaded data"
-msgstr ""
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9729,6 +9754,12 @@ msgstr ""
 msgid "Load tile"
 msgstr ""
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr ""
 
@@ -9833,8 +9864,8 @@ msgstr ""
 msgid "Description: {0}"
 msgstr ""
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
 msgstr[0] ""
 msgstr[1] ""
 
@@ -9844,6 +9875,9 @@ msgstr ""
 msgid "Length"
 msgstr ""
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr ""
 
@@ -9857,14 +9891,37 @@ msgid_plural "{0} waypoints"
 msgstr[0] ""
 msgstr[1] ""
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
 msgstr[0] ""
 msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr ""
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr ""
 
@@ -9907,6 +9964,16 @@ msgstr ""
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10235,40 +10302,40 @@ msgstr ""
 msgid "Display geotagged images"
 msgstr ""
 
-msgid "Previous"
+msgid "Next"
 msgstr ""
 
-msgid "Show previous Image"
+msgid "Show next Image"
 msgstr ""
 
 msgid "Geoimage: {0}"
 msgstr ""
 
-msgid "Remove photo from layer"
+msgid "Previous"
 msgstr ""
 
-msgid "Delete File from disk"
+msgid "Show previous Image"
 msgstr ""
 
-msgid "Copy image path"
+msgid "Show first Image"
 msgstr ""
 
-msgid "Next"
+msgid "Show last Image"
 msgstr ""
 
-msgid "Show next Image"
+msgid "Center view"
 msgstr ""
 
-msgid "Show first Image"
+msgid "Zoom best fit and 1:1"
 msgstr ""
 
-msgid "Show last Image"
+msgid "Remove photo from layer"
 msgstr ""
 
-msgid "Center view"
+msgid "Delete File from disk"
 msgstr ""
 
-msgid "Zoom best fit and 1:1"
+msgid "Copy image path"
 msgstr ""
 
 msgid "Move dialog to the side pane"
@@ -13355,8 +13422,8 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr ""
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
 msgstr ""
 
 msgid ""
@@ -14019,6 +14086,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr ""
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr ""
 
@@ -19447,6 +19520,12 @@ msgstr ""
 msgid "Recycling Centre"
 msgstr ""
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr ""
 
@@ -23422,6 +23501,12 @@ msgstr ""
 msgid "Hike & Bike"
 msgstr ""
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr ""
 
@@ -23742,7 +23827,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr ""
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24165,6 +24251,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr ""
 
@@ -24251,9 +24343,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr ""
-
 msgid "Hamburg (20 cm)"
 msgstr ""
 
@@ -24281,10 +24370,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24683,18 +24772,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr ""
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24718,7 +24795,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24780,10 +25007,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24792,118 +25019,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Będzin: Buildings"
+msgstr ""
+
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
+
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25040,6 +25276,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
 
@@ -27568,15 +27816,12 @@ msgstr ""
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr ""
 
-msgid "Start Mapillary layer"
+msgid "Open Mapillary layer"
 msgstr ""
 
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer"
-msgstr ""
-
 msgid "Download Mapillary images in current view"
 msgstr ""
 
@@ -27635,13 +27880,7 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr ""
-
-msgid "Upload Mapillary pictures"
-msgstr ""
-
-msgid "Upload pictures."
+msgid "Upload Mapillary images"
 msgstr ""
 
 msgid "Walk mode"
@@ -27677,15 +27916,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
+msgid "Select a directory"
 msgstr ""
 
 msgid "Explore"
 msgstr ""
 
-msgid "Select a directory"
-msgstr ""
-
 msgid "Speed limit"
 msgstr ""
 
@@ -27818,6 +28054,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32244,6 +32485,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr ""
 
@@ -33724,9 +33969,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
-msgid "Export"
-msgstr ""
-
 msgid "AutoSave LiveData"
 msgstr ""
 
diff --git a/i18n/po/zh_CN.po b/i18n/po/zh_CN.po
index 402405c..4a1aa65 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-11-26 00:06+0100\n"
-"PO-Revision-Date: 2017-10-30 15:09+0000\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\n"
+"PO-Revision-Date: 2017-11-28 04:16+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-11-26 05:11+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 05:08+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: zh_CN\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -421,7 +421,7 @@ msgid "Delete the active layer. Does not delete the associated file."
 msgstr "删除活动图层。不删除关联文件。"
 
 msgid "Dialogs panel"
-msgstr ""
+msgstr "对话面板"
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "切换对话框面板,最大化到地图视图"
@@ -958,6 +958,12 @@ msgstr "另一图层"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "如果数据要下载到新的图层里,请选择此项"
 
+msgid "Zoom to downloaded data"
+msgstr "缩放至已下载数据"
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr "选择缩放至整个新下载的数据"
+
 msgid "Download Location"
 msgstr "下载位置"
 
@@ -2224,6 +2230,31 @@ msgstr[0] "您将同时打开<b>{0}</b>个关系编辑器。<br/>要继续吗?
 msgid "Confirmation"
 msgstr "确认"
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr "近期关系列表"
 
@@ -3014,18 +3045,6 @@ msgstr "丢失修订文件“/REVISION”。"
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr "已经注册原型“{0}”的冲突。"
 
-msgid "Decimal Degrees"
-msgstr "十进制经纬度"
-
-msgid "deg° min'' sec\""
-msgstr "度°分''秒\""
-
-msgid "deg° min'' (Nautical)"
-msgstr "度°分''(航海)"
-
-msgid "Projected Coordinates"
-msgstr "投影的坐标"
-
 msgctxt "compass"
 msgid "S"
 msgstr "南"
@@ -3042,9 +3061,21 @@ msgctxt "compass"
 msgid "E"
 msgstr "东"
 
+msgid "deg° min'' sec\""
+msgstr "度°分''秒\""
+
+msgid "Decimal Degrees"
+msgstr "十进制经纬度"
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr "无法作为坐标值解析: ''{0}''"
 
+msgid "deg° min'' (Nautical)"
+msgstr "度°分''(航海)"
+
+msgid "Projected Coordinates"
+msgstr "投影的坐标"
+
 msgid "Date of imagery: {0}"
 msgstr "图像日期: {0}"
 
@@ -4175,7 +4206,7 @@ msgid "Multipolygon is not closed"
 msgstr "多重多边形未封闭"
 
 msgid "Self-intersecting polygon ring"
-msgstr ""
+msgstr "自相交的多边形环"
 
 msgid "Multipolygon rings share node(s)"
 msgstr "多重多边形环共用节点"
@@ -4868,23 +4899,23 @@ msgid "usage"
 msgstr "用法"
 
 msgid "commands"
-msgstr ""
+msgstr "命令"
 
 msgid "launch JOSM (default, performed when no command is specified)"
-msgstr ""
+msgstr "启动JOSM (默认, 无指定命令时执行)"
 
 msgid "render data and save the result to an image file"
-msgstr ""
+msgstr "渲染数据并将结果保存为图片文件"
 
 msgid "convert coordinates from one coordinate reference system to another"
-msgstr ""
+msgstr "将坐标从某一坐标参考系转换至另一种"
 
 msgid ""
 "For details on the {0} and {1} commands, run them with the {2} option."
-msgstr ""
+msgstr "关于{0}和{1}命令, 使用{2}选项运行它们。"
 
 msgid "The remainder of this help page documents the {0} command."
-msgstr ""
+msgstr "帮助页面的剩余部分是{0}命令。"
 
 msgid "options"
 msgstr "选项"
@@ -5317,7 +5348,7 @@ msgid "Shrink"
 msgstr "缩小"
 
 msgid "Show downloaded area"
-msgstr ""
+msgstr "显示已下载区域"
 
 msgid ""
 "<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
@@ -8080,7 +8111,7 @@ msgid ""
 msgstr "<html>图层“{0}”已经有冲突于对象<br>“{1}”。<br>请先调解这个冲突,然后再试一次。</html>"
 
 msgid "Select the currently edited relation"
-msgstr ""
+msgstr "选择当前编辑的关系"
 
 msgid "Select objects for selected relation members"
 msgstr "选择已选定关系成员中的对象"
@@ -8238,12 +8269,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr "<html>每次 JOSM 启动时自动显示“从 OSM 下载”对话框。<br>您可以从文件菜单或工具栏手动打开它。</html>"
 
-msgid "Zoom to downloaded data"
-msgstr "缩放至已下载数据"
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr "选择缩放至整个新下载的数据"
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9761,6 +9786,12 @@ msgstr "元数据 "
 msgid "Load tile"
 msgstr "加载瓦片"
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr "无法创建瓦片源"
 
@@ -9865,9 +9896,10 @@ msgstr "名称:{0}"
 msgid "Description: {0}"
 msgstr "描述:{0}"
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
-msgstr[0] "{0} 条轨迹"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Timespan"
 msgstr "时间跨度"
@@ -9875,6 +9907,9 @@ msgstr "时间跨度"
 msgid "Length"
 msgstr "长度"
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr "长度:{0}"
 
@@ -9886,13 +9921,36 @@ msgid "{0} waypoint"
 msgid_plural "{0} waypoints"
 msgstr[0] "{0} 个路点"
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
-msgstr[0] "{0} 条轨迹, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] "{0} 条轨迹"
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr "保存 GPX 文件"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr "Id"
 
@@ -9935,6 +9993,16 @@ msgstr "保存图层"
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] "{0} 笔记"
@@ -10259,29 +10327,20 @@ msgstr "文件 {0} 有错误"
 msgid "Display geotagged images"
 msgstr "显示有地理标记的图片"
 
-msgid "Previous"
-msgstr "上一幅"
+msgid "Next"
+msgstr "下一幅"
 
-msgid "Show previous Image"
-msgstr "显示前一张图片"
+msgid "Show next Image"
+msgstr "显示下一张图片"
 
 msgid "Geoimage: {0}"
 msgstr "地理照片:{0}"
 
-msgid "Remove photo from layer"
-msgstr "从图层删除相片"
-
-msgid "Delete File from disk"
-msgstr "从磁盘删除文件"
-
-msgid "Copy image path"
-msgstr "复制图像路径"
-
-msgid "Next"
-msgstr "下一幅"
+msgid "Previous"
+msgstr "上一幅"
 
-msgid "Show next Image"
-msgstr "显示下一张图片"
+msgid "Show previous Image"
+msgstr "显示前一张图片"
 
 msgid "Show first Image"
 msgstr "显示第一张图片"
@@ -10295,6 +10354,15 @@ msgstr "置中查看"
 msgid "Zoom best fit and 1:1"
 msgstr "最适合与 1:1 缩放"
 
+msgid "Remove photo from layer"
+msgstr "从图层删除相片"
+
+msgid "Delete File from disk"
+msgstr "从磁盘删除文件"
+
+msgid "Copy image path"
+msgstr "复制图像路径"
+
 msgid "Move dialog to the side pane"
 msgstr "将对话框移动到侧边窗格"
 
@@ -13444,9 +13512,9 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr "删除的节点 {0} 是路径 {1} 的一部分"
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
-msgstr "有 {1} 个节点的路径 {0} 有不完整的节点,因为在加载的数据中至少有一个节点缺失了。"
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
+msgstr ""
 
 msgid ""
 "Relation with external id ''{0}'' refers to a missing primitive with "
@@ -14110,6 +14178,12 @@ msgstr "远程控制已被要求打开一个本地文件。"
 msgid "Do you want to allow this?"
 msgstr "您是否要允许此动作?"
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr "确认远程控制动作"
 
@@ -19556,6 +19630,12 @@ msgstr "垃圾"
 msgid "Recycling Centre"
 msgstr "回收中心"
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr "废物处理/垃圾站"
 
@@ -23535,6 +23615,12 @@ msgstr "公共交通(ÖPNV)"
 msgid "Hike & Bike"
 msgstr "Hike & Bike"
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr "skobbler"
 
@@ -23855,8 +23941,9 @@ msgstr "奥地利基本图,基于政府数据"
 msgid "basemap.at Orthofoto"
 msgstr "basemap.at 正射影像"
 
-msgid "Orthofoto layer provided by basemap.at. "
-msgstr "正射影像图层由basemap.at.提供 "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
+msgstr ""
 
 msgid "Geoimage.at MaxRes"
 msgstr "Geoimage.at 最大分辨率"
@@ -24278,6 +24365,12 @@ msgstr "爱沙尼亚地籍 (Maaamet)"
 msgid "Estonia Forestry (Maaamet)"
 msgstr "爱沙尼亚林业 (Maaamet)"
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr "BANO"
 
@@ -24364,9 +24457,6 @@ msgid ""
 "- 1 m"
 msgstr "韦科尔 - 高原自然保护区正射影像(1999年)(1米)"
 
-msgid "Hamburg (40 cm)"
-msgstr "汉堡(40厘米)"
-
 msgid "Hamburg (20 cm)"
 msgstr "汉堡 (20 厘米)"
 
@@ -24394,12 +24484,12 @@ msgstr "柏林航拍图像 (2016年)"
 msgid "Berlin aerial photograph 2017"
 msgstr "柏林航拍图像 (2017年)"
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
-msgstr "德国铁路VzG线 (2013年11月)"
-
 msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr "德国铁路VzG线 (2015年11月)"
 
+msgid "Deutsche Bahn VzG lines January 2017"
+msgstr ""
+
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
 msgstr "埃尔兰根航拍图像 (2016年)(5.0厘米)"
 
@@ -24796,18 +24886,6 @@ msgstr "geoportail.lu 全图层"
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr "卢森堡 Inspire 铁路"
-
-msgid "Luxembourg Inspire Roads"
-msgstr "卢森堡 Inspire 道路"
-
-msgid "Luxembourg Inspire Water"
-msgstr "卢森堡 Inspire 水域"
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "尼日尔三角洲(2012年10月)(Landsat)"
 
@@ -24831,8 +24909,158 @@ msgstr "LINZ NZ 航拍图像"
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr "LINZ NZ Topo50 无网格地图"
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
-msgstr "斯瓦尔巴特 - 正射影像(2009年/2011年) EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
+msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
 msgstr "imagico.de 授权绘制的OSM图像: 斯瓦尔巴特群岛(拼贴)"
@@ -24893,11 +25121,11 @@ msgstr "其他来源的图像过时且质量较差(真彩色)"
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr "邦阿西楠/布拉干 (菲律宾高分辨率)"
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
-msgstr "Geoportal 2: 航拍图像"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
-msgstr "Geoportal 2: 航拍图像 WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
+msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr "Geoportal 2: PRNG (地理名称)"
@@ -24905,119 +25133,128 @@ msgstr "Geoportal 2: PRNG (地理名称)"
 msgid "Geoportal 2: ISOK hillshade"
 msgstr "Geoportal 2: ISOK 山体阴影"
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
-msgstr "本津: 航拍图像 (2013年)"
+msgid "polska.e-mapa.net: Buildings"
+msgstr ""
+
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
+msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
-msgstr "本津: 建筑"
+msgid "Będzin: Buildings"
+msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
-msgstr "比托姆: 航拍图像(2012年)"
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
+msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr "比托姆: 航拍图像(2014年)"
 
-msgid "Bytom: Budynki (buildings)"
-msgstr "比托姆: 建筑"
+msgid "Bytom: Buildings"
+msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
-msgstr "霍茹夫: 建筑"
+msgid "Chorzów: Buildings"
+msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
-msgstr "琴斯托霍瓦: 建筑"
+msgid "Częstochowa: Buildings"
+msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
-msgstr "琴斯托霍瓦: 航拍图像(2011年)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
+msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
-msgstr "琴斯托霍瓦: 航拍图像(2013年)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
+msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
-msgstr "琴斯托霍瓦: 航拍图像(2014年)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
+msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
-msgstr "格利维采: 航拍图像(2013年)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
+msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
-msgstr "格利维采: 建筑"
+msgid "Gliwice: Buildings"
+msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
-msgstr "卡托维兹: 航拍图像"
+msgid "Katowice: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
-msgstr "卡托维兹: 建筑"
+msgid "Katowice: Buildings"
+msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
-msgstr "罗兹: 建筑"
+msgid "Łódź: Buildings"
+msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
-msgstr "罗兹: 航拍图像"
+msgid "Łódź: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
-msgstr "德比札郡: 建筑"
+msgid "Powiat dębicki: Buildings"
+msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
-msgstr "卢巴丘夫郡: 建筑"
+msgid "Powiat lubaczowski: Buildings"
+msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
-msgstr "万楚特: 建筑"
+msgid "Powiat łańcucki: Buildings"
+msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
-msgstr "波兹南: 建筑"
+msgid "Powiat poznański: Buildings"
+msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
-msgstr "波兹南: 航拍图像"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
-msgstr "罗普奇采-森济舒夫郡: 建筑"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
+msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
-msgstr "热舒夫郡: 建筑"
+msgid "Powiat rzeszowski: Buildings"
+msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
-msgstr "热舒夫郡: 航拍图像"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
-msgstr "斯塔洛瓦沃拉郡: 建筑"
+msgid "Powiat stalowowolski: Buildings"
+msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
-msgstr "波兹南: 航拍图像(2014年)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
+msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
-msgstr "普热梅希尔: 建筑"
+msgid "Przemyśl: Buildings"
+msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
-msgstr "普热梅希尔: 航拍图像"
+msgid "Przemyśl: Ortophotomap (aerial image)"
+msgstr ""
+
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
+msgstr ""
+
+msgid "Rzeszów: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
-msgstr "鲁达希隆斯卡: 航拍图像"
+msgid "Rzeszów: Buildings"
+msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
-msgstr "热舒夫: 航拍图像"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
+msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
-msgstr "热舒夫: 建筑"
+msgid "Siemianowice Śląskie: Buildings"
+msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
-msgstr "希隆斯克地区谢米亚诺维采: 航拍图像"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
+msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
-msgstr "希隆斯克地区谢米亚诺维采: 建筑"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
+msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
-msgstr "希维托赫洛维采: 航拍图像(2008年)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
+msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
-msgstr "希维托赫洛维采: 航拍图像(2009年)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
+msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
-msgstr "希维托赫洛维采: 航拍图像(2012年)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
+msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
-msgstr "扎布热: 航拍图像(2011年)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
+msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
-msgstr "弗罗茨瓦夫: 航拍图像(2015年)"
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
+msgstr ""
 
 msgid "ScanEx IRS"
 msgstr "ScanEx IRS"
@@ -25153,6 +25390,18 @@ msgstr "imagico.de 授权绘制的OSM图像: 亚当桥"
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr "补充其他图像来源中覆盖不完整的部分(真彩色)"
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr "阿尔高州(25厘米)(AGIS 2011年)"
 
@@ -27694,15 +27943,12 @@ msgstr "Mapillary对象层"
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr "显示Mapillary侦测到的地图对象"
 
-msgid "Start Mapillary layer"
-msgstr "启用Mapillary层"
+msgid "Open Mapillary layer"
+msgstr ""
 
 msgid "Mapillary"
 msgstr "Mapillary"
 
-msgid "Create Mapillary layer"
-msgstr "创建Mapillary层"
-
 msgid "Download Mapillary images in current view"
 msgstr "在现有视图下载Mapillary图像"
 
@@ -27761,14 +28007,8 @@ msgid ""
 "issue with the internet connection."
 msgstr "在试图提交修改集合时发生意外。若反复出现,考虑通过帮助菜单报告漏洞。若第一次出现,重试一次,可能是互联网连接问题。"
 
-msgid "Upload pictures"
-msgstr "上传图片"
-
-msgid "Upload Mapillary pictures"
-msgstr "上传Mapillary图像"
-
-msgid "Upload pictures."
-msgstr "上传图片。"
+msgid "Upload Mapillary images"
+msgstr ""
 
 msgid "Walk mode"
 msgstr "步行模式"
@@ -27803,15 +28043,12 @@ msgstr "导出选定图像"
 msgid "Rewrite imported images"
 msgstr "重写已导入图像"
 
-msgid "Select a folder"
-msgstr "选择一个文件夹"
+msgid "Select a directory"
+msgstr "选择文件夹"
 
 msgid "Explore"
 msgstr "浏览"
 
-msgid "Select a directory"
-msgstr "选择文件夹"
-
 msgid "Speed limit"
 msgstr "限速"
 
@@ -27944,6 +28181,11 @@ msgstr "悬停在图标上时预览图像"
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr "启用实验性功能(可能不稳定)"
 
@@ -32479,6 +32721,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr "无法删除文件!"
 
@@ -33963,9 +34209,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr "SUMO 导出"
 
-msgid "Export"
-msgstr "导出"
-
 msgid "AutoSave LiveData"
 msgstr "自动保存即时数据"
 
diff --git a/i18n/po/zh_TW.po b/i18n/po/zh_TW.po
index 7d012cf..31860a2 100644
--- a/i18n/po/zh_TW.po
+++ b/i18n/po/zh_TW.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-11-26 00:06+0100\n"
+"POT-Creation-Date: 2017-12-31 03:42+0100\n"
 "PO-Revision-Date: 2017-10-12 17:07+0000\n"
 "Last-Translator: Supaplex <Unknown>\n"
 "Language-Team: Traditional Chinese\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-11-26 05:11+0000\n"
-"X-Generator: Launchpad (build 18509)\n"
+"X-Launchpad-Export-Date: 2017-12-31 05:08+0000\n"
+"X-Generator: Launchpad (build 18521)\n"
 "Language: zh_TW\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -955,6 +955,12 @@ msgstr "另外的圖層"
 msgid "Select if the data should be downloaded into a new layer"
 msgstr "如果資料要下載到新的圖層裡請選擇此項"
 
+msgid "Zoom to downloaded data"
+msgstr "縮放到下載的資料"
+
+msgid "Select to zoom to entire newly downloaded data."
+msgstr ""
+
 msgid "Download Location"
 msgstr "下載位置"
 
@@ -2220,6 +2226,31 @@ msgstr[0] "你正要同時開啟 <b>{0}</b> 個不同的關聯編輯器,<br/>
 msgid "Confirmation"
 msgstr "確認"
 
+msgid "Export GPX file starting from first member"
+msgstr ""
+
+msgid "Export GPX file starting from last member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from first member"
+msgstr ""
+
+msgid "Convert to GPX layer starting from last member"
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"first member(s), successively continuing to the last."
+msgstr ""
+
+msgid ""
+"Flatten this relation to a single gpx track recursively, starting with the "
+"last member(s), successively continuing to the first."
+msgstr ""
+
+msgid "Selected Relations"
+msgstr ""
+
 msgid "List of recent relations"
 msgstr "最近處理過的關聯清單"
 
@@ -3008,18 +3039,6 @@ msgstr ""
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr "已經註冊原型「{0}」的衝突。"
 
-msgid "Decimal Degrees"
-msgstr "十進位經緯度"
-
-msgid "deg° min'' sec\""
-msgstr "度° 分'' 秒\""
-
-msgid "deg° min'' (Nautical)"
-msgstr "度° 分'' (航海)"
-
-msgid "Projected Coordinates"
-msgstr "投影的坐標"
-
 msgctxt "compass"
 msgid "S"
 msgstr "南"
@@ -3036,9 +3055,21 @@ msgctxt "compass"
 msgid "E"
 msgstr "東"
 
+msgid "deg° min'' sec\""
+msgstr "度° 分'' 秒\""
+
+msgid "Decimal Degrees"
+msgstr "十進位經緯度"
+
 msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
+msgid "deg° min'' (Nautical)"
+msgstr "度° 分'' (航海)"
+
+msgid "Projected Coordinates"
+msgstr "投影的坐標"
+
 msgid "Date of imagery: {0}"
 msgstr "影像日期:{0}"
 
@@ -8205,12 +8236,6 @@ msgid ""
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr "<html>每次 JOSM 啟動時自動顯示「從 OSM 下載」對話盒。<br>你可以從檔案選單或工具列手動開啟它。</html>"
 
-msgid "Zoom to downloaded data"
-msgstr "縮放到下載的資料"
-
-msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
-
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
@@ -9720,6 +9745,12 @@ msgstr ""
 msgid "Load tile"
 msgstr "載入圖磚"
 
+msgid "Get tile status"
+msgstr ""
+
+msgid "Force tile rendering"
+msgstr ""
+
 msgid "Failed to create tile source"
 msgstr "無法建立圖磚來源"
 
@@ -9824,9 +9855,10 @@ msgstr "名稱:{0}"
 msgid "Description: {0}"
 msgstr "描述:{0}"
 
-msgid "{0} track"
-msgid_plural "{0} tracks"
-msgstr[0] "{0} 個軌跡"
+msgid "{0} track, {1} track segments"
+msgid_plural "{0} tracks, {1} track segments"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Timespan"
 msgstr "時間跨度"
@@ -9834,6 +9866,9 @@ msgstr "時間跨度"
 msgid "Length"
 msgstr "長度"
 
+msgid "Number of<br/>Segments"
+msgstr ""
+
 msgid "Length: {0}"
 msgstr "長度:{0}"
 
@@ -9845,13 +9880,36 @@ msgid "{0} waypoint"
 msgid_plural "{0} waypoints"
 msgstr[0] "{0} 航點"
 
-msgid "{0} track, "
-msgid_plural "{0} tracks, "
-msgstr[0] "{0} 個軌跡, "
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] "{0} 個軌跡"
+
+msgid " ({0} segment)"
+msgid_plural " ({0} segments)"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "Save GPX file"
 msgstr "儲存 GPX 檔案"
 
+msgid "Collect segments of all tracks and combine in a single track."
+msgstr ""
+
+msgid "Combine tracks of this layer"
+msgstr ""
+
+msgid "Split multiple track segments of one track into multiple tracks."
+msgstr ""
+
+msgid "Split track segments to tracks"
+msgstr ""
+
+msgid "Split the tracks of this layer to one new layer each."
+msgstr ""
+
+msgid "Split tracks to new layers"
+msgstr ""
+
 msgid "Id"
 msgstr "ID"
 
@@ -9894,6 +9952,16 @@ msgstr "儲存圖層"
 msgid "Trying to set a read only data layer as edit layer"
 msgstr ""
 
+msgid ""
+"Trying to delete the layer with background upload. Please wait until the "
+"upload is finished."
+msgstr ""
+
+msgid ""
+"A background upload is already in progress. Cannot reset state until the "
+"upload is finished."
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] "{0} 個註解"
@@ -10218,29 +10286,20 @@ msgstr "檔案 {0} 有錯誤"
 msgid "Display geotagged images"
 msgstr "顯示有地理標記的圖片"
 
-msgid "Previous"
-msgstr "上一幅"
+msgid "Next"
+msgstr "下一幅"
 
-msgid "Show previous Image"
-msgstr "顯示前一張圖片"
+msgid "Show next Image"
+msgstr "顯示下一張圖片"
 
 msgid "Geoimage: {0}"
 msgstr "地理照片:{0}"
 
-msgid "Remove photo from layer"
-msgstr "從圖層移除相片"
-
-msgid "Delete File from disk"
-msgstr "從磁碟刪除檔案"
-
-msgid "Copy image path"
-msgstr "複製影像目錄"
-
-msgid "Next"
-msgstr "下一幅"
+msgid "Previous"
+msgstr "上一幅"
 
-msgid "Show next Image"
-msgstr "顯示下一張圖片"
+msgid "Show previous Image"
+msgstr "顯示前一張圖片"
 
 msgid "Show first Image"
 msgstr "顯示第一個影像"
@@ -10254,6 +10313,15 @@ msgstr "置中檢視"
 msgid "Zoom best fit and 1:1"
 msgstr "最適與 1:1 縮放"
 
+msgid "Remove photo from layer"
+msgstr "從圖層移除相片"
+
+msgid "Delete File from disk"
+msgstr "從磁碟刪除檔案"
+
+msgid "Copy image path"
+msgstr "複製影像目錄"
+
 msgid "Move dialog to the side pane"
 msgstr "將對話盒移至側邊窗格"
 
@@ -13395,9 +13463,9 @@ msgid "Deleted node {0} is part of way {1}"
 msgstr "刪除的節點 {0} 是路徑 {1} 的一部分"
 
 msgid ""
-"Way {0} with {1} nodes has incomplete nodes because at least one node was "
-"missing in the loaded data."
-msgstr "有 {1} 個節點的路徑 {0} 有不完整的節點,因為在載入的資料中至少有一個節點遺失了。"
+"Way {0} with {1} nodes is incomplete because at least one node was missing "
+"in the loaded data."
+msgstr ""
 
 msgid ""
 "Relation with external id ''{0}'' refers to a missing primitive with "
@@ -14061,6 +14129,12 @@ msgstr ""
 msgid "Do you want to allow this?"
 msgstr "你是否要允許這個?"
 
+msgid "Yes, always"
+msgstr ""
+
+msgid "Yes, once"
+msgstr ""
+
 msgid "Confirm Remote Control action"
 msgstr "確認遠端控制動作"
 
@@ -19497,6 +19571,12 @@ msgstr "一般廢棄物"
 msgid "Recycling Centre"
 msgstr "回收中心"
 
+msgid "trash"
+msgstr ""
+
+msgid "dog_excrement"
+msgstr ""
+
 msgid "Waste Disposal/Dumpster"
 msgstr "垃圾子車/垃圾集中點"
 
@@ -23472,6 +23552,12 @@ msgstr "大眾運輸 (ÖPNV)"
 msgid "Hike & Bike"
 msgstr "登山健行與自行車"
 
+msgid "OpenSnowMap overlay"
+msgstr ""
+
+msgid "Overlay imagery for piste mapping in OSM. Updated daily."
+msgstr ""
+
 msgid "skobbler"
 msgstr "skobbler"
 
@@ -23792,7 +23878,8 @@ msgstr ""
 msgid "basemap.at Orthofoto"
 msgstr "奧地利 basemap.at 正射影像"
 
-msgid "Orthofoto layer provided by basemap.at. "
+msgid ""
+"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery."
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
@@ -24215,6 +24302,12 @@ msgstr ""
 msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
+msgid "Nordic snowmobile overlay"
+msgstr ""
+
+msgid "Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)"
+msgstr ""
+
 msgid "BANO"
 msgstr "BANO"
 
@@ -24301,9 +24394,6 @@ msgid ""
 "- 1 m"
 msgstr ""
 
-msgid "Hamburg (40 cm)"
-msgstr "漢堡 (40 cm)"
-
 msgid "Hamburg (20 cm)"
 msgstr "漢堡 (20 cm)"
 
@@ -24331,10 +24421,10 @@ msgstr ""
 msgid "Berlin aerial photograph 2017"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2013"
+msgid "Deutsche Bahn VzG lines Nov 2015"
 msgstr ""
 
-msgid "Deutsche Bahn VzG lines Nov 2015"
+msgid "Deutsche Bahn VzG lines January 2017"
 msgstr ""
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
@@ -24733,18 +24823,6 @@ msgstr ""
 msgid "geoportail.lu ortho latest"
 msgstr ""
 
-msgid "geoportail.lu ortho 2016"
-msgstr ""
-
-msgid "Luxembourg Inspire Railway"
-msgstr ""
-
-msgid "Luxembourg Inspire Roads"
-msgstr ""
-
-msgid "Luxembourg Inspire Water"
-msgstr "盧森堡Inspire Water"
-
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -24768,7 +24846,157 @@ msgstr ""
 msgid "LINZ NZ Topo50 Gridless Maps"
 msgstr ""
 
-msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
+msgid "Kartverket N50 topo"
+msgstr ""
+
+msgid "Topographic map N50, equivalent to Norway 1:50.000 paper map series."
+msgstr ""
+
+msgid "Kartverket Hillshade overlay"
+msgstr ""
+
+msgid "Hillshade for Norway"
+msgstr ""
+
+msgid "Kartverket Nautical Charts"
+msgstr ""
+
+msgid ""
+"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). "
+"Raster representation of paper charts. Updated biweekly."
+msgstr ""
+
+msgid "Kartverket Road Network overlay"
+msgstr ""
+
+msgid ""
+"Norwegian road network from the National Road database (NVDB), also used in "
+"Vbase and Elveg. Colours represent national, county, municipal, private and "
+"forest roads + footways/cycleways."
+msgstr ""
+
+msgid "Kartverket Trails overlay"
+msgstr ""
+
+msgid ""
+"Trails from the Norwegian database of `Tur og Friluftsruter´. Selectable "
+"categories for foot, bike and ski trails."
+msgstr ""
+
+msgid "Kartverket Place Names overlay"
+msgstr ""
+
+msgid ""
+"Official Norwegian place names from the SSR database. Selectable categories."
+msgstr ""
+
+msgid "MTBmap.no"
+msgstr ""
+
+msgid ""
+"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)"
+msgstr ""
+
+msgid "Kartverket DTM Digital Terrain Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Terrain Model (DTM) "
+"projects, i.e. earth surface without trees, buildings and other objects. "
+"Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket DOM Digital Surface Model"
+msgstr ""
+
+msgid ""
+"Shaded relief representation of open Norwegian Digital Surface Model (DOM) "
+"projects, i.e. earth surface including trees, buildings and other objects on "
+"top of it. Please visit hoydedata.no to determine project year."
+msgstr ""
+
+msgid "Kartverket Historic maps"
+msgstr ""
+
+msgid "Historic maps - for the time being `Amtskartserien´ 1826-1917."
+msgstr ""
+
+msgid "Kartverket Economic Maps (historic)"
+msgstr ""
+
+msgid ""
+"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk "
+"kartverk´). Available from zoom 16. Please correct local imagery offset."
+msgstr ""
+
+msgid "Kartverket Administrative Boundaries overlay"
+msgstr ""
+
+msgid ""
+"Official administrative boundaries at the national, county and municipality "
+"levels"
+msgstr ""
+
+msgid "Kartverket Cadastral overlay"
+msgstr ""
+
+msgid ""
+"Real estate boundaries from the official land register (`matrikkelen´). "
+"Monthly update."
+msgstr ""
+
+msgid "Kartverket Aviation Obstructions overlay"
+msgstr ""
+
+msgid ""
+"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in "
+"urban areas (e.g. masts, towers, high buildings, power lines)"
+msgstr ""
+
+msgid "NVE Electricity Network overlay"
+msgstr ""
+
+msgid ""
+"Power lines (high voltage network) including transformers, submarine cables "
+"and pylons. Local distribution network is not included."
+msgstr ""
+
+msgid "NVE Hydropower Plants overlay"
+msgstr ""
+
+msgid ""
+"Hydropower plants including waterways (tunnel, canal, pipeline) and dams"
+msgstr ""
+
+msgid "NVE Wind Power Plants overlay"
+msgstr ""
+
+msgid ""
+"Wind power turbines, farms and concession areas. Red colour = concession "
+"denied."
+msgstr ""
+
+msgid "NPD Offshore Installations overlay"
+msgstr ""
+
+msgid ""
+"Production platforms and oil/natural gas fields on the Norwegian continental "
+"shelf"
+msgstr ""
+
+msgid "Miljødirektoratet Protected Areas overlay"
+msgstr ""
+
+msgid ""
+"Norwegian national parks, nature reserves and other protected areas and "
+"objects from Naturbase, including Svalbard/Spitsbergen"
+msgstr ""
+
+msgid "NP Svalbard Orthophoto"
+msgstr ""
+
+msgid ""
+"Orthophoto for Svalbard/Spitsbergen from the Norwegian Polar Institute"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
@@ -24830,10 +25058,10 @@ msgstr ""
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Geoportal 2: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgid "Geoportal 2: Orthophotomap (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
@@ -24842,118 +25070,127 @@ msgstr ""
 msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "polska.e-mapa.net: Buildings"
+msgstr ""
+
+msgid "Będzin: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Będzin: Buildings"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Bytom: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Buildings"
+msgstr ""
+
+msgid "Chorzów: Buildings"
+msgstr ""
+
+msgid "Częstochowa: Buildings"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Budynki (buildings)"
+msgid "Częstochowa: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Częstochowa: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgid "Gliwice: Orthophotomap 2013 (aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgid "Gliwice: Buildings"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Katowice: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Katowice: Buildings"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Łódź: Buildings"
 msgstr ""
 
-msgid "Katowice: Budynki (buildings)"
+msgid "Łódź: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Łódź: Budynki (buildings)"
+msgid "Powiat dębicki: Buildings"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat lubaczowski: Buildings"
 msgstr ""
 
-msgid "Powiat dębicki: Budynki (buildings)"
+msgid "Powiat łańcucki: Buildings"
 msgstr ""
 
-msgid "Powiat lubaczowski: Budynki (buildings)"
+msgid "Powiat poznański: Buildings"
 msgstr ""
 
-msgid "Powiat łańcucki: Budynki (buildings)"
+msgid "Powiat poznański: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat poznański: Budynki (buildings)"
+msgid "Powiat ropczycko-sędziszowski: Buildings"
 msgstr ""
 
-msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgid "Powiat rzeszowski: Buildings"
 msgstr ""
 
-msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
+msgid "Powiat rzeszowski: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Powiat rzeszowski: Budynki (buildings)"
+msgid "Powiat stalowowolski: Buildings"
 msgstr ""
 
-msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgid "Poznań: Orthophotomap 2014 (aerial image)"
 msgstr ""
 
-msgid "Powiat stalowowolski: Budynki (buildings)"
+msgid "Przemyśl: Buildings"
 msgstr ""
 
-msgid "Poznań: Ortofotomapa 2014 (aerial image)"
+msgid "Przemyśl: Ortophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Budynki (buildings)"
+msgid "Ruda Śląska: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Rzeszów: Buildings"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Siemianowice Śląskie: Orthophotomap (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Siemianowice Śląskie: Buildings"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2008 (aerial image)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgid "Świętochłowice: Orthophotomap 2009 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgid "Świętochłowice: Orthophotomap 2012 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Zabrze: Orthophotomap 2011 (aerial image)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgid "Wrocław: Orthophotomap 2015 (aerial image)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Ortofotos DGRF 2004-2006 (WMS)"
 msgstr ""
 
-msgid "Wrocław: Ortofotomapa 2015 (aerial image)"
+msgid "Ortofotos Litoral DGT 2014-2015 (WMS)"
 msgstr ""
 
 msgid "ScanEx IRS"
@@ -25090,6 +25327,18 @@ msgstr ""
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
 
+msgid "Economic Maps (historic)"
+msgstr ""
+
+msgid "Scan of ´Economic maps´ ca 1950-1980"
+msgstr ""
+
+msgid "Snowmobile map Sweden"
+msgstr ""
+
+msgid "Snowmobile trails"
+msgstr ""
+
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr "瑞士 阿爾高州 25cm (AGIS 2011)"
 
@@ -27619,15 +27868,12 @@ msgstr "Mapillary 物件圖層"
 msgid "Displays the layer displaying the map objects detected by Mapillary"
 msgstr "顯示 Mapillary 偵測出來的地圖物件的圖層"
 
-msgid "Start Mapillary layer"
-msgstr "開始 Mapillary 圖層"
+msgid "Open Mapillary layer"
+msgstr ""
 
 msgid "Mapillary"
 msgstr "Mapillary"
 
-msgid "Create Mapillary layer"
-msgstr "建立 Mapillary 圖層"
-
 msgid "Download Mapillary images in current view"
 msgstr "依據目前檢視下載 Mapillary 影像"
 
@@ -27686,14 +27932,8 @@ msgid ""
 "issue with the internet connection."
 msgstr ""
 
-msgid "Upload pictures"
-msgstr "已上傳圖片"
-
-msgid "Upload Mapillary pictures"
-msgstr "上傳 Mapillary 圖片"
-
-msgid "Upload pictures."
-msgstr "已上傳的圖片。"
+msgid "Upload Mapillary images"
+msgstr ""
 
 msgid "Walk mode"
 msgstr ""
@@ -27728,15 +27968,12 @@ msgstr ""
 msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Select a folder"
-msgstr "選取資料夾"
+msgid "Select a directory"
+msgstr "選取目錄"
 
 msgid "Explore"
 msgstr "瀏覽"
 
-msgid "Select a directory"
-msgstr "選取目錄"
-
 msgid "Speed limit"
 msgstr "速限"
 
@@ -27869,6 +28106,11 @@ msgstr ""
 msgid "Cut off sequences at download bounds"
 msgstr ""
 
+msgid ""
+"When opening Mapillary image in web browser, show the blur editor instead of "
+"the image viewer"
+msgstr ""
+
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
 
@@ -32368,6 +32610,10 @@ msgstr ""
 msgid "Unable to process file ''{0}'':"
 msgstr ""
 
+msgid ""
+"Writing position information to image files... Estimated time left: {0}"
+msgstr ""
+
 msgid "File could not be deleted!"
 msgstr "無法刪除檔案!"
 
@@ -33846,9 +34092,6 @@ msgstr ""
 msgid "SUMO Export"
 msgstr "匯出 SUMO"
 
-msgid "Export"
-msgstr "匯出"
-
 msgid "AutoSave LiveData"
 msgstr "自動儲存即時資料"
 
diff --git a/images/presets/misc/angles.svg b/images/presets/misc/angles.svg
new file mode 100644
index 0000000..1d363cc
--- /dev/null
+++ b/images/presets/misc/angles.svg
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="462.02859" height="358.99542" id="svg2" version="1.1" inkscape:version="0.48.0 r9654" sodipodi:docname="angles.svg">
+  <defs id="defs4"/>
+  <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="0.7" inkscape:cx="195.86797" inkscape:cy="138.97225" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="false" inkscape:window-width="1280" inkscape:window-height="1005" inkscape:window-x="-4" inkscape:window-y="-4" inkscape:window-maximized="1" fit-margin-top="10" fit-margin-left="10" fit-margin-right="10" fit [...]
+  <metadata id="metadata7">
+    <rdf:RDF>
+      <cc:Work rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+        <dc:title/>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" transform="translate(-105.04618,-255.61005)">
+    <path style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" d="m 213.75586,434.71265 270.20928,0" id="path2985" inkscape:connector-curvature="0"/>
+    <path inkscape:connector-curvature="0" id="path2987" d="m 348.8605,299.60801 0,270.20928" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"/>
+    <path style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="M 444.39391,339.17924 253.32709,530.24606" id="path2989" inkscape:connector-curvature="0"/>
+    <path inkscape:connector-curvature="0" id="path2991" d="M 444.39391,530.24606 253.32709,339.17924" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"/>
+    <path style="fill:none;stroke:#999999;stroke-width:0.85919064px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="m 440.50829,471.81712 -185.153,-74.20894" id="path2993" inkscape:connector-curvature="0"/>
+    <path inkscape:connector-curvature="0" id="path2995" d="m 387.15644,526.41095 -78.4493,-183.3966" style="fill:none;stroke:#999999;stroke-width:0.85919064px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"/>
+    <path style="fill:none;stroke:#999999;stroke-width:0.85919064px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="M 310.82732,527.28916 385.03626,342.13614" id="path2997" inkscape:connector-curvature="0"/>
+    <path inkscape:connector-curvature="0" id="path2999" d="m 256.23349,473.93731 183.3966,-78.44932" style="fill:none;stroke:#999999;stroke-width:0.85919064px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"/>
+    <text xml:space="preserve" style="font-size:28px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial" x="321.89999" y="285.73505" id="text3769" sodipodi:linespacing="125%"><tspan sodipodi:role="line" id="tspan3771" x="321.89999" y="285.73505">0, N</tspan></text>
+    <text xml:space="preserve" style="font-size:28px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial" x="446.97031" y="330.67932" id="text3773" sodipodi:linespacing="125%"><tspan sodipodi:role="line" id="tspan3775" x="446.97031" y="330.67932">45, NE</tspan></text>
+    <text xml:space="preserve" style="font-size:28px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial" x="493.19977" y="442.94144" id="text3777" sodipodi:linespacing="125%"><tspan sodipodi:role="line" id="tspan3779" x="493.19977" y="442.94144">90, E</tspan></text>
+    <text xml:space="preserve" style="font-size:28px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial" x="446.79114" y="555.69635" id="text3781" sodipodi:linespacing="125%"><tspan sodipodi:role="line" id="tspan3783" x="446.79114" y="555.69635">135, SE</tspan></text>
+    <text xml:space="preserve" style="font-size:28px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial" x="306.49017" y="600.64063" id="text3785" sodipodi:linespacing="125%"><tspan sodipodi:role="line" id="tspan3787" x="306.49017" y="600.64063">180, S</tspan></text>
+    <text xml:space="preserve" style="font-size:28px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial" x="145.76224" y="556.48486" id="text3789" sodipodi:linespacing="125%"><tspan sodipodi:role="line" id="tspan3791" x="145.76224" y="556.48486">225, SW</tspan></text>
+    <text xml:space="preserve" style="font-size:28px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial" x="114.22587" y="443.13858" id="text3793" sodipodi:linespacing="125%"><tspan sodipodi:role="line" id="tspan3795" x="114.22587" y="443.13858">270, W</tspan></text>
+    <text xml:space="preserve" style="font-size:28px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial" x="142.53693" y="328.31384" id="text3797" sodipodi:linespacing="125%"><tspan sodipodi:role="line" id="tspan3799" x="142.53693" y="328.31384">315, NW</tspan></text>
+    <text xml:space="preserve" style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#666666;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial" x="359.17023" y="331.46783" id="text3801" sodipodi:linespacing="125%"><tspan sodipodi:role="line" id="tspan3803" x="359.17023" y="331.46783">22, NNE</tspan></text>
+    <text xml:space="preserve" style="font-size:28px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial" x="461.66339" y="381.14304" id="text3805" sodipodi:linespacing="125%"><tspan sodipodi:role="line" id="tspan3807" x="461.66339" y="381.14304"/></text>
+    <text sodipodi:linespacing="125%" id="text3809" y="395.53311" x="448.94135" style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#666666;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial" xml:space="preserve"><tspan y="395.53311" x="448.94135" id="tspan3811" sodipodi:role="line">67, ENE</tspan></text>
+    <text xml:space="preserve" style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#666666;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial" x="447.68707" y="484.23892" id="text3813" sodipodi:linespacing="125%"><tspan sodipodi:role="line" id="tspan3815" x="447.68707" y="484.23892">112, ESE</tspan></text>
+    <text sodipodi:linespacing="125%" id="text3817" y="550.4726" x="357.73676" style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#666666;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial" xml:space="preserve"><tspan y="550.4726" x="357.73676" id="tspan3819" sodipodi:role="line">157, SSE</tspan></text>
+    <text xml:space="preserve" style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#666666;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial" x="256.3187" y="549.38843" id="text3821" sodipodi:linespacing="125%"><tspan sodipodi:role="line" id="tspan3823" x="256.3187" y="549.38843">202, SSW</tspan></text>
+    <text sodipodi:linespacing="125%" id="text3825" y="490.54694" x="152.39204" style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#666666;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial" xml:space="preserve"><tspan y="490.54694" x="152.39204" id="tspan3827" sodipodi:role="line">247, WSW</tspan></text>
+    <text xml:space="preserve" style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#666666;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial" x="150.95857" y="392.0835" id="text3829" sodipodi:linespacing="125%"><tspan sodipodi:role="line" id="tspan3831" x="150.95857" y="392.0835">292, WNW</tspan></text>
+    <text sodipodi:linespacing="125%" id="text3833" y="330.77792" x="252.0183" style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#666666;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial" xml:space="preserve"><tspan y="330.77792" x="252.0183" id="tspan3835" sodipodi:role="line">337, NNW</tspan></text>
+  </g>
+<style id="stylish-2" class="stylish" type="text/css">@namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul);
+.findbar-container > *{
+  display:-moz-box!important;
+}
+.findbar-container .findbar-textbox{
+  width:450px!important;
+}</style></svg>
\ No newline at end of file
diff --git a/src/javax/json/EmptyArray.java b/src/javax/json/EmptyArray.java
new file mode 100644
index 0000000..03afdbe
--- /dev/null
+++ b/src/javax/json/EmptyArray.java
@@ -0,0 +1,136 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package javax.json;
+
+import java.io.Serializable;
+import java.util.AbstractList;
+import java.util.Collections;
+import java.util.List;
+import java.util.RandomAccess;
+
+/**
+ * Private implementation of immutable {@link JsonArray}.
+ *
+ * @author Lukas Jungmann
+ */
+final class EmptyArray extends AbstractList<JsonValue> implements JsonArray, Serializable, RandomAccess {
+
+    private static final long serialVersionUID = 7295439472061642859L;
+
+    @Override
+    public JsonValue get(int index) {
+        throw new IndexOutOfBoundsException("Index: " + index);
+    }
+
+    @Override
+    public int size() {
+        return 0;
+    }
+
+    @Override
+    public JsonObject getJsonObject(int index) {
+        return (JsonObject) get(index);
+    }
+
+    @Override
+    public JsonArray getJsonArray(int index) {
+        return (JsonArray) get(index);
+    }
+
+    @Override
+    public JsonNumber getJsonNumber(int index) {
+        return (JsonNumber) get(index);
+    }
+
+    @Override
+    public JsonString getJsonString(int index) {
+        return (JsonString) get(index);
+    }
+
+    @Override
+    public <T extends JsonValue> List<T> getValuesAs(Class<T> clazz) {
+        return Collections.emptyList();
+    }
+
+    @Override
+    public String getString(int index) {
+        return getJsonString(index).getString();
+    }
+
+    @Override
+    public String getString(int index, String defaultValue) {
+        return defaultValue;
+    }
+
+    @Override
+    public int getInt(int index) {
+        return getJsonNumber(index).intValue();
+    }
+
+    @Override
+    public int getInt(int index, int defaultValue) {
+        return defaultValue;
+    }
+
+    @Override
+    public boolean getBoolean(int index) {
+        return get(index) == JsonValue.TRUE;
+    }
+
+    @Override
+    public boolean getBoolean(int index, boolean defaultValue) {
+        return defaultValue;
+    }
+
+    @Override
+    public boolean isNull(int index) {
+        return get(index) == JsonValue.NULL;
+    }
+
+    @Override
+    public ValueType getValueType() {
+        return ValueType.ARRAY;
+    }
+
+    // Preserves singleton property
+    private Object readResolve() {
+        return JsonValue.EMPTY_JSON_ARRAY;
+    }
+}
diff --git a/src/javax/json/EmptyObject.java b/src/javax/json/EmptyObject.java
new file mode 100644
index 0000000..d7f4d02
--- /dev/null
+++ b/src/javax/json/EmptyObject.java
@@ -0,0 +1,126 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.json;
+
+import java.io.Serializable;
+import java.util.AbstractMap;
+import java.util.Collections;
+import java.util.Set;
+
+/**
+ * Private implementation of immutable {@link JsonObject}.
+ *
+ * @author Lukas Jungmann
+ */
+final class EmptyObject extends AbstractMap<String, JsonValue> implements JsonObject, Serializable {
+
+    private static final long serialVersionUID = -1461653546889072583L;
+
+    @Override
+    public Set<Entry<String, JsonValue>> entrySet() {
+        return Collections.<Entry<String, JsonValue>>emptySet();
+    }
+
+    @Override
+    public JsonArray getJsonArray(String name) {
+        return (JsonArray) get(name);
+    }
+
+    @Override
+    public JsonObject getJsonObject(String name) {
+        return (JsonObject) get(name);
+    }
+
+    @Override
+    public JsonNumber getJsonNumber(String name) {
+        return (JsonNumber) get(name);
+    }
+
+    @Override
+    public JsonString getJsonString(String name) {
+        return (JsonString) get(name);
+    }
+
+    @Override
+    public String getString(String name) {
+        return getJsonString(name).getString();
+    }
+
+    @Override
+    public String getString(String name, String defaultValue) {
+        return defaultValue;
+    }
+
+    @Override
+    public int getInt(String name) {
+        return getJsonNumber(name).intValue();
+    }
+
+    @Override
+    public int getInt(String name, int defaultValue) {
+        return defaultValue;
+    }
+
+    @Override
+    public boolean getBoolean(String name) {
+        throw new NullPointerException();
+    }
+
+    @Override
+    public boolean getBoolean(String name, boolean defaultValue) {
+        return defaultValue;
+    }
+
+    @Override
+    public boolean isNull(String name) {
+        throw new NullPointerException();
+    }
+
+    @Override
+    public ValueType getValueType() {
+        return ValueType.OBJECT;
+    }
+
+    // Preserves singleton property
+    private Object readResolve() {
+        return JsonValue.EMPTY_JSON_OBJECT;
+    }
+}
diff --git a/src/javax/json/Json.java b/src/javax/json/Json.java
index 2009b16..ad9a63d 100644
--- a/src/javax/json/Json.java
+++ b/src/javax/json/Json.java
@@ -1,285 +1,544 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2011-2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json;
-
-import javax.json.spi.JsonProvider;
-import javax.json.stream.JsonGenerator;
-import javax.json.stream.JsonGeneratorFactory;
-import javax.json.stream.JsonParser;
-import javax.json.stream.JsonParserFactory;
-import java.io.*;
-import java.util.Map;
-
-/**
- * Factory class for creating JSON processing objects.
- * This class provides the most commonly used methods for creating these
- * objects and their corresponding factories. The factory classes provide
- * all the various ways to create these objects.
- *
- * <p>
- * The methods in this class locate a provider instance using the method
- * {@link JsonProvider#provider()}. This class uses the provider instance
- * to create JSON processing objects.
- *
- * <p>
- * The following example shows how to create a JSON parser to parse
- * an empty array:
- * <pre>
- * <code>
- * StringReader reader = new StringReader("[]");
- * JsonParser parser = Json.createParser(reader);
- * </code>
- * </pre>
- *
- * <p>
- * All the methods in this class are safe for use by multiple concurrent
- * threads.
- *
- * @author Jitendra Kotamraju
- */
-public class Json {
-
-    private Json() {
-    }
-
-    /**
-     * Creates a JSON parser from a character stream.
-     *
-     * @param reader i/o reader from which JSON is to be read
-     * @return a JSON parser
-     */
-    public static JsonParser createParser(Reader reader) {
-        return JsonProvider.provider().createParser(reader);
-    }
-
-    /**
-     * Creates a JSON parser from a byte stream.
-     * The character encoding of the stream is determined as specified in 
-     * <a href="http://tools.ietf.org/rfc/rfc4627.txt">RFC 4627</a>.
-     *
-     * @param in i/o stream from which JSON is to be read
-     * @throws JsonException if encoding cannot be determined
-     *         or i/o error (IOException would be cause of JsonException)
-     * @return a JSON parser
-     */
-    public static JsonParser createParser(InputStream in) {
-        return JsonProvider.provider().createParser(in);
-    }
-
-    /**
-     * Creates a JSON generator for writing JSON to a character stream.
-     *
-     * @param writer a i/o writer to which JSON is written
-     * @return a JSON generator
-     */
-    public static JsonGenerator createGenerator(Writer writer) {
-        return JsonProvider.provider().createGenerator(writer);
-    }
-
-    /**
-     * Creates a JSON generator for writing JSON to a byte stream.
-     *
-     * @param out i/o stream to which JSON is written
-     * @return a JSON generator
-     */
-    public static JsonGenerator createGenerator(OutputStream out) {
-        return JsonProvider.provider().createGenerator(out);
-    }
-
-    /**
-     * Creates a parser factory for creating {@link JsonParser} objects.
-     *
-     * @return JSON parser factory.
-     *
-    public static JsonParserFactory createParserFactory() {
-        return JsonProvider.provider().createParserFactory();
-    }
-     */
-
-    /**
-     * Creates a parser factory for creating {@link JsonParser} objects.
-     * The factory is configured with the specified map of provider specific
-     * configuration properties. Provider implementations should ignore any
-     * unsupported configuration properties specified in the map.
-     *
-     * @param config a map of provider specific properties to configure the
-     *               JSON parsers. The map may be empty or null
-     * @return JSON parser factory
-     */
-    public static JsonParserFactory createParserFactory(Map<String, ?> config) {
-        return JsonProvider.provider().createParserFactory(config);
-    }
-
-    /**
-     * Creates a generator factory for creating {@link JsonGenerator} objects.
-     *
-     * @return JSON generator factory
-     *
-    public static JsonGeneratorFactory createGeneratorFactory() {
-        return JsonProvider.provider().createGeneratorFactory();
-    }
-    */
-
-    /**
-     * Creates a generator factory for creating {@link JsonGenerator} objects.
-     * The factory is configured with the specified map of provider specific
-     * configuration properties. Provider implementations should ignore any
-     * unsupported configuration properties specified in the map.
-     *
-     * @param config a map of provider specific properties to configure the
-     *               JSON generators. The map may be empty or null
-     * @return JSON generator factory
-     */
-    public static JsonGeneratorFactory createGeneratorFactory(
-            Map<String, ?> config) {
-        return JsonProvider.provider().createGeneratorFactory(config);
-    }
-
-    /**
-     * Creates a JSON writer to write a
-     * JSON {@link JsonObject object} or {@link JsonArray array}
-     * structure to the specified character stream.
-     *
-     * @param writer to which JSON object or array is written
-     * @return a JSON writer
-     */
-    public static JsonWriter createWriter(Writer writer) {
-        return JsonProvider.provider().createWriter(writer);
-    }
-
-    /**
-     * Creates a JSON writer to write a
-     * JSON {@link JsonObject object} or {@link JsonArray array}
-     * structure to the specified byte stream. Characters written to
-     * the stream are encoded into bytes using UTF-8 encoding.
-     *
-     * @param out to which JSON object or array is written
-     * @return a JSON writer
-     */
-    public static JsonWriter createWriter(OutputStream out) {
-        return JsonProvider.provider().createWriter(out);
-    }
-
-    /**
-     * Creates a JSON reader from a character stream.
-     *
-     * @param reader a reader from which JSON is to be read
-     * @return a JSON reader
-     */
-    public static JsonReader createReader(Reader reader) {
-        return JsonProvider.provider().createReader(reader);
-    }
-
-    /**
-     * Creates a JSON reader from a byte stream. The character encoding of
-     * the stream is determined as described in
-     * <a href="http://tools.ietf.org/rfc/rfc4627.txt">RFC 4627</a>.
-     *
-     * @param in a byte stream from which JSON is to be read
-     * @return a JSON reader
-     */
-    public static JsonReader createReader(InputStream in) {
-        return JsonProvider.provider().createReader(in);
-    }
-
-    /**
-     * Creates a reader factory for creating {@link JsonReader} objects.
-     * The factory is configured with the specified map of provider specific
-     * configuration properties. Provider implementations should ignore any
-     * unsupported configuration properties specified in the map.
-     *
-     * @param config a map of provider specific properties to configure the
-     *               JSON readers. The map may be empty or null
-     * @return a JSON reader factory
-     */
-    public static JsonReaderFactory createReaderFactory(Map<String, ?> config) {
-        return JsonProvider.provider().createReaderFactory(config);
-    }
-
-    /**
-     * Creates a writer factory for creating {@link JsonWriter} objects.
-     * The factory is configured with the specified map of provider specific
-     * configuration properties. Provider implementations should ignore any
-     * unsupported configuration properties specified in the map.
-     *
-     * @param config a map of provider specific properties to configure the
-     *               JSON writers. The map may be empty or null
-     * @return a JSON writer factory
-     */
-    public static JsonWriterFactory createWriterFactory(Map<String, ?> config) {
-        return JsonProvider.provider().createWriterFactory(config);
-    }
-
-    /**
-     * Creates a JSON array builder
-     *
-     * @return a JSON array builder
-     */
-    public static JsonArrayBuilder createArrayBuilder() {
-        return JsonProvider.provider().createArrayBuilder();
-    }
-
-    /**
-     * Creates a JSON object builder
-     *
-     * @return a JSON object builder
-     */
-    public static JsonObjectBuilder createObjectBuilder() {
-        return JsonProvider.provider().createObjectBuilder();
-    }
-
-    /**
-     * Creates a builder factory for creating {@link JsonArrayBuilder}
-     * and {@link JsonObjectBuilder} objects.
-     * The factory is configured with the specified map of provider specific
-     * configuration properties. Provider implementations should ignore any
-     * unsupported configuration properties specified in the map.
-     *
-     * @param config a map of provider specific properties to configure the
-     *               JSON builders. The map may be empty or null
-     * @return a JSON builder factory
-     */
-    public static JsonBuilderFactory createBuilderFactory(
-            Map<String, ?> config) {
-        return JsonProvider.provider().createBuilderFactory(config);
-    }
-
-}
\ No newline at end of file
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2011-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.json;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.Reader;
+import java.io.Writer;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.Collection;
+import java.util.Map;
+import java.util.Optional;
+import javax.json.spi.JsonProvider;
+import javax.json.stream.JsonGenerator;
+import javax.json.stream.JsonGeneratorFactory;
+import javax.json.stream.JsonParser;
+import javax.json.stream.JsonParserFactory;
+
+/**
+ * Factory class for creating JSON processing objects.
+ * This class provides the most commonly used methods for creating these
+ * objects and their corresponding factories. The factory classes provide
+ * all the various ways to create these objects.
+ *
+ * <p>
+ * The methods in this class locate a provider instance using the method
+ * {@link JsonProvider#provider()}. This class uses the provider instance
+ * to create JSON processing objects.
+ *
+ * <p>
+ * The following example shows how to create a JSON parser to parse
+ * an empty array:
+ * <pre>
+ * <code>
+ * StringReader reader = new StringReader("[]");
+ * JsonParser parser = Json.createParser(reader);
+ * </code>
+ * </pre>
+ *
+ * <p>
+ * All the methods in this class are safe for use by multiple concurrent
+ * threads.
+ */
+public final class Json {
+
+    private Json() {
+    }
+
+    /**
+     * Creates a JSON parser from a character stream.
+     *
+     * @param reader i/o reader from which JSON is to be read
+     * @return a JSON parser
+     */
+    public static JsonParser createParser(Reader reader) {
+        return JsonProvider.provider().createParser(reader);
+    }
+
+    /**
+     * Creates a JSON parser from a byte stream.
+     * The character encoding of the stream is determined as specified in
+     * <a href="http://tools.ietf.org/rfc/rfc7159.txt">RFC 7159</a>.
+     *
+     * @param in i/o stream from which JSON is to be read
+     * @throws JsonException if encoding cannot be determined
+     *         or i/o error (IOException would be cause of JsonException)
+     * @return a JSON parser
+     */
+    public static JsonParser createParser(InputStream in) {
+        return JsonProvider.provider().createParser(in);
+    }
+
+    /**
+     * Creates a JSON generator for writing JSON to a character stream.
+     *
+     * @param writer a i/o writer to which JSON is written
+     * @return a JSON generator
+     */
+    public static JsonGenerator createGenerator(Writer writer) {
+        return JsonProvider.provider().createGenerator(writer);
+    }
+
+    /**
+     * Creates a JSON generator for writing JSON to a byte stream.
+     *
+     * @param out i/o stream to which JSON is written
+     * @return a JSON generator
+     */
+    public static JsonGenerator createGenerator(OutputStream out) {
+        return JsonProvider.provider().createGenerator(out);
+    }
+
+    /**
+     * Creates a parser factory for creating {@link JsonParser} objects.
+     *
+     * @return JSON parser factory.
+     *
+    public static JsonParserFactory createParserFactory() {
+        return JsonProvider.provider().createParserFactory();
+    }
+     */
+
+    /**
+     * Creates a parser factory for creating {@link JsonParser} objects.
+     * The factory is configured with the specified map of provider specific
+     * configuration properties. Provider implementations should ignore any
+     * unsupported configuration properties specified in the map.
+     *
+     * @param config a map of provider specific properties to configure the
+     *               JSON parsers. The map may be empty or null
+     * @return JSON parser factory
+     */
+    public static JsonParserFactory createParserFactory(Map<String, ?> config) {
+        return JsonProvider.provider().createParserFactory(config);
+    }
+
+    /**
+     * Creates a generator factory for creating {@link JsonGenerator} objects.
+     *
+     * @return JSON generator factory
+     *
+    public static JsonGeneratorFactory createGeneratorFactory() {
+        return JsonProvider.provider().createGeneratorFactory();
+    }
+    */
+
+    /**
+     * Creates a generator factory for creating {@link JsonGenerator} objects.
+     * The factory is configured with the specified map of provider specific
+     * configuration properties. Provider implementations should ignore any
+     * unsupported configuration properties specified in the map.
+     *
+     * @param config a map of provider specific properties to configure the
+     *               JSON generators. The map may be empty or null
+     * @return JSON generator factory
+     */
+    public static JsonGeneratorFactory createGeneratorFactory(
+            Map<String, ?> config) {
+        return JsonProvider.provider().createGeneratorFactory(config);
+    }
+
+    /**
+     * Creates a JSON writer to write a
+     * JSON {@link JsonObject object} or {@link JsonArray array}
+     * structure to the specified character stream.
+     *
+     * @param writer to which JSON object or array is written
+     * @return a JSON writer
+     */
+    public static JsonWriter createWriter(Writer writer) {
+        return JsonProvider.provider().createWriter(writer);
+    }
+
+    /**
+     * Creates a JSON writer to write a
+     * JSON {@link JsonObject object} or {@link JsonArray array}
+     * structure to the specified byte stream. Characters written to
+     * the stream are encoded into bytes using UTF-8 encoding.
+     *
+     * @param out to which JSON object or array is written
+     * @return a JSON writer
+     */
+    public static JsonWriter createWriter(OutputStream out) {
+        return JsonProvider.provider().createWriter(out);
+    }
+
+    /**
+     * Creates a JSON reader from a character stream.
+     *
+     * @param reader a reader from which JSON is to be read
+     * @return a JSON reader
+     */
+    public static JsonReader createReader(Reader reader) {
+        return JsonProvider.provider().createReader(reader);
+    }
+
+    /**
+     * Creates a JSON reader from a byte stream. The character encoding of
+     * the stream is determined as described in
+     * <a href="http://tools.ietf.org/rfc/rfc7159.txt">RFC 7159</a>.
+     *
+     * @param in a byte stream from which JSON is to be read
+     * @return a JSON reader
+     */
+    public static JsonReader createReader(InputStream in) {
+        return JsonProvider.provider().createReader(in);
+    }
+
+    /**
+     * Creates a reader factory for creating {@link JsonReader} objects.
+     * The factory is configured with the specified map of provider specific
+     * configuration properties. Provider implementations should ignore any
+     * unsupported configuration properties specified in the map.
+     *
+     * @param config a map of provider specific properties to configure the
+     *               JSON readers. The map may be empty or null
+     * @return a JSON reader factory
+     */
+    public static JsonReaderFactory createReaderFactory(Map<String, ?> config) {
+        return JsonProvider.provider().createReaderFactory(config);
+    }
+
+    /**
+     * Creates a writer factory for creating {@link JsonWriter} objects.
+     * The factory is configured with the specified map of provider specific
+     * configuration properties. Provider implementations should ignore any
+     * unsupported configuration properties specified in the map.
+     *
+     * @param config a map of provider specific properties to configure the
+     *               JSON writers. The map may be empty or null
+     * @return a JSON writer factory
+     */
+    public static JsonWriterFactory createWriterFactory(Map<String, ?> config) {
+        return JsonProvider.provider().createWriterFactory(config);
+    }
+
+    /**
+     * Creates a JSON array builder
+     *
+     * @return a JSON array builder
+     */
+    public static JsonArrayBuilder createArrayBuilder() {
+        return JsonProvider.provider().createArrayBuilder();
+    }
+
+    /**
+     * Creates a JSON array builder, initialized with the specified array
+     *
+     * @param array the initial array in the builder
+     * @return a JSON array builder
+     *
+     * @since 1.1
+     */
+    public static JsonArrayBuilder createArrayBuilder(JsonArray array) {
+        return JsonProvider.provider().createArrayBuilder(array);
+    }
+
+    /**
+     * Creates a JSON array builder, initialized with the content of specified {@code collection}.
+     * If the @{code collection} contains {@link Optional}s then resulting JSON array builder
+     * contains the value from the {@code collection} only if the {@link Optional} is not empty.
+     *
+     * @param collection the initial data for the builder
+     * @return a JSON array builder
+     * @exception IllegalArgumentException if the value from the {@code collection} cannot be converted
+     *            to the corresponding {@link JsonValue}
+     *
+     * @since 1.1
+     */
+    public static JsonArrayBuilder createArrayBuilder(Collection<?> collection) {
+        return JsonProvider.provider().createArrayBuilder(collection);
+    }
+
+    /**
+     * Creates a JSON object builder
+     *
+     * @return a JSON object builder
+     */
+    public static JsonObjectBuilder createObjectBuilder() {
+        return JsonProvider.provider().createObjectBuilder();
+    }
+
+    /**
+     * Creates a JSON object builder, initialized with the specified object.
+     *
+     * @param object the initial object in the builder
+     * @return a JSON object builder
+     *
+     * @since 1.1
+     */
+    public static JsonObjectBuilder createObjectBuilder(JsonObject object) {
+        return JsonProvider.provider().createObjectBuilder(object);
+    }
+
+    /**
+     * Creates a JSON object builder, initialized with the data from specified {@code map}.
+     * If the @{code map} contains {@link Optional}s then resulting JSON object builder
+     * contains the key from the {@code map} only if the {@link Optional} is not empty.
+     *
+     * @param map the initial object in the builder
+     * @return a JSON object builder
+     * @exception IllegalArgumentException if the value from the {@code map} cannot be converted
+     *            to the corresponding {@link JsonValue}
+     *
+     * @since 1.1
+     */
+    public static JsonObjectBuilder createObjectBuilder(Map<String, Object> map) {
+        return JsonProvider.provider().createObjectBuilder(map);
+    }
+
+    /**
+     * Creates JSON Pointer (<a href="http://tools.ietf.org/html/rfc6901">RFC 6901</a>)
+     * from given {@code jsonPointer} string.
+     * <ul>
+     *     <li>An empty {@code jsonPointer} string defines a reference to the target itself.</li>
+     *     <li>If the {@code jsonPointer} string is non-empty, it must be a sequence of '{@code /}' prefixed tokens.</li>
+     * </ul>
+     *
+     * @param jsonPointer the valid escaped JSON Pointer string
+     * @throws NullPointerException if {@code jsonPointer} is {@code null}
+     * @throws JsonException if {@code jsonPointer} is not a valid JSON Pointer
+     * @return a JSON Pointer
+     *
+     * @since 1.1
+     */
+    public static JsonPointer createPointer(String jsonPointer) {
+        return JsonProvider.provider().createPointer(jsonPointer);
+    }
+
+    /**
+     * Creates a JSON Patch builder (<a href="http://tools.ietf.org/html/rfc6902">RFC 6902</a>).
+     *
+     * @return a JSON Patch builder
+     *
+     * @since 1.1
+     */
+    public static JsonPatchBuilder createPatchBuilder() {
+        return JsonProvider.provider().createPatchBuilder();
+    }
+
+    /**
+     * Creates a JSON Patch builder
+     * (<a href="http://tools.ietf.org/html/rfc6902">RFC 6902</a>),
+     * initialized with the specified operations.
+     *
+     * @param array the initial patch operations
+     * @return a JSON Patch builder
+     *
+     * @since 1.1
+     */
+    public static JsonPatchBuilder createPatchBuilder(JsonArray array) {
+        return JsonProvider.provider().createPatchBuilder(array);
+    }
+
+    /**
+     * Creates a JSON Patch (<a href="http://tools.ietf.org/html/rfc6902">RFC 6902</a>)
+     * from the specified operations.
+     *
+     * @param array patch operations
+     * @return a JSON Patch
+     *
+     * @since 1.1
+     */
+    public static JsonPatch createPatch(JsonArray array) {
+        return JsonProvider.provider().createPatch(array);
+    }
+
+    /**
+     * Generates a JSON Patch (<a href="http://tools.ietf.org/html/rfc6902">RFC 6902</a>)
+     * from the source and target {@code JsonStructure}.
+     * The generated JSON Patch need not be unique.
+     *
+     * @param source the source
+     * @param target the target, must be the same type as the source
+     * @return a JSON Patch which when applied to the source, yields the target
+     *
+     * @since 1.1
+     */
+    public static JsonPatch createDiff(JsonStructure source, JsonStructure target) {
+        return JsonProvider.provider().createDiff(source, target);
+    }
+
+    /**
+     * Creates JSON Merge Patch (<a href="http://tools.ietf.org/html/rfc7396">RFC 7396</a>)
+     * from specified {@code JsonValue}.
+     *
+     * @param patch the patch
+     * @return a JSON Merge Patch
+     *
+     * @since 1.1
+     */
+    public static JsonMergePatch createMergePatch(JsonValue patch) {
+        return JsonProvider.provider().createMergePatch(patch);
+    }
+
+    /**
+     * Generates a JSON Merge Patch (<a href="http://tools.ietf.org/html/rfc7396">RFC 7396</a>)
+     * from the source and target {@code JsonValue}s
+     * which when applied to the {@code source}, yields the {@code target}.
+     *
+     * @param source the source
+     * @param target the target
+     * @return a JSON Merge Patch
+     *
+     * @since 1.1
+     */
+    public static JsonMergePatch createMergeDiff(JsonValue source, JsonValue target) {
+        return JsonProvider.provider().createMergeDiff(source, target);
+    }
+
+    /**
+     * Creates a builder factory for creating {@link JsonArrayBuilder}
+     * and {@link JsonObjectBuilder} objects.
+     * The factory is configured with the specified map of provider specific
+     * configuration properties. Provider implementations should ignore any
+     * unsupported configuration properties specified in the map.
+     *
+     * @param config a map of provider specific properties to configure the
+     *               JSON builders. The map may be empty or null
+     * @return a JSON builder factory
+     */
+    public static JsonBuilderFactory createBuilderFactory(
+            Map<String, ?> config) {
+        return JsonProvider.provider().createBuilderFactory(config);
+    }
+
+    /**
+     * Creates a JsonString.
+     *
+     * @param value a JSON string
+     * @return the JsonString for the string
+     *
+     * @since 1.1
+     */
+    public static JsonString createValue(String value) {
+        return JsonProvider.provider().createValue(value);
+    }
+
+    /**
+     * Creates a JsonNumber.
+     *
+     * @param value a JSON number
+     * @return the JsonNumber for the number
+     *
+     * @since 1.1
+     */
+    public static JsonNumber createValue(int value) {
+        return JsonProvider.provider().createValue(value);
+    }
+
+    /**
+     * Creates a JsonNumber.
+     *
+     * @param value a JSON number
+     * @return the JsonNumber for the number
+     *
+     * @since 1.1
+     */
+    public static JsonNumber createValue(long value) {
+        return JsonProvider.provider().createValue(value);
+    }
+
+    /**
+     * Creates a JsonNumber.
+     *
+     * @param value a JSON number
+     * @return the JsonNumber for the number
+     *
+     * @since 1.1
+     */
+    public static JsonNumber createValue(double value) {
+        return JsonProvider.provider().createValue(value);
+    }
+
+    /**
+     * Creates a JsonNumber.
+     *
+     * @param value a JSON number
+     * @return the JsonNumber for the number
+     *
+     * @since 1.1
+     */
+    public static JsonNumber createValue(BigDecimal value) {
+        return JsonProvider.provider().createValue(value);
+    }
+
+    /**
+     * Creates a JsonNumber.
+     *
+     * @param value a JSON number
+     * @return the JsonNumber for the number
+     *
+     * @since 1.1
+     */
+    public static JsonNumber createValue(BigInteger value) {
+        return JsonProvider.provider().createValue(value);
+    }
+
+    /**
+     * Encodes (escapes) a passed string as defined by <a href="http://tools.ietf.org/html/rfc6901">RFC 6901</a>.
+     * This method doesn't validate the passed JSON-pointer string.
+     *
+     * @param pointer the JSON-pointer string to encode
+     * @return encoded JSON-pointer string
+     * 
+     * @since 1.1
+     */
+    public static String encodePointer(String pointer) {
+        return pointer.replace("~", "~0").replace("/", "~1");
+    }
+
+    /**
+     * Decodes a passed JSON-pointer string as defined by <a href="http://tools.ietf.org/html/rfc6901">RFC 6901</a>.
+     * This method doesn't validate the passed JSON-pointer string.
+     *
+     * @param escaped the JSON-pointer string to decode
+     * @return decoded JSON-pointer string
+     *     
+     * @since 1.1
+     */
+    public static String decodePointer(String escaped) {
+        return escaped.replace("~1", "/").replace("~0", "~");
+    }
+
+}
diff --git a/src/javax/json/JsonArray.java b/src/javax/json/JsonArray.java
index 16fbb49..ae0fc2b 100644
--- a/src/javax/json/JsonArray.java
+++ b/src/javax/json/JsonArray.java
@@ -1,265 +1,298 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2011-2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json;
-
-import java.util.List;
-
-/**
- * {@code JsonArray} represents an immutable JSON array
- * (an ordered sequence of zero or more values).
- * It also provides an unmodifiable list view of the values in the array.
- *
- * <p>A {@code JsonArray} object can be created by reading JSON data from
- * an input source or it can be built from scratch using an array builder
- * object.
- *
- * <p>The following example demonstrates how to create a {@code JsonArray}
- * object from an input source using the method {@link JsonReader#readArray()}:
- * <pre><code>
- * JsonReader jsonReader = Json.createReader(...);
- * JsonArray array = jsonReader.readArray();
- * jsonReader.close();
- * </code></pre>
- *
- * <p>The following example demonstrates how to build an empty JSON array
- * using the class {@link JsonArrayBuilder}:
- * <pre><code>
- * JsonArray array = Json.createArrayBuilder().build();
- * </code></pre>
- *
- * <p>The example code below demonstrates how to create the following JSON array:
- * <pre><code>
- * [
- *     { "type": "home", "number": "212 555-1234" },
- *     { "type": "fax", "number": "646 555-4567" }
- * ]
- * </code></pre>
- * <pre><code>
- * JsonArray value = Json.createArrayBuilder()
- *     .add(Json.createObjectBuilder()
- *         .add("type", "home")
- *         .add("number", "212 555-1234"))
- *     .add(Json.createObjectBuilder()
- *         .add("type", "fax")
- *         .add("number", "646 555-4567"))
- *     .build();
- * </code></pre>
- *
- * <p>The following example demonstrates how to write a {@code JsonArray} object 
- * as JSON data:
- * <pre><code>
- * JsonArray arr = ...;
- * JsonWriter writer = Json.createWriter(...)
- * writer.writeArray(arr);
- * writer.close();
- * </code></pre>
- *
- * <p>The values in a {@code JsonArray} can be of the following types:
- * {@link JsonObject}, {@link JsonArray},
- * {@link JsonString}, {@link JsonNumber}, {@link JsonValue#TRUE},
- * {@link JsonValue#FALSE}, and {@link JsonValue#NULL}. 
- * {@code JsonArray} provides various accessor methods to access the values
- * in an array.
- * 
- * <p>The following example shows how to obtain the home phone number 
- * "212 555-1234" from the array built in the previous example:
- * <pre><code>
- * JsonObject home = array.getJsonObject(0);
- * String number = home.getString("number");
- * </code></pre>
- *
- * <p>{@code JsonArray} instances are list objects that provide read-only 
- * access to the values in the JSON array. Any attempt to modify the list,
- * whether directly or using its collection views, results in an 
- * {@code UnsupportedOperationException}.
- *
- * @author Jitendra Kotamraju
- */
-public interface JsonArray extends JsonStructure, List<JsonValue> {
-
-    /**
-     * Returns the object value at the specified position in this array.
-     * This is a convenience method for {@code (JsonObject)get(index)}.
-     *
-     * @param index index of the value to be returned
-     * @return the value at the specified position in this array
-     * @throws IndexOutOfBoundsException if the index is out of range
-     * @throws ClassCastException if the value at the specified position is not
-     * assignable to the JsonObject type
-     */
-    JsonObject getJsonObject(int index);
-
-    /**
-     * Returns the array value at the specified position in this array.
-     * This is a convenience method for {@code (JsonArray)get(index)}.
-     *
-     * @param index index of the value to be returned
-     * @return the value at the specified position in this array
-     * @throws IndexOutOfBoundsException if the index is out of range
-     * @throws ClassCastException if the value at the specified position is not
-     * assignable to the JsonArray type
-     */
-    JsonArray getJsonArray(int index);
-
-    /**
-     * Returns the number value at the specified position in this array.
-     * This is a convenience method for {@code (JsonNumber)get(index)}.
-     *
-     * @param index index of the value to be returned
-     * @return the value at the specified position in this array
-     * @throws IndexOutOfBoundsException if the index is out of range
-     * @throws ClassCastException if the value at the specified position is not
-     * assignable to the JsonNumber type
-     */
-    JsonNumber getJsonNumber(int index);
-
-    /**
-     * Returns the string value at ths specified position in this array.
-     * This is a convenience method for {@code (JsonString)get(index)}.
-     *
-     * @param index index of the value to be returned
-     * @return the value at the specified position in this array
-     * @throws IndexOutOfBoundsException if the index is out of range
-     * @throws ClassCastException if the value at the specified position is not
-     * assignable to the JsonString type
-     */
-    JsonString getJsonString(int index);
-
-    /**
-     * Returns a list a view of the specified type for the array. This method
-     * does not verify if there is a value of wrong type in the array. Providing
-     * this typesafe view dynamically may cause a program fail with a
-     * {@code ClassCastException}, if there is a value of wrong type in this
-     * array. Unfortunately, the exception can occur at any time after this
-     * method returns.
-     *
-     * @param clazz a JsonValue type
-     * @return a list view of the  specified type
-     */
-    <T extends JsonValue> List<T> getValuesAs(Class<T> clazz);
-
-    /**
-     * A convenience method for
-     * {@code getJsonString(index).getString()}.
-     *
-     * @param index index of the {@code JsonString} value
-     * @return the String value at the specified position
-     * @throws IndexOutOfBoundsException if the index is out of range
-     * @throws ClassCastException if the value at the specified position is not
-     * assignable to {@code JsonString}
-     */
-    String getString(int index);
-
-    /**
-     * Returns the {@code String} value of {@code JsonString} at the specified
-     * position in this JSON array values. If {@code JsonString} is found,
-     * its {@link javax.json.JsonString#getString()} is returned. Otherwise,
-     * the specified default value is returned.
-     *
-     * @param index index of the JsonString value
-     * @return the String value at the specified position in this array,
-     * or the specified default value
-     */
-    String getString(int index, String defaultValue);
-
-    /**
-     * A convenience method for
-     * {@code getJsonNumber(index).intValue()}.
-     *
-     * @param index index of the {@code JsonNumber} value
-     * @return the int value at the specified position
-     * @throws IndexOutOfBoundsException if the index is out of range
-     * @throws ClassCastException if the value at the specified position is not
-     * assignable to {@code JsonNumber}
-     */
-    int getInt(int index);
-
-    /**
-     * Returns the int value of the {@code JsonNumber} at the specified position. 
-     * If the value at that position is a {@code JsonNumber},
-     * this method returns {@link javax.json.JsonNumber#intValue()}. Otherwise
-     * this method returns the specified default value.
-     *
-     * @param index index of the {@code JsonNumber} value
-     * @return the int value at the specified position in this array,
-     * or the specified default value
-     */
-    int getInt(int index, int defaultValue);
-
-    /**
-     * Returns the boolean value at the specified position.
-     * If the value at the specified position is {@code JsonValue.TRUE} 
-     * this method returns {@code true}. If the value at the specified position 
-     * is {@code JsonValue.FALSE} this method returns {@code false}.
-     *
-     * @param index index of the JSON boolean value
-     * @return the boolean value at the specified position
-     * @throws IndexOutOfBoundsException if the index is out of range
-     * @throws ClassCastException if the value at the specified position is not
-     * assignable to {@code JsonValue.TRUE} or {@code JsonValue.FALSE}
-     */
-    boolean getBoolean(int index);
-
-    /**
-     * Returns the boolean value at the specified position.
-     * If the value at the specified position is {@code JsonValue.TRUE}
-     * this method returns {@code true}. If the value at the specified position 
-     * is {@code JsonValue.FALSE} this method returns {@code false}. 
-     * Otherwise this method returns the specified default value.
-     *
-     * @param index index of the JSON boolean value
-     * @return the boolean value at the specified position,
-     * or the specified default value
-     */
-    boolean getBoolean(int index, boolean defaultValue);
-
-    /**
-     * Returns {@code true} if the value at the specified location in this
-     * array is {@code JsonValue.NULL}.
-     *
-     * @param index index of the JSON null value
-     * @return return true if the value at the specified location is
-     * {@code JsonValue.NUL}, otherwise false
-     * @throws IndexOutOfBoundsException if the index is out of range
-     */
-    boolean isNull(int index);
-
-}
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2011-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.json;
+
+import java.util.List;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * {@code JsonArray} represents an immutable JSON array
+ * (an ordered sequence of zero or more values).
+ * It also provides an unmodifiable list view of the values in the array.
+ *
+ * <p>A {@code JsonArray} object can be created by reading JSON data from
+ * an input source or it can be built from scratch using an array builder
+ * object.
+ *
+ * <p>The following example demonstrates how to create a {@code JsonArray}
+ * object from an input source using the method {@link JsonReader#readArray()}:
+ * <pre><code>
+ * JsonReader jsonReader = Json.createReader(...);
+ * JsonArray array = jsonReader.readArray();
+ * jsonReader.close();
+ * </code></pre>
+ *
+ * <p>The following example demonstrates how to build an empty JSON array
+ * using the class {@link JsonArrayBuilder}:
+ * <pre><code>
+ * JsonArray array = Json.createArrayBuilder().build();
+ * </code></pre>
+ *
+ * <p>The example code below demonstrates how to create the following JSON array:
+ * <pre><code>
+ * [
+ *     { "type": "home", "number": "212 555-1234" },
+ *     { "type": "fax", "number": "646 555-4567" }
+ * ]
+ * </code></pre>
+ * <pre><code>
+ * JsonArray value = Json.createArrayBuilder()
+ *     .add(Json.createObjectBuilder()
+ *         .add("type", "home")
+ *         .add("number", "212 555-1234"))
+ *     .add(Json.createObjectBuilder()
+ *         .add("type", "fax")
+ *         .add("number", "646 555-4567"))
+ *     .build();
+ * </code></pre>
+ *
+ * <p>The following example demonstrates how to write a {@code JsonArray} object 
+ * as JSON data:
+ * <pre><code>
+ * JsonArray arr = ...;
+ * JsonWriter writer = Json.createWriter(...)
+ * writer.writeArray(arr);
+ * writer.close();
+ * </code></pre>
+ *
+ * <p>The values in a {@code JsonArray} can be of the following types:
+ * {@link JsonObject}, {@link JsonArray},
+ * {@link JsonString}, {@link JsonNumber}, {@link JsonValue#TRUE},
+ * {@link JsonValue#FALSE}, and {@link JsonValue#NULL}. 
+ * {@code JsonArray} provides various accessor methods to access the values
+ * in an array.
+ * 
+ * <p>The following example shows how to obtain the home phone number 
+ * "212 555-1234" from the array built in the previous example:
+ * <pre><code>
+ * JsonObject home = array.getJsonObject(0);
+ * String number = home.getString("number");
+ * </code></pre>
+ *
+ * <p>{@code JsonArray} instances are list objects that provide read-only 
+ * access to the values in the JSON array. Any attempt to modify the list,
+ * whether directly or using its collection views, results in an 
+ * {@code UnsupportedOperationException}.
+ */
+public interface JsonArray extends JsonStructure, List<JsonValue> {
+
+    /**
+     * Returns the object value at the specified position in this array.
+     * This is a convenience method for {@code (JsonObject)get(index)}.
+     *
+     * @param index index of the value to be returned
+     * @return the value at the specified position in this array
+     * @throws IndexOutOfBoundsException if the index is out of range
+     * @throws ClassCastException if the value at the specified position is not
+     * assignable to the JsonObject type
+     */
+    JsonObject getJsonObject(int index);
+
+    /**
+     * Returns the array value at the specified position in this array.
+     * This is a convenience method for {@code (JsonArray)get(index)}.
+     *
+     * @param index index of the value to be returned
+     * @return the value at the specified position in this array
+     * @throws IndexOutOfBoundsException if the index is out of range
+     * @throws ClassCastException if the value at the specified position is not
+     * assignable to the JsonArray type
+     */
+    JsonArray getJsonArray(int index);
+
+    /**
+     * Returns the number value at the specified position in this array.
+     * This is a convenience method for {@code (JsonNumber)get(index)}.
+     *
+     * @param index index of the value to be returned
+     * @return the value at the specified position in this array
+     * @throws IndexOutOfBoundsException if the index is out of range
+     * @throws ClassCastException if the value at the specified position is not
+     * assignable to the JsonNumber type
+     */
+    JsonNumber getJsonNumber(int index);
+
+    /**
+     * Returns the string value at ths specified position in this array.
+     * This is a convenience method for {@code (JsonString)get(index)}.
+     *
+     * @param index index of the value to be returned
+     * @return the value at the specified position in this array
+     * @throws IndexOutOfBoundsException if the index is out of range
+     * @throws ClassCastException if the value at the specified position is not
+     * assignable to the JsonString type
+     */
+    JsonString getJsonString(int index);
+
+    /**
+     * Returns a list view of the specified type for the array. This method
+     * does not verify if there is a value of wrong type in the array. Providing
+     * this typesafe view dynamically may cause a program fail with a
+     * {@code ClassCastException}, if there is a value of wrong type in this
+     * array. Unfortunately, the exception can occur at any time after this
+     * method returns.
+     *
+     * @param <T> The type of the List for the array
+     * @param clazz a JsonValue type
+     * @return a list view of the specified type
+     */
+    <T extends JsonValue> List<T> getValuesAs(Class<T> clazz);
+
+    /**
+     * Returns a list view for the array. The value and the type of the elements
+     * in the list is specified by the {@code func} argument.
+     * <p>This method can be used to obtain a list of the unwrapped types, such as
+     * <pre>{@code
+     *     List<String> strings = ary1.getValuesAs(JsonString::getString);
+     *     List<Integer> ints = ary2.getValuesAs(JsonNumber::intValue);
+     * } </pre>
+     * or a list of simple projections, such as
+     * <pre> {@code
+     *     List<Integer> stringsizes = ary1.getValueAs((JsonString v)->v.getString().length();
+     * } </pre>
+     * @param <K> The element type (must be a subtype of JsonValue) of this JsonArray.
+     * @param <T> The element type of the returned List
+     * @param func The function that maps the elements of this JsonArray to the target elements.
+     * @return A List of the specified values and type.
+     * @throws ClassCastException if the {@code JsonArray} contains a value of wrong type
+     *
+     * @since 1.1
+     */
+    default <T, K extends JsonValue> List<T> getValuesAs(Function<K, T> func) {
+        @SuppressWarnings("unchecked")
+        Stream<K> stream = (Stream<K>) stream();
+        return stream.map(func).collect(Collectors.toList());
+    }
+
+    /**
+     * A convenience method for
+     * {@code getJsonString(index).getString()}.
+     *
+     * @param index index of the {@code JsonString} value
+     * @return the String value at the specified position
+     * @throws IndexOutOfBoundsException if the index is out of range
+     * @throws ClassCastException if the value at the specified position is not
+     * assignable to {@code JsonString}
+     */
+    String getString(int index);
+
+    /**
+     * Returns the {@code String} value of {@code JsonString} at the specified
+     * position in this JSON array values. If {@code JsonString} is found,
+     * its {@link javax.json.JsonString#getString()} is returned. Otherwise,
+     * the specified default value is returned.
+     *
+     * @param index index of the {@code JsonString} value
+     * @param defaultValue the String to return if the {@code JsonValue} at the
+     *    specified position is not a {@code JsonString}
+     * @return the String value at the specified position in this array,
+     * or the specified default value
+     */
+    String getString(int index, String defaultValue);
+
+    /**
+     * A convenience method for
+     * {@code getJsonNumber(index).intValue()}.
+     *
+     * @param index index of the {@code JsonNumber} value
+     * @return the int value at the specified position
+     * @throws IndexOutOfBoundsException if the index is out of range
+     * @throws ClassCastException if the value at the specified position is not
+     * assignable to {@code JsonNumber}
+     */
+    int getInt(int index);
+
+    /**
+     * Returns the int value of the {@code JsonNumber} at the specified position. 
+     * If the value at that position is a {@code JsonNumber},
+     * this method returns {@link javax.json.JsonNumber#intValue()}. Otherwise
+     * this method returns the specified default value.
+     *
+     * @param index index of the {@code JsonNumber} value
+     * @param defaultValue the int value to return if the {@code JsonValue} at
+     *     the specified position is not a {@code JsonNumber}
+     * @return the int value at the specified position in this array,
+     * or the specified default value
+     */
+    int getInt(int index, int defaultValue);
+
+    /**
+     * Returns the boolean value at the specified position.
+     * If the value at the specified position is {@code JsonValue.TRUE} 
+     * this method returns {@code true}. If the value at the specified position 
+     * is {@code JsonValue.FALSE} this method returns {@code false}.
+     *
+     * @param index index of the JSON boolean value
+     * @return the boolean value at the specified position
+     * @throws IndexOutOfBoundsException if the index is out of range
+     * @throws ClassCastException if the value at the specified position is not
+     * assignable to {@code JsonValue.TRUE} or {@code JsonValue.FALSE}
+     */
+    boolean getBoolean(int index);
+
+    /**
+     * Returns the boolean value at the specified position.
+     * If the value at the specified position is {@code JsonValue.TRUE}
+     * this method returns {@code true}. If the value at the specified position 
+     * is {@code JsonValue.FALSE} this method returns {@code false}. 
+     * Otherwise this method returns the specified default value.
+     *
+     * @param index index of the JSON boolean value
+     * @param defaultValue the boolean value to return if the {@code JsonValue}
+     *    at the specified position is neither TRUE nor FALSE
+     * @return the boolean value at the specified position,
+     * or the specified default value
+     */
+    boolean getBoolean(int index, boolean defaultValue);
+
+    /**
+     * Returns {@code true} if the value at the specified location in this
+     * array is {@code JsonValue.NULL}.
+     *
+     * @param index index of the JSON null value
+     * @return return true if the value at the specified location is
+     * {@code JsonValue.NULL}, otherwise false
+     * @throws IndexOutOfBoundsException if the index is out of range
+     */
+    boolean isNull(int index);
+}
diff --git a/src/javax/json/JsonArrayBuilder.java b/src/javax/json/JsonArrayBuilder.java
index a727e3d..8501543 100644
--- a/src/javax/json/JsonArrayBuilder.java
+++ b/src/javax/json/JsonArrayBuilder.java
@@ -1,216 +1,646 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-/**
- * A builder for creating {@link JsonArray} models from scratch. This
- * interface initializes an empty JSON array model and provides methods to add
- * values to the array model and to return the resulting array. The methods
- * in this class can be chained to add multiple values to the array.
- *
- * <p>The class {@link javax.json.Json} contains methods to create the builder
- * object. The example code below shows how to build an empty {@code JsonArray}
- * instance.
- * <pre>
- * <code>
- * JsonArray array = Json.createArrayBuilder().build();
- * </code>
- * </pre>
- *
- * <p>The class {@link JsonBuilderFactory} also contains methods to create
- * {@code JsonArrayBuilder} instances. A factory instance can be used to create
- * multiple builder instances with the same configuration. This the preferred
- * way to create multiple instances.
- *
- * <a id="JsonArrayBuilderExample1"/>
- * The example code below shows how to build a {@code JsonArray} object
- * that represents the following JSON array:
- *
- * <pre>
- * <code>
- * [
- *     { "type": "home", "number": "212 555-1234" },
- *     { "type": "fax", "number": "646 555-4567" }
- * ]
- * </code>
- * </pre>
- *
- * <p>The following code creates the JSON array above:
- *
- * <pre>
- * <code>
- * JsonBuilderFactory factory = Json.createBuilderFactory(config);
- * JsonArray value = factory.createArrayBuilder()
- *     .add(factory.createObjectBuilder()
- *         .add("type", "home")
- *         .add("number", "212 555-1234"))
- *     .add(factory.createObjectBuilder()
- *         .add("type", "fax")
- *         .add("number", "646 555-4567"))
- *     .build();
- * </code>
- * </pre>
- *
- * <p>This class does <em>not</em> allow <tt>null</tt> to be used as a
- * value while building the JSON array
- *
- * @see JsonObjectBuilder
- */
-public interface JsonArrayBuilder {
-
-    /**
-     * Adds a value to the array.
-     *
-     * @param value the JSON value
-     * @return this array builder
-     * @throws NullPointerException if the specified value is null
-     */
-    JsonArrayBuilder add(JsonValue value);
-
-    /**
-     * Adds a value to the array as a {@link JsonString}.
-     *
-     * @param value the string value
-     * @return this array builder
-     * @throws NullPointerException if the specified value is null
-     */
-    JsonArrayBuilder add(String value);
-
-    /**
-     * Adds a value to the array as a {@link JsonNumber}.
-     *
-     * @param value the number value
-     * @return this array builder
-     * @throws NullPointerException if the specified value is null
-     *
-     * @see JsonNumber
-     */
-    JsonArrayBuilder add(BigDecimal value);
-
-    /**
-     * Adds a value to the array as a {@link JsonNumber}.
-     *
-     * @param value the number value
-     * @return this array builder
-     * @throws NullPointerException if the specified value is null
-     *
-     * @see JsonNumber
-     */
-    JsonArrayBuilder add(BigInteger value);
-
-    /**
-     * Adds a value to the array as a {@link JsonNumber}.
-     *
-     * @param value the number value
-     * @return this array builder
-     *
-     * @see JsonNumber
-     */
-    JsonArrayBuilder add(int value);
-
-    /**
-     * Adds a value to the array as a {@link JsonNumber}.
-     *
-     * @param value the number value
-     * @return this array builder
-     *
-     * @see JsonNumber
-     */
-    JsonArrayBuilder add(long value);
-
-    /**
-     * Adds a value to the array as a {@link JsonNumber}.
-     *
-     * @param value the number value
-     * @return this array builder
-     * @throws NumberFormatException if the value is Not-a-Number(NaN) or 
-     *      infinity
-     *
-     * @see JsonNumber
-     */
-    JsonArrayBuilder add(double value);
-
-    /**
-     * Adds a {@link JsonValue#TRUE}  or {@link JsonValue#FALSE} value to the
-     * array.
-     *
-     * @param value the boolean value
-     * @return this array builder
-     */
-    JsonArrayBuilder add(boolean value);
-
-    /**
-     * Adds a {@link JsonValue#NULL} value to the array.
-     *
-     * @return this array builder
-     */
-    JsonArrayBuilder addNull();
-
-    /**
-     * Adds a {@link JsonObject} from an object builder to the array.
-     *
-     * @param builder the object builder
-     * @return this array builder
-     * @throws NullPointerException if the specified builder is null
-     */
-    JsonArrayBuilder add(JsonObjectBuilder builder);
-
-    /**
-     * Adds a {@link JsonArray} from an array builder to the array.
-     *
-     * @param builder the array builder
-     * @return this array builder
-     * @throws NullPointerException if the specified builder is null
-     */
-    JsonArrayBuilder add(JsonArrayBuilder builder);
-
-    /**
-     * Returns the current array.
-     *
-     * @return the current JSON array
-     */
-    JsonArray build();
-
-}
-
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2013-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.json;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+
+/**
+ * A builder for creating {@link JsonArray} models from scratch, and for
+ * modifying a existing {@code JsonArray}.
+ * <p>A {@code JsonArrayBuilder} can start with an empty or a non-empty
+ * JSON array model. This interface provides methods to add, insert, remove
+ * and replace values in the JSON array model.</p>
+ * <p>Methods in this class can be chained to perform multiple values to
+ * the array.</p>
+ *
+ * <p>The class {@link javax.json.Json} contains methods to create the builder
+ * object. The example code below shows how to build an empty {@code JsonArray}
+ * instance.
+ * <pre>
+ * <code>
+ * JsonArray array = Json.createArrayBuilder().build();
+ * </code>
+ * </pre>
+ *
+ * <p>The class {@link JsonBuilderFactory} also contains methods to create
+ * {@code JsonArrayBuilder} instances. A factory instance can be used to create
+ * multiple builder instances with the same configuration. This the preferred
+ * way to create multiple instances.
+ *
+ * The example code below shows how to build a {@code JsonArray} object
+ * that represents the following JSON array:
+ *
+ * <pre>
+ * <code>
+ * [
+ *     { "type": "home", "number": "212 555-1234" },
+ *     { "type": "fax", "number": "646 555-4567" }
+ * ]
+ * </code>
+ * </pre>
+ *
+ * <p>The following code creates the JSON array above:
+ *
+ * <pre>
+ * <code>
+ * JsonBuilderFactory factory = Json.createBuilderFactory(config);
+ * JsonArray value = factory.createArrayBuilder()
+ *     .add(factory.createObjectBuilder()
+ *         .add("type", "home")
+ *         .add("number", "212 555-1234"))
+ *     .add(factory.createObjectBuilder()
+ *         .add("type", "fax")
+ *         .add("number", "646 555-4567"))
+ *     .build();
+ * </code>
+ * </pre>
+ *
+ * <p>This class does <em>not</em> allow <tt>null</tt> to be used as a
+ * value while building the JSON array
+ *
+ * @see JsonObjectBuilder
+ */
+public interface JsonArrayBuilder {
+
+    /**
+     * Adds a value to the array.
+     *
+     * @param value the JSON value
+     * @return this array builder
+     * @throws NullPointerException if the specified value is null
+     */
+    JsonArrayBuilder add(JsonValue value);
+
+    /**
+     * Adds a value to the array as a {@link JsonString}.
+     *
+     * @param value the string value
+     * @return this array builder
+     * @throws NullPointerException if the specified value is null
+     */
+    JsonArrayBuilder add(String value);
+
+    /**
+     * Adds a value to the array as a {@link JsonNumber}.
+     *
+     * @param value the number value
+     * @return this array builder
+     * @throws NullPointerException if the specified value is null
+     *
+     * @see JsonNumber
+     */
+    JsonArrayBuilder add(BigDecimal value);
+
+    /**
+     * Adds a value to the array as a {@link JsonNumber}.
+     *
+     * @param value the number value
+     * @return this array builder
+     * @throws NullPointerException if the specified value is null
+     *
+     * @see JsonNumber
+     */
+    JsonArrayBuilder add(BigInteger value);
+
+    /**
+     * Adds a value to the array as a {@link JsonNumber}.
+     *
+     * @param value the number value
+     * @return this array builder
+     *
+     * @see JsonNumber
+     */
+    JsonArrayBuilder add(int value);
+
+    /**
+     * Adds a value to the array as a {@link JsonNumber}.
+     *
+     * @param value the number value
+     * @return this array builder
+     *
+     * @see JsonNumber
+     */
+    JsonArrayBuilder add(long value);
+
+    /**
+     * Adds a value to the array as a {@link JsonNumber}.
+     *
+     * @param value the number value
+     * @return this array builder
+     * @throws NumberFormatException if the value is Not-a-Number (NaN) or
+     *      infinity
+     *
+     * @see JsonNumber
+     */
+    JsonArrayBuilder add(double value);
+
+    /**
+     * Adds a {@link JsonValue#TRUE}  or {@link JsonValue#FALSE} value to the
+     * array.
+     *
+     * @param value the boolean value
+     * @return this array builder
+     */
+    JsonArrayBuilder add(boolean value);
+
+    /**
+     * Adds a {@link JsonValue#NULL} value to the array.
+     *
+     * @return this array builder
+     */
+    JsonArrayBuilder addNull();
+
+    /**
+     * Adds a {@link JsonObject} from an object builder to the array.
+     *
+     * @param builder the object builder
+     * @return this array builder
+     * @throws NullPointerException if the specified builder is null
+     */
+    JsonArrayBuilder add(JsonObjectBuilder builder);
+
+    /**
+     * Adds a {@link JsonArray} from an array builder to the array.
+     *
+     * @param builder the array builder
+     * @return this array builder
+     * @throws NullPointerException if the specified builder is null
+     */
+    JsonArrayBuilder add(JsonArrayBuilder builder);
+
+    /**
+     * Adds all elements of the array in the specified array builder to the array.
+     *
+     * @param builder the array builder
+     * @return this array builder
+     * @throws NullPointerException if the specified builder is null
+     *
+     @since 1.1
+     */
+    default JsonArrayBuilder addAll(JsonArrayBuilder builder) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Inserts a value to the array at the specified position. Shifts the value
+     * currently at that position (if any) and any subsequent values to the right
+     * (adds one to their indices).  Index starts with 0.
+     *
+     * @param index the position in the array
+     * @param value the JSON value
+     * @return this array builder
+     * @throws NullPointerException if the specified value is null
+     * @throws IndexOutOfBoundsException if the index is out of range
+     *   {@code (index < 0 || index > array size)}
+     *
+     * @since 1.1
+     */
+    default JsonArrayBuilder add(int index, JsonValue value) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Adds a value to the array as a {@link JsonString} at the specified position.
+     * Shifts the value currently at that position (if any) and any subsequent values
+     * to the right (adds one to their indices).  Index starts with 0.
+     *
+     * @param index the position in the array
+     * @param value the string value
+     * @return this array builder
+     * @throws NullPointerException if the specified value is null
+     * @throws IndexOutOfBoundsException if the index is out of range
+     *   {@code (index < 0 || index > array size)}
+     *
+     * @since 1.1
+     */
+    default JsonArrayBuilder add(int index, String value) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Adds a value to the array as a {@link JsonNumber} at the specified position.
+     * Shifts the value currently at that position (if any) and any subsequent values
+     * to the right (adds one to their indices).  Index starts with 0.
+     *
+     * @param index the position in the array
+     * @param value the number value
+     * @return this array builder
+     * @throws NullPointerException if the specified value is null
+     * @throws IndexOutOfBoundsException if the index is out of range
+     *   {@code (index < 0 || index > array size)}
+     *
+     * @see JsonNumber
+     *
+     * @since 1.1
+     */
+    default JsonArrayBuilder add(int index, BigDecimal value) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Adds a value to the array as a {@link JsonNumber} at the specified position.
+     * Shifts the value currently at that position (if any) and any subsequent values
+     * to the right (adds one to their indices).  Index starts with 0.
+     *
+     * @param index the position in the array
+     * @param value the number value
+     * @return this array builder
+     * @throws NullPointerException if the specified value is null
+     * @throws IndexOutOfBoundsException if the index is out of range
+     *   {@code (index < 0 || index > array size)}
+     *
+     * @see JsonNumber
+     *
+     * @since 1.1
+     */
+    default JsonArrayBuilder add(int index, BigInteger value) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Adds a value to the array as a {@link JsonNumber} at the specified position.
+     * Shifts the value currently at that position (if any) and any subsequent values
+     * to the right (adds one to their indices).  Index starts with 0.
+     *
+     * @param index the position in the array
+     * @param value the number value
+     * @return this array builder
+     * @throws IndexOutOfBoundsException if the index is out of range
+     *   {@code (index < 0 || index > array size)}
+     *
+     * @see JsonNumber
+     *
+     * @since 1.1
+     */
+    default JsonArrayBuilder add(int index, int value) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Adds a value to the array as a {@link JsonNumber} at the specified position.
+     * Shifts the value currently at that position (if any) and any subsequent values
+     * to the right (adds one to their indices).  Index starts with 0.
+     *
+     * @param index the position in the array
+     * @param value the number value
+     * @return this array builder
+     * @throws IndexOutOfBoundsException if the index is out of range
+     *   {@code (index < 0 || index > array size)}
+     *
+     * @see JsonNumber
+     *
+     * @since 1.1
+     */
+    default JsonArrayBuilder add(int index, long value) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Adds a value to the array as a {@link JsonNumber} at the specified position.
+     * Shifts the value currently at that position (if any) and any subsequent values
+     * to the right (adds one to their indices).  Index starts with 0.
+     *
+     * @param index the position in the array
+     * @param value the number value
+     * @return this array builder
+     * @throws NumberFormatException if the value is Not-a-Number (NaN) or
+     *      infinity
+     * @throws IndexOutOfBoundsException if the index is out of range
+     *   {@code (index < 0 || index > array size)}
+     *
+     * @see JsonNumber
+     *
+     * @since 1.1
+     */
+    default JsonArrayBuilder add(int index, double value) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Adds a {@link JsonValue#TRUE}  or {@link JsonValue#FALSE} value to the
+     * array at the specified position.
+     * Shifts the value currently at that position (if any) and any subsequent values
+     * to the right (adds one to their indices).  Index starts with 0.
+     *
+     * @param index the position in the array
+     * @param value the boolean value
+     * @return this array builder
+     * @throws IndexOutOfBoundsException if the index is out of range
+     *   {@code (index < 0 || index > array size)}
+     *
+     * @since 1.1
+     */
+    default JsonArrayBuilder add(int index, boolean value) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Adds a {@link JsonValue#NULL} value to the array at the specified position.
+     * Shifts the value currently at that position (if any) and any subsequent values
+     * to the right (adds one to their indices).  Index starts with 0.
+     *
+     * @param index the position in the array
+     * @return this array builder
+     * @throws IndexOutOfBoundsException if the index is out of range
+     *   {@code (index < 0 || index > array size)}
+     *
+     * @since 1.1
+     */
+    default JsonArrayBuilder addNull(int index) {
+        return add(index, JsonValue.NULL);
+    }
+
+    /**
+     * Adds a {@link JsonObject} from an object builder to the array at the specified position.
+     * Shifts the value currently at that position (if any) and any subsequent values
+     * to the right (adds one to their indices).  Index starts with 0.
+     *
+     * @param index the position in the array
+     * @param builder the object builder
+     * @return this array builder
+     * @throws NullPointerException if the specified builder is null
+     * @throws IndexOutOfBoundsException if the index is out of range
+     *   {@code (index < 0 || index > array size)}
+     *
+     * @since 1.1
+     */
+    default JsonArrayBuilder add(int index, JsonObjectBuilder builder) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Adds a {@link JsonArray} from an array builder to the array at the specified position.
+     * Shifts the value currently at that position (if any) and any subsequent values
+     * to the right (adds one to their indices).  Index starts with 0.
+     *
+     * @param index the position in the array
+     * @param builder the array builder
+     * @return this array builder
+     * @throws NullPointerException if the specified builder is null
+     * @throws IndexOutOfBoundsException if the index is out of range
+     *   {@code (index < 0 || index > array size)}
+     *
+     * @since 1.1
+     */
+    default JsonArrayBuilder add(int index, JsonArrayBuilder builder) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Replaces a value in the array with the specified value at the
+     * specified position.
+     *
+     * @param index the position in the array
+     * @param value the JSON value
+     * @return this array builder
+     * @throws NullPointerException if the specified value is null
+     * @throws IndexOutOfBoundsException if the index is out of range
+     *   {@code (index < 0 || index >= array size)}
+     *
+     * @since 1.1
+     */
+    default JsonArrayBuilder set(int index, JsonValue value) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Replaces a value in the array with the specified value as a
+     * {@link JsonString} at the specified position.
+     *
+     * @param index the position in the array
+     * @param value the string value
+     * @return this array builder
+     * @throws NullPointerException if the specified value is null
+     * @throws IndexOutOfBoundsException if the index is out of range
+     *   {@code (index < 0 || index >= array size)}
+     *
+     * @since 1.1
+     */
+    default JsonArrayBuilder set(int index, String value) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Replaces a value in the array with the specified value as a
+     * {@link JsonNumber} at the specified position.
+     *
+     * @param index the position in the array
+     * @param value the number value
+     * @return this array builder
+     * @throws NullPointerException if the specified value is null
+     * @throws IndexOutOfBoundsException if the index is out of range
+     *   {@code (index < 0 || index >= array size)}
+     *
+     * @see JsonNumber
+     *
+     * @since 1.1
+     */
+    default JsonArrayBuilder set(int index, BigDecimal value) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Replaces a value in the array with the specified value as a
+     * {@link JsonNumber} at the specified position.
+     *
+     * @param index the position in the array
+     * @param value the number value
+     * @return this array builder
+     * @throws NullPointerException if the specified value is null
+     * @throws IndexOutOfBoundsException if the index is out of range
+     *   {@code (index < 0 || index >= array size)}
+     *
+     * @see JsonNumber
+     *
+     * @since 1.1
+     */
+    default JsonArrayBuilder set(int index, BigInteger value) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Replaces a value in the array with the specified value as a
+     * {@link JsonNumber} at the specified position.
+     *
+     * @param index the position in the array
+     * @param value the number value
+     * @return this array builder
+     * @throws IndexOutOfBoundsException if the index is out of range
+     *   {@code (index < 0 || index >= array size)}
+     *
+     * @see JsonNumber
+     *
+     * @since 1.1
+     */
+    default JsonArrayBuilder set(int index, int value) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Replaces a value in the array with the specified value as a
+     * {@link JsonNumber} at the specified position.
+     *
+     * @param index the position in the array
+     * @param value the number value
+     * @return this array builder
+     * @throws IndexOutOfBoundsException if the index is out of range
+     *   {@code (index < 0 || index >= array size)}
+     *
+     * @see JsonNumber
+     *
+     * @since 1.1
+     */
+    default JsonArrayBuilder set(int index, long value) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Replaces a value in the array with the specified value as a
+     * {@link JsonNumber} at the specified position.
+     *
+     * @param index the position in the array
+     * @param value the number value
+     * @return this array builder
+     * @throws NumberFormatException if the value is Not-a-Number (NaN) or
+     *      infinity
+     * @throws IndexOutOfBoundsException if the index is out of range
+     *   {@code (index < 0 || index >= array size)}
+     *
+     * @see JsonNumber
+     *
+     * @since 1.1
+     */
+    default JsonArrayBuilder set(int index, double value) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Replaces a value in the array with
+     * a {@link JsonValue#TRUE}  or {@link JsonValue#FALSE} value
+     * at the specified position.
+     *
+     * @param index the position in the array
+     * @param value the boolean value
+     * @return this array builder
+     * @throws IndexOutOfBoundsException if the index is out of range
+     *   {@code (index < 0 || index >= array size)}
+     *
+     * @since 1.1
+     */
+    default JsonArrayBuilder set(int index, boolean value) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Replaces a value in the array with
+     * a {@link JsonValue#NULL} value at the specified position.
+     *
+     * @param index the position in the array
+     * @return this array builder
+     * @throws IndexOutOfBoundsException if the index is out of range
+     *   {@code (index < 0 || index >= array size)}
+     *
+     * @since 1.1
+     */
+    default JsonArrayBuilder setNull(int index) {
+        return set(index, JsonValue.NULL);
+    }
+
+    /**
+     * Replaces a value in the array with the specified value as a
+     * {@link JsonObject} from an object builder at the specified position.
+     *
+     * @param index the position in the array
+     * @param builder the object builder
+     * @return this array builder
+     * @throws NullPointerException if the specified builder is null
+     * @throws IndexOutOfBoundsException if the index is out of range
+     *   {@code (index < 0 || index >= array size)}
+     *
+     * @since 1.1
+     */
+    default JsonArrayBuilder set(int index, JsonObjectBuilder builder) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Replaces a value in the array with the specified value as a
+     * {@link JsonArray} from an array builder at the specified position.
+     *
+     * @param index the position in the array
+     * @param builder the array builder
+     * @return this array builder
+     * @throws NullPointerException if the specified builder is null
+     * @throws IndexOutOfBoundsException if the index is out of range
+     *   {@code (index < 0 || index >= array size)}
+     *
+     * @since 1.1
+     */
+    default JsonArrayBuilder set(int index, JsonArrayBuilder builder) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Remove the value in the array at the specified position.
+     * Shift any subsequent values to the left (subtracts one from their
+     * indices.
+     *
+     * @param index the position in the array
+     * @return this array builder
+     * @throws IndexOutOfBoundsException if the index is out of range
+     *   {@code (index < 0 || index >= array size)}
+     *
+     * @since 1.1
+     */
+    default JsonArrayBuilder remove(int index) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Returns the current array.
+     *
+     * @return the current JSON array
+     */
+    JsonArray build();
+
+}
+
diff --git a/src/javax/json/JsonBuilderFactory.java b/src/javax/json/JsonBuilderFactory.java
index 99b30e9..63b6a97 100644
--- a/src/javax/json/JsonBuilderFactory.java
+++ b/src/javax/json/JsonBuilderFactory.java
@@ -1,105 +1,157 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json;
-
-import java.util.Map;
-
-/**
- * Factory to create {@link JsonObjectBuilder} and {@link JsonArrayBuilder}
- * instances. If a factory instance is configured with some configuration,
- * that would be used to configure the created builder instances.
- *
- * <p>
- * {@code JsonObjectBuilder} and {@code JsonArrayBuilder} can also be created
- * using {@link Json}'s methods. If multiple builder instances are created,
- * then creating them using a builder factory is preferred.
- *
- * <p>
- * <b>For example:</b>
- * <pre>
- * <code>
- * JsonBuilderFactory factory = Json.createBuilderFactory(...);
- * JsonArray value = factory.createArrayBuilder()
- *     .add(factory.createObjectBuilder()
- *         .add("type", "home")
- *         .add("number", "212 555-1234"))
- *     .add(factory.createObjectBuilder()
- *         .add("type", "fax")
- *         .add("number", "646 555-4567"))
- *     .build();
- * </code>
- * </pre>
- *
- * <p> All the methods in this class are safe for use by multiple concurrent
- * threads.
- *
- * @author Jitendra Kotamraju
- */
-public interface JsonBuilderFactory {
-
-    /**
-     * Creates a {@code JsonObjectBuilder} instance that is used to build
-     * {@link JsonObject}.
-     *
-     * @return a JSON object builder
-     */
-    JsonObjectBuilder createObjectBuilder();
-
-    /**
-     * Creates a {@code JsonArrayBuilder} instance that is used to build
-     * {@link JsonArray}
-     *
-     * @return a JSON array builder
-     */
-    JsonArrayBuilder createArrayBuilder();
-
-    /**
-     * Returns read-only map of supported provider specific configuration
-     * properties that are used to configure the created JSON builders.
-     * If there are any specified configuration properties that are not
-     * supported by the provider, they won't be part of the returned map.
-     *
-     * @return a map of supported provider specific properties that are used
-     * to configure the builders. The map be empty but not null.
-     */
-    Map<String, ?> getConfigInUse();
-
-}
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2013-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.json;
+
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * Factory to create {@link JsonObjectBuilder} and {@link JsonArrayBuilder}
+ * instances. If a factory instance is configured with some configuration,
+ * that would be used to configure the created builder instances.
+ *
+ * <p>
+ * {@code JsonObjectBuilder} and {@code JsonArrayBuilder} can also be created
+ * using {@link Json}'s methods. If multiple builder instances are created,
+ * then creating them using a builder factory is preferred.
+ *
+ * <p>
+ * <b>For example:</b>
+ * <pre>
+ * <code>
+ * JsonBuilderFactory factory = Json.createBuilderFactory(...);
+ * JsonArray value = factory.createArrayBuilder()
+ *     .add(factory.createObjectBuilder()
+ *         .add("type", "home")
+ *         .add("number", "212 555-1234"))
+ *     .add(factory.createObjectBuilder()
+ *         .add("type", "fax")
+ *         .add("number", "646 555-4567"))
+ *     .build();
+ * </code>
+ * </pre>
+ *
+ * <p> All the methods in this class are safe for use by multiple concurrent
+ * threads.
+ */
+public interface JsonBuilderFactory {
+
+    /**
+     * Creates a {@code JsonObjectBuilder} instance that is used to build
+     * {@link JsonObject}.
+     *
+     * @return a JSON object builder
+     */
+    JsonObjectBuilder createObjectBuilder();
+
+    /**
+     * Creates a {@code JsonObjectBuilder} instance, initialized with an object.
+     *
+     * @param object the initial object in the builder
+     * @return a JSON object builder
+     * @throws NullPointerException if specified object is {@code null}
+     *
+     * @since 1.1
+     */
+    default JsonObjectBuilder createObjectBuilder(JsonObject object) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Creates a {@code JsonObjectBuilder} instance, initialized with the specified object.
+     *
+     * @param object the initial object in the builder
+     * @return a JSON object builder
+     * @throws NullPointerException if specified object is {@code null}
+     *
+     * @since 1.1
+     */
+    default JsonObjectBuilder createObjectBuilder(Map<String, Object> object) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Creates a {@code JsonArrayBuilder} instance that is used to build
+     * {@link JsonArray}
+     *
+     * @return a JSON array builder
+     */
+    JsonArrayBuilder createArrayBuilder();
+
+    /**
+     * Creates a {@code JsonArrayBuilder} instance, initialized with an array.
+     *
+     * @param array the initial array in the builder
+     * @return a JSON array builder
+     * @throws NullPointerException if specified array is {@code null}
+     *
+     * @since 1.1
+     */
+    default JsonArrayBuilder createArrayBuilder(JsonArray array) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Creates a {@code JsonArrayBuilder} instance,
+     * initialized with the content of specified collection.
+     *
+     * @param collection the initial data for the builder
+     * @return a JSON array builder
+     * @throws NullPointerException if specified collection is {@code null}
+     *
+     * @since 1.1
+     */
+    default JsonArrayBuilder createArrayBuilder(Collection<?> collection) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Returns read-only map of supported provider specific configuration
+     * properties that are used to configure the created JSON builders.
+     * If there are any specified configuration properties that are not
+     * supported by the provider, they won't be part of the returned map.
+     *
+     * @return a map of supported provider specific properties that are used
+     * to configure the builders. The map be empty but not null.
+     */
+    Map<String, ?> getConfigInUse();
+
+}
diff --git a/src/javax/json/JsonException.java b/src/javax/json/JsonException.java
index e998080..14cc927 100644
--- a/src/javax/json/JsonException.java
+++ b/src/javax/json/JsonException.java
@@ -1,81 +1,79 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2011-2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json;
-
-/**
- * <code>JsonException</code> indicates that some exception happened during
- * JSON processing.
- *
- * @author Jitendra Kotamraju
- */
-public class JsonException extends RuntimeException {
-
-    /**
-     * Constructs a new runtime exception with the specified detail message.
-     * The cause is not initialized, and may subsequently be initialized by a
-     * call to {@link #initCause}.
-     *
-     * @param message the detail message. The detail message is saved for
-     *          later retrieval by the {@link #getMessage()} method.
-     */
-    public JsonException(String message) {
-        super(message);
-    }
-
-    /**
-     * Constructs a new runtime exception with the specified detail message and
-     * cause.  <p>Note that the detail message associated with
-     * {@code cause} is <i>not</i> automatically incorporated in
-     * this runtime exception's detail message.
-     *
-     * @param message the detail message (which is saved for later retrieval
-     *         by the {@link #getMessage()} method).
-     * @param cause the cause (which is saved for later retrieval by the
-     *         {@link #getCause()} method). (A <tt>null</tt> value is
-     *         permitted, and indicates that the cause is nonexistent or
-     *         unknown.)
-     */
-    public JsonException(String message, Throwable cause) {
-        super(message, cause);
-    }
-
-}
-
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2011-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.json;
+
+/**
+ * <code>JsonException</code> indicates that some exception happened during
+ * JSON processing.
+ */
+public class JsonException extends RuntimeException {
+
+    /**
+     * Constructs a new runtime exception with the specified detail message.
+     * The cause is not initialized, and may subsequently be initialized by a
+     * call to {@link #initCause}.
+     *
+     * @param message the detail message. The detail message is saved for
+     *          later retrieval by the {@link #getMessage()} method.
+     */
+    public JsonException(String message) {
+        super(message);
+    }
+
+    /**
+     * Constructs a new runtime exception with the specified detail message and
+     * cause.  <p>Note that the detail message associated with
+     * {@code cause} is <i>not</i> automatically incorporated in
+     * this runtime exception's detail message.
+     *
+     * @param message the detail message (which is saved for later retrieval
+     *         by the {@link #getMessage()} method).
+     * @param cause the cause (which is saved for later retrieval by the
+     *         {@link #getCause()} method). (A <tt>null</tt> value is
+     *         permitted, and indicates that the cause is nonexistent or
+     *         unknown.)
+     */
+    public JsonException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+}
+
diff --git a/src/javax/json/JsonMergePatch.java b/src/javax/json/JsonMergePatch.java
new file mode 100644
index 0000000..1523347
--- /dev/null
+++ b/src/javax/json/JsonMergePatch.java
@@ -0,0 +1,87 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2015-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.json;
+
+/**
+ * <p>This interface represents an implementation of a JSON Merge Patch
+ * as defined by <a href="http://tools.ietf.org/html/rfc7396">RFC 7396</a>.
+ * </p>
+ * <p>A {@code JsonMergePatch} can be instantiated with {@link Json#createMergePatch(JsonValue)}
+ * by specifying the patch operations in a JSON Merge Patch or using {@link Json#createMergeDiff(JsonValue, JsonValue)}
+ * to create a JSON Merge Patch based on the difference between two {@code JsonValue}s.
+ * </p>
+ * The following illustrates both approaches.
+ * <p>1. Construct a JsonMergePatch with an existing JSON Merge Patch.
+ * <pre>{@code
+ *   JsonValue contacts = ... ; // The target to be patched
+ *   JsonValue patch = ...  ; // JSON Merge Patch
+ *   JsonMergePatch mergePatch = Json.createMergePatch(patch);
+ *   JsonValue result = mergePatch.apply(contacts);
+ * } </pre>
+ * 2. Construct a JsonMergePatch from a difference between two {@code JsonValue}s.
+ * <pre>{@code
+ *   JsonValue source = ... ; // The source object
+ *   JsonValue target = ... ; // The modified object
+ *   JsonMergePatch mergePatch = Json.createMergeDiff(source, target); // The diff between source and target in a Json Merge Patch format
+ * } </pre>
+ *
+ * @see <a href="http://tools.ietf.org/html/rfc7396">RFC 7396</a>
+ *
+ * @since 1.1
+ */
+public interface JsonMergePatch {
+
+    /**
+     * Applies the JSON Merge Patch to the specified {@code target}.
+     * The target is not modified by the patch.
+     *
+     * @param target the target to apply the merge patch
+     * @return the transformed target after the patch
+     */
+    JsonValue apply(JsonValue target);
+
+    /**
+     * Returns the {@code JsonMergePatch} as {@code JsonValue}.
+     *
+     * @return this {@code JsonMergePatch} as {@code JsonValue}
+     */
+    JsonValue toJsonValue();
+}
diff --git a/src/javax/json/JsonNumber.java b/src/javax/json/JsonNumber.java
index 3123293..5c247bd 100644
--- a/src/javax/json/JsonNumber.java
+++ b/src/javax/json/JsonNumber.java
@@ -1,201 +1,210 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2011-2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-/**
- * An immutable JSON number value.
- *
- * <p>
- * Implementations may use a {@link BigDecimal} object to store the numeric
- * value internally.
- * The {@code BigDecimal} object can be constructed from the following types:
- * {@link BigDecimal#BigDecimal(int) <code>int</code>},
- * {@link BigDecimal#BigDecimal(long) <code>long</code>},
- * {@link BigDecimal#BigDecimal(BigInteger) <code>BigInteger</code>},
- * {@link BigDecimal#valueOf(double) <code>double</code>}, and
- * {@link BigDecimal#BigDecimal(String) <code>String</code>}.
- * Some of the method semantics in this class are defined using the
- * {@code BigDecimal} semantics.
- *
- * @author Jitendra Kotamraju
- */
-public interface JsonNumber extends JsonValue {
-
-    /**
-     * Returns true if this JSON number is a integral number. This method
-     * semantics are defined using {@code bigDecimalValue().scale()}. If the
-     * scale is zero, then it is considered integral type. This integral type
-     * information can be used to invoke an appropriate accessor method to
-     * obtain a numeric value as in the following example:
-     *
-     * <pre>
-     * <code>
-     * JsonNumber num = ...
-     * if (num.isIntegral()) {
-     *     num.longValue();     // or other methods to get integral value
-     * } else {
-     *     num.doubleValue();   // or other methods to get decimal number value
-     * }
-     * </code>
-     * </pre>
-     *
-     * @return true if this number is a integral number, otherwise false
-     */
-    boolean isIntegral();
-
-    /**
-     * Returns this JSON number as an {@code int}. Note that this conversion
-     * can lose information about the overall magnitude and precision of the
-     * number value as well as return a result with the opposite sign.
-     *
-     * @return an {@code int} representation of the JSON number
-     * @see java.math.BigDecimal#intValue()
-     */
-    int intValue();
-
-    /**
-     * Returns this JSON number as an {@code int}.
-     *
-     * @return an {@code int} representation of the JSON number
-     * @throws ArithmeticException if the number has a nonzero fractional
-     *         part or if it does not fit in an {@code int}
-     * @see java.math.BigDecimal#intValueExact()
-     */
-    int intValueExact();
-
-    /**
-     * Returns this JSON number as a {@code long}. Note that this conversion
-     * can lose information about the overall magnitude and precision of the
-     * number value as well as return a result with the opposite sign.
-     *
-     * @return a {@code long} representation of the JSON number.
-     * @see java.math.BigDecimal#longValue()
-     */
-    long longValue();
-
-    /**
-     * Returns this JSON number as a {@code long}.
-     *
-     * @return a {@code long} representation of the JSON number
-     * @throws ArithmeticException if the number has a non-zero fractional
-     *         part or if it does not fit in a {@code long}
-     * @see java.math.BigDecimal#longValueExact()
-     */
-    long longValueExact();
-
-    /**
-     * Returns this JSON number as a {@link BigInteger} object. This is a
-     * a convenience method for {@code bigDecimalValue().toBigInteger()}.
-     * Note that this conversion can lose information about the overall
-     * magnitude and precision of the number value as well as return a result
-     * with the opposite sign.
-     *
-     * @return a {@code BigInteger} representation of the JSON number.
-     * @see java.math.BigDecimal#toBigInteger()
-     */
-    BigInteger bigIntegerValue();
-
-    /**
-     * Returns this JSON number as a {@link BigDecimal} object. This is a
-     * convenience method for {@code bigDecimalValue().toBigIntegerExact()}.
-     *
-     * @return a {@link BigInteger} representation of the JSON number
-     * @throws ArithmeticException if the number has a nonzero fractional part
-     * @see java.math.BigDecimal#toBigIntegerExact()
-     */
-    BigInteger bigIntegerValueExact();
-
-    /**
-     * Returns this JSON number as a {@code double}. This is a
-     * a convenience method for {@code bigDecimalValue().doubleValue()}.
-     * Note that this conversion can lose information about the overall
-     * magnitude and precision of the number value as well as return a result
-     * with the opposite sign.
-     *
-     * @return a {@code double} representation of the JSON number
-     * @see java.math.BigDecimal#doubleValue()
-     */
-    double doubleValue();
-
-    /**
-     * Returns this JSON number as a {@link BigDecimal} object.
-     *
-     * @return a {@link BigDecimal} representation of the JSON number
-     */
-    BigDecimal bigDecimalValue();
-
-    /**
-     * Returns a JSON text representation of the JSON number. The
-     * representation is equivalent to {@link BigDecimal#toString()}.
-     *
-     * @return JSON text representation of the number
-     */
-    @Override
-    String toString();
-
-    /**
-     * Compares the specified object with this {@code JsonNumber} object for
-     * equality. Returns {@code true} if and only if the type of the specified
-     * object is also {@code JsonNumber} and their {@link #bigDecimalValue()}
-     * objects are <i>equal</i>
-     *
-     * @param obj the object to be compared for equality with 
-     *      this {@code JsonNumber}
-     * @return {@code true} if the specified object is equal to this 
-     *      {@code JsonNumber}
-     */
-    @Override
-    boolean equals(Object obj);
-
-    /**
-     * Returns the hash code value for this {@code JsonNumber} object.  The
-     * hash code of a {@code JsonNumber} object is defined as the hash code of
-     * its {@link #bigDecimalValue()} object.
-     *
-     * @return the hash code value for this {@code JsonNumber} object
-     */
-    @Override
-    int hashCode();
-
-}
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2011-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.json;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+
+/**
+ * An immutable JSON number value.
+ *
+ * <p>
+ * Implementations may use a {@link BigDecimal} object to store the numeric
+ * value internally.
+ * The {@code BigDecimal} object can be constructed from the following types:
+ * <code>int</code> {@link BigDecimal#BigDecimal(int)},
+ * <code>long</code> {@link BigDecimal#BigDecimal(long)},
+ * <code>BigInteger</code> {@link BigDecimal#BigDecimal(BigInteger)},
+ * <code>double</code> {@link BigDecimal#valueOf(double)}, and
+ * <code>String</code> {@link BigDecimal#BigDecimal(String)}.
+ * Some of the method semantics in this class are defined using the
+ * {@code BigDecimal} semantics.
+ */
+public interface JsonNumber extends JsonValue {
+
+    /**
+     * Returns true if this JSON number is a integral number. This method
+     * semantics are defined using {@code bigDecimalValue().scale()}. If the
+     * scale is zero, then it is considered integral type. This integral type
+     * information can be used to invoke an appropriate accessor method to
+     * obtain a numeric value as in the following example:
+     *
+     * <pre>
+     * <code>
+     * JsonNumber num = ...
+     * if (num.isIntegral()) {
+     *     num.longValue();     // or other methods to get integral value
+     * } else {
+     *     num.doubleValue();   // or other methods to get decimal number value
+     * }
+     * </code>
+     * </pre>
+     *
+     * @return true if this number is a integral number, otherwise false
+     */
+    boolean isIntegral();
+
+    /**
+     * Returns this JSON number as an {@code int}. Note that this conversion
+     * can lose information about the overall magnitude and precision of the
+     * number value as well as return a result with the opposite sign.
+     *
+     * @return an {@code int} representation of the JSON number
+     * @see java.math.BigDecimal#intValue()
+     */
+    int intValue();
+
+    /**
+     * Returns this JSON number as an {@code int}.
+     *
+     * @return an {@code int} representation of the JSON number
+     * @throws ArithmeticException if the number has a nonzero fractional
+     *         part or if it does not fit in an {@code int}
+     * @see java.math.BigDecimal#intValueExact()
+     */
+    int intValueExact();
+
+    /**
+     * Returns this JSON number as a {@code long}. Note that this conversion
+     * can lose information about the overall magnitude and precision of the
+     * number value as well as return a result with the opposite sign.
+     *
+     * @return a {@code long} representation of the JSON number.
+     * @see java.math.BigDecimal#longValue()
+     */
+    long longValue();
+
+    /**
+     * Returns this JSON number as a {@code long}.
+     *
+     * @return a {@code long} representation of the JSON number
+     * @throws ArithmeticException if the number has a non-zero fractional
+     *         part or if it does not fit in a {@code long}
+     * @see java.math.BigDecimal#longValueExact()
+     */
+    long longValueExact();
+
+    /**
+     * Returns this JSON number as a {@link BigInteger} object. This is a
+     * a convenience method for {@code bigDecimalValue().toBigInteger()}.
+     * Note that this conversion can lose information about the overall
+     * magnitude and precision of the number value as well as return a result
+     * with the opposite sign.
+     *
+     * @return a {@code BigInteger} representation of the JSON number.
+     * @see java.math.BigDecimal#toBigInteger()
+     */
+    BigInteger bigIntegerValue();
+
+    /**
+     * Returns this JSON number as a {@link BigInteger} object. This is a
+     * convenience method for {@code bigDecimalValue().toBigIntegerExact()}.
+     *
+     * @return a {@link BigInteger} representation of the JSON number
+     * @throws ArithmeticException if the number has a nonzero fractional part
+     * @see java.math.BigDecimal#toBigIntegerExact()
+     */
+    BigInteger bigIntegerValueExact();
+
+    /**
+     * Returns this JSON number as a {@code double}. This is a
+     * a convenience method for {@code bigDecimalValue().doubleValue()}.
+     * Note that this conversion can lose information about the overall
+     * magnitude and precision of the number value as well as return a result
+     * with the opposite sign.
+     *
+     * @return a {@code double} representation of the JSON number
+     * @see java.math.BigDecimal#doubleValue()
+     */
+    double doubleValue();
+
+    /**
+     * Returns this JSON number as a {@link BigDecimal} object.
+     *
+     * @return a {@link BigDecimal} representation of the JSON number
+     */
+    BigDecimal bigDecimalValue();
+
+    /**
+     * Returns this JSON number as a {@link Number} object.
+     *
+     * @return a {@link Number} representation of the JSON number
+     *
+     * @since 1.1
+     */
+    default Number numberValue() {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Returns a JSON text representation of the JSON number. The
+     * representation is equivalent to {@link BigDecimal#toString()}.
+     *
+     * @return JSON text representation of the number
+     */
+    @Override
+    String toString();
+
+    /**
+     * Compares the specified object with this {@code JsonNumber} object for
+     * equality. Returns {@code true} if and only if the type of the specified
+     * object is also {@code JsonNumber} and their {@link #bigDecimalValue()}
+     * objects are <i>equal</i>
+     *
+     * @param obj the object to be compared for equality with
+     *      this {@code JsonNumber}
+     * @return {@code true} if the specified object is equal to this
+     *      {@code JsonNumber}
+     */
+    @Override
+    boolean equals(Object obj);
+
+    /**
+     * Returns the hash code value for this {@code JsonNumber} object.  The
+     * hash code of a {@code JsonNumber} object is defined as the hash code of
+     * its {@link #bigDecimalValue()} object.
+     *
+     * @return the hash code value for this {@code JsonNumber} object
+     */
+    @Override
+    int hashCode();
+
+}
diff --git a/src/javax/json/JsonObject.java b/src/javax/json/JsonObject.java
index 2eabc99..3af6563 100644
--- a/src/javax/json/JsonObject.java
+++ b/src/javax/json/JsonObject.java
@@ -1,275 +1,273 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2011-2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json;
-
-import java.util.Map;
-
-/**
- * {@code JsonObject} class represents an immutable JSON object value
- * (an unordered collection of zero or more name/value pairs).
- * It also provides unmodifiable map view to the JSON object
- * name/value mappings.
- *
- * <p>A JsonObject instance can be created from an input source using
- * {@link JsonReader#readObject()}. For example:
- * <pre><code>
- * JsonReader jsonReader = Json.createReader(...);
- * JsonObject object = jsonReader.readObject();
- * jsonReader.close();
- * </code></pre>
- *
- * It can also be built from scratch using a {@link JsonObjectBuilder}.
- *
- * <p>For example 1: An empty JSON object can be built as follows:
- * <pre><code>
- * JsonObject object = Json.createObjectBuilder().build();
- * </code></pre>
- *
- * For example 2: The following JSON
- * <pre><code>
- * {
- *     "firstName": "John", "lastName": "Smith", "age": 25,
- *     "address" : {
- *         "streetAddress": "21 2nd Street",
- *         "city": "New York",
- *         "state": "NY",
- *         "postalCode": "10021"
- *     },
- *     "phoneNumber": [
- *         { "type": "home", "number": "212 555-1234" },
- *         { "type": "fax", "number": "646 555-4567" }
- *     ]
- * }
- * </code></pre>
- * can be built using :
- * <pre><code>
- * JsonObject value = Json.createObjectBuilder()
- *     .add("firstName", "John")
- *     .add("lastName", "Smith")
- *     .add("age", 25)
- *     .add("address", Json.createObjectBuilder()
- *         .add("streetAddress", "21 2nd Street")
- *         .add("city", "New York")
- *         .add("state", "NY")
- *         .add("postalCode", "10021"))
- *     .add("phoneNumber", Json.createArrayBuilder()
- *         .add(Json.createObjectBuilder()
- *             .add("type", "home")
- *             .add("number", "212 555-1234"))
- *         .add(Json.createObjectBuilder()
- *             .add("type", "fax")
- *             .add("number", "646 555-4567")))
- *     .build();
- * </code></pre>
- *
- * {@code JsonObject} can be written to JSON as follows:
- * <pre><code>
- * JsonWriter writer = ...
- * JsonObject obj = ...;
- * writer.writeObject(obj);
- * </code></pre>
- *
- * {@code JsonObject} values can be {@link JsonObject}, {@link JsonArray},
- * {@link JsonString}, {@link JsonNumber}, {@link JsonValue#TRUE},
- * {@link JsonValue#FALSE}, {@link JsonValue#NULL}. These values can be
- * accessed using various accessor methods.
- *
- * <p>In the above example 2, "John" can be got using
- * <pre><code>
- * String firstName = object.getString("firstName");
- * </code></pre>
- *
- * This map object provides read-only access to the JSON object data,
- * and attempts to modify the map, whether direct or via its collection
- * views, result in an {@code UnsupportedOperationException}.
- *
- * <p>The map object's iteration ordering is based on the order in which
- * name/value pairs are added to the corresponding builder or the order
- * in which name/value pairs appear in the corresponding stream.
- *
- * @author Jitendra Kotamraju
- */
-public interface JsonObject extends JsonStructure, Map<String, JsonValue> {
-
-    /**
-     * Returns the array value to which the specified name is mapped.
-     * This is a convenience method for {@code (JsonArray)get(name)} to
-     * get the value.
-     *
-     * @param name the name whose associated value is to be returned
-     * @return the array value to which the specified name is mapped, or
-     *         {@code null} if this object contains no mapping for the name
-     * @throws ClassCastException if the value to which the specified name
-     * is mapped is not assignable to JsonArray type
-     */
-    JsonArray getJsonArray(String name);
-
-    /**
-     * Returns the object value to which the specified name is mapped.
-     * This is a convenience method for {@code (JsonObject)get(name)} to
-     * get the value.
-     *
-     * @param name the name whose associated value is to be returned
-     * @return the object value to which the specified name is mapped, or
-     *         {@code null} if this object contains no mapping for the name
-     * @throws ClassCastException if the value to which the specified name
-     * is mapped is not assignable to JsonObject type
-     */
-    JsonObject getJsonObject(String name);
-
-    /**
-     * Returns the number value to which the specified name is mapped.
-     * This is a convenience method for {@code (JsonNumber)get(name)} to
-     * get the value.
-     *
-     * @param name the name whose associated value is to be returned
-     * @return the number value to which the specified name is mapped, or
-     *         {@code null} if this object contains no mapping for the name
-     * @throws ClassCastException if the value to which the specified name
-     * is mapped is not assignable to JsonNumber type
-     */
-    JsonNumber getJsonNumber(String name);
-
-    /**
-     * Returns the string value to which the specified name is mapped.
-     * This is a convenience method for {@code (JsonString)get(name)} to
-     * get the value.
-     *
-     * @param name the name whose associated value is to be returned
-     * @return the string value to which the specified name is mapped, or
-     *         {@code null} if this object contains no mapping for the name
-     * @throws ClassCastException if the value to which the specified name
-     * is mapped is not assignable to JsonString type
-     */
-    JsonString getJsonString(String name);
-
-    /**
-     * A convenience method for
-     * {@code getJsonString(name).getString()}
-     *
-     * @param name whose associated value is to be returned as String
-     * @return the String value to which the specified name is mapped
-     * @throws NullPointerException if the specified name doesn't have any
-     * mapping
-     * @throws ClassCastException if the value for specified name mapping
-     * is not assignable to JsonString
-     */
-    String getString(String name);
-
-    /**
-     * Returns the string value of the associated {@code JsonString} mapping
-     * for the specified name. If {@code JsonString} is found, then its
-     * {@link javax.json.JsonString#getString()} is returned. Otherwise,
-     * the specified default value is returned.
-     *
-     * @param name whose associated value is to be returned as String
-     * @param defaultValue a default value to be returned
-     * @return the string value of the associated mapping for the name,
-     * or the default value
-     */
-    String getString(String name, String defaultValue);
-
-    /**
-     * A convenience method for
-     * {@code getJsonNumber(name).intValue()}
-     *
-     * @param name whose associated value is to be returned as int
-     * @return the int value to which the specified name is mapped
-     * @throws NullPointerException if the specified name doesn't have any
-     * mapping
-     * @throws ClassCastException if the value for specified name mapping
-     * is not assignable to JsonNumber
-     */
-    int getInt(String name);
-
-    /**
-     * Returns the int value of the associated {@code JsonNumber} mapping
-     * for the specified name. If {@code JsonNumber} is found, then its
-     * {@link javax.json.JsonNumber#intValue()} is returned. Otherwise,
-     * the specified default value is returned.
-     *
-     * @param name whose associated value is to be returned as int
-     * @param defaultValue a default value to be returned
-     * @return the int value of the associated mapping for the name,
-     * or the default value
-     */
-    int getInt(String name, int defaultValue);
-
-    /**
-     * Returns the boolean value of the associated mapping for the specified
-     * name. If the associated mapping is JsonValue.TRUE, then returns true.
-     * If the associated mapping is JsonValue.FALSE, then returns false.
-     *
-     * @param name whose associated value is to be returned as boolean
-     * @return the boolean value to which the specified name is mapped
-     * @throws NullPointerException if the specified name doesn't have any
-     * mapping
-     * @throws ClassCastException if the value for specified name mapping
-     * is not assignable to JsonValue.TRUE or JsonValue.FALSE
-     */
-    boolean getBoolean(String name);
-
-    /**
-     * Returns the boolean value of the associated mapping for the specified
-     * name. If the associated mapping is JsonValue.TRUE, then returns true.
-     * If the associated mapping is JsonValue.FALSE, then returns false.
-     * Otherwise, the specified default value is returned.
-     *
-     * @param name whose associated value is to be returned as int
-     * @param defaultValue a default value to be returned
-     * @return the boolean value of the associated mapping for the name,
-     * or the default value
-     */
-    boolean getBoolean(String name, boolean defaultValue);
-
-    /**
-     * Returns {@code true} if the associated value for the specified name is
-     * {@code JsonValue.NULL}.
-     *
-     * @param name name whose associated value is checked
-     * @return return true if the associated value is {@code JsonValue.NUL},
-     * otherwise false
-     * @throws NullPointerException if the specified name doesn't have any
-     * mapping
-     */
-    boolean isNull(String name);
-
-}
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2011-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.json;
+
+import java.util.Map;
+
+/**
+ * {@code JsonObject} class represents an immutable JSON object value
+ * (an unordered collection of zero or more name/value pairs).
+ * It also provides unmodifiable map view to the JSON object
+ * name/value mappings.
+ *
+ * <p>A JsonObject instance can be created from an input source using
+ * {@link JsonReader#readObject()}. For example:
+ * <pre><code>
+ * JsonReader jsonReader = Json.createReader(...);
+ * JsonObject object = jsonReader.readObject();
+ * jsonReader.close();
+ * </code></pre>
+ *
+ * It can also be built from scratch using a {@link JsonObjectBuilder}.
+ *
+ * <p>For example 1: An empty JSON object can be built as follows:
+ * <pre><code>
+ * JsonObject object = Json.createObjectBuilder().build();
+ * </code></pre>
+ *
+ * For example 2: The following JSON
+ * <pre><code>
+ * {
+ *     "firstName": "John", "lastName": "Smith", "age": 25,
+ *     "address" : {
+ *         "streetAddress": "21 2nd Street",
+ *         "city": "New York",
+ *         "state": "NY",
+ *         "postalCode": "10021"
+ *     },
+ *     "phoneNumber": [
+ *         { "type": "home", "number": "212 555-1234" },
+ *         { "type": "fax", "number": "646 555-4567" }
+ *     ]
+ * }
+ * </code></pre>
+ * can be built using :
+ * <pre><code>
+ * JsonObject value = Json.createObjectBuilder()
+ *     .add("firstName", "John")
+ *     .add("lastName", "Smith")
+ *     .add("age", 25)
+ *     .add("address", Json.createObjectBuilder()
+ *         .add("streetAddress", "21 2nd Street")
+ *         .add("city", "New York")
+ *         .add("state", "NY")
+ *         .add("postalCode", "10021"))
+ *     .add("phoneNumber", Json.createArrayBuilder()
+ *         .add(Json.createObjectBuilder()
+ *             .add("type", "home")
+ *             .add("number", "212 555-1234"))
+ *         .add(Json.createObjectBuilder()
+ *             .add("type", "fax")
+ *             .add("number", "646 555-4567")))
+ *     .build();
+ * </code></pre>
+ *
+ * {@code JsonObject} can be written to JSON as follows:
+ * <pre><code>
+ * JsonWriter writer = ...
+ * JsonObject obj = ...;
+ * writer.writeObject(obj);
+ * </code></pre>
+ *
+ * {@code JsonObject} values can be {@link JsonObject}, {@link JsonArray},
+ * {@link JsonString}, {@link JsonNumber}, {@link JsonValue#TRUE},
+ * {@link JsonValue#FALSE}, {@link JsonValue#NULL}. These values can be
+ * accessed using various accessor methods.
+ *
+ * <p>In the above example 2, "John" can be got using
+ * <pre><code>
+ * String firstName = object.getString("firstName");
+ * </code></pre>
+ *
+ * This map object provides read-only access to the JSON object data,
+ * and attempts to modify the map, whether direct or via its collection
+ * views, result in an {@code UnsupportedOperationException}.
+ *
+ * <p>The map object's iteration ordering is based on the order in which
+ * name/value pairs are added to the corresponding builder or the order
+ * in which name/value pairs appear in the corresponding stream.
+ */
+public interface JsonObject extends JsonStructure, Map<String, JsonValue> {
+
+    /**
+     * Returns the array value to which the specified name is mapped.
+     * This is a convenience method for {@code (JsonArray)get(name)} to
+     * get the value.
+     *
+     * @param name the name whose associated value is to be returned
+     * @return the array value to which the specified name is mapped, or
+     *         {@code null} if this object contains no mapping for the name
+     * @throws ClassCastException if the value to which the specified name
+     * is mapped is not assignable to JsonArray type
+     */
+    JsonArray getJsonArray(String name);
+
+    /**
+     * Returns the object value to which the specified name is mapped.
+     * This is a convenience method for {@code (JsonObject)get(name)} to
+     * get the value.
+     *
+     * @param name the name whose associated value is to be returned
+     * @return the object value to which the specified name is mapped, or
+     *         {@code null} if this object contains no mapping for the name
+     * @throws ClassCastException if the value to which the specified name
+     * is mapped is not assignable to JsonObject type
+     */
+    JsonObject getJsonObject(String name);
+
+    /**
+     * Returns the number value to which the specified name is mapped.
+     * This is a convenience method for {@code (JsonNumber)get(name)} to
+     * get the value.
+     *
+     * @param name the name whose associated value is to be returned
+     * @return the number value to which the specified name is mapped, or
+     *         {@code null} if this object contains no mapping for the name
+     * @throws ClassCastException if the value to which the specified name
+     * is mapped is not assignable to JsonNumber type
+     */
+    JsonNumber getJsonNumber(String name);
+
+    /**
+     * Returns the string value to which the specified name is mapped.
+     * This is a convenience method for {@code (JsonString)get(name)} to
+     * get the value.
+     *
+     * @param name the name whose associated value is to be returned
+     * @return the string value to which the specified name is mapped, or
+     *         {@code null} if this object contains no mapping for the name
+     * @throws ClassCastException if the value to which the specified name
+     * is mapped is not assignable to JsonString type
+     */
+    JsonString getJsonString(String name);
+
+    /**
+     * A convenience method for
+     * {@code getJsonString(name).getString()}
+     *
+     * @param name whose associated value is to be returned as String
+     * @return the String value to which the specified name is mapped
+     * @throws NullPointerException if the specified name doesn't have any
+     * mapping
+     * @throws ClassCastException if the value for specified name mapping
+     * is not assignable to JsonString
+     */
+    String getString(String name);
+
+    /**
+     * Returns the string value of the associated {@code JsonString} mapping
+     * for the specified name. If {@code JsonString} is found, then its
+     * {@link javax.json.JsonString#getString()} is returned. Otherwise,
+     * the specified default value is returned.
+     *
+     * @param name whose associated value is to be returned as String
+     * @param defaultValue a default value to be returned
+     * @return the string value of the associated mapping for the name,
+     * or the default value
+     */
+    String getString(String name, String defaultValue);
+
+    /**
+     * A convenience method for
+     * {@code getJsonNumber(name).intValue()}
+     *
+     * @param name whose associated value is to be returned as int
+     * @return the int value to which the specified name is mapped
+     * @throws NullPointerException if the specified name doesn't have any
+     * mapping
+     * @throws ClassCastException if the value for specified name mapping
+     * is not assignable to JsonNumber
+     */
+    int getInt(String name);
+
+    /**
+     * Returns the int value of the associated {@code JsonNumber} mapping
+     * for the specified name. If {@code JsonNumber} is found, then its
+     * {@link javax.json.JsonNumber#intValue()} is returned. Otherwise,
+     * the specified default value is returned.
+     *
+     * @param name whose associated value is to be returned as int
+     * @param defaultValue a default value to be returned
+     * @return the int value of the associated mapping for the name,
+     * or the default value
+     */
+    int getInt(String name, int defaultValue);
+
+    /**
+     * Returns the boolean value of the associated mapping for the specified
+     * name. If the associated mapping is JsonValue.TRUE, then returns true.
+     * If the associated mapping is JsonValue.FALSE, then returns false.
+     *
+     * @param name whose associated value is to be returned as boolean
+     * @return the boolean value to which the specified name is mapped
+     * @throws NullPointerException if the specified name doesn't have any
+     * mapping
+     * @throws ClassCastException if the value for specified name mapping
+     * is not assignable to JsonValue.TRUE or JsonValue.FALSE
+     */
+    boolean getBoolean(String name);
+
+    /**
+     * Returns the boolean value of the associated mapping for the specified
+     * name. If the associated mapping is JsonValue.TRUE, then returns true.
+     * If the associated mapping is JsonValue.FALSE, then returns false.
+     * Otherwise, the specified default value is returned.
+     *
+     * @param name whose associated value is to be returned as int
+     * @param defaultValue a default value to be returned
+     * @return the boolean value of the associated mapping for the name,
+     * or the default value
+     */
+    boolean getBoolean(String name, boolean defaultValue);
+
+    /**
+     * Returns {@code true} if the associated value for the specified name is
+     * {@code JsonValue.NULL}.
+     *
+     * @param name name whose associated value is checked
+     * @return return true if the associated value is {@code JsonValue.NULL},
+     * otherwise false
+     * @throws NullPointerException if the specified name doesn't have any
+     * mapping
+     */
+    boolean isNull(String name);
+
+}
diff --git a/src/javax/json/JsonObjectBuilder.java b/src/javax/json/JsonObjectBuilder.java
index 41fb458..30198a7 100644
--- a/src/javax/json/JsonObjectBuilder.java
+++ b/src/javax/json/JsonObjectBuilder.java
@@ -1,280 +1,307 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-/**
- * A builder for creating {@link JsonObject} models from scratch. This
- * interface initializes an empty JSON object model and provides methods to add
- * name/value pairs to the object model and to return the resulting object.
- * The methods in this class can be chained to add multiple name/value pairs
- * to the object.
- *
- * <p>The class {@link javax.json.Json} contains methods to create the builder
- * object. The example code below shows how to build an empty {@code JsonObject}
- * instance.
- * <pre>
- * <code>
- * JsonObject object = Json.createObjectBuilder().build();
- * </code>
- * </pre>
- *
- * <p>The class {@link JsonBuilderFactory} also contains methods to create
- * {@code JsonObjectBuilder} instances. A factory instance can be used to create
- * multiple builder instances with the same configuration. This the preferred
- * way to create multiple instances.
- *
- * <a id="JsonObjectBuilderExample1"/>
- * The example code below shows how to build a {@code JsonObject} model that
- * represents the following JSON object:
- *
- * <pre>
- * <code>
- * {
- *     "firstName": "John", "lastName": "Smith", "age": 25,
- *     "address" : {
- *         "streetAddress": "21 2nd Street",
- *         "city": "New York",
- *         "state": "NY",
- *         "postalCode": "10021"
- *     },
- *     "phoneNumber": [
- *         { "type": "home", "number": "212 555-1234" },
- *         { "type": "fax", "number": "646 555-4567" }
- *     ]
- * }
- * </code>
- * </pre>
- *
- * <p>The code to create the object shown above is the following:
- *
- * <pre>
- * <code>
- * JsonBuilderFactory factory = Json.createBuilderFactory(config);
- * JsonObject value = factory.createObjectBuilder()
- *     .add("firstName", "John")
- *     .add("lastName", "Smith")
- *     .add("age", 25)
- *     .add("address", factory.createObjectBuilder()
- *         .add("streetAddress", "21 2nd Street")
- *         .add("city", "New York")
- *         .add("state", "NY")
- *         .add("postalCode", "10021"))
- *     .add("phoneNumber", factory.createArrayBuilder()
- *         .add(factory.createObjectBuilder()
- *             .add("type", "home")
- *             .add("number", "212 555-1234"))
- *         .add(factory.createObjectBuilder()
- *             .add("type", "fax")
- *             .add("number", "646 555-4567")))
- *     .build();
- * </code>
- * </pre>
- *
- * <p>This class does <em>not</em> allow <tt>null</tt> to be used as a name or
- * value while building the JSON object
- *
- * @see JsonArrayBuilder
- */
-public interface JsonObjectBuilder {
-
-    /**
-     * Adds a name/{@code JsonValue} pair to the JSON object associated with
-     * this object builder. If the object contains a mapping for the specified
-     * name, this method replaces the old value with the specified value.
-     *
-     * @param name name in the name/value pair
-     * @param value value in the name/value pair
-     * @return this object builder
-     * @throws NullPointerException if the specified name or value is null
-     */
-    JsonObjectBuilder add(String name, JsonValue value);
-
-    /**
-     * Adds a name/{@code JsonString} pair to the JSON object associated with
-     * this object builder. If the object contains a mapping for the specified
-     * name, this method replaces the old value with the specified value.
-     *
-     * @param name name in the name/value pair
-     * @param value value in the name/value pair
-     * @return this object builder
-     * @throws NullPointerException if the specified name or value is null
-     */
-    JsonObjectBuilder add(String name, String value);
-
-    /**
-     * Adds a name/{@code JsonNumber} pair to the JSON object associated with
-     * this object builder. If the object contains a mapping for the specified
-     * name, this method replaces the old value with the specified value.
-     *
-     * @param name name in the name/value pair
-     * @param value value in the name/value pair
-     * @return this object builder
-     * @throws NullPointerException if the specified name or value is null
-     *
-     * @see JsonNumber
-     */
-    JsonObjectBuilder add(String name, BigInteger value);
-
-    /**
-     * Adds a name/{@code JsonNumber} pair to the JSON object associated with
-     * this object builder. If the object contains a mapping for the specified
-     * name, this method replaces the old value with the specified value.
-     *
-     * @param name name in the name/value pair
-     * @param value value in the name/value pair
-     * @return this object builder
-     * @throws NullPointerException if the specified name or value is null
-     *
-     * @see JsonNumber
-     */
-    JsonObjectBuilder add(String name, BigDecimal value);
-
-    /**
-     * Adds a name/{@code JsonNumber} pair to the JSON object associated with
-     * this object builder. If the object contains a mapping for the specified
-     * name, this method replaces the old value with the specified value.
-     *
-     * @param name name in the name/value pair
-     * @param value value in the name/value pair
-     * @return this object builder
-     * @throws NullPointerException if the specified name is null
-     *
-     * @see JsonNumber
-     */
-    JsonObjectBuilder add(String name, int value);
-
-    /**
-     * Adds a name/{@code JsonNumber} pair to the JSON object associated with
-     * this object builder. If the object contains a mapping for the specified
-     * name, this method replaces the old value with the specified value.
-     *
-     * @param name name in the name/value pair
-     * @param value value in the name/value pair
-     * @return this object builder
-     * @throws NullPointerException if the specified name is null
-     *
-     * @see JsonNumber
-     */
-    JsonObjectBuilder add(String name, long value);
-
-    /**
-     * Adds a name/{@code JsonNumber} pair to the JSON object associated with
-     * this object builder. If the object contains a mapping for the specified
-     * name, this method replaces the old value with the specified value.
-     *
-     * @param name name in the name/value pair
-     * @param value value in the name/value pair
-     * @return this object builder
-     * @throws NumberFormatException if the value is Not-a-Number(NaN) or 
-     * infinity
-     * @throws NullPointerException if the specified name is null
-     *
-     * @see JsonNumber
-     */
-    JsonObjectBuilder add(String name, double value);
-
-    /**
-     * Adds a name/{@code JsonValue#TRUE} or name/{@code JsonValue#FALSE} pair
-     * to the JSON object associated with this object builder. If the object
-     * contains a mapping for the specified name, this method replaces the old
-     * value with the specified value.
-     *
-     * @param name name in the name/value pair
-     * @param value value in the name/value pair
-     * @return this object builder
-     * @throws NullPointerException if the specified name is null
-     */
-    JsonObjectBuilder add(String name, boolean value);
-
-    /**
-     * Adds a name/{@code JsonValue#NULL} pair to the JSON object associated
-     * with this object builder where the value is {@code null}.
-     * If the object contains a mapping for the specified name, this method
-     * replaces the old value with {@code null}.
-     *
-     * @param name name in the name/value pair
-     * @return this object builder
-     * @throws NullPointerException if the specified name is null
-     */
-    JsonObjectBuilder addNull(String name);
-
-    /**
-     * Adds a name/{@code JsonObject} pair to the JSON object associated
-     * with this object builder. The value {@code JsonObject} is built from the
-     * specified object builder. If the object contains a mapping for the
-     * specified name, this method replaces the old value with the
-     * {@code JsonObject} from the specified object builder.
-     *
-     * @param name name in the name/value pair
-     * @param builder the value is the object associated with this builder
-     * @return this object builder
-     * @throws NullPointerException if the specified name or builder is null
-     */
-    JsonObjectBuilder add(String name, JsonObjectBuilder builder);
-
-    /**
-     * Adds a name/{@code JsonArray} pair to the JSON object associated with
-     * this object builder. The value {@code JsonArray} is built from the
-     * specified array builder. If the object contains a mapping for the
-     * specified name, this method replaces the old value with the
-     * {@code JsonArray} from the specified array builder.
-     *
-     * @param name the name in the name/value pair
-     * @param builder the value is the object array with this builder
-     * @return this object builder
-     * @throws NullPointerException if the specified name or builder is null
-     */
-    JsonObjectBuilder add(String name, JsonArrayBuilder builder);
-
-    /**
-     * Returns the JSON object associated with this object builder. 
-     * The iteration order for the {@code JsonObject} is based
-     * on the order in which name/value pairs are added to the object using
-     * this builder.
-     *
-     * @return JSON object that is being built
-     */
-    JsonObject build();
-
-}
\ No newline at end of file
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2013-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.json;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+
+/**
+ * A builder for creating {@link JsonObject} models from scratch. This
+ * interface initializes an empty JSON object model and provides methods to add
+ * name/value pairs to the object model and to return the resulting object.
+ * The methods in this class can be chained to add multiple name/value pairs
+ * to the object.
+ *
+ * <p>The class {@link javax.json.Json} contains methods to create the builder
+ * object. The example code below shows how to build an empty {@code JsonObject}
+ * instance.
+ * <pre>
+ * <code>
+ * JsonObject object = Json.createObjectBuilder().build();
+ * </code>
+ * </pre>
+ *
+ * <p>The class {@link JsonBuilderFactory} also contains methods to create
+ * {@code JsonObjectBuilder} instances. A factory instance can be used to create
+ * multiple builder instances with the same configuration. This the preferred
+ * way to create multiple instances.
+ *
+ * The example code below shows how to build a {@code JsonObject} model that
+ * represents the following JSON object:
+ *
+ * <pre>
+ * <code>
+ * {
+ *     "firstName": "John", "lastName": "Smith", "age": 25,
+ *     "address" : {
+ *         "streetAddress": "21 2nd Street",
+ *         "city": "New York",
+ *         "state": "NY",
+ *         "postalCode": "10021"
+ *     },
+ *     "phoneNumber": [
+ *         { "type": "home", "number": "212 555-1234" },
+ *         { "type": "fax", "number": "646 555-4567" }
+ *     ]
+ * }
+ * </code>
+ * </pre>
+ *
+ * <p>The code to create the object shown above is the following:
+ *
+ * <pre>
+ * <code>
+ * JsonBuilderFactory factory = Json.createBuilderFactory(config);
+ * JsonObject value = factory.createObjectBuilder()
+ *     .add("firstName", "John")
+ *     .add("lastName", "Smith")
+ *     .add("age", 25)
+ *     .add("address", factory.createObjectBuilder()
+ *         .add("streetAddress", "21 2nd Street")
+ *         .add("city", "New York")
+ *         .add("state", "NY")
+ *         .add("postalCode", "10021"))
+ *     .add("phoneNumber", factory.createArrayBuilder()
+ *         .add(factory.createObjectBuilder()
+ *             .add("type", "home")
+ *             .add("number", "212 555-1234"))
+ *         .add(factory.createObjectBuilder()
+ *             .add("type", "fax")
+ *             .add("number", "646 555-4567")))
+ *     .build();
+ * </code>
+ * </pre>
+ *
+ * <p>This class does <em>not</em> allow <tt>null</tt> to be used as a name or
+ * value while building the JSON object
+ *
+ * @see JsonArrayBuilder
+ */
+public interface JsonObjectBuilder {
+
+    /**
+     * Adds a name/{@code JsonValue} pair to the JSON object associated with
+     * this object builder. If the object contains a mapping for the specified
+     * name, this method replaces the old value with the specified value.
+     *
+     * @param name name in the name/value pair
+     * @param value value in the name/value pair
+     * @return this object builder
+     * @throws NullPointerException if the specified name or value is null
+     */
+    JsonObjectBuilder add(String name, JsonValue value);
+
+    /**
+     * Adds a name/{@code JsonString} pair to the JSON object associated with
+     * this object builder. If the object contains a mapping for the specified
+     * name, this method replaces the old value with the specified value.
+     *
+     * @param name name in the name/value pair
+     * @param value value in the name/value pair
+     * @return this object builder
+     * @throws NullPointerException if the specified name or value is null
+     */
+    JsonObjectBuilder add(String name, String value);
+
+    /**
+     * Adds a name/{@code JsonNumber} pair to the JSON object associated with
+     * this object builder. If the object contains a mapping for the specified
+     * name, this method replaces the old value with the specified value.
+     *
+     * @param name name in the name/value pair
+     * @param value value in the name/value pair
+     * @return this object builder
+     * @throws NullPointerException if the specified name or value is null
+     *
+     * @see JsonNumber
+     */
+    JsonObjectBuilder add(String name, BigInteger value);
+
+    /**
+     * Adds a name/{@code JsonNumber} pair to the JSON object associated with
+     * this object builder. If the object contains a mapping for the specified
+     * name, this method replaces the old value with the specified value.
+     *
+     * @param name name in the name/value pair
+     * @param value value in the name/value pair
+     * @return this object builder
+     * @throws NullPointerException if the specified name or value is null
+     *
+     * @see JsonNumber
+     */
+    JsonObjectBuilder add(String name, BigDecimal value);
+
+    /**
+     * Adds a name/{@code JsonNumber} pair to the JSON object associated with
+     * this object builder. If the object contains a mapping for the specified
+     * name, this method replaces the old value with the specified value.
+     *
+     * @param name name in the name/value pair
+     * @param value value in the name/value pair
+     * @return this object builder
+     * @throws NullPointerException if the specified name is null
+     *
+     * @see JsonNumber
+     */
+    JsonObjectBuilder add(String name, int value);
+
+    /**
+     * Adds a name/{@code JsonNumber} pair to the JSON object associated with
+     * this object builder. If the object contains a mapping for the specified
+     * name, this method replaces the old value with the specified value.
+     *
+     * @param name name in the name/value pair
+     * @param value value in the name/value pair
+     * @return this object builder
+     * @throws NullPointerException if the specified name is null
+     *
+     * @see JsonNumber
+     */
+    JsonObjectBuilder add(String name, long value);
+
+    /**
+     * Adds a name/{@code JsonNumber} pair to the JSON object associated with
+     * this object builder. If the object contains a mapping for the specified
+     * name, this method replaces the old value with the specified value.
+     *
+     * @param name name in the name/value pair
+     * @param value value in the name/value pair
+     * @return this object builder
+     * @throws NumberFormatException if the value is Not-a-Number (NaN) or 
+     * infinity
+     * @throws NullPointerException if the specified name is null
+     *
+     * @see JsonNumber
+     */
+    JsonObjectBuilder add(String name, double value);
+
+    /**
+     * Adds a name/{@code JsonValue#TRUE} or name/{@code JsonValue#FALSE} pair
+     * to the JSON object associated with this object builder. If the object
+     * contains a mapping for the specified name, this method replaces the old
+     * value with the specified value.
+     *
+     * @param name name in the name/value pair
+     * @param value value in the name/value pair
+     * @return this object builder
+     * @throws NullPointerException if the specified name is null
+     */
+    JsonObjectBuilder add(String name, boolean value);
+
+    /**
+     * Adds a name/{@code JsonValue#NULL} pair to the JSON object associated
+     * with this object builder where the value is {@code null}.
+     * If the object contains a mapping for the specified name, this method
+     * replaces the old value with {@code null}.
+     *
+     * @param name name in the name/value pair
+     * @return this object builder
+     * @throws NullPointerException if the specified name is null
+     */
+    JsonObjectBuilder addNull(String name);
+
+    /**
+     * Adds a name/{@code JsonObject} pair to the JSON object associated
+     * with this object builder. The value {@code JsonObject} is built from the
+     * specified object builder. If the object contains a mapping for the
+     * specified name, this method replaces the old value with the
+     * {@code JsonObject} from the specified object builder.
+     *
+     * @param name name in the name/value pair
+     * @param builder the value is the object associated with this builder
+     * @return this object builder
+     * @throws NullPointerException if the specified name or builder is null
+     */
+    JsonObjectBuilder add(String name, JsonObjectBuilder builder);
+
+    /**
+     * Adds a name/{@code JsonArray} pair to the JSON object associated with
+     * this object builder. The value {@code JsonArray} is built from the
+     * specified array builder. If the object contains a mapping for the
+     * specified name, this method replaces the old value with the
+     * {@code JsonArray} from the specified array builder.
+     *
+     * @param name the name in the name/value pair
+     * @param builder the value is the object array with this builder
+     * @return this object builder
+     * @throws NullPointerException if the specified name or builder is null
+     */
+    JsonObjectBuilder add(String name, JsonArrayBuilder builder);
+
+    /**
+     * Adds all name/value pairs in the JSON object associated with the specified
+     * object builder to the JSON object associated with this object builder.
+     * The newly added name/value pair will replace any existing name/value pair with
+     * the same name.
+     *
+     * @param builder the specified object builder
+     * @return this object builder
+     * @throws NullPointerException if the specified builder is null
+     * @since 1.1
+     */
+    default JsonObjectBuilder addAll(JsonObjectBuilder builder) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Remove the name/value pair from the JSON object associated with this
+     * object builder if it is present.
+     *
+     * @param name the name in the name/value pair to be removed
+     * @return this object builder
+     * @throws NullPointerException if the specified name is null
+     * @since 1.1
+     */
+    default JsonObjectBuilder remove(String name) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Returns the JSON object associated with this object builder. 
+     * The iteration order for the {@code JsonObject} is based
+     * on the order in which name/value pairs are added to the object using
+     * this builder.
+     *
+     * @return JSON object that is being built
+     */
+    JsonObject build();
+
+}
diff --git a/src/javax/json/JsonPatch.java b/src/javax/json/JsonPatch.java
new file mode 100644
index 0000000..e66fa61
--- /dev/null
+++ b/src/javax/json/JsonPatch.java
@@ -0,0 +1,163 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2015-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.json;
+
+/**
+ * <p>This interface represents an immutable implementation of a JSON Patch
+ * as defined by <a href="http://tools.ietf.org/html/rfc6902">RFC 6902</a>.
+ * </p>
+ * <p>A {@code JsonPatch} can be instantiated with {@link Json#createPatch(JsonArray)}
+ * by specifying the patch operations in a JSON Patch. Alternately, it
+ * can also be constructed with a {@link JsonPatchBuilder}.
+ * </p>
+ * The following illustrates both approaches.
+ * <p>1. Construct a JsonPatch with a JSON Patch.
+ * <pre>{@code
+ *   JsonArray contacts = ... // The target to be patched
+ *   JsonArray patch = ...  ; // JSON Patch
+ *   JsonPatch jsonpatch = Json.createPatch(patch);
+ *   JsonArray result = jsonpatch.apply(contacts);
+ * } </pre>
+ * 2. Construct a JsonPatch with JsonPatchBuilder.
+ * <pre>{@code
+ *   JsonPatchBuilder builder = Json.createPatchBuilder();
+ *   JsonArray result = builder.add("/John/phones/office", "1234-567")
+ *                             .remove("/Amy/age")
+ *                             .build()
+ *                             .apply(contacts);
+ * } </pre>
+ *
+ * @see <a href="http://tools.ietf.org/html/rfc6902">RFC 6902</a>
+ *
+ * @since 1.1
+ */
+public interface JsonPatch {
+
+    /**
+     * This enum represents the list of valid JSON Patch operations
+     * as defined by <a href="http://tools.ietf.org/html/rfc6902">RFC 6902</a>.
+     *
+     * @see <a href="http://tools.ietf.org/html/rfc6902">RFC 6902</a>
+     */
+    enum Operation {
+
+        /**
+         * "add" operation.
+         */
+        ADD("add"),
+
+        /**
+         * "remove" operation.
+         */
+        REMOVE("remove"),
+
+        /**
+         * "remove" operation.
+         */
+        REPLACE("replace"),
+
+        /**
+         * "move" operation.
+         */
+        MOVE("move"),
+
+        /**
+         * "copy" operation.
+         */
+        COPY("copy"),
+
+        /**
+         * "test" operation.
+         */
+        TEST("test");
+
+        private final String operationName;
+
+        private Operation(String operationName) {
+            this.operationName = operationName;
+        }
+
+        /**
+         * Returns enum constant name as lower case string.
+         *
+         * @return lower case name of the enum constant
+         */
+        public String operationName() {
+            return operationName;
+        }
+
+        /**
+         * Returns the enum constant with the specified name.
+         *
+         * @param operationName {@code operationName} to convert to the enum constant.
+         * @return the enum constant for given {@code operationName}
+         * @throws JsonException if given {@code operationName} is not recognized
+         */
+        public static Operation fromOperationName(String operationName) {
+            for (Operation op : values()) {
+                if (op.operationName().equalsIgnoreCase(operationName)) {
+                    return op;
+                }
+            }
+            throw new JsonException("Illegal value for the operationName of the JSON patch operation: " + operationName);
+        }
+    }
+
+    /**
+     * Applies the patch operations to the specified {@code target}.
+     * The target is not modified by the patch.
+     *
+     * @param <T> the target type, must be a subtype of {@link JsonStructure}
+     * @param target the target to apply the patch operations
+     * @return the transformed target after the patch
+     * @throws JsonException if the supplied JSON Patch is malformed or if
+     *    it contains references to non-existing members
+     */
+    <T extends JsonStructure> T apply(T target);
+
+    /**
+     * Returns the {@code JsonPatch} as {@code JsonArray}.
+     *
+     * @return this {@code JsonPatch} as {@code JsonArray}
+     */
+    JsonArray toJsonArray();
+
+}
diff --git a/src/javax/json/JsonPatchBuilder.java b/src/javax/json/JsonPatchBuilder.java
new file mode 100644
index 0000000..8a9fe35
--- /dev/null
+++ b/src/javax/json/JsonPatchBuilder.java
@@ -0,0 +1,210 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2015-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.json;
+
+/**
+ * A builder for constructing a JSON Patch as defined by
+ * <a href="http://tools.ietf.org/html/rfc6902">RFC 6902</a> by adding
+ * JSON Patch operations incrementally.
+ * <p>
+ * The following illustrates the approach.
+ * <pre>
+ *   JsonPatchBuilder builder = Json.createPatchBuilder();
+ *   JsonPatch patch = builder.add("/John/phones/office", "1234-567")
+ *                            .remove("/Amy/age")
+ *                            .build();
+ * </pre>
+ * The result is equivalent to the following JSON Patch.
+ * <pre>
+ * [
+ *    {"op" = "add", "path" = "/John/phones/office", "value" = "1234-567"},
+ *    {"op" = "remove", "path" = "/Amy/age"}
+ * ] </pre>
+ *
+ * @see <a href="http://tools.ietf.org/html/rfc6902">RFC 6902</a>
+ *
+ * @since 1.1
+ */
+public interface JsonPatchBuilder {
+
+    /**
+     * Adds an "add" JSON Patch operation.
+     *
+     * @param path the "path" member of the operation. Must be a valid escaped JSON-Pointer.
+     * @param value the "value" member of the operation
+     * @return this JsonPatchBuilder
+     */
+    JsonPatchBuilder add(String path, JsonValue value);
+
+    /**
+     * Adds an "add" JSON Patch operation.
+     *
+     * @param path the "path" member of the operation. Must be a valid escaped JSON-Pointer.
+     * @param value the "value" member of the operation
+     * @return this JsonPatchBuilder
+     */
+    JsonPatchBuilder add(String path, String value);
+
+    /**
+     * Adds an "add" JSON Patch operation.
+     *
+     * @param path the "path" member of the operation. Must be a valid escaped JSON-Pointer.
+     * @param value the "value" member of the operation
+     * @return this JsonPatchBuilder
+     */
+    JsonPatchBuilder add(String path, int value);
+
+    /**
+     * Adds an "add" JSON Patch operation.
+     *
+     * @param path the "path" member of the operation. Must be a valid escaped JSON-Pointer.
+     * @param value the "value" member of the operation
+     * @return this JsonPatchBuilder
+     */
+    JsonPatchBuilder add(String path, boolean value);
+
+    /**
+     * Adds a "remove" JSON Patch operation.
+     *
+     * @param path the "path" member of the operation. Must be a valid escaped JSON-Pointer.
+     * @return this JsonPatchBuilder
+     */
+    JsonPatchBuilder remove(String path);
+
+    /**
+     * Adds a "replace" JSON Patch operation.
+     *
+     * @param path the "path" member of the operation. Must be a valid escaped JSON-Pointer.
+     * @param value the "value" member of the operation
+     * @return this JsonPatchBuilder
+     */
+    JsonPatchBuilder replace(String path, JsonValue value);
+
+    /**
+     * Adds a "replace" JSON Patch operation.
+     *
+     * @param path the "path" member of the operation. Must be a valid escaped JSON-Pointer string.
+     * @param value the "value" member of the operation
+     * @return this JsonPatchBuilder
+     */
+    JsonPatchBuilder replace(String path, String value);
+
+    /**
+     * Adds a "replace" JSON Patch operation.
+     *
+     * @param path the "path" member of the operation. Must be a valid escaped JSON-Pointer string.
+     * @param value the "value" member of the operation
+     * @return this JsonPatchBuilder
+     */
+    JsonPatchBuilder replace(String path, int value);
+
+    /**
+     * Adds a "replace" JSON Patch operation.
+     *
+     * @param path the "path" member of the operation. Must be a valid escaped JSON-Pointer string.
+     * @param value the "value" member of the operation
+     * @return this JsonPatchBuilder
+     */
+    JsonPatchBuilder replace(String path, boolean value);
+
+    /**
+     * Adds a "move" JSON Patch operation.
+     *
+     * @param path the "path" member of the operation. Must be a valid escaped JSON-Pointer string.
+     * @param from the "from" member of the operation
+     * @return this JsonPatchBuilder
+     */
+    JsonPatchBuilder move(String path, String from);
+
+    /**
+     * Adds a "copy" JSON Patch operation.
+     *
+     * @param path the "path" member of the operation. Must be a valid escaped JSON-Pointer string.
+     * @param from the "from" member of the operation
+     * @return this JsonPatchBuilder
+     */
+    JsonPatchBuilder copy(String path, String from);
+
+    /**
+     * Adds a "test" JSON Patch operation.
+     *
+     * @param path the "path" member of the operation. Must be a valid escaped JSON-Pointer string.
+     * @param value the "value" member of the operation
+     * @return this JsonPatchBuilder
+     */
+    JsonPatchBuilder test(String path, JsonValue value);
+
+    /**
+     * Adds a "test" JSON Patch operation.
+     *
+     * @param path the "path" member of the operation. Must be a valid escaped JSON-Pointer string.
+     * @param value the "value" member of the operation
+     * @return this JsonPatchBuilder
+     */
+    JsonPatchBuilder test(String path, String value);
+
+    /**
+     * Adds a "test" JSON Patch operation.
+     *
+     * @param path the "path" member of the operation. Must be a valid escaped JSON-Pointer string.
+     * @param value the "value" member of the operation
+     * @return this JsonPatchBuilder
+     */
+    JsonPatchBuilder test(String path, int value);
+
+    /**
+     * Adds a "test" JSON Patch operation.
+     *
+     * @param path the "path" member of the operation. Must be a valid escaped JSON-Pointer string.
+     * @param value the "value" member of the operation
+     * @return this JsonPatchBuilder
+     */
+    JsonPatchBuilder test(String path, boolean value);
+
+
+    /**
+     * Returns the JSON Patch.
+     *
+     * @return a JSON Patch
+     */
+    JsonPatch build();
+
+}
diff --git a/src/javax/json/JsonPointer.java b/src/javax/json/JsonPointer.java
new file mode 100644
index 0000000..b80e7d3
--- /dev/null
+++ b/src/javax/json/JsonPointer.java
@@ -0,0 +1,140 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2015-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.json;
+
+/**
+ * <p>This interface represents an immutable implementation of a JSON Pointer
+ * as defined by <a href="http://tools.ietf.org/html/rfc6901">RFC 6901</a>.
+ * </p>
+ * <p> A JSON Pointer, when applied to a target {@link JsonValue},
+ * defines a reference location in the target.</p>
+ * <p> An empty JSON Pointer string defines a reference to the target itself.</p>
+ * <p> If the JSON Pointer string is non-empty, it must be a sequence
+ * of '/' prefixed tokens, and the target must either be a {@link JsonArray}
+ * or {@link JsonObject}. If the target is a {@code JsonArray}, the pointer
+ * defines a reference to an array element, and the last token specifies the index.
+ * If the target is a {@link JsonObject}, the pointer defines a reference to a
+ * name/value pair, and the last token specifies the name.
+ * </p>
+ * <p> The method {@link #getValue getValue()} returns the referenced value.
+ * Methods {@link #add add()}, {@link #replace replace()},
+ * and {@link #remove remove()} execute operations specified in
+ * <a href="http://tools.ietf.org/html/rfc6902">RFC 6902</a>. </p>
+ *
+ * @see <a href="http://tools.ietf.org/html/rfc6901">RFC 6901</a>
+ * @see <a href="http://tools.ietf.org/html/rfc6902">RFC 6902</a>
+ *
+ * @since 1.1
+ */
+public interface JsonPointer {
+
+    /**
+     * Adds or replaces a value at the referenced location in the specified
+     * {@code target} with the specified {@code value}.
+     * <ol>
+     * <li>If the reference is the target (empty JSON Pointer string),
+     * the specified {@code value}, which must be the same type as
+     * specified {@code target}, is returned.</li>
+     * <li>If the reference is an array element, the specified {@code value} is inserted
+     * into the array, at the referenced index. The value currently at that location, and
+     * any subsequent values, are shifted to the right (adds one to the indices).
+     * Index starts with 0. If the reference is specified with a "-", or if the
+     * index is equal to the size of the array, the value is appended to the array.</li>
+     * <li>If the reference is a name/value pair of a {@code JsonObject}, and the
+     * referenced value exists, the value is replaced by the specified {@code value}.
+     * If the value does not exist, a new name/value pair is added to the object.</li>
+     * </ol>
+     *
+     * @param <T> the target type, must be a subtype of {@link JsonValue}
+     * @param target the target referenced by this {@code JsonPointer}
+     * @param value the value to be added
+     * @return the transformed {@code target} after the value is added.
+     * @throws NullPointerException if {@code target} is {@code null}
+     * @throws JsonException if the reference is an array element and
+     * the index is out of range ({@code index < 0 || index > array size}),
+     * or if the pointer contains references to non-existing objects or arrays.
+     */
+    <T extends JsonStructure> T add(T target, JsonValue value);
+
+    /**
+     * Removes the value at the reference location in the specified {@code target}.
+     *
+     * @param <T> the target type, must be a subtype of {@link JsonValue}
+     * @param target the target referenced by this {@code JsonPointer}
+     * @return the transformed {@code target} after the value is removed.
+     * @throws NullPointerException if {@code target} is {@code null}
+     * @throws JsonException if the referenced value does not exist,
+     *    or if the reference is the target.
+     */
+    <T extends JsonStructure> T remove(T target);
+
+    /**
+     * Replaces the value at the referenced location in the specified
+     * {@code target} with the specified {@code value}.
+     *
+     * @param <T> the target type, must be a subtype of {@link JsonValue}
+     * @param target the target referenced by this {@code JsonPointer}
+     * @param value the value to be stored at the referenced location
+     * @return the transformed {@code target} after the value is replaced.
+     * @throws NullPointerException if {@code target} is {@code null}
+     * @throws JsonException if the referenced value does not exist,
+     *    or if the reference is the target.
+     */
+    <T extends JsonStructure> T replace(T target, JsonValue value);
+
+    /**
+     * Returns {@code true} if there is a value at the referenced location in the specified {@code target}.
+     *
+     * @param target the target referenced by this {@code JsonPointer}
+     * @return {@code true} if this pointer points to a value in a specified {@code target}.
+     */
+    boolean containsValue(JsonStructure target);
+
+    /**
+     * Returns the value at the referenced location in the specified {@code target}.
+     *
+     * @param target the target referenced by this {@code JsonPointer}
+     * @return the referenced value in the target.
+     * @throws NullPointerException if {@code target} is null
+     * @throws JsonException if the referenced value does not exist
+     */
+    JsonValue getValue(JsonStructure target);
+}
diff --git a/src/javax/json/JsonReader.java b/src/javax/json/JsonReader.java
index 30580b0..49c629b 100644
--- a/src/javax/json/JsonReader.java
+++ b/src/javax/json/JsonReader.java
@@ -1,140 +1,157 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2012-2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json;
-
-import java.io.Closeable;
-
-/**
- * Reads a JSON {@link JsonObject object} or an {@link JsonArray array}
- * structure from an input source.
- *
- * <p>The class {@link javax.json.Json} contains methods to create readers from
- * input sources ({@link java.io.InputStream} and {@link java.io.Reader}).
- *
- * <p>
- * <a id="JsonReaderExample1"/>
- * The following example demonstrates how to read an empty JSON array from
- * a string:
- * <pre>
- * <code>
- * JsonReader jsonReader = Json.createReader(new StringReader("[]"));
- * JsonArray array = jsonReader.readArray();
- * jsonReader.close();
- * </code>
- * </pre>
- *
- * <p>
- * The class {@link JsonReaderFactory} also contains methods to create
- * {@code JsonReader} instances. A factory instance can be used to create
- * multiple reader instances with the same configuration. This the preferred
- * way to create multiple instances. A sample usage is shown in the following
- * example:
- * <pre>
- * <code>
- * JsonReaderFactory factory = Json.createReaderFactory(config);
- * JsonReader reader1 = factory.createReader(...);
- * JsonReader reader2 = factory.createReader(...);
- * </code>
- * </pre>
- *
- * @author Jitendra Kotamraju
- */
-public interface JsonReader extends  /*Auto*/Closeable {
-
-    /**
-     * Returns a JSON array or object that is represented in
-     * the input source. This method needs to be called
-     * only once for a reader instance.
-     *
-     * @return a JSON object or array
-     * @throws JsonException if a JSON object or array cannot
-     *     be created due to i/o error (IOException would be
-     * cause of JsonException)
-     * @throws javax.json.stream.JsonParsingException if a JSON object or array
-     *     cannot be created due to incorrect representation
-     * @throws IllegalStateException if read, readObject, readArray or
-     *     close method is already called
-     */
-    JsonStructure read();
-
-    /**
-     * Returns a JSON object that is represented in
-     * the input source. This method needs to be called
-     * only once for a reader instance.
-     *
-     * @return a JSON object
-     * @throws JsonException if a JSON object cannot
-     *     be created due to i/o error (IOException would be
-     *     cause of JsonException)
-     * @throws javax.json.stream.JsonParsingException if a JSON object cannot
-     *     be created due to incorrect representation
-     * @throws IllegalStateException if read, readObject, readArray or
-     *     close method is already called
-     */
-    JsonObject readObject();
-
-    /**
-     * Returns a JSON array that is represented in
-     * the input source. This method needs to be called
-     * only once for a reader instance.
-     *
-     * @return a JSON array
-     * @throws JsonException if a JSON array cannot
-     *     be created due to i/o error (IOException would be
-     *     cause of JsonException)
-     * @throws javax.json.stream.JsonParsingException if a JSON array cannot
-     *     be created due to incorrect representation
-     * @throws IllegalStateException if read, readObject, readArray or
-     *     close method is already called
-     */
-    JsonArray readArray();
-
-    /**
-     * Closes this reader and frees any resources associated with the
-     * reader. This method closes the underlying input source.
-     *
-     * @throws JsonException if an i/o error occurs (IOException would be
-     * cause of JsonException)
-     */
-    @Override
-    void close();
-
-}
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2012-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.json;
+
+import java.io.Closeable;
+
+/**
+ * Reads a JSON {@link JsonObject object} or an {@link JsonArray array}
+ * structure from an input source.
+ *
+ * <p>The class {@link javax.json.Json} contains methods to create readers from
+ * input sources ({@link java.io.InputStream} and {@link java.io.Reader}).
+ *
+ * <p>
+ * The following example demonstrates how to read an empty JSON array from
+ * a string:
+ * <pre>
+ * <code>
+ * JsonReader jsonReader = Json.createReader(new StringReader("[]"));
+ * JsonArray array = jsonReader.readArray();
+ * jsonReader.close();
+ * </code>
+ * </pre>
+ *
+ * <p>
+ * The class {@link JsonReaderFactory} also contains methods to create
+ * {@code JsonReader} instances. A factory instance can be used to create
+ * multiple reader instances with the same configuration. This the preferred
+ * way to create multiple instances. A sample usage is shown in the following
+ * example:
+ * <pre>
+ * <code>
+ * JsonReaderFactory factory = Json.createReaderFactory(config);
+ * JsonReader reader1 = factory.createReader(...);
+ * JsonReader reader2 = factory.createReader(...);
+ * </code>
+ * </pre>
+ */
+public interface JsonReader extends  /*Auto*/Closeable {
+
+    /**
+     * Returns a JSON array or object that is represented in
+     * the input source. This method needs to be called
+     * only once for a reader instance.
+     *
+     * @return a JSON object or array
+     * @throws JsonException if a JSON object or array cannot
+     *     be created due to i/o error (IOException would be
+     * cause of JsonException)
+     * @throws javax.json.stream.JsonParsingException if a JSON object or array
+     *     cannot be created due to incorrect representation
+     * @throws IllegalStateException if read, readObject, readArray,
+     *     readValue or close method is already called
+     */
+    JsonStructure read();
+
+    /**
+     * Returns a JSON object that is represented in
+     * the input source. This method needs to be called
+     * only once for a reader instance.
+     *
+     * @return a JSON object
+     * @throws JsonException if a JSON object cannot
+     *     be created due to i/o error (IOException would be
+     *     cause of JsonException)
+     * @throws javax.json.stream.JsonParsingException if a JSON object cannot
+     *     be created due to incorrect representation
+     * @throws IllegalStateException if read, readObject, readArray,
+     *     readValue or close method is already called
+     */
+    JsonObject readObject();
+
+    /**
+     * Returns a JSON array that is represented in
+     * the input source. This method needs to be called
+     * only once for a reader instance.
+     *
+     * @return a JSON array
+     * @throws JsonException if a JSON array cannot
+     *     be created due to i/o error (IOException would be
+     *     cause of JsonException)
+     * @throws javax.json.stream.JsonParsingException if a JSON array cannot
+     *     be created due to incorrect representation
+     * @throws IllegalStateException if read, readObject, readArray,
+     *     readValue or close method is already called
+     */
+    JsonArray readArray();
+
+    /**
+     * Returns a JSON value that is represented in
+     * the input source. This method needs to be called
+     * only once for a reader instance.
+     *
+     * @return a JSON value
+     * @throws JsonException if a JSON value
+     *     be created due to i/o error (IOException would be
+     *     cause of JsonException)
+     * @throws javax.json.stream.JsonParsingException if a JSON value
+     *     cannot be created due to incorrect representation
+     * @throws IllegalStateException if read, readObject, readArray,
+     *     readValue or close method is already called
+     *
+     * @since 1.1
+     */
+    default JsonValue readValue() {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Closes this reader and frees any resources associated with the
+     * reader. This method closes the underlying input source.
+     *
+     * @throws JsonException if an i/o error occurs (IOException would be
+     * cause of JsonException)
+     */
+    @Override
+    void close();
+
+}
diff --git a/src/javax/json/JsonReaderFactory.java b/src/javax/json/JsonReaderFactory.java
index b76d9de..7d459bb 100644
--- a/src/javax/json/JsonReaderFactory.java
+++ b/src/javax/json/JsonReaderFactory.java
@@ -1,117 +1,115 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json;
-
-import java.io.InputStream;
-import java.io.Reader;
-import java.nio.charset.Charset;
-import java.util.Map;
-
-/**
- * Factory to create {@link javax.json.JsonReader} instances. If a factory
- * instance is configured with some configuration, that would be
- * used to configure the created reader instances.
- *
- * <p>
- * {@link javax.json.JsonReader} can also be created using {@link Json}'s
- * {@code createReader} methods. If multiple reader instances are created,
- * then creating them using a reader factory is preferred.
- *
- * <p>
- * <b>For example:</b>
- * <pre>
- * <code>
- * JsonReaderFactory factory = Json.createReaderFactory(...);
- * JsonReader reader1 = factory.createReader(...);
- * JsonReader reader2 = factory.createReader(...);
- * </code>
- * </pre>
- *
- * <p> All the methods in this class are safe for use by multiple concurrent
- * threads.
- *
- * @author Jitendra Kotamraju
- */
-public interface JsonReaderFactory {
-
-    /**
-     * Creates a JSON reader from a character stream. The reader is configured
-     * with the factory configuration.
-     *
-     * @param reader a reader from which JSON is to be read
-     * @return a JSON reader
-     */
-    JsonReader createReader(Reader reader);
-
-    /**
-     * Creates a JSON reader from a byte stream. The character encoding of
-     * the stream is determined as described in
-     * <a href="http://tools.ietf.org/rfc/rfc4627.txt">RFC 4627</a>.
-     * The reader is configured with the factory configuration.
-     *
-     * @param in a byte stream from which JSON is to be read
-     * @return a JSON reader
-     */
-    JsonReader createReader(InputStream in);
-
-    /**
-     * Creates a JSON reader from a byte stream. The bytes of the stream
-     * are decoded to characters using the specified charset. The reader is
-     * configured with the factory configuration.
-     *
-     * @param in a byte stream from which JSON is to be read
-     * @param charset a charset
-     * @return a JSON reader
-     */
-    JsonReader createReader(InputStream in, Charset charset);
-
-    /**
-     * Returns read-only map of supported provider specific configuration
-     * properties that are used to configure the created JSON readers.
-     * If there are any specified configuration properties that are not
-     * supported by the provider, they won't be part of the returned map.
-     *
-     * @return a map of supported provider specific properties that are used
-     * to configure the readers. The map be empty but not null.
-     */
-    Map<String, ?> getConfigInUse();
-
-}
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2013-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.json;
+
+import java.io.InputStream;
+import java.io.Reader;
+import java.nio.charset.Charset;
+import java.util.Map;
+
+/**
+ * Factory to create {@link javax.json.JsonReader} instances. If a factory
+ * instance is configured with some configuration, that would be
+ * used to configure the created reader instances.
+ *
+ * <p>
+ * {@link javax.json.JsonReader} can also be created using {@link Json}'s
+ * {@code createReader} methods. If multiple reader instances are created,
+ * then creating them using a reader factory is preferred.
+ *
+ * <p>
+ * <b>For example:</b>
+ * <pre>
+ * <code>
+ * JsonReaderFactory factory = Json.createReaderFactory(...);
+ * JsonReader reader1 = factory.createReader(...);
+ * JsonReader reader2 = factory.createReader(...);
+ * </code>
+ * </pre>
+ *
+ * <p> All the methods in this class are safe for use by multiple concurrent
+ * threads.
+ */
+public interface JsonReaderFactory {
+
+    /**
+     * Creates a JSON reader from a character stream. The reader is configured
+     * with the factory configuration.
+     *
+     * @param reader a reader from which JSON is to be read
+     * @return a JSON reader
+     */
+    JsonReader createReader(Reader reader);
+
+    /**
+     * Creates a JSON reader from a byte stream. The character encoding of
+     * the stream is determined as described in
+     * <a href="http://tools.ietf.org/rfc/rfc7159.txt">RFC 7159</a>.
+     * The reader is configured with the factory configuration.
+     *
+     * @param in a byte stream from which JSON is to be read
+     * @return a JSON reader
+     */
+    JsonReader createReader(InputStream in);
+
+    /**
+     * Creates a JSON reader from a byte stream. The bytes of the stream
+     * are decoded to characters using the specified charset. The reader is
+     * configured with the factory configuration.
+     *
+     * @param in a byte stream from which JSON is to be read
+     * @param charset a charset
+     * @return a JSON reader
+     */
+    JsonReader createReader(InputStream in, Charset charset);
+
+    /**
+     * Returns read-only map of supported provider specific configuration
+     * properties that are used to configure the created JSON readers.
+     * If there are any specified configuration properties that are not
+     * supported by the provider, they won't be part of the returned map.
+     *
+     * @return a map of supported provider specific properties that are used
+     * to configure the readers. The map be empty but not null.
+     */
+    Map<String, ?> getConfigInUse();
+
+}
diff --git a/src/javax/json/JsonString.java b/src/javax/json/JsonString.java
index aa4b27d..53fc500 100644
--- a/src/javax/json/JsonString.java
+++ b/src/javax/json/JsonString.java
@@ -1,89 +1,87 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2011-2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json;
-
-/**
- * An immutable JSON string value.
- *
- * @author Jitendra Kotamraju
- */
-public interface JsonString extends JsonValue {
-
-    /**
-     * Returns the JSON string value.
-     *
-     * @return a JSON string value
-     */
-    String getString();
-
-
-    /**
-     * Returns the char sequence for the JSON String value
-     *
-     * @return a char sequence for the JSON String value
-     */
-    CharSequence getChars();
-
-    /**
-     * Compares the specified object with this {@code JsonString} for equality.
-     * Returns {@code true} if and only if the specified object is also a
-     * {@code JsonString}, and their {@link #getString()} objects are
-     * <i>equal</i>.
-     *
-     * @param obj the object to be compared for equality with this 
-     *      {@code JsonString}
-     * @return {@code true} if the specified object is equal to this 
-     *      {@code JsonString}
-     */
-    @Override
-    boolean equals(Object obj);
-
-    /**
-     * Returns the hash code value for this {@code JsonString} object.  
-     * The hash code of a {@code JsonString} object is defined to be its 
-     * {@link #getString()} object's hash code.
-     *
-     * @return the hash code value for this {@code JsonString} object
-     */
-    @Override
-    int hashCode();
-
-}
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2011-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.json;
+
+/**
+ * An immutable JSON string value.
+ */
+public interface JsonString extends JsonValue {
+
+    /**
+     * Returns the JSON string value.
+     *
+     * @return a JSON string value
+     */
+    String getString();
+
+
+    /**
+     * Returns the char sequence for the JSON String value
+     *
+     * @return a char sequence for the JSON String value
+     */
+    CharSequence getChars();
+
+    /**
+     * Compares the specified object with this {@code JsonString} for equality.
+     * Returns {@code true} if and only if the specified object is also a
+     * {@code JsonString}, and their {@link #getString()} objects are
+     * <i>equal</i>.
+     *
+     * @param obj the object to be compared for equality with this 
+     *      {@code JsonString}
+     * @return {@code true} if the specified object is equal to this 
+     *      {@code JsonString}
+     */
+    @Override
+    boolean equals(Object obj);
+
+    /**
+     * Returns the hash code value for this {@code JsonString} object.  
+     * The hash code of a {@code JsonString} object is defined to be its 
+     * {@link #getString()} object's hash code.
+     *
+     * @return the hash code value for this {@code JsonString} object
+     */
+    @Override
+    int hashCode();
+
+}
diff --git a/src/javax/json/JsonStructure.java b/src/javax/json/JsonStructure.java
index 938a87a..0189037 100644
--- a/src/javax/json/JsonStructure.java
+++ b/src/javax/json/JsonStructure.java
@@ -1,50 +1,62 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2012-2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json;
-
-/**
- * Super type for the two structured types in JSON ({@link JsonObject object}s
- * and {@link JsonArray array}s).
- *
- * @author Jitendra Kotamraju
- */
-public interface JsonStructure extends JsonValue {
-}
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2012-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.json;
+
+/**
+ * Super type for the two structured types in JSON ({@link JsonObject object}s
+ * and {@link JsonArray array}s).
+ */
+public interface JsonStructure extends JsonValue {
+
+    /**
+     * Get the value referenced by the provided JSON Pointer in the JsonStructure.
+     *
+     * @param jsonPointer the JSON Pointer
+     * @return the {@code JsonValue} at the referenced location
+     * @throws JsonException if the JSON Pointer is malformed, or if it references
+     *     a non-existing member or value.
+     *
+     * @since 1.1
+     */
+    default public JsonValue getValue(String jsonPointer) {
+        return Json.createPointer(jsonPointer).getValue(this);
+    }
+}
diff --git a/src/javax/json/JsonValue.java b/src/javax/json/JsonValue.java
index 4c37848..72d93da 100644
--- a/src/javax/json/JsonValue.java
+++ b/src/javax/json/JsonValue.java
@@ -1,262 +1,164 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2011-2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json;
-
-/**
- * <code>JsonValue</code> represents an immutable JSON value.
- *
- * 
- * <p>A JSON value is one of the following:
- * an object ({@link JsonObject}), an array ({@link JsonArray}),
- * a number ({@link JsonNumber}), a string ({@link JsonString}),
- * {@code true} ({@link JsonValue#TRUE JsonValue.TRUE}), {@code false} 
- * ({@link JsonValue#FALSE JsonValue.FALSE}),
- * or {@code null} ({@link JsonValue#NULL JsonValue.NULL}).
- *
- * @author Jitendra Kotamraju
- */
-public interface JsonValue {
-
-    /**
-     * Indicates the type of a {@link JsonValue} object.
-     */
-    enum ValueType {
-        /**
-         * JSON array.
-         */
-        ARRAY,
-
-        /**
-         * JSON object.
-         */
-        OBJECT,
-
-        /**
-         * JSON string.
-         */
-        STRING,
-
-        /**
-         * JSON number.
-         */
-        NUMBER,
-
-        /**
-         * JSON true.
-         */
-        TRUE,
-
-        /**
-         * JSON false.
-         */
-        FALSE,
-
-        /**
-         * JSON null.
-         */
-        NULL
-    }
-
-    /**
-     * JSON null value.
-     */
-    static final JsonValue NULL = new JsonValue() {
-        @Override
-        public ValueType getValueType() {
-            return ValueType.NULL;
-        }
-
-        /**
-         * Compares the specified object with this {@link JsonValue#NULL}
-         * object for equality. Returns {@code true} if and only if the
-         * specified object is also a {@code JsonValue}, and their
-         * {@link #getValueType()} objects are <i>equal</i>.
-         *
-         * @param obj the object to be compared for equality with this 
-         *      {@code JsonValue}
-         * @return {@code true} if the specified object is equal to this 
-         *      {@code JsonValue}
-         */
-        @Override
-        public boolean equals(Object obj) {
-            if (obj instanceof JsonValue) {
-                return getValueType().equals(((JsonValue)obj).getValueType());
-            }
-            return false;
-        }
-
-        /**
-         * Returns the hash code value for this {@link JsonValue#NULL} object.
-         * The hash code of the {@link JsonValue#NULL} object is defined to be
-         * its {@link #getValueType()} object's hash code.
-         *
-         * @return the hash code value for this JsonString object
-         */
-        @Override
-        public int hashCode() {
-            return ValueType.NULL.hashCode();
-        }
-
-        /**
-         * Returns a "null" string.
-         *
-         * @return "null"
-         */
-        @Override
-        public String toString() {
-            return "null";
-        }
-    };
-
-    /**
-     * JSON true value.
-     */
-    static final JsonValue TRUE = new JsonValue() {
-        @Override
-        public ValueType getValueType() {
-            return ValueType.TRUE;
-        }
-
-        /**
-         * Compares the specified object with this {@link JsonValue#TRUE}
-         * object for equality. Returns {@code true} if and only if the
-         * specified object is also a JsonValue, and their
-         * {@link #getValueType()} objects are <i>equal</i>.
-         *
-         * @param obj the object to be compared for equality with this JsonValue.
-         * @return {@code true} if the specified object is equal to this JsonValue.
-         */
-        @Override
-        public boolean equals(Object obj) {
-            if (obj instanceof JsonValue) {
-                return getValueType().equals(((JsonValue)obj).getValueType());
-            }
-            return false;
-        }
-
-        /**
-         * Returns the hash code value for this {@link JsonValue#TRUE} object.
-         * The hash code of the {@link JsonValue#TRUE} object is defined to be
-         * its {@link #getValueType()} object's hash code.
-         *
-         * @return the hash code value for this JsonString object
-         */
-        @Override
-        public int hashCode() {
-            return ValueType.TRUE.hashCode();
-        }
-
-        /**
-         * Returns "true" string
-         *
-         * @return "true"
-         */
-        @Override
-        public String toString() {
-            return "true";
-        }
-    };
-
-    /**
-     * JSON false value
-     */
-    static final JsonValue FALSE = new JsonValue() {
-        @Override
-        public ValueType getValueType() {
-            return ValueType.FALSE;
-        }
-
-        /**
-         * Compares the specified object with this {@link JsonValue#FALSE}
-         * object for equality. Returns {@code true} if and only if the
-         * specified object is also a JsonValue, and their
-         * {@link #getValueType()} objects are <i>equal</i>.
-         *
-         * @param obj the object to be compared for equality with this JsonValue
-         * @return {@code true} if the specified object is equal to this JsonValue
-         */
-        @Override
-        public boolean equals(Object obj) {
-            if (obj instanceof JsonValue) {
-                return getValueType().equals(((JsonValue)obj).getValueType());
-            }
-            return false;
-        }
-
-        /**
-         * Returns the hash code value for this {@link JsonValue#FALSE} object.
-         * The hash code of the {@link JsonValue#FALSE} object is defined to be
-         * its {@link #getValueType()} object's hash code.
-         *
-         * @return the hash code value for this JsonString object
-         */
-        @Override
-        public int hashCode() {
-            return ValueType.FALSE.hashCode();
-        }
-
-        /**
-         * Returns "false" string
-         *
-         * @return "false"
-         */
-        @Override
-        public String toString() {
-            return "false";
-        }
-    };
-
-    /**
-     * Returns the value type of this JSON value.
-     *
-     * @return JSON value type
-     */
-    ValueType getValueType();
-
-    /**
-     * Returns JSON text for this JSON value.
-     *
-     * @return JSON text
-     */
-    @Override
-    String toString();
-
-}
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2011-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.json;
+
+/**
+ * <code>JsonValue</code> represents an immutable JSON value.
+ *
+ *
+ * <p>A JSON value is one of the following:
+ * an object ({@link JsonObject}), an array ({@link JsonArray}),
+ * a number ({@link JsonNumber}), a string ({@link JsonString}),
+ * {@code true} ({@link JsonValue#TRUE JsonValue.TRUE}), {@code false}
+ * ({@link JsonValue#FALSE JsonValue.FALSE}),
+ * or {@code null} ({@link JsonValue#NULL JsonValue.NULL}).
+ */
+public interface JsonValue {
+
+    /**
+     * The empty JSON object.
+     *
+     * @since 1.1
+     */
+    static final JsonObject EMPTY_JSON_OBJECT = new EmptyObject();
+
+    /**
+     * The empty JSON array.
+     *
+     * @since 1.1
+     */
+    static final JsonArray EMPTY_JSON_ARRAY = new EmptyArray();
+
+    /**
+     * Indicates the type of a {@link JsonValue} object.
+     */
+    enum ValueType {
+        /**
+         * JSON array.
+         */
+        ARRAY,
+
+        /**
+         * JSON object.
+         */
+        OBJECT,
+
+        /**
+         * JSON string.
+         */
+        STRING,
+
+        /**
+         * JSON number.
+         */
+        NUMBER,
+
+        /**
+         * JSON true.
+         */
+        TRUE,
+
+        /**
+         * JSON false.
+         */
+        FALSE,
+
+        /**
+         * JSON null.
+         */
+        NULL
+    }
+
+    /**
+     * JSON null value.
+     */
+    static final JsonValue NULL = new JsonValueImpl(ValueType.NULL);
+
+    /**
+     * JSON true value.
+     */
+    static final JsonValue TRUE = new JsonValueImpl(ValueType.TRUE);
+
+    /**
+     * JSON false value.
+     */
+    static final JsonValue FALSE = new JsonValueImpl(ValueType.FALSE);
+
+    /**
+     * Returns the value type of this JSON value.
+     *
+     * @return JSON value type
+     */
+    ValueType getValueType();
+
+    /**
+     * Return the JsonValue as a JsonObject
+     *
+     * @return the JsonValue as a JsonObject
+     * @throws ClassCastException if the JsonValue is not a JsonObject
+     *
+     * @since 1.1
+     */
+    default JsonObject asJsonObject() {
+        return JsonObject.class.cast(this);
+    }
+
+    /**
+     * Return the JsonValue as a JsonArray
+     *
+     * @return the JsonValue as a JsonArray
+     * @throws ClassCastException if the JsonValue is not a JsonArray
+     *
+     * @since 1.1
+     */
+    default JsonArray asJsonArray() {
+        return JsonArray.class.cast(this);
+    }
+
+    /**
+     * Returns JSON text for this JSON value.
+     *
+     * @return JSON text
+     */
+    @Override
+    String toString();
+
+}
diff --git a/src/javax/json/JsonString.java b/src/javax/json/JsonValueImpl.java
similarity index 53%
copy from src/javax/json/JsonString.java
copy to src/javax/json/JsonValueImpl.java
index aa4b27d..b4f8827 100644
--- a/src/javax/json/JsonString.java
+++ b/src/javax/json/JsonValueImpl.java
@@ -1,89 +1,107 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2011-2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json;
-
-/**
- * An immutable JSON string value.
- *
- * @author Jitendra Kotamraju
- */
-public interface JsonString extends JsonValue {
-
-    /**
-     * Returns the JSON string value.
-     *
-     * @return a JSON string value
-     */
-    String getString();
-
-
-    /**
-     * Returns the char sequence for the JSON String value
-     *
-     * @return a char sequence for the JSON String value
-     */
-    CharSequence getChars();
-
-    /**
-     * Compares the specified object with this {@code JsonString} for equality.
-     * Returns {@code true} if and only if the specified object is also a
-     * {@code JsonString}, and their {@link #getString()} objects are
-     * <i>equal</i>.
-     *
-     * @param obj the object to be compared for equality with this 
-     *      {@code JsonString}
-     * @return {@code true} if the specified object is equal to this 
-     *      {@code JsonString}
-     */
-    @Override
-    boolean equals(Object obj);
-
-    /**
-     * Returns the hash code value for this {@code JsonString} object.  
-     * The hash code of a {@code JsonString} object is defined to be its 
-     * {@link #getString()} object's hash code.
-     *
-     * @return the hash code value for this {@code JsonString} object
-     */
-    @Override
-    int hashCode();
-
-}
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2016-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.json;
+
+import java.io.Serializable;
+
+/**
+ * Private implementation of {@link JsonValue} for simple {@link ValueType}s
+ * allowing their usage in constants which are better to implement {@link Serializable}.
+ *
+ * @author Lukas Jungmann
+ */
+final class JsonValueImpl implements JsonValue, Serializable {
+
+    private final ValueType valueType;
+
+    JsonValueImpl(ValueType valueType) {
+        this.valueType = valueType;
+    }
+
+    /**
+     * Returns the value type of this JSON value.
+     *
+     * @return JSON value type
+     */
+    @Override
+    public ValueType getValueType() {
+        return valueType;
+    }
+
+    /**
+     * Compares the specified object with this {@link JsonValue}
+     * object for equality. Returns {@code true} if and only if the
+     * specified object is also a JsonValue, and their
+     * {@link #getValueType()} objects are <i>equal</i>.
+     *
+     * @param obj the object to be compared for equality with this JsonValue
+     * @return {@code true} if the specified object is equal to this
+     * JsonValue
+     */
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj instanceof JsonValue) {
+            return getValueType().equals(((JsonValue) obj).getValueType());
+        }
+        return false;
+    }
+
+    /**
+     * Returns the hash code value for this {@link JsonValue} object.
+     * The hash code of the {@link JsonValue} object is defined to be
+     * its {@link #getValueType()} object's hash code.
+     *
+     * @return the hash code value for this {@link JsonValue} object
+     */
+    @Override
+    public int hashCode() {
+        return valueType.hashCode();
+    }
+
+    @Override
+    public String toString() {
+        return valueType.name().toLowerCase();
+    }
+
+}
diff --git a/src/javax/json/JsonWriter.java b/src/javax/json/JsonWriter.java
index 6b8c617..4c3b22c 100644
--- a/src/javax/json/JsonWriter.java
+++ b/src/javax/json/JsonWriter.java
@@ -1,131 +1,147 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2012-2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json;
-
-import java.io.Closeable;
-
-/**
- * Writes a JSON {@link JsonObject object} or {@link JsonArray array} structure
- * to an output source.
- *
- * <p>The class {@link javax.json.Json} contains methods to create writers from
- * output sources ({@link java.io.OutputStream} and {@link java.io.Writer}).
- *
- * <p>
- * <a id="JsonWriterExample1"/>
- * The following example demonstrates how write an empty JSON object:
- * <pre>
- * <code>
- * JsonWriter jsonWriter = Json.createWriter(...);
- * jsonWriter.writeObject(Json.createObjectBuilder().build());
- * jsonWriter.close();
- * </code>
- * </pre>
- *
- * <p>
- * The class {@link JsonWriterFactory} also contains methods to create
- * {@code JsonWriter} instances. A factory instance can be used to create
- * multiple writer instances with the same configuration. This the preferred
- * way to create multiple instances. A sample usage is shown in the following
- * example:
- * <pre>
- * <code>
- * JsonWriterFactory factory = Json.createWriterFactory(config);
- * JsonWriter writer1 = factory.createWriter(...);
- * JsonWriter writer2 = factory.createWriter(...);
- * </code>
- * </pre>
- *
- * @author Jitendra Kotamraju
- */
-public interface JsonWriter extends  /*Auto*/Closeable {
-
-    /**
-     * Writes the specified JSON {@link JsonArray array} to the output
-     * source. This method needs to be called only once for a writer instance.
-     *
-     * @param array JSON array that is to be written to the output source
-     * @throws JsonException if the specified JSON object cannot be
-     *     written due to i/o error (IOException would be cause of
-     *     JsonException)
-     * @throws IllegalStateException if writeArray, writeObject, write or close
-     *     method is already called
-     */
-    void writeArray(JsonArray array);
-
-    /**
-     * Writes the specified JSON {@link JsonObject object} to the output
-     * source. This method needs to be called only once for a writer instance.
-     *
-     * @param object JSON object that is to be written to the output source
-     * @throws JsonException if the specified JSON object cannot be
-     *     written due to i/o error (IOException would be cause of JsonException)
-     * @throws IllegalStateException if writeArray, writeObject, write or close
-     *     method is already called
-     */
-    void writeObject(JsonObject object);
-
-    /**
-     * Writes the specified JSON {@link JsonObject object} or
-     * {@link JsonArray array} to the output source. This method needs
-     * to be called only once for a writer instance.
-     *
-     * @param value JSON array or object that is to be written to the output
-     *              source
-     * @throws JsonException if the specified JSON object cannot be
-     *     written due to i/o error (IOException would be cause of
-     *     JsonException)
-     * @throws IllegalStateException if writeArray, writeObject, write
-     *     or close method is already called
-     */
-    void write(JsonStructure value);
-
-    /**
-     * Closes this JSON writer and frees any resources associated with the
-     * writer. This method closes the underlying output source.
-     *
-     * @throws JsonException if an i/o error occurs (IOException would be
-     * cause of JsonException)
-     */
-    @Override
-    void close();
-
-}
\ No newline at end of file
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2012-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.json;
+
+import java.io.Closeable;
+
+/**
+ * Writes a JSON {@link JsonObject object} or {@link JsonArray array} structure
+ * to an output source.
+ *
+ * <p>The class {@link javax.json.Json} contains methods to create writers from
+ * output sources ({@link java.io.OutputStream} and {@link java.io.Writer}).
+ *
+ * <p>
+ * The following example demonstrates how write an empty JSON object:
+ * <pre>
+ * <code>
+ * JsonWriter jsonWriter = Json.createWriter(...);
+ * jsonWriter.writeObject(Json.createObjectBuilder().build());
+ * jsonWriter.close();
+ * </code>
+ * </pre>
+ *
+ * <p>
+ * The class {@link JsonWriterFactory} also contains methods to create
+ * {@code JsonWriter} instances. A factory instance can be used to create
+ * multiple writer instances with the same configuration. This the preferred
+ * way to create multiple instances. A sample usage is shown in the following
+ * example:
+ * <pre>
+ * <code>
+ * JsonWriterFactory factory = Json.createWriterFactory(config);
+ * JsonWriter writer1 = factory.createWriter(...);
+ * JsonWriter writer2 = factory.createWriter(...);
+ * </code>
+ * </pre>
+ */
+public interface JsonWriter extends  /*Auto*/Closeable {
+
+    /**
+     * Writes the specified JSON {@link JsonArray array} to the output
+     * source. This method needs to be called only once for a writer instance.
+     *
+     * @param array JSON array that is to be written to the output source
+     * @throws JsonException if the specified JSON object cannot be
+     *     written due to i/o error (IOException would be cause of
+     *     JsonException)
+     * @throws IllegalStateException if writeArray, writeObject, write or close
+     *     method is already called
+     */
+    void writeArray(JsonArray array);
+
+    /**
+     * Writes the specified JSON {@link JsonObject object} to the output
+     * source. This method needs to be called only once for a writer instance.
+     *
+     * @param object JSON object that is to be written to the output source
+     * @throws JsonException if the specified JSON object cannot be
+     *     written due to i/o error (IOException would be cause of JsonException)
+     * @throws IllegalStateException if writeArray, writeObject, write or close
+     *     method is already called
+     */
+    void writeObject(JsonObject object);
+
+    /**
+     * Writes the specified JSON {@link JsonObject object} or
+     * {@link JsonArray array} to the output source. This method needs
+     * to be called only once for a writer instance.
+     *
+     * @param value JSON array or object that is to be written to the output
+     *              source
+     * @throws JsonException if the specified JSON object cannot be
+     *     written due to i/o error (IOException would be cause of
+     *     JsonException)
+     * @throws IllegalStateException if writeArray, writeObject, write
+     *     or close method is already called
+     */
+    void write(JsonStructure value);
+
+    /**
+     * Closes this JSON writer and frees any resources associated with the
+     * writer. This method closes the underlying output source.
+     *
+     * @throws JsonException if an i/o error occurs (IOException would be
+     * cause of JsonException)
+     */
+
+    /**
+     * Writes the specified {@link JsonValue} to the output source.
+     * method needs to be called only once for a write instance.
+     *
+     * @param value a {@code JsonValue} to be written to the output
+     *              source
+     * @throws JsonException if the specified JSON object cannot be
+     *     written due to i/o error (IOException would be cause of
+     *     JsonException)
+     * @throws IllegalStateException if writeArray, writeObject, write
+     *     or close method is already called
+     *
+     * @since 1.1
+     */
+    default void write(JsonValue value) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    void close();
+
+}
diff --git a/src/javax/json/JsonWriterFactory.java b/src/javax/json/JsonWriterFactory.java
index 11198f8..01c07e4 100644
--- a/src/javax/json/JsonWriterFactory.java
+++ b/src/javax/json/JsonWriterFactory.java
@@ -1,120 +1,118 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json;
-
-import java.io.OutputStream;
-import java.io.Writer;
-import java.nio.charset.Charset;
-import java.util.Map;
-
-/**
- * Factory to create {@link javax.json.JsonWriter} instances. If a factory
- * instance is configured with some configuration, that would be
- * used to configure the created writer instances.
- *
- * <p>
- * {@link javax.json.JsonWriter} can also be created using {@link Json}'s
- * {@code createWriter} methods. If multiple writer instances are created,
- * then creating them using a writer factory is preferred.
- *
- * <p>
- * <b>For example:</b>
- * <pre>
- * <code>
- * JsonWriterFactory factory = Json.createWriterFactory(...);
- * JsonWriter writer1 = factory.createWriter(...);
- * JsonWriter writer2 = factory.createWriter(...);
- * </code>
- * </pre>
- *
- * <p> All the methods in this class are safe for use by multiple concurrent
- * threads.
- *
- * @author Jitendra Kotamraju
- */
-public interface JsonWriterFactory {
-
-    /**
-     * Creates a JSON writer to write a JSON {@link JsonObject object} or
-     * {@link JsonArray array} structure to the specified character stream.
-     * The writer is configured with the factory configuration.
-     *
-     * @param writer to which JSON object or array is written
-     * @return a JSON writer
-     */
-    JsonWriter createWriter(Writer writer);
-
-    /**
-     * Creates a JSON writer to write a JSON {@link JsonObject object} or
-     * {@link JsonArray array} structure to the specified byte stream.
-     * Characters written to the stream are encoded into bytes using UTF-8
-     * encoding. The writer is configured with the factory configuration.
-     *
-     * @param out to which JSON object or array is written
-     * @return a JSON writer
-     */
-    JsonWriter createWriter(OutputStream out);
-
-    /**
-     * Creates a JSON writer to write a JSON {@link JsonObject object} or
-     * {@link JsonArray array} structure to the specified byte stream.
-     * Characters written to the stream are encoded into bytes using the
-     * specified charset. The writer is configured with the factory
-     * configuration.
-     *
-     * @param out to which JSON object or array is written
-     * @param charset a charset
-     * @return a JSON writer
-     */
-    JsonWriter createWriter(OutputStream out, Charset charset);
-
-    /**
-     * Returns read-only map of supported provider specific configuration
-     * properties that are used to configure the created JSON writer objects.
-     * If there are any specified configuration properties that are not
-     * supported by the provider, they won't be part of the returned map.
-     *
-     * @return a map of supported provider specific properties that are used
-     * to configure the created writers. The map may be empty but not null.
-     */
-    Map<String, ?> getConfigInUse();
-
-}
\ No newline at end of file
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2013-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.json;
+
+import java.io.OutputStream;
+import java.io.Writer;
+import java.nio.charset.Charset;
+import java.util.Map;
+
+/**
+ * Factory to create {@link javax.json.JsonWriter} instances. If a factory
+ * instance is configured with some configuration, that would be
+ * used to configure the created writer instances.
+ *
+ * <p>
+ * {@link javax.json.JsonWriter} can also be created using {@link Json}'s
+ * {@code createWriter} methods. If multiple writer instances are created,
+ * then creating them using a writer factory is preferred.
+ *
+ * <p>
+ * <b>For example:</b>
+ * <pre>
+ * <code>
+ * JsonWriterFactory factory = Json.createWriterFactory(...);
+ * JsonWriter writer1 = factory.createWriter(...);
+ * JsonWriter writer2 = factory.createWriter(...);
+ * </code>
+ * </pre>
+ *
+ * <p> All the methods in this class are safe for use by multiple concurrent
+ * threads.
+ */
+public interface JsonWriterFactory {
+
+    /**
+     * Creates a JSON writer to write a JSON {@link JsonObject object} or
+     * {@link JsonArray array} structure to the specified character stream.
+     * The writer is configured with the factory configuration.
+     *
+     * @param writer to which JSON object or array is written
+     * @return a JSON writer
+     */
+    JsonWriter createWriter(Writer writer);
+
+    /**
+     * Creates a JSON writer to write a JSON {@link JsonObject object} or
+     * {@link JsonArray array} structure to the specified byte stream.
+     * Characters written to the stream are encoded into bytes using UTF-8
+     * encoding. The writer is configured with the factory configuration.
+     *
+     * @param out to which JSON object or array is written
+     * @return a JSON writer
+     */
+    JsonWriter createWriter(OutputStream out);
+
+    /**
+     * Creates a JSON writer to write a JSON {@link JsonObject object} or
+     * {@link JsonArray array} structure to the specified byte stream.
+     * Characters written to the stream are encoded into bytes using the
+     * specified charset. The writer is configured with the factory
+     * configuration.
+     *
+     * @param out to which JSON object or array is written
+     * @param charset a charset
+     * @return a JSON writer
+     */
+    JsonWriter createWriter(OutputStream out, Charset charset);
+
+    /**
+     * Returns read-only map of supported provider specific configuration
+     * properties that are used to configure the created JSON writer objects.
+     * If there are any specified configuration properties that are not
+     * supported by the provider, they won't be part of the returned map.
+     *
+     * @return a map of supported provider specific properties that are used
+     * to configure the created writers. The map may be empty but not null.
+     */
+    Map<String, ?> getConfigInUse();
+
+}
diff --git a/src/javax/json/package-info.java b/src/javax/json/package-info.java
index 6085a78..6614347 100644
--- a/src/javax/json/package-info.java
+++ b/src/javax/json/package-info.java
@@ -1,65 +1,69 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2011-2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-/**
- * Provides an object model API to process <a href="http://json.org/">JSON</a>.
- *
- * <p>The object model API is a high-level API that provides immutable object
- * models for JSON object and array structures. These JSON structures are
- * represented as object models using the Java types {@link javax.json.JsonObject}
- * and {@link javax.json.JsonArray}. The interface {@code javax.json.JsonObject} provides
- * a {@link java.util.Map} view to access the unordered collection of zero or
- * more name/value pairs from the model. Similarly, the interface
- * {@code JsonArray} provides a {@link java.util.List} view to access the
- * ordered sequence of zero or more values from the model.
- *
- * <p>The object model API uses builder patterns to create these object models. 
- * The classes {@link javax.json.JsonObjectBuilder} and 
- * {@link javax.json.JsonArrayBuilder} provide methods to create models
- * of type {@code JsonObject} and {@code JsonArray} respectively.
- *
- * <p>These object models can also be created from an input source using
- * the class {@link javax.json.JsonReader}. Similarly, these object models
- * can be written to an output source using the class {@link javax.json.JsonWriter}.
- *
- * @since JSON Processing 1.0
- * @author Jitendra Kotamraju
- */
-package javax.json;
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2011-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+/**
+ * Provides an object model API to process <a href="http://json.org/">JSON</a>.
+ *
+ * <p>The object model API is a high-level API that provides immutable object
+ * models for JSON object and array structures. These JSON structures are
+ * represented as object models using the Java types {@link javax.json.JsonObject}
+ * and {@link javax.json.JsonArray}. The interface {@code javax.json.JsonObject} provides
+ * a {@link java.util.Map} view to access the unordered collection of zero or
+ * more name/value pairs from the model. Similarly, the interface
+ * {@code JsonArray} provides a {@link java.util.List} view to access the
+ * ordered sequence of zero or more values from the model.
+ *
+ * <p>The object model API uses builder patterns to create and modify
+ * these object models. The classes {@link javax.json.JsonObjectBuilder} and 
+ * {@link javax.json.JsonArrayBuilder} provide methods to create and modify models
+ * of type {@code JsonObject} and {@code JsonArray} respectively.
+ *
+ * <p>These object models can also be created from an input source using
+ * the class {@link javax.json.JsonReader}. Similarly, these object models
+ * can be written to an output source using the class {@link javax.json.JsonWriter}.
+ * <p>
+ * This package includes several classes that implement other JSON related
+ * standards: <a href="http://tools.ietf.org/html/rfc6901">JSON Pointer</a>,
+ * <a Href="http://tools.ietf.org/html/rfc6902">JSON Patch</a>, and
+ * <a Href="http://tools.ietf.org/html/rfc7396">JSON Merge Patch</a>.
+ * They can be used to retrieve, transform or manipulate values in an
+ * object model.
+ */
+package javax.json;
diff --git a/src/javax/json/spi/JsonProvider.java b/src/javax/json/spi/JsonProvider.java
index 420a824..ddd2441 100644
--- a/src/javax/json/spi/JsonProvider.java
+++ b/src/javax/json/spi/JsonProvider.java
@@ -1,274 +1,504 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2011-2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json.spi;
-
-import javax.json.*;
-import javax.json.stream.JsonGenerator;
-import javax.json.stream.JsonGeneratorFactory;
-import javax.json.stream.JsonParser;
-import javax.json.stream.JsonParserFactory;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.Reader;
-import java.io.Writer;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.ServiceLoader;
-
-/**
- * Service provider for JSON processing objects.
- *
- * <p>All the methods in this class are safe for use by multiple concurrent
- * threads.
- *
- * @see ServiceLoader
- * @author Jitendra Kotamraju
- */
-public abstract class JsonProvider {
-
-    /**
-     * A constant representing the name of the default
-     * {@code JsonProvider} implementation class.
-     */
-    private static final String DEFAULT_PROVIDER
-            = "org.glassfish.json.JsonProviderImpl";
-
-    protected JsonProvider() {
-    }
-
-    /**
-     *
-     * Creates a JSON provider object. The provider is loaded using the
-     * {@link ServiceLoader#load(Class)} method. If there are no available
-     * service providers, this method returns the default service provider.
-     *
-     * @see ServiceLoader
-     * @return a JSON provider
-     */
-    public static JsonProvider provider() {
-        ServiceLoader<JsonProvider> loader = ServiceLoader.load(JsonProvider.class);
-        Iterator<JsonProvider> it = loader.iterator();
-        if (it.hasNext()) {
-            return it.next();
-        }
-
-        try {
-            Class<?> clazz = Class.forName(DEFAULT_PROVIDER);
-            return (JsonProvider)clazz.newInstance();
-        } catch (ClassNotFoundException x) {
-            throw new JsonException(
-                    "Provider " + DEFAULT_PROVIDER + " not found", x);
-        } catch (Exception x) {
-            throw new JsonException(
-                    "Provider " + DEFAULT_PROVIDER + " could not be instantiated: " + x,
-                    x);
-        }
-    }
-
-    /**
-     * Creates a JSON parser from a character stream.
-     *
-     * @param reader i/o reader from which JSON is to be read
-     * @return a JSON parser
-     */
-    public abstract JsonParser createParser(Reader reader);
-
-    /**
-     * Creates a JSON parser from the specified byte stream.
-     * The character encoding of the stream is determined
-     * as defined in <a href="http://tools.ietf.org/rfc/rfc4627.txt">RFC 4627
-     * </a>.
-     *
-     * @param in i/o stream from which JSON is to be read
-     * @throws JsonException if encoding cannot be determined
-     *         or i/o error (IOException would be cause of JsonException)
-     * @return a JSON parser
-     */
-    public abstract JsonParser createParser(InputStream in);
-
-    /**
-     * Creates a parser factory for creating {@link JsonParser} instances.
-     *
-     * @return a JSON parser factory
-     *
-    public abstract JsonParserFactory createParserFactory();
-     */
-
-    /**
-     * Creates a parser factory for creating {@link JsonParser} instances.
-     * The factory is configured with the specified map of
-     * provider specific configuration properties. Provider implementations
-     * should ignore any unsupported configuration properties specified in
-     * the map.
-     *
-     * @param config a map of provider specific properties to configure the
-     *               JSON parsers. The map may be empty or null
-     * @return a JSON parser factory
-     */
-    public abstract JsonParserFactory createParserFactory(Map<String, ?> config);
-
-    /**
-     * Creates a JSON generator for writing JSON text to a character stream.
-     *
-     * @param writer a i/o writer to which JSON is written
-     * @return a JSON generator
-     */
-    public abstract JsonGenerator createGenerator(Writer writer);
-
-    /**
-     * Creates a JSON generator for writing JSON text to a byte stream.
-     *
-     * @param out i/o stream to which JSON is written
-     * @return a JSON generator
-     */
-    public abstract JsonGenerator createGenerator(OutputStream out);
-
-    /**
-     * Creates a generator factory for creating {@link JsonGenerator} instances.
-     *
-     * @return a JSON generator factory
-     *
-    public abstract JsonGeneratorFactory createGeneratorFactory();
-     */
-
-    /**
-     * Creates a generator factory for creating {@link JsonGenerator} instances.
-     * The factory is configured with the specified map of provider specific
-     * configuration properties. Provider implementations should
-     * ignore any unsupported configuration properties specified in the map.
-     *
-     * @param config a map of provider specific properties to configure the
-     *               JSON generators. The map may be empty or null
-     * @return a JSON generator factory
-     */
-    public abstract JsonGeneratorFactory createGeneratorFactory(Map<String, ?> config);
-
-    /**
-     * Creates a JSON reader from a character stream.
-     *
-     * @param reader a reader from which JSON is to be read
-     * @return a JSON reader
-     */
-    public abstract JsonReader createReader(Reader reader);
-
-    /**
-     * Creates a JSON reader from a byte stream. The character encoding of
-     * the stream is determined as described in
-     * <a href="http://tools.ietf.org/rfc/rfc4627.txt">RFC 4627</a>.
-     *
-     * @param in a byte stream from which JSON is to be read
-     * @return a JSON reader
-     */
-    public abstract JsonReader createReader(InputStream in);
-
-    /**
-     * Creates a JSON writer to write a
-     * JSON {@link JsonObject object} or {@link JsonArray array}
-     * structure to the specified character stream.
-     *
-     * @param writer to which JSON object or array is written
-     * @return a JSON writer
-     */
-    public abstract JsonWriter createWriter(Writer writer);
-
-    /**
-     * Creates a JSON writer to write a
-     * JSON {@link JsonObject object} or {@link JsonArray array}
-     * structure to the specified byte stream. Characters written to
-     * the stream are encoded into bytes using UTF-8 encoding.
-     *
-     * @param out to which JSON object or array is written
-     * @return a JSON writer
-     */
-    public abstract JsonWriter createWriter(OutputStream out);
-
-    /**
-     * Creates a writer factory for creating {@link JsonWriter} objects.
-     * The factory is configured with the specified map of provider specific
-     * configuration properties. Provider implementations should ignore any
-     * unsupported configuration properties specified in the map.
-     *
-     * @param config a map of provider specific properties to configure the
-     *               JSON writers. The map may be empty or null
-     * @return a JSON writer factory
-     */
-    public abstract JsonWriterFactory createWriterFactory(Map<String,?> config);
-
-    /**
-     * Creates a reader factory for creating {@link JsonReader} objects.
-     * The factory is configured with the specified map of provider specific
-     * configuration properties. Provider implementations should ignore any
-     * unsupported configuration properties specified in the map.
-     *
-     * @param config a map of provider specific properties to configure the
-     *               JSON readers. The map may be empty or null
-     * @return a JSON reader factory
-     */
-    public abstract JsonReaderFactory createReaderFactory(Map<String,?> config);
-
-    /**
-     * Creates a JSON object builder
-     *
-     * @return a JSON object builder
-     */
-    public abstract JsonObjectBuilder createObjectBuilder();
-
-    /**
-     * Creates a JSON array builder
-     *
-     * @return a JSON array builder
-     */
-    public abstract JsonArrayBuilder createArrayBuilder();
-
-    /**
-     * Creates a builder factory for creating {@link JsonArrayBuilder}
-     * and {@link JsonObjectBuilder} objects.
-     * The factory is configured with the specified map of provider specific
-     * configuration properties. Provider implementations should ignore any
-     * unsupported configuration properties specified in the map.
-     *
-     * @param config a map of provider specific properties to configure the
-     *               JSON builders. The map may be empty or null
-     * @return a JSON builder factory
-     */
-    public abstract JsonBuilderFactory createBuilderFactory(Map<String,?> config);
-
-}
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2011-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.json.spi;
+
+import javax.json.*;
+import javax.json.stream.JsonGenerator;
+import javax.json.stream.JsonGeneratorFactory;
+import javax.json.stream.JsonParser;
+import javax.json.stream.JsonParserFactory;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.Reader;
+import java.io.Writer;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.ServiceLoader;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.Optional;
+
+/**
+ * Service provider for JSON processing objects.
+ *
+ * <p>All the methods in this class are safe for use by multiple concurrent
+ * threads.
+ *
+ * @see ServiceLoader
+ */
+public abstract class JsonProvider {
+
+    /**
+     * A constant representing the name of the default
+     * {@code JsonProvider} implementation class.
+     */
+    private static final String DEFAULT_PROVIDER
+            = "org.glassfish.json.JsonProviderImpl";
+
+    protected JsonProvider() {
+    }
+
+    /**
+     * Creates a JSON provider object. The provider is loaded using the
+     * {@link ServiceLoader#load(Class)} method. If there are no available
+     * service providers, this method returns the default service provider.
+     * Users are recommended to cache the result of this method.
+     *
+     * @see ServiceLoader
+     * @return a JSON provider
+     */
+    public static JsonProvider provider() {
+        ServiceLoader<JsonProvider> loader = ServiceLoader.load(JsonProvider.class);
+        Iterator<JsonProvider> it = loader.iterator();
+        if (it.hasNext()) {
+            return it.next();
+        }
+        try {
+            Class<?> clazz = Class.forName(DEFAULT_PROVIDER);
+            return (JsonProvider) clazz.newInstance();
+        } catch (ClassNotFoundException x) {
+            throw new JsonException(
+                    "Provider " + DEFAULT_PROVIDER + " not found", x);
+        } catch (Exception x) {
+            throw new JsonException(
+                    "Provider " + DEFAULT_PROVIDER + " could not be instantiated: " + x,
+                    x);
+        }
+    }
+
+    /**
+     * Creates a JSON parser from a character stream.
+     *
+     * @param reader i/o reader from which JSON is to be read
+     * @return a JSON parser
+     */
+    public abstract JsonParser createParser(Reader reader);
+
+    /**
+     * Creates a JSON parser from the specified byte stream.
+     * The character encoding of the stream is determined
+     * as defined in <a href="http://tools.ietf.org/rfc/rfc7159.txt">RFC 7159
+     * </a>.
+     *
+     * @param in i/o stream from which JSON is to be read
+     * @throws JsonException if encoding cannot be determined
+     *         or i/o error (IOException would be cause of JsonException)
+     * @return a JSON parser
+     */
+    public abstract JsonParser createParser(InputStream in);
+
+    /**
+     * Creates a parser factory for creating {@link JsonParser} instances.
+     *
+     * @return a JSON parser factory
+     *
+    public abstract JsonParserFactory createParserFactory();
+     */
+
+    /**
+     * Creates a parser factory for creating {@link JsonParser} instances.
+     * The factory is configured with the specified map of
+     * provider specific configuration properties. Provider implementations
+     * should ignore any unsupported configuration properties specified in
+     * the map.
+     *
+     * @param config a map of provider specific properties to configure the
+     *               JSON parsers. The map may be empty or null
+     * @return a JSON parser factory
+     */
+    public abstract JsonParserFactory createParserFactory(Map<String, ?> config);
+
+    /**
+     * Creates a JSON generator for writing JSON text to a character stream.
+     *
+     * @param writer a i/o writer to which JSON is written
+     * @return a JSON generator
+     */
+    public abstract JsonGenerator createGenerator(Writer writer);
+
+    /**
+     * Creates a JSON generator for writing JSON text to a byte stream.
+     *
+     * @param out i/o stream to which JSON is written
+     * @return a JSON generator
+     */
+    public abstract JsonGenerator createGenerator(OutputStream out);
+
+    /**
+     * Creates a generator factory for creating {@link JsonGenerator} instances.
+     *
+     * @return a JSON generator factory
+     *
+    public abstract JsonGeneratorFactory createGeneratorFactory();
+     */
+
+    /**
+     * Creates a generator factory for creating {@link JsonGenerator} instances.
+     * The factory is configured with the specified map of provider specific
+     * configuration properties. Provider implementations should
+     * ignore any unsupported configuration properties specified in the map.
+     *
+     * @param config a map of provider specific properties to configure the
+     *               JSON generators. The map may be empty or null
+     * @return a JSON generator factory
+     */
+    public abstract JsonGeneratorFactory createGeneratorFactory(Map<String, ?> config);
+
+    /**
+     * Creates a JSON reader from a character stream.
+     *
+     * @param reader a reader from which JSON is to be read
+     * @return a JSON reader
+     */
+    public abstract JsonReader createReader(Reader reader);
+
+    /**
+     * Creates a JSON reader from a byte stream. The character encoding of
+     * the stream is determined as described in
+     * <a href="http://tools.ietf.org/rfc/rfc7159.txt">RFC 7159</a>.
+     *
+     * @param in a byte stream from which JSON is to be read
+     * @return a JSON reader
+     */
+    public abstract JsonReader createReader(InputStream in);
+
+    /**
+     * Creates a JSON writer to write a
+     * JSON {@link JsonObject object} or {@link JsonArray array}
+     * structure to the specified character stream.
+     *
+     * @param writer to which JSON object or array is written
+     * @return a JSON writer
+     */
+    public abstract JsonWriter createWriter(Writer writer);
+
+    /**
+     * Creates a JSON writer to write a
+     * JSON {@link JsonObject object} or {@link JsonArray array}
+     * structure to the specified byte stream. Characters written to
+     * the stream are encoded into bytes using UTF-8 encoding.
+     *
+     * @param out to which JSON object or array is written
+     * @return a JSON writer
+     */
+    public abstract JsonWriter createWriter(OutputStream out);
+
+    /**
+     * Creates a writer factory for creating {@link JsonWriter} objects.
+     * The factory is configured with the specified map of provider specific
+     * configuration properties. Provider implementations should ignore any
+     * unsupported configuration properties specified in the map.
+     *
+     * @param config a map of provider specific properties to configure the
+     *               JSON writers. The map may be empty or null
+     * @return a JSON writer factory
+     */
+    public abstract JsonWriterFactory createWriterFactory(Map<String,?> config);
+
+    /**
+     * Creates a reader factory for creating {@link JsonReader} objects.
+     * The factory is configured with the specified map of provider specific
+     * configuration properties. Provider implementations should ignore any
+     * unsupported configuration properties specified in the map.
+     *
+     * @param config a map of provider specific properties to configure the
+     *               JSON readers. The map may be empty or null
+     * @return a JSON reader factory
+     */
+    public abstract JsonReaderFactory createReaderFactory(Map<String,?> config);
+
+    /**
+     * Creates a JSON object builder.
+     *
+     * @return a JSON object builder
+     */
+    public abstract JsonObjectBuilder createObjectBuilder();
+
+    /**
+     * Creates a JSON object builder, initialized with the specified object.
+     *
+     * @param object the initial JSON object in the builder
+     * @return a JSON object builder
+     *
+     * @since 1.1
+     */
+    public JsonObjectBuilder createObjectBuilder(JsonObject object) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Creates a JSON object builder, initialized with the data from specified {@code map}.
+     * If the @{code map} contains {@link Optional}s then resulting JSON object builder
+     * contains the key from the {@code map} only if the {@link Optional} is not empty.
+     *
+     * @param map the initial object in the builder
+     * @return a JSON object builder
+     * @exception IllegalArgumentException if the value from the {@code map} cannot be converted
+     *            to the corresponding {@link JsonValue}
+     *
+     * @since 1.1
+     */
+    public JsonObjectBuilder createObjectBuilder(Map<String, Object> map) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Creates a JSON array builder.
+     *
+     * @return a JSON array builder
+     */
+    public abstract JsonArrayBuilder createArrayBuilder();
+
+    /**
+     * Creates a JSON array builder, initialized with the specified array.
+     *
+     * @param array the initial JSON array in the builder
+     * @return a JSON array builder
+     *
+     * @since 1.1
+     */
+    public JsonArrayBuilder createArrayBuilder(JsonArray array) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Creates JSON Pointer (<a href="http://tools.ietf.org/html/rfc6901">RFC 6901</a>)
+     * from given {@code jsonPointer} string.
+     * <ul>
+     *     <li>An empty {@code jsonPointer} string defines a reference to the target itself.</li>
+     *     <li>If the {@code jsonPointer} string is non-empty, it must be a sequence of '{@code /}' prefixed tokens.</li>
+     * </ul>
+     *
+     * @param jsonPointer the JSON Pointer string
+     * @throws NullPointerException if {@code jsonPointer} is {@code null}
+     * @throws JsonException if {@code jsonPointer} is not a valid JSON Pointer
+     * @return a JSON Pointer
+     *
+     * @since 1.1
+     */
+    public JsonPointer createPointer(String jsonPointer) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Creates a JSON Patch builder (<a href="http://tools.ietf.org/html/rfc6902">RFC 6902</a>).
+     *
+     * @return a JSON Patch builder
+     *
+     * @since 1.1
+     */
+    public JsonPatchBuilder createPatchBuilder() {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Creates a JSON Patch builder
+     * (<a href="http://tools.ietf.org/html/rfc6902">RFC 6902</a>),
+     * initialized with the specified operations.
+     *
+     * @param array the initial patch operations
+     * @return a JSON Patch builder
+     *
+     * @since 1.1
+     */
+    public JsonPatchBuilder createPatchBuilder(JsonArray array) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Creates a JSON Patch (<a href="http://tools.ietf.org/html/rfc6902">RFC 6902</a>)
+     * from the specified operations.
+     *
+     * @param array patch operations
+     * @return a JSON Patch
+     *
+     * @since 1.1
+     */
+    public JsonPatch createPatch(JsonArray array) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Generates a JSON Patch (<a href="http://tools.ietf.org/html/rfc6902">RFC 6902</a>)
+     * from the source and target {@code JsonStructure}.
+     * The generated JSON Patch need not be unique.
+     *
+     * @param source the source
+     * @param target the target, must be the same type as the source
+     * @return a JSON Patch which when applied to the source, yields the target
+     *
+     * @since 1.1
+     */
+    public JsonPatch createDiff(JsonStructure source, JsonStructure target) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Creates JSON Merge Patch (<a href="http://tools.ietf.org/html/rfc7396">RFC 7396</a>)
+     * from specified {@code JsonValue}.
+     *
+     * @param patch the patch
+     * @return a JSON Merge Patch
+     *
+     * @since 1.1
+     */
+    public JsonMergePatch createMergePatch(JsonValue patch) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Generates a JSON Merge Patch (<a href="http://tools.ietf.org/html/rfc7396">RFC 7396</a>)
+     * from the source and target {@code JsonValue}s
+     * which when applied to the {@code source}, yields the {@code target}.
+     *
+     * @param source the source
+     * @param target the target
+     * @return a JSON Merge Patch
+     *
+     * @since 1.1
+     */
+    public JsonMergePatch createMergeDiff(JsonValue source, JsonValue target) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Creates a JSON array builder, initialized with the content of specified {@code collection}.
+     * If the @{code collection} contains {@link Optional}s then resulting JSON array builder
+     * contains the value from the {@code collection} only if the {@link Optional} is not empty.
+     *
+     * @param collection the initial data for the builder
+     * @return a JSON array builder
+     * @exception IllegalArgumentException if the value from the {@code collection} cannot be converted
+     *            to the corresponding {@link JsonValue}
+     *
+     * @since 1.1
+     */
+    public JsonArrayBuilder createArrayBuilder(Collection<?> collection) {
+        throw new UnsupportedOperationException();
+    }
+
+
+    /**
+     * Creates a builder factory for creating {@link JsonArrayBuilder}
+     * and {@link JsonObjectBuilder} objects.
+     * The factory is configured with the specified map of provider specific
+     * configuration properties. Provider implementations should ignore any
+     * unsupported configuration properties specified in the map.
+     *
+     * @param config a map of provider specific properties to configure the
+     *               JSON builders. The map may be empty or null
+     * @return a JSON builder factory
+     */
+    public abstract JsonBuilderFactory createBuilderFactory(Map<String,?> config);
+
+    /**
+     * Creates a JsonString.
+     *
+     * @param value a JSON string
+     * @return the JsonString for the string
+     *
+     * @since 1.1
+     */
+    public JsonString createValue(String value) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Creates a JsonNumber.
+     *
+     * @param value a JSON number
+     * @return the JsonNumber for the number
+     *
+     * @since 1.1
+     */
+    public JsonNumber createValue(int value) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Creates a JsonNumber.
+     *
+     * @param value a JSON number
+     * @return the JsonNumber for the number
+     *
+     * @since 1.1
+     */
+    public JsonNumber createValue(long value) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Creates a JsonNumber.
+     *
+     * @param value a JSON number
+     * @return the JsonNumber for the number
+     *
+     * @since 1.1
+     */
+    public JsonNumber createValue(double value) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Creates a JsonNumber.
+     *
+     * @param value a JSON number
+     * @return the JsonNumber for the number
+     *
+     * @since 1.1
+     */
+    public JsonNumber createValue(BigDecimal value) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Creates a JsonNumber.
+     *
+     * @param value a JSON number
+     * @return the JsonNumber for the number
+     *
+     * @since 1.1
+     */
+    public JsonNumber createValue(BigInteger value) {
+        throw new UnsupportedOperationException();
+    }
+}
diff --git a/src/javax/json/spi/package-info.java b/src/javax/json/spi/package-info.java
index a60bf4f..7d05380 100644
--- a/src/javax/json/spi/package-info.java
+++ b/src/javax/json/spi/package-info.java
@@ -1,57 +1,56 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2012-2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-/**
- * Service Provider Interface (SPI) to plug in implementations for
- * JSON processing objects.
- *
- * <p> {@link javax.json.spi.JsonProvider JsonProvider} is an abstract class 
- * that provides a service for creating JSON processing instances.
- * A <i>service provider</i> for {@code JsonProvider} provides an 
- * specific implementation by subclassing and implementing the methods in
- * {@code JsonProvider}. This enables using custom, efficient JSON processing
- * implementations (for e.g. parser and generator) other than the default ones.
- *
- * <p>The API locates and loads providers using {@link java.util.ServiceLoader}.
- *
- * @since JSON Processing 1.0
- * @author Jitendra Kotamraju
- */
-package javax.json.spi;
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2012-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+/**
+ * Service Provider Interface (SPI) to plug in implementations for
+ * JSON processing objects.
+ *
+ * <p> {@link javax.json.spi.JsonProvider JsonProvider} is an abstract class 
+ * that provides a service for creating JSON processing instances.
+ * A <i>service provider</i> for {@code JsonProvider} provides an 
+ * specific implementation by subclassing and implementing the methods in
+ * {@code JsonProvider}. This enables using custom, efficient JSON processing
+ * implementations (for e.g. parser and generator) other than the default ones.
+ *
+ * <p>The API locates and loads providers using {@link java.util.ServiceLoader}.
+ *
+ * @since JSON Processing 1.0
+ */
+package javax.json.spi;
diff --git a/src/javax/json/stream/JsonCollectors.java b/src/javax/json/stream/JsonCollectors.java
new file mode 100644
index 0000000..ca76480
--- /dev/null
+++ b/src/javax/json/stream/JsonCollectors.java
@@ -0,0 +1,184 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2015-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.json.stream;
+
+import java.util.Map;
+import java.util.HashMap;
+import java.util.stream.Collector;
+import java.util.function.BinaryOperator;
+import java.util.function.Function;
+import java.util.function.BiConsumer;
+
+import javax.json.Json;
+import javax.json.JsonArray;
+import javax.json.JsonArrayBuilder;
+import javax.json.JsonObject;
+import javax.json.JsonObjectBuilder;
+import javax.json.JsonValue;
+import javax.json.JsonException;
+
+/**
+ * This class contains some implementations of {@code java.util.stream.Collector} for accumulating
+ * {@link JsonValue}s into {@link JsonArray} and {@link JsonObject}.
+ *
+ * @since 1.1
+ */
+
+public final class JsonCollectors {
+
+    private JsonCollectors() {
+    }
+
+    /**
+     * Constructs a {@code java.util.stream.Collector} that accumulates the input {@code JsonValue}
+     * elements into a {@code JsonArray}.
+     *
+     * @return the constructed Collector
+     */
+    public static Collector<JsonValue, JsonArrayBuilder, JsonArray> toJsonArray() {
+        return Collector.of(
+                Json::createArrayBuilder,
+                JsonArrayBuilder::add,
+                JsonArrayBuilder::addAll,
+                JsonArrayBuilder::build);
+    }
+
+    /**
+     * Constructs a {@code java.util.stream.Collector} that accumulates the input {@code Map.Entry<String,JsonValue>}
+     * elements into a {@code JsonObject}.
+     *
+     * @return the constructed Collector
+     */
+    public static Collector<Map.Entry<String, JsonValue>, JsonObjectBuilder, JsonObject> toJsonObject() {
+        return Collector.of(
+                Json::createObjectBuilder,
+                (JsonObjectBuilder b, Map.Entry<String, JsonValue> v) -> b.add(v.getKey(), v.getValue()),
+                JsonObjectBuilder::addAll,
+                JsonObjectBuilder::build);
+    }
+
+    /**
+     * Constructs a {@code java.util.stream.Collector} that accumulates the input {@code JsonValue}
+     * elements into a {@code JsonObject}.  The name/value pairs of the {@code JsonObject} are computed
+     * by applying the provided mapping functions.
+     *
+     * @param keyMapper a mapping function to produce names.
+     * @param valueMapper a mapping function to produce values
+     * @return the constructed Collector
+     */
+    public static Collector<JsonValue, JsonObjectBuilder, JsonObject>
+                toJsonObject(Function<JsonValue, String> keyMapper,
+                             Function<JsonValue, JsonValue> valueMapper) {
+        return Collector.of(
+                Json::createObjectBuilder,
+                (b, v) -> b.add(keyMapper.apply(v), valueMapper.apply(v)),
+                JsonObjectBuilder::addAll,
+                JsonObjectBuilder::build,
+                Collector.Characteristics.UNORDERED);
+    }
+
+    /**
+     * Constructs a {@code java.util.stream.Collector} that implements a "group by" operation on the
+     * input {@code JsonValue} elements. A classifier function maps the input {@code JsonValue}s to keys, and
+     * the {@code JsonValue}s are partitioned into groups according to the value of the key.
+     * A reduction operation is performed on the {@code JsonValue}s in each group, using the
+     * downstream {@code Collector}. For each group, the key and the results of the reduction operation
+     * become the name/value pairs of the resultant {@code JsonObject}.
+     *
+     * @param <T> the intermediate accumulation {@code JsonArrayBuilder} of the downstream collector
+     * @param classifier a function mapping the input {@code JsonValue}s to a String, producing keys
+     * @param downstream a {@code Collector} that implements a reduction operation on the
+     *        {@code JsonValue}s in each group.
+     * @return the constructed {@code Collector}
+     */
+    public static <T extends JsonArrayBuilder> Collector<JsonValue, Map<String, T>, JsonObject>
+                groupingBy(Function<JsonValue, String> classifier,
+                           Collector<JsonValue, T, JsonArray> downstream) {
+
+        BiConsumer<Map<String, T>, JsonValue> accumulator =
+            (map, value) -> {
+                String key = classifier.apply(value);
+                if (key == null) {
+                    throw new JsonException("element cannot be mapped to a null key");
+                }
+                // Build a map of key to JsonArrayBuilder
+                T arrayBuilder =
+                    map.computeIfAbsent(key, v->downstream.supplier().get());
+                // Add elements from downstream Collector to the arrayBuilder.
+                downstream.accumulator().accept(arrayBuilder, value);
+            };
+        Function<Map<String, T>, JsonObject> finisher =
+            map -> {
+                // transform the map of name: JsonArrayBuilder to
+                //                      name: JsonArray
+                // using the downstream collector for reducing the JsonArray
+                JsonObjectBuilder objectBuilder = Json.createObjectBuilder();
+                map.forEach((k, v) -> {
+                    JsonArray array = downstream.finisher().apply(v);
+                    objectBuilder.add(k, array);
+                });
+                return objectBuilder.build();
+            };
+        BinaryOperator<Map<String, T>> combiner =
+            (map1, map2) -> {
+                map1.putAll(map2);
+                return map1;
+            };
+        return Collector.of(HashMap::new, accumulator, combiner, finisher,
+            Collector.Characteristics.UNORDERED);
+    }
+
+    /**
+     * Constructs a {@code java.util.stream.Collector} that implements a "group by" operation on the
+     * input {@code JsonValue} elements. A classifier function maps the input {@code JsonValue}s to keys, and
+     * the {@code JsonValue}s are partitioned into groups according to the value of the key.
+     * The {@code JsonValue}s in each group are added to a {@code JsonArray}.  The key and the
+     * {@code JsonArray} in each group becomes the name/value pair of the resultant {@code JsonObject}.
+     *
+     * @param classifier a function mapping the input {@code JsonValue}s to a String, producing keys
+     * @return the constructed {@code Collector}
+     */
+    public static Collector<JsonValue, Map<String, JsonArrayBuilder>, JsonObject>
+                groupingBy(Function<JsonValue, String> classifier) {
+        return groupingBy(classifier, toJsonArray());
+    }
+}
+
diff --git a/src/javax/json/stream/JsonGenerationException.java b/src/javax/json/stream/JsonGenerationException.java
index 19d0fe0..9fbc2b0 100644
--- a/src/javax/json/stream/JsonGenerationException.java
+++ b/src/javax/json/stream/JsonGenerationException.java
@@ -1,83 +1,81 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2012-2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json.stream;
-
-import javax.json.JsonException;
-
-/**
- * {@code JsonGenerationException} indicates an incorrect JSON is
- * being generated.
- *
- * @author Jitendra Kotamraju
- */
-public class JsonGenerationException extends JsonException {
-
-    /**
-     * Constructs a new runtime exception with the specified detail message.
-     * The cause is not initialized, and may subsequently be initialized by a
-     * call to {@link #initCause}.
-     *
-     * @param message the detail message. The detail message is saved for
-     *                later retrieval by the {@link #getMessage()} method.
-     */
-    public JsonGenerationException(String message) {
-        super(message);
-    }
-
-    /**
-     * Constructs a new runtime exception with the specified detail message and
-     * cause.  <p>Note that the detail message associated with
-     * {@code cause} is <i>not</i> automatically incorporated in
-     * this runtime exception's detail message.
-     *
-     * @param message the detail message (which is saved for later retrieval
-     *                by the {@link #getMessage()} method).
-     * @param cause the cause (which is saved for later retrieval by the
-     *              {@link #getCause()} method). (A <tt>null</tt> value is
-     *              permitted, and indicates that the cause is nonexistent or
-     *              unknown.)
-     */
-    public JsonGenerationException(String message, Throwable cause) {
-        super(message, cause);
-    }
-
-}
-
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2012-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.json.stream;
+
+import javax.json.JsonException;
+
+/**
+ * {@code JsonGenerationException} indicates an incorrect JSON is
+ * being generated.
+ */
+public class JsonGenerationException extends JsonException {
+
+    /**
+     * Constructs a new runtime exception with the specified detail message.
+     * The cause is not initialized, and may subsequently be initialized by a
+     * call to {@link #initCause}.
+     *
+     * @param message the detail message. The detail message is saved for
+     *                later retrieval by the {@link #getMessage()} method.
+     */
+    public JsonGenerationException(String message) {
+        super(message);
+    }
+
+    /**
+     * Constructs a new runtime exception with the specified detail message and
+     * cause.  <p>Note that the detail message associated with
+     * {@code cause} is <i>not</i> automatically incorporated in
+     * this runtime exception's detail message.
+     *
+     * @param message the detail message (which is saved for later retrieval
+     *                by the {@link #getMessage()} method).
+     * @param cause the cause (which is saved for later retrieval by the
+     *              {@link #getCause()} method). (A <tt>null</tt> value is
+     *              permitted, and indicates that the cause is nonexistent or
+     *              unknown.)
+     */
+    public JsonGenerationException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+}
+
diff --git a/src/javax/json/stream/JsonGenerator.java b/src/javax/json/stream/JsonGenerator.java
index ac27f64..d85cbd6 100644
--- a/src/javax/json/stream/JsonGenerator.java
+++ b/src/javax/json/stream/JsonGenerator.java
@@ -1,538 +1,563 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2011-2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json.stream;
-
-import javax.json.JsonValue;
-import java.io.Closeable;
-import java.io.Flushable;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-/**
- * Writes JSON data to an output source in a streaming way. The class
- * {@link javax.json.Json} contains methods to create generators for character
- * or output streams ({@link java.io.Writer} and {@link java.io.OutputStream}).
- *
- * <p>
- * The following example shows how to create a JSON generator:
- * <pre>
- * <code>
- * JsonGenerator generator = Json.createGenerator(...);
- * </code>
- * </pre>
- *
- * <p>
- * The class {@link JsonGeneratorFactory} also contains methods to create
- * {@code JsonGenerator} instances. {@link JsonGeneratorFactory} should be used
- * when creating multiple generator instances, as in the following example:
- * <pre>
- * <code>
- * JsonGeneratorFactory factory = Json.createGeneratorFactory();
- * JsonGenerator generator1 = factory.createGenerator(...);
- * JsonGenerator generator2 = factory.createGenerator(...);
- * </code>
- * </pre>
- *
- * <p>
- * JSON objects can be created using {@code JsonGenerator} by calling the
- * {@link #writeStartObject()} method and then adding name/value pairs with the
- * {@code write} method.
- * <p>
- * The following example shows how to generate an empty JSON object:
- * <pre>
- * <code>
- * JsonGenerator generator = ...;
- * generator.writeStartObject().writeEnd().close();
- * </code>
- * </pre>
- *
- * JSON arrays can be created using {@code JsonGenerator} by calling the
- * {@link #writeStartArray()} method and then adding values with the
- * {@code write} method.
- *
- * <p>
- * The following example shows how to generate an empty JSON array:
- * <pre>
- * <code>
- * JsonGenerator generator = ...;
- * generator.writeStartArray().writeEnd().close();
- * </code>
- * </pre>
- *
- * {@code JsonGenerator} methods can be chained as in the following example:
- * <p>
- * <a id="JsonGeneratorExample3"/>
- * <pre>
- * <code>
- * generator
- *     .writeStartObject()
- *         .write("firstName", "John")
- *         .write("lastName", "Smith")
- *         .write("age", 25)
- *         .writeStartObject("address")
- *             .write("streetAddress", "21 2nd Street")
- *             .write("city", "New York")
- *             .write("state", "NY")
- *             .write("postalCode", "10021")
- *         .writeEnd()
- *         .writeStartArray("phoneNumber")
- *             .writeStartObject()
- *                 .write("type", "home")
- *                 .write("number", "212 555-1234")
- *             .writeEnd()
- *             .writeStartObject()
- *                 .write("type", "fax")
- *                 .write("number", "646 555-4567")
- *             .writeEnd()
- *         .writeEnd()
- *     .writeEnd();
- * generator.close();
- * </code>
- * </pre>
- *
- * The example code above generates the following JSON (or equivalent):
- * <p>
- * <pre>
- * <code>
- * {
- *   "firstName": "John", "lastName": "Smith", "age": 25,
- *   "address" : {
- *       "streetAddress": "21 2nd Street",
- *       "city": "New York",
- *       "state": "NY",
- *       "postalCode": "10021"
- *   },
- *   "phoneNumber": [
- *       {"type": "home", "number": "212 555-1234"},
- *       {"type": "fax", "number": "646 555-4567"}
- *    ]
- * }
- * </code>
- * </pre>
- *
- * The generated JSON text must strictly conform to the grammar defined in
- * <a href="http://www.ietf.org/rfc/rfc4627.txt">RFC 4627</a>.
- *
- * @see javax.json.Json
- * @see JsonGeneratorFactory
- * @author Jitendra Kotamraju
- */
-public interface JsonGenerator extends Flushable, /*Auto*/Closeable {
-    /**
-     * Configuration property to generate JSON prettily. All providers
-     * must support this property. The value of the property could be
-     * be anything.
-     */
-    String PRETTY_PRINTING = "javax.json.stream.JsonGenerator.prettyPrinting" ;
-
-    /**
-     * Writes the JSON start object character. It starts a new child object
-     * context within which JSON name/value pairs can be written to the object.
-     * This method is valid only in an array context or in no context (when a
-     * context is not yet started). This method can only be called once in
-     * no context.
-     *
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is called within an 
-     *      object context or if it is called more than once in no context.
-     */
-    JsonGenerator writeStartObject();
-
-    /**
-     * Writes the JSON name/start object character pair in the current
-     * object context. It starts a new child object context within which JSON
-     * name/value pairs can be written to the object.
-     *
-     * @param name a name within the JSON name/object pair to be written
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is not called within an 
-     *     object context
-     */
-    JsonGenerator writeStartObject(String name);
-
-    /**
-     * Writes the JSON start array character. It starts a new child array
-     * context within which JSON values can be written to the array. This
-     * method is valid only in an array context or in no context (when a
-     * context is not yet started). This method can only be called once in
-     * no context.
-     *
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is called within an 
-     *      object context or if called more than once in no context
-     */
-    JsonGenerator writeStartArray();
-
-    /**
-     * Writes the JSON name/start array character pair with in the current
-     * object context. It starts a new child array context within which JSON
-     * values can be written to the array.
-     *
-     * @param name a name within the JSON name/array pair to be written
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is not called within 
-     *      an object context
-     */
-    JsonGenerator writeStartArray(String name);
-
-    /**
-     * Writes a JSON name/value pair in the current object context.
-     *
-     * @param name a name in the JSON name/value pair to be written in
-     *             current JSON object
-     * @param value a value in the JSON name/value pair to be written in
-     *             current JSON object
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is not called within an 
-     *      object context
-     */
-    JsonGenerator write(String name, JsonValue value);
-
-    /**
-     * Writes a JSON name/string value pair in the current object context.
-     * The specified value is written as JSON string value.
-     *
-     * @param name a name in the JSON name/string pair to be written in
-     *             current JSON object
-     * @param value a value in the JSON name/string pair to be written in
-     *             current JSON object
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is not called within an 
-     *      object context
-     */
-    JsonGenerator write(String name, String value);
-
-    /**
-     * Writes a JSON name/number value pair in the current object context.
-     * The specified value is written as a JSON number value. The string
-     * {@code new BigDecimal(value).toString()}
-     * is used as the text value for writing.
-     *
-     * @param name a name in the JSON name/number pair to be written in
-     *             current JSON object
-     * @param value a value in the JSON name/number pair to be written in
-     *             current JSON object
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is not called within an 
-     *      object context.
-     */
-    JsonGenerator write(String name, BigInteger value);
-
-    /**
-     * Writes a JSON name/number value pair in the current object context.
-     * The specified value is written as a JSON number value. The specified
-     * value's {@code toString()} is used as the text value for writing.
-     *
-     * @param name a name in the JSON name/number pair to be written in
-     *             current JSON object
-     * @param value a value in the JSON name/number pair to be written in
-     *             current JSON object
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is not called within an 
-     *      object context.
-     */
-    JsonGenerator write(String name, BigDecimal value);
-
-    /**
-     * Writes a JSON name/number value pair in the current object context.
-     * The specified value is written as a JSON number value. The string
-     * {@code new BigDecimal(value).toString()} is used as the text value
-     * for writing.
-     *
-     * @param name a name in the JSON name/number pair to be written in
-     *             current JSON object
-     * @param value a value in the JSON name/number pair to be written in
-     *             current JSON object
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is not called within an 
-     *      object context.
-     */
-    JsonGenerator write(String name, int value);
-
-    /**
-     * Writes a JSON name/number value pair in the current object context.
-     * The specified value is written as a JSON number value. The string
-     * {@code new BigDecimal(value).toString()} is used as the text
-     * value for writing.
-     *
-     * @param name a name in the JSON name/number pair to be written in
-     *             current JSON object
-     * @param value a value in the JSON name/number pair to be written in
-     *             current JSON object
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is not called within an 
-     *      object context.
-     */
-    JsonGenerator write(String name, long value);
-
-    /**
-     * Writes a JSON name/number value pair in the current object context.
-     * The specified value is written as a JSON number value. The string
-     * {@code BigDecimal.valueOf(double).toString()}
-     * is used as the text value for writing.
-     *
-     * @param name a name in the JSON name/number pair to be written in
-     *             current JSON object
-     * @param value a value in the JSON name/number pair to be written in
-     *             current JSON object
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws NumberFormatException if the value is Not-a-Number(NaN) or infinity.
-     * @throws JsonGenerationException if this method is not called within an
-     *      object context
-     */
-    JsonGenerator write(String name, double value);
-
-    /**
-     * Writes a JSON name/boolean value pair in the current object context.
-     * If value is true, it writes the JSON {@code true} value, otherwise 
-     * it writes the JSON {@code false} value.
-     *
-     * @param name a name in the JSON name/boolean pair to be written in
-     *             current JSON object
-     * @param value a value in the JSON name/boolean pair to be written in
-     *             current JSON object
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is not called within an
-     *      object context.
-     */
-    JsonGenerator write(String name, boolean value);
-
-
-    /**
-     * Writes a JSON name/null value pair in an current object context.
-     *
-     * @param name a name in the JSON name/null pair to be written in
-     *             current JSON object
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is not called within an 
-     *      object context
-     */
-    JsonGenerator writeNull(String name);
-
-    /**
-     * Writes the end of the current context. If the current context is
-     * an array context, this method writes the end-of-array character (']'). 
-     * If the current context is an object context, this method writes the
-     * end-of-object character ('}'). After writing the end of the current
-     * context, the parent context becomes the new current context.
-     *
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is called in no context.
-     */
-    JsonGenerator writeEnd();
-
-    /**
-     * Writes the specified value as a JSON value within
-     * the current array context.
-     *
-     * @param value a value to be written in current JSON array
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is not called within an 
-     *      array context.
-     */
-    JsonGenerator write(JsonValue value);
-
-    /**
-     * Writes the specified value as a JSON string value within
-     * the current array context.
-     *
-     * @param value a value to be written in current JSON array
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is not called within an 
-     *      array context
-     */
-    JsonGenerator write(String value);
-
-    /**
-     * Writes the specified value as a JSON number value within
-     * the current array context. The specified value's {@code toString()}
-     * is used as the the text value for writing.
-     *
-     * @param value a value to be written in current JSON array
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is not called within an 
-     *      array context
-     *
-     * @see javax.json.JsonNumber
-     */
-    JsonGenerator write(BigDecimal value);
-
-    /**
-     * Writes the specified value as a JSON number value within
-     * the current array context. The string {@code new BigDecimal(value).toString()}
-     * is used as the text value for writing.
-     *
-     * @param value a value to be written in current JSON array
-     * @return this generator.
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is not called within an 
-     *      array context
-     *
-     * @see javax.json.JsonNumber
-     */
-    JsonGenerator write(BigInteger value);
-
-    /**
-     * Writes the specified value as a JSON number value within
-     * the current array context. The string {@code new BigDecimal(value).toString()}
-     * is used as the text value for writing.
-     *
-     * @param value a value to be written in current JSON array
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is not called within an 
-     *      array context
-     */
-    JsonGenerator write(int value);
-
-    /**
-     * Writes the specified value as a JSON number value within
-     * the current array context. The string {@code new BigDecimal(value).toString()}
-     * is used as the text value for writing.
-     *
-     * @param value a value to be written in current JSON array
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is not called within an 
-     *      array context
-     */
-    JsonGenerator write(long value);
-
-    /**
-     * Writes the specified value as a JSON number value within the current
-     * array context. The string {@code BigDecimal.valueOf(value).toString()}
-     * is used as the text value for writing.
-     *
-     * @param value a value to be written in current JSON array
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is not called within an 
-     *      array context
-     * @throws NumberFormatException if the value is Not-a-Number(NaN) or infinity.
-     */
-    JsonGenerator write(double value);
-
-    /**
-     * Writes a JSON true or false value within the current array context.
-     * If value is true, this method writes the JSON {@code true} value, 
-     * otherwise it writes the JSON {@code false} value.
-     *
-     * @param value a {@code boolean} value
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is not called within an 
-     *      array context.
-     */
-    JsonGenerator write(boolean value);
-
-    /**
-     * Writes a JSON null value within the current array context.
-     *
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is not called within an 
-     *      array context
-     */
-    JsonGenerator writeNull();
-
-    /**
-     * Closes this generator and frees any resources associated with it. 
-     * This method closes the underlying output source.
-     *
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if an incomplete JSON is generated
-     */
-    @Override
-    void close();
-
-    /**
-     * Flushes the underlying output source. If the generator has saved
-     * any characters in a buffer, writes them immediately to the underlying
-     * output source before flushing it.
-     *
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     */
-    @Override
-    void flush();
-
-}
\ No newline at end of file
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2011-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.json.stream;
+
+import javax.json.JsonValue;
+import java.io.Closeable;
+import java.io.Flushable;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+
+/**
+ * Writes JSON data to an output source in a streaming way. The class
+ * {@link javax.json.Json} contains methods to create generators for character
+ * or output streams ({@link java.io.Writer} and {@link java.io.OutputStream}).
+ *
+ * <p>
+ * The following example shows how to create a JSON generator:
+ * <pre>
+ * <code>
+ * JsonGenerator generator = Json.createGenerator(...);
+ * </code>
+ * </pre>
+ *
+ * <p>
+ * The class {@link JsonGeneratorFactory} also contains methods to create
+ * {@code JsonGenerator} instances. {@link JsonGeneratorFactory} should be used
+ * when creating multiple generator instances, as in the following example:
+ * <pre>
+ * <code>
+ * JsonGeneratorFactory factory = Json.createGeneratorFactory();
+ * JsonGenerator generator1 = factory.createGenerator(...);
+ * JsonGenerator generator2 = factory.createGenerator(...);
+ * </code>
+ * </pre>
+ *
+ * <p>
+ * JSON objects can be created using {@code JsonGenerator} by calling the
+ * {@link #writeStartObject()} method and then adding name/value pairs with the
+ * {@code write} method.
+ * <p>
+ * The following example shows how to generate an empty JSON object:
+ * <pre>
+ * <code>
+ * JsonGenerator generator = ...;
+ * generator.writeStartObject().writeEnd().close();
+ * </code>
+ * </pre>
+ *
+ * JSON arrays can be created using {@code JsonGenerator} by calling the
+ * {@link #writeStartArray()} method and then adding values with the
+ * {@code write} method.
+ *
+ * <p>
+ * The following example shows how to generate an empty JSON array:
+ * <pre>
+ * <code>
+ * JsonGenerator generator = ...;
+ * generator.writeStartArray().writeEnd().close();
+ * </code>
+ * </pre>
+ *
+ * <p>
+ * Other JSON values (that are not JSON objects or arrays) can be created
+ * by calling the appropiate {@code write} methods.
+ * <p>
+ * The following example shows how to generate a JSON string:
+ * <pre><code>
+ * JsonGenerator generator = ...;
+ * generator.write("message").close();
+ * </code></pre>
+ *
+ * {@code JsonGenerator} methods can be chained as in the following example:
+ * <pre>
+ * <code>
+ * generator
+ *     .writeStartObject()
+ *         .write("firstName", "John")
+ *         .write("lastName", "Smith")
+ *         .write("age", 25)
+ *         .writeStartObject("address")
+ *             .write("streetAddress", "21 2nd Street")
+ *             .write("city", "New York")
+ *             .write("state", "NY")
+ *             .write("postalCode", "10021")
+ *         .writeEnd()
+ *         .writeStartArray("phoneNumber")
+ *             .writeStartObject()
+ *                 .write("type", "home")
+ *                 .write("number", "212 555-1234")
+ *             .writeEnd()
+ *             .writeStartObject()
+ *                 .write("type", "fax")
+ *                 .write("number", "646 555-4567")
+ *             .writeEnd()
+ *         .writeEnd()
+ *     .writeEnd();
+ * generator.close();
+ * </code>
+ * </pre>
+ *
+ * The example code above generates the following JSON (or equivalent):
+ * <pre>
+ * <code>
+ * {
+ *   "firstName": "John", "lastName": "Smith", "age": 25,
+ *   "address" : {
+ *       "streetAddress": "21 2nd Street",
+ *       "city": "New York",
+ *       "state": "NY",
+ *       "postalCode": "10021"
+ *   },
+ *   "phoneNumber": [
+ *       {"type": "home", "number": "212 555-1234"},
+ *       {"type": "fax", "number": "646 555-4567"}
+ *    ]
+ * }
+ * </code>
+ * </pre>
+ *
+ * The generated JSON text must strictly conform to the grammar defined in
+ * <a href="http://www.ietf.org/rfc/rfc7159.txt">RFC 7159</a>.
+ *
+ * @see javax.json.Json
+ * @see JsonGeneratorFactory
+ */
+public interface JsonGenerator extends Flushable, /*Auto*/Closeable {
+    /**
+     * Configuration property to generate JSON prettily. All providers
+     * must support this property. The value of the property could be
+     * be anything.
+     */
+    String PRETTY_PRINTING = "javax.json.stream.JsonGenerator.prettyPrinting" ;
+
+    /**
+     * Writes the JSON start object character. It starts a new child object
+     * context within which JSON name/value pairs can be written to the object.
+     * This method is valid only in an array context, field context or in no context (when a
+     * context is not yet started). This method can only be called once in
+     * no context.
+     *
+     * @return this generator
+     * @throws javax.json.JsonException if an i/o error occurs (IOException
+     * would be cause of JsonException)
+     * @throws JsonGenerationException if this method is called within an
+     *      object context or if it is called more than once in no context.
+     */
+    JsonGenerator writeStartObject();
+
+    /**
+     * Writes the JSON name/start object character pair in the current
+     * object context. It starts a new child object context within which JSON
+     * name/value pairs can be written to the object.
+     *
+     * @param name a name within the JSON name/object pair to be written
+     * @return this generator
+     * @throws javax.json.JsonException if an i/o error occurs (IOException
+     * would be cause of JsonException)
+     * @throws JsonGenerationException if this method is not called within an
+     *     object context
+     */
+    JsonGenerator writeStartObject(String name);
+
+    /**
+     * Writes the JSON name with a colon. It starts a field context, in which valid
+     * options are writing a value, starting an object or an array.
+     *
+     * Writing value closes field context, if object or array is started after field name,
+     * field context will be closed after object/array close.
+     *
+     * @param name name of json field
+     * @return this generator
+     * @throws javax.json.JsonException if an i/o error occurs (IOException
+     * would be cause of JsonException)
+     * @throws JsonGenerationException if this method is not called within an
+     *     object context
+     *
+     * @since 1.1
+     */
+    JsonGenerator writeKey(String name);
+
+    /**
+     * Writes the JSON start array character. It starts a new child array
+     * context within which JSON values can be written to the array. This
+     * method is valid only in an array context, field context or in no context (when a
+     * context is not yet started). This method can only be called once in
+     * no context.
+     *
+     * @return this generator
+     * @throws javax.json.JsonException if an i/o error occurs (IOException
+     * would be cause of JsonException)
+     * @throws JsonGenerationException if this method is called within an
+     *      object context or if called more than once in no context
+     */
+    JsonGenerator writeStartArray();
+
+    /**
+     * Writes the JSON name/start array character pair with in the current
+     * object context. It starts a new child array context within which JSON
+     * values can be written to the array.
+     *
+     * @param name a name within the JSON name/array pair to be written
+     * @return this generator
+     * @throws javax.json.JsonException if an i/o error occurs (IOException
+     * would be cause of JsonException)
+     * @throws JsonGenerationException if this method is not called within
+     *      an object context
+     */
+    JsonGenerator writeStartArray(String name);
+
+    /**
+     * Writes a JSON name/value pair in the current object context.
+     *
+     * @param name a name in the JSON name/value pair to be written in
+     *             current JSON object
+     * @param value a value in the JSON name/value pair to be written in
+     *             current JSON object
+     * @return this generator
+     * @throws javax.json.JsonException if an i/o error occurs (IOException
+     * would be cause of JsonException)
+     * @throws JsonGenerationException if this method is not called within an
+     *      object context
+     */
+    JsonGenerator write(String name, JsonValue value);
+
+    /**
+     * Writes a JSON name/string value pair in the current object context.
+     * The specified value is written as JSON string value.
+     *
+     * @param name a name in the JSON name/string pair to be written in
+     *             current JSON object
+     * @param value a value in the JSON name/string pair to be written in
+     *             current JSON object
+     * @return this generator
+     * @throws javax.json.JsonException if an i/o error occurs (IOException
+     * would be cause of JsonException)
+     * @throws JsonGenerationException if this method is not called within an
+     *      object context
+     */
+    JsonGenerator write(String name, String value);
+
+    /**
+     * Writes a JSON name/number value pair in the current object context.
+     * The specified value is written as a JSON number value. The string
+     * {@code new BigDecimal(value).toString()}
+     * is used as the text value for writing.
+     *
+     * @param name a name in the JSON name/number pair to be written in
+     *             current JSON object
+     * @param value a value in the JSON name/number pair to be written in
+     *             current JSON object
+     * @return this generator
+     * @throws javax.json.JsonException if an i/o error occurs (IOException
+     * would be cause of JsonException)
+     * @throws JsonGenerationException if this method is not called within an
+     *      object context.
+     */
+    JsonGenerator write(String name, BigInteger value);
+
+    /**
+     * Writes a JSON name/number value pair in the current object context.
+     * The specified value is written as a JSON number value. The specified
+     * value's {@code toString()} is used as the text value for writing.
+     *
+     * @param name a name in the JSON name/number pair to be written in
+     *             current JSON object
+     * @param value a value in the JSON name/number pair to be written in
+     *             current JSON object
+     * @return this generator
+     * @throws javax.json.JsonException if an i/o error occurs (IOException
+     * would be cause of JsonException)
+     * @throws JsonGenerationException if this method is not called within an
+     *      object context.
+     */
+    JsonGenerator write(String name, BigDecimal value);
+
+    /**
+     * Writes a JSON name/number value pair in the current object context.
+     * The specified value is written as a JSON number value. The string
+     * {@code new BigDecimal(value).toString()} is used as the text value
+     * for writing.
+     *
+     * @param name a name in the JSON name/number pair to be written in
+     *             current JSON object
+     * @param value a value in the JSON name/number pair to be written in
+     *             current JSON object
+     * @return this generator
+     * @throws javax.json.JsonException if an i/o error occurs (IOException
+     * would be cause of JsonException)
+     * @throws JsonGenerationException if this method is not called within an
+     *      object context.
+     */
+    JsonGenerator write(String name, int value);
+
+    /**
+     * Writes a JSON name/number value pair in the current object context.
+     * The specified value is written as a JSON number value. The string
+     * {@code new BigDecimal(value).toString()} is used as the text
+     * value for writing.
+     *
+     * @param name a name in the JSON name/number pair to be written in
+     *             current JSON object
+     * @param value a value in the JSON name/number pair to be written in
+     *             current JSON object
+     * @return this generator
+     * @throws javax.json.JsonException if an i/o error occurs (IOException
+     * would be cause of JsonException)
+     * @throws JsonGenerationException if this method is not called within an
+     *      object context.
+     */
+    JsonGenerator write(String name, long value);
+
+    /**
+     * Writes a JSON name/number value pair in the current object context.
+     * The specified value is written as a JSON number value. The string
+     * {@code BigDecimal.valueOf(double).toString()}
+     * is used as the text value for writing.
+     *
+     * @param name a name in the JSON name/number pair to be written in
+     *             current JSON object
+     * @param value a value in the JSON name/number pair to be written in
+     *             current JSON object
+     * @return this generator
+     * @throws javax.json.JsonException if an i/o error occurs (IOException
+     * would be cause of JsonException)
+     * @throws NumberFormatException if the value is Not-a-Number (NaN) or infinity.
+     * @throws JsonGenerationException if this method is not called within an
+     *      object context
+     */
+    JsonGenerator write(String name, double value);
+
+    /**
+     * Writes a JSON name/boolean value pair in the current object context.
+     * If value is true, it writes the JSON {@code true} value, otherwise
+     * it writes the JSON {@code false} value.
+     *
+     * @param name a name in the JSON name/boolean pair to be written in
+     *             current JSON object
+     * @param value a value in the JSON name/boolean pair to be written in
+     *             current JSON object
+     * @return this generator
+     * @throws javax.json.JsonException if an i/o error occurs (IOException
+     * would be cause of JsonException)
+     * @throws JsonGenerationException if this method is not called within an
+     *      object context.
+     */
+    JsonGenerator write(String name, boolean value);
+
+
+    /**
+     * Writes a JSON name/null value pair in an current object context.
+     *
+     * @param name a name in the JSON name/null pair to be written in
+     *             current JSON object
+     * @return this generator
+     * @throws javax.json.JsonException if an i/o error occurs (IOException
+     * would be cause of JsonException)
+     * @throws JsonGenerationException if this method is not called within an
+     *      object context
+     */
+    JsonGenerator writeNull(String name);
+
+    /**
+     * Writes the end of the current context. If the current context is
+     * an array context, this method writes the end-of-array character (']').
+     * If the current context is an object context, this method writes the
+     * end-of-object character ('}'). After writing the end of the current
+     * context, the parent context becomes the new current context.
+     * If parent context is field context, it is closed.
+     *
+     * @return this generator
+     * @throws javax.json.JsonException if an i/o error occurs (IOException
+     * would be cause of JsonException)
+     * @throws JsonGenerationException if this method is called in no context.
+     */
+    JsonGenerator writeEnd();
+
+    /**
+     * Writes the specified value as a JSON value within
+     * the current array, field or root context.
+     *
+     * @param value a value to be written in current JSON array
+     * @return this generator
+     * @throws javax.json.JsonException if an i/o error occurs (IOException
+     * would be cause of JsonException)
+     * @throws JsonGenerationException if this method is not called within an
+     *      array or root context.
+     */
+    JsonGenerator write(JsonValue value);
+
+    /**
+     * Writes the specified value as a JSON string value within
+     * the current array, field or root context.
+     *
+     * @param value a value to be written in current JSON array
+     * @return this generator
+     * @throws javax.json.JsonException if an i/o error occurs (IOException
+     * would be cause of JsonException)
+     * @throws JsonGenerationException if this method is not called within an
+     *      array or root context.
+     */
+    JsonGenerator write(String value);
+
+    /**
+     * Writes the specified value as a JSON number value within
+     * the current array, field or root context. The specified value's {@code toString()}
+     * is used as the the text value for writing.
+     *
+     * @param value a value to be written in current JSON array
+     * @return this generator
+     * @throws javax.json.JsonException if an i/o error occurs (IOException
+     * would be cause of JsonException)
+     * @throws JsonGenerationException if this method is not called within an
+     *      array or root context.
+     *
+     * @see javax.json.JsonNumber
+     */
+    JsonGenerator write(BigDecimal value);
+
+    /**
+     * Writes the specified value as a JSON number value within
+     * the current array, field or root context. The string {@code new BigDecimal(value).toString()}
+     * is used as the text value for writing.
+     *
+     * @param value a value to be written in current JSON array
+     * @return this generator.
+     * @throws javax.json.JsonException if an i/o error occurs (IOException
+     * would be cause of JsonException)
+     * @throws JsonGenerationException if this method is not called within an
+     *      array or root context.
+     *
+     * @see javax.json.JsonNumber
+     */
+    JsonGenerator write(BigInteger value);
+
+    /**
+     * Writes the specified value as a JSON number value within
+     * the current array, field or root context. The string {@code new BigDecimal(value).toString()}
+     * is used as the text value for writing.
+     *
+     * @param value a value to be written in current JSON array
+     * @return this generator
+     * @throws javax.json.JsonException if an i/o error occurs (IOException
+     * would be cause of JsonException)
+     * @throws JsonGenerationException if this method is not called within an
+     *      array or root context.
+     */
+    JsonGenerator write(int value);
+
+    /**
+     * Writes the specified value as a JSON number value within
+     * the current array, field or root context. The string {@code new BigDecimal(value).toString()}
+     * is used as the text value for writing.
+     *
+     * @param value a value to be written in current JSON array
+     * @return this generator
+     * @throws javax.json.JsonException if an i/o error occurs (IOException
+     * would be cause of JsonException)
+     * @throws JsonGenerationException if this method is not called within an
+     *      array or root context.
+     */
+    JsonGenerator write(long value);
+
+    /**
+     * Writes the specified value as a JSON number value within the current
+     * array, field or root context. The string {@code BigDecimal.valueOf(value).toString()}
+     * is used as the text value for writing.
+     *
+     * @param value a value to be written in current JSON array
+     * @return this generator
+     * @throws javax.json.JsonException if an i/o error occurs (IOException
+     * would be cause of JsonException)
+     * @throws JsonGenerationException if this method is not called within an
+     *      array or root context.
+     * @throws NumberFormatException if the value is Not-a-Number (NaN) or infinity.
+     */
+    JsonGenerator write(double value);
+
+    /**
+     * Writes a JSON true or false value within the current array, field or root context.
+     * If value is true, this method writes the JSON {@code true} value,
+     * otherwise it writes the JSON {@code false} value.
+     *
+     * @param value a {@code boolean} value
+     * @return this generator
+     * @throws javax.json.JsonException if an i/o error occurs (IOException
+     * would be cause of JsonException)
+     * @throws JsonGenerationException if this method is not called within an
+     *      array or root context.
+     */
+    JsonGenerator write(boolean value);
+
+    /**
+     * Writes a JSON null value within the current array, field or root context.
+     *
+     * @return this generator
+     * @throws javax.json.JsonException if an i/o error occurs (IOException
+     * would be cause of JsonException)
+     * @throws JsonGenerationException if this method is not called within an
+     *      array or root context.
+     */
+    JsonGenerator writeNull();
+
+    /**
+     * Closes this generator and frees any resources associated with it.
+     * This method closes the underlying output source.
+     *
+     * @throws javax.json.JsonException if an i/o error occurs (IOException
+     * would be cause of JsonException)
+     * @throws JsonGenerationException if an incomplete JSON is generated
+     */
+    @Override
+    void close();
+
+    /**
+     * Flushes the underlying output source. If the generator has saved
+     * any characters in a buffer, writes them immediately to the underlying
+     * output source before flushing it.
+     *
+     * @throws javax.json.JsonException if an i/o error occurs (IOException
+     * would be cause of JsonException)
+     */
+    @Override
+    void flush();
+
+}
diff --git a/src/javax/json/stream/JsonGeneratorFactory.java b/src/javax/json/stream/JsonGeneratorFactory.java
index b34d327..98f9291 100644
--- a/src/javax/json/stream/JsonGeneratorFactory.java
+++ b/src/javax/json/stream/JsonGeneratorFactory.java
@@ -1,112 +1,113 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2011-2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json.stream;
-
-import java.io.OutputStream;
-import java.io.Writer;
-import java.nio.charset.Charset;
-import java.util.Map;
-
-/**
- * Factory to create {@link JsonGenerator} instances. If a factory
- * instance is configured with some configuration, the configuration applies
- * to all generator instances created using that factory instance.
- *
- * <p>
- * The class {@link javax.json.Json Json} also provides methods to create
- * {@link JsonGenerator} instances, but using {@code JsonGeneratorFactory} is
- * preferred when creating multiple generator instances as shown in the
- * following example:
- *
- * <pre>
- * <code>
- * JsonGeneratorFactory factory = Json.createGeneratorFactory();
- * JsonGenerator generator1 = factory.createGenerator(...);
- * JsonGenerator generator2 = factory.createGenerator(...);
- * </code>
- * </pre>
- *
- * <p> All the methods in this class are safe for use by multiple concurrent
- * threads.
- *
- * @author Jitendra Kotamraju
- */
-public interface JsonGeneratorFactory {
-
-    /**
-     * Creates a JSON generator to write JSON text to a character stream.
-     * The generator is configured with the factory configuration.
-     *
-     * @param writer i/o writer to which JSON is written
-     */
-    JsonGenerator createGenerator(Writer writer);
-
-    /**
-     * Creates a JSON generator to write JSON text to a byte stream. Characters 
-     * written to the stream are encoded into bytes using UTF-8 encoding. 
-     * The generator is configured with the factory's configuration.
-     *
-     * @param out i/o stream to which JSON is written
-     */
-    JsonGenerator createGenerator(OutputStream out);
-
-    /**
-     * Creates a JSON generator to write JSON text to a byte stream. Characters 
-     * written to the stream are encoded into bytes using the specified charset. 
-     * The generator is configured with the factory's configuration.
-     *
-     * @param out i/o stream to which JSON is written
-     * @param charset a charset
-     */
-    JsonGenerator createGenerator(OutputStream out, Charset charset);
-
-    /**
-     * Returns a read-only map of supported provider specific configuration
-     * properties that are used to configure the JSON generators.
-     * If there are any specified configuration properties that are not
-     * supported by the provider, they won't be part of the returned map.
-     *
-     * @return a map of supported provider specific properties that are used
-     * to configure the created generators. The map may be empty but not null
-     */
-    Map<String, ?> getConfigInUse();
-
-}
\ No newline at end of file
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2011-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.json.stream;
+
+import java.io.OutputStream;
+import java.io.Writer;
+import java.nio.charset.Charset;
+import java.util.Map;
+
+/**
+ * Factory to create {@link JsonGenerator} instances. If a factory
+ * instance is configured with some configuration, the configuration applies
+ * to all generator instances created using that factory instance.
+ *
+ * <p>
+ * The class {@link javax.json.Json Json} also provides methods to create
+ * {@link JsonGenerator} instances, but using {@code JsonGeneratorFactory} is
+ * preferred when creating multiple generator instances as shown in the
+ * following example:
+ *
+ * <pre>
+ * <code>
+ * JsonGeneratorFactory factory = Json.createGeneratorFactory();
+ * JsonGenerator generator1 = factory.createGenerator(...);
+ * JsonGenerator generator2 = factory.createGenerator(...);
+ * </code>
+ * </pre>
+ *
+ * <p> All the methods in this class are safe for use by multiple concurrent
+ * threads.
+ */
+public interface JsonGeneratorFactory {
+
+    /**
+     * Creates a JSON generator to write JSON text to a character stream.
+     * The generator is configured with the factory configuration.
+     *
+     * @param writer i/o writer to which JSON is written
+     * @return the created JSON generator
+     */
+    JsonGenerator createGenerator(Writer writer);
+
+    /**
+     * Creates a JSON generator to write JSON text to a byte stream. Characters 
+     * written to the stream are encoded into bytes using UTF-8 encoding. 
+     * The generator is configured with the factory's configuration.
+     *
+     * @param out i/o stream to which JSON is written
+     * @return the created JSON generator
+     */
+    JsonGenerator createGenerator(OutputStream out);
+
+    /**
+     * Creates a JSON generator to write JSON text to a byte stream. Characters 
+     * written to the stream are encoded into bytes using the specified charset. 
+     * The generator is configured with the factory's configuration.
+     *
+     * @param out i/o stream to which JSON is written
+     * @param charset a charset
+     * @return the created JSON generator
+     */
+    JsonGenerator createGenerator(OutputStream out, Charset charset);
+
+    /**
+     * Returns a read-only map of supported provider specific configuration
+     * properties that are used to configure the JSON generators.
+     * If there are any specified configuration properties that are not
+     * supported by the provider, they won't be part of the returned map.
+     *
+     * @return a map of supported provider specific properties that are used
+     * to configure the created generators. The map may be empty but not null
+     */
+    Map<String, ?> getConfigInUse();
+
+}
diff --git a/src/javax/json/stream/JsonLocation.java b/src/javax/json/stream/JsonLocation.java
index c912b8e..c54980d 100644
--- a/src/javax/json/stream/JsonLocation.java
+++ b/src/javax/json/stream/JsonLocation.java
@@ -1,87 +1,85 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json.stream;
-
-/**
- * Provides the location information of a JSON event in an input source. The
- * {@code JsonLocation} information can be used to identify incorrect JSON
- * or can be used by higher frameworks to know about the processing location.
- *
- * <p>All the information provided by a {@code JsonLocation} is optional. For
- * example, a provider may only report line numbers. Also, there may not be any
- * location information for an input source. For example, if a
- * {@code JsonParser} is created using
- * {@link javax.json.JsonArray JsonArray} input source, all the methods in
- * this class return -1.
- *
- * @author Jitendra Kotamraju
- * @see JsonParser
- * @see JsonParsingException
- */
-public interface JsonLocation {
-
-    /**
-     * Return the line number for the current JSON event in the input source.
-     *
-     * @return the line number or -1 if none is available
-     */
-    long getLineNumber();
-
-    /**
-     * Return the column number for the current JSON event in the input source.
-     *
-     * @return the column number or -1 if none is available
-     */
-    long getColumnNumber();
-
-    /**
-     * Return the stream offset into the input source this location
-     * is pointing to. If the input source is a file or a byte stream then
-     * this is the byte offset into that stream, but if the input source is
-     * a character media then the offset is the character offset.
-     * Returns -1 if there is no offset available.
-     *
-     * @return the offset of input source stream, or -1 if there is
-     * no offset available
-     */
-    long getStreamOffset();
-
-}
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2013-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.json.stream;
+
+/**
+ * Provides the location information of a JSON event in an input source. The
+ * {@code JsonLocation} information can be used to identify incorrect JSON
+ * or can be used by higher frameworks to know about the processing location.
+ *
+ * <p>All the information provided by a {@code JsonLocation} is optional. For
+ * example, a provider may only report line numbers. Also, there may not be any
+ * location information for an input source. For example, if a
+ * {@code JsonParser} is created using
+ * {@link javax.json.JsonArray JsonArray} input source, all the methods in
+ * this class return -1.
+ * @see JsonParser
+ * @see JsonParsingException
+ */
+public interface JsonLocation {
+
+    /**
+     * Return the line number (starts with 1 for the first line) for the current JSON event in the input source.
+     *
+     * @return the line number (starts with 1 for the first line) or -1 if none is available
+     */
+    long getLineNumber();
+
+    /**
+     * Return the column number (starts with 1 for the first column) for the current JSON event in the input source.
+     *
+     * @return the column number (starts with 1 for the first column) or -1 if none is available
+     */
+    long getColumnNumber();
+
+    /**
+     * Return the stream offset into the input source this location
+     * is pointing to. If the input source is a file or a byte stream then
+     * this is the byte offset into that stream, but if the input source is
+     * a character media then the offset is the character offset.
+     * Returns -1 if there is no offset available.
+     *
+     * @return the offset of input source stream, or -1 if there is
+     * no offset available
+     */
+    long getStreamOffset();
+
+}
diff --git a/src/javax/json/stream/JsonParser.java b/src/javax/json/stream/JsonParser.java
index 904a874..e457005 100644
--- a/src/javax/json/stream/JsonParser.java
+++ b/src/javax/json/stream/JsonParser.java
@@ -1,347 +1,511 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2011-2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json.stream;
-
-
-import java.io.Closeable;
-import java.math.BigDecimal;
-
-/**
- * Provides forward, read-only access to JSON data in a streaming way. This
- * is the most efficient way for reading JSON data. The class
- * {@link javax.json.Json} contains methods to create parsers from input
- * sources ({@link java.io.InputStream} and {@link java.io.Reader}).
- *
- * <p>
- * The following example demonstrates how to create a parser from a string
- * that contains an empty JSON array:
- * <pre>
- * <code>
- * JsonParser parser = Json.createParser(new StringReader("[]"));
- * </code>
- * </pre>
- *
- * <p>
- * The class {@link JsonParserFactory} also contains methods to create
- * {@code JsonParser} instances. {@link JsonParserFactory} is preferred
- * when creating multiple parser instances. A sample usage is shown
- * in the following example:
- * <pre>
- * <code>
- * JsonParserFactory factory = Json.createParserFactory();
- * JsonParser parser1 = factory.createParser(...);
- * JsonParser parser2 = factory.createParser(...);
- * </code>
- * </pre>
- *
- * <p>
- * {@code JsonParser} parses JSON using the pull parsing programming model.
- * In this model the client code controls the thread and calls the method
- * {@code next()} to advance the parser to the next state after
- * processing each element. The parser can generate the following events:
- * {@code START_OBJECT}, {@code END_OBJECT}, {@code START_ARRAY},
- * {@code END_ARRAY}, {@code KEY_NAME}, {@code VALUE_STRING},
- * {@code VALUE_NUMBER}, {@code VALUE_TRUE}, {@code VALUE_FALSE},
- * and {@code VALUE_NULL}.
- *
- * <p>
- * <b>For example</b>, for an empty JSON object ({ }), the parser generates the event
- * {@code START_OBJECT} with the first call to the method {@code next()} and the
- * event {@code END_OBJECT} with the second call to the method {@code next()}.
- * The following code demonstrates how to access these events:
- *
- * <pre>
- * <code>
- * Event event = parser.next(); // START_OBJECT
- * event = parser.next();       // END_OBJECT
- * </code>
- * </pre>
- *
- * <p>
- * <a id="JsonParserExample2"/>
- * <p>
- * <b>For example</b>, for the following JSON:
- * <pre>
- * {
- *   "firstName": "John", "lastName": "Smith", "age": 25,
- *   "phoneNumber": [
- *       { "type": "home", "number": "212 555-1234" },
- *       { "type": "fax", "number": "646 555-4567" }
- *    ]
- * }
- * </pre>
- *
- * <p>calls to the method {@code next()} result in parse events at the specified
- * locations below (marked in bold):
- *
- * <p>
- * <pre>
- * {<B>START_OBJECT</B>
- *   "firstName"<B>KEY_NAME</B>: "John"<B>VALUE_STRING</B>, "lastName"<B>KEY_NAME</B>: "Smith"<B>VALUE_STRING</B>, "age"<B>KEY_NAME</B>: 25<B>VALUE_NUMBER</B>,
- *   "phoneNumber"<B>KEY_NAME</B> : [<B>START_ARRAY</B>
- *       {<B>START_OBJECT</B> "type"<B>KEY_NAME</B>: "home"<B>VALUE_STRING</B>, "number"<B>KEY_NAME</B>: "212 555-1234"<B>VALUE_STRING</B> }<B>END_OBJECT</B>,
- *       {<B>START_OBJECT</B> "type"<B>KEY_NAME</B>: "fax"<B>VALUE_STRING</B>, "number"<B>KEY_NAME</B>: "646 555-4567"<B>VALUE_STRING</B> }<B>END_OBJECT</B>
- *    ]<B>END_ARRAY</B>
- * }<B>END_OBJECT</B>
- * </pre>
- *
- * <p>
- * The methods {@code next()} and {@code hasNext()} enable iteration over
- * parser events to process JSON data. {@code JsonParser} provides get methods
- * to obtain the value at the current state of the parser. For example, the
- * following code shows how to obtain the value "John" from the JSON above:
- *
- * <p>
- * <pre>
- * <code>
- * Event event = parser.next(); // START_OBJECT
- * event = parser.next();       // KEY_NAME
- * event = parser.next();       // VALUE_STRING
- * parser.getString();          // "John"
- * </code>
- * </pre>
- *
- * @see javax.json.Json
- * @see JsonParserFactory
- * @author Jitendra Kotamraju
- */
-public interface JsonParser extends /*Auto*/Closeable {
-
-    /**
-     * An event from {@code JsonParser}.
-     */
-    enum Event {
-        /**
-         * Start of a JSON array. The position of the parser is after '['.
-         */
-        START_ARRAY,
-        /**
-         * Start of a JSON object. The position of the parser is after '{'.
-         */
-        START_OBJECT,
-        /**
-         * Name in a name/value pair of a JSON object. The position of the parser
-         * is after the key name. The method {@link #getString} returns the key
-         * name.
-         */
-        KEY_NAME,
-        /**
-         * String value in a JSON array or object. The position of the parser is
-         * after the string value. The method {@link #getString}
-         * returns the string value.
-         */
-        VALUE_STRING,
-        /**
-         * Number value in a JSON array or object. The position of the parser is
-         * after the number value. {@code JsonParser} provides the following
-         * methods to access the number value: {@link #getInt},
-         * {@link #getLong}, and {@link #getBigDecimal}.
-         */
-        VALUE_NUMBER,
-        /**
-         * {@code true} value in a JSON array or object. The position of the
-         * parser is after the {@code true} value.
-         */
-        VALUE_TRUE,
-        /**
-         * {@code false} value in a JSON array or object. The position of the
-         * parser is after the {@code false} value.
-         */
-        VALUE_FALSE,
-        /**
-         * {@code null} value in a JSON array or object. The position of the
-         * parser is after the {@code null} value.
-         */
-        VALUE_NULL,
-        /**
-         * End of a JSON object. The position of the parser is after '}'.
-         */
-        END_OBJECT,
-        /**
-         * End of a JSON array. The position of the parser is after ']'.
-         */
-        END_ARRAY
-    }
-
-    /**
-     * Returns {@code true} if there are more parsing states. This method returns
-     * {@code false} if the parser reaches the end of the JSON text.
-     *
-     * @return {@code true} if there are more parsing states.
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonParsingException if the parser encounters invalid JSON
-     * when advancing to next state.
-     */
-    boolean hasNext();
-
-    /**
-     * Returns the event for the next parsing state.
-     *
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonParsingException if the parser encounters invalid JSON
-     * when advancing to next state.
-     * @throws java.util.NoSuchElementException if there are no more parsing
-     * states.
-     */
-    Event next();
-
-    /**
-     * Returns a {@code String} for the name in a name/value pair,
-     * for a string value or a number value. This method should only be called
-     * when the parser state is {@link Event#KEY_NAME}, {@link Event#VALUE_STRING},
-     * or {@link Event#VALUE_NUMBER}.
-     *
-     * @return a name when the parser state is {@link Event#KEY_NAME}
-     *         a string value when the parser state is {@link Event#VALUE_STRING}
-     *         a number value when the parser state is {@link Event#VALUE_NUMBER}
-     * @throws IllegalStateException when the parser state is not
-     *      {@code KEY_NAME}, {@code VALUE_STRING}, or {@code VALUE_NUMBER}
-     */
-    String getString();
-
-    /**
-     * Returns true if the JSON number at the current parser state is a
-     * integral number. A {@link BigDecimal} may be used to store the value
-     * internally and this method semantics are defined using its
-     * {@code scale()}. If the scale is zero, then it is considered integral
-     * type. This integral type information can be used to invoke an
-     * appropriate accessor method to obtain a numeric value as in the
-     * following example:
-     *
-     * <pre>
-     * <code>
-     * JsonParser parser = ...
-     * if (parser.isIntegralNumber()) {
-     *     parser.getInt();     // or other methods to get integral value
-     * } else {
-     *     parser.getBigDecimal();
-     * }
-     * </code>
-     * </pre>
-     *
-     * @return true if this number is a integral number, otherwise false
-     * @throws IllegalStateException when the parser state is not
-     *      {@code VALUE_NUMBER}
-     */
-    boolean isIntegralNumber();
-
-    /**
-     * Returns a JSON number as an integer. The returned value is equal
-     * to {@code new BigDecimal(getString()).intValue()}. Note that
-     * this conversion can lose information about the overall magnitude
-     * and precision of the number value as well as return a result with
-     * the opposite sign. This method should only be called when the parser
-     * state is {@link Event#VALUE_NUMBER}.
-     *
-     * @return an integer for a JSON number
-     * @throws IllegalStateException when the parser state is not
-     *      {@code VALUE_NUMBER}
-     * @see java.math.BigDecimal#intValue()
-     */
-    int getInt();
-
-    /**
-     * Returns a JSON number as a long. The returned value is equal
-     * to {@code new BigDecimal(getString()).longValue()}. Note that this
-     * conversion can lose information about the overall magnitude and
-     * precision of the number value as well as return a result with
-     * the opposite sign. This method is only called when the parser state is
-     * {@link Event#VALUE_NUMBER}.
-     *
-     * @return a long for a JSON number
-     * @throws IllegalStateException when the parser state is not
-     *      {@code VALUE_NUMBER}
-     * @see java.math.BigDecimal#longValue()
-     */
-    long getLong();
-
-    /**
-     * Returns a JSON number as a {@code BigDecimal}. The {@code BigDecimal}
-     * is created using {@code new BigDecimal(getString())}. This
-     * method should only called when the parser state is
-     * {@link Event#VALUE_NUMBER}.
-     *
-     * @return a {@code BigDecimal} for a JSON number
-     * @throws IllegalStateException when the parser state is not
-     *      {@code VALUE_NUMBER}
-     */
-    BigDecimal getBigDecimal();
-
-    /**
-     * Return the location that corresponds to the parser's current state in
-     * the JSON input source. The location information is only valid in the
-     * current parser state (or until the parser is advanced to a next state).
-     *
-     * @return a non-null location corresponding to the current parser state
-     * in JSON input source
-     */
-    JsonLocation getLocation();
-
-    /**
-     * getJsonValue(JsonObject.class) is valid in the START_OBJECT state and
-     * moves the cursor to END_OBJECT.
-     *
-     * getJsonValue(JsonArray.class) is valid in the START_ARRAY state
-     * and moves the cursor to END_ARRAY.
-     *
-     * getJsonValue(JsonString.class) is valid in the VALUE_STRING state.
-     *
-     * getJsonValue(JsonNumber.class) is valid in the VALUE_NUMBER state.
-     *
-     * @param clazz
-     * @return
-     *
-    public <T extends JsonValue> T getJsonValue(Class<T> clazz);
-     */
-
-    /**
-     * Closes this parser and frees any resources associated with the
-     * parser. This method closes the underlying input source.
-     *
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     */
-    @Override
-    void close();
-
-}
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2011-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.json.stream;
+
+
+import java.io.Closeable;
+import java.math.BigDecimal;
+import java.util.stream.Stream;
+import java.util.Map;
+
+import javax.json.JsonValue;
+import javax.json.JsonObject;
+import javax.json.JsonArray;
+
+/**
+ * Provides forward, read-only access to JSON data in a streaming way. This
+ * is the most efficient way for reading JSON data.
+ * This is the only way to parse and process JSON data that are too big to be loaded in memory.
+ * <p>The class
+ * {@link javax.json.Json} contains methods to create parsers from input
+ * sources ({@link java.io.InputStream} and {@link java.io.Reader}).
+ *
+ * <p>
+ * The following example demonstrates how to create a parser from a string
+ * that contains an empty JSON array:
+ * <pre>
+ * <code>
+ * JsonParser parser = Json.createParser(new StringReader("[]"));
+ * </code>
+ * </pre>
+ *
+ * <p>
+ * The class {@link JsonParserFactory} also contains methods to create
+ * {@code JsonParser} instances. {@link JsonParserFactory} is preferred
+ * when creating multiple parser instances. A sample usage is shown
+ * in the following example:
+ * <pre>
+ * <code>
+ * JsonParserFactory factory = Json.createParserFactory();
+ * JsonParser parser1 = factory.createParser(...);
+ * JsonParser parser2 = factory.createParser(...);
+ * </code>
+ * </pre>
+ *
+ * <p>
+ * {@code JsonParser} parses JSON using the pull parsing programming model.
+ * In this model the client code controls the thread and calls the method
+ * {@code next()} to advance the parser to the next state after
+ * processing each element. The parser can generate the following events:
+ * {@code START_OBJECT}, {@code END_OBJECT}, {@code START_ARRAY},
+ * {@code END_ARRAY}, {@code KEY_NAME}, {@code VALUE_STRING},
+ * {@code VALUE_NUMBER}, {@code VALUE_TRUE}, {@code VALUE_FALSE},
+ * and {@code VALUE_NULL}.
+ *
+ * <p>
+ * <b>For example</b>, for an empty JSON object ({ }), the parser generates the event
+ * {@code START_OBJECT} with the first call to the method {@code next()} and the
+ * event {@code END_OBJECT} with the second call to the method {@code next()}.
+ * The following code demonstrates how to access these events:
+ *
+ * <pre>
+ * <code>
+ * Event event = parser.next(); // START_OBJECT
+ * event = parser.next();       // END_OBJECT
+ * </code>
+ * </pre>
+ *
+ * <p>
+ * <b>For example</b>, for the following JSON:
+ * <pre>
+ * {
+ *   "firstName": "John", "lastName": "Smith", "age": 25,
+ *   "phoneNumber": [
+ *       { "type": "home", "number": "212 555-1234" },
+ *       { "type": "fax", "number": "646 555-4567" }
+ *    ]
+ * }
+ * </pre>
+ *
+ * <p>calls to the method {@code next()} result in parse events at the specified
+ * locations below (marked in bold):
+ *
+ * <pre>
+ * {<B>START_OBJECT</B>
+ *   "firstName"<B>KEY_NAME</B>: "John"<B>VALUE_STRING</B>, "lastName"<B>KEY_NAME</B>: "Smith"<B>VALUE_STRING</B>, "age"<B>KEY_NAME</B>: 25<B>VALUE_NUMBER</B>,
+ *   "phoneNumber"<B>KEY_NAME</B> : [<B>START_ARRAY</B>
+ *       {<B>START_OBJECT</B> "type"<B>KEY_NAME</B>: "home"<B>VALUE_STRING</B>, "number"<B>KEY_NAME</B>: "212 555-1234"<B>VALUE_STRING</B> }<B>END_OBJECT</B>,
+ *       {<B>START_OBJECT</B> "type"<B>KEY_NAME</B>: "fax"<B>VALUE_STRING</B>, "number"<B>KEY_NAME</B>: "646 555-4567"<B>VALUE_STRING</B> }<B>END_OBJECT</B>
+ *    ]<B>END_ARRAY</B>
+ * }<B>END_OBJECT</B>
+ * </pre>
+ *
+ * The methods {@link #next()} and {@link #hasNext()} enable iteration over
+ * parser events to process JSON data. {@code JsonParser} provides get methods
+ * to obtain the value at the current state of the parser. For example, the
+ * following code shows how to obtain the value "John" from the JSON above:
+ *
+ * <pre>
+ * <code>
+ * Event event = parser.next(); // START_OBJECT
+ * event = parser.next();       // KEY_NAME
+ * event = parser.next();       // VALUE_STRING
+ * parser.getString();          // "John"
+ * </code>
+ * </pre>
+ *
+ * Starting in version 1.1, it is possible to build a partial JSON object
+ * model from the stream, at the current parser position.
+ * The methods {@link #getArray} and {@link #getObject} can be used to read in
+ * a {@code JsonArray} or {@code JsonObject}.  For example, the following code
+ * shows how to obtain the phoneNumber in a JsonArray, from the JSON above:
+ *
+ * <pre><code>
+ * while (parser.hasNext() {
+ *     Event event = parser.next();
+ *     if (event == JsonParser.Event.KEY_NAME ) {
+ *         String key = getString();
+ *         event = parser.next();
+ *         if (key.equals("phoneNumber") {
+ *             JsonArray phones = parser.getArray();
+ *         }
+ *     }
+ * }
+ * </code></pre>
+ *
+ * The methods {@link #getArrayStream} and {@link #getObjectStream} can be used
+ * to get a stream of the elements of a {@code JsonArray} or {@code JsonObject}.
+ * For example, the following code shows another way to obtain John's phoneNumber
+ * in a {@code JsonArray} :
+ *
+ * <pre>{@code
+ * Event event = parser.next(); // START_OBJECT
+ * JsonArray phones = (JsonArray)
+ *     parser.getObjectStream().filter(e->e.getKey().equals("phoneNumber"))
+ *                             .map(e->e.getValue())
+ *                             .findFirst()
+ *                             .get();
+ * }</pre>
+ *
+ * The methods {@link #skipArray} and {@link #skipObject} can be used to
+ * skip tokens and position the parser to {@code END_ARRAY} or
+ * {@code END_OBJECT}.
+ * <p>
+ * {@code JsonParser} can be used to parse sequence of JSON values that are not
+ * enclosed in a JSON array, e.g. { } { }. The following code demonstrates how
+ * to parse such sequence.
+ * <pre><code>
+ * JsonParser parser = Json.createParser(...);
+ * while (parser.hasNext) {
+ *     parser.next(); // advance parser state
+ *     JsonValue value = parser.getValue();
+ * }
+ * </code></pre>
+ *
+ * @see javax.json.Json
+ * @see JsonParserFactory
+ */
+public interface JsonParser extends /*Auto*/Closeable {
+
+    /**
+     * An event from {@code JsonParser}.
+     */
+    enum Event {
+        /**
+         * Start of a JSON array. The position of the parser is after '['.
+         */
+        START_ARRAY,
+        /**
+         * Start of a JSON object. The position of the parser is after '{'.
+         */
+        START_OBJECT,
+        /**
+         * Name in a name/value pair of a JSON object. The position of the parser
+         * is after the key name. The method {@link #getString} returns the key
+         * name.
+         */
+        KEY_NAME,
+        /**
+         * String value in a JSON array or object. The position of the parser is
+         * after the string value. The method {@link #getString}
+         * returns the string value.
+         */
+        VALUE_STRING,
+        /**
+         * Number value in a JSON array or object. The position of the parser is
+         * after the number value. {@code JsonParser} provides the following
+         * methods to access the number value: {@link #getInt},
+         * {@link #getLong}, and {@link #getBigDecimal}.
+         */
+        VALUE_NUMBER,
+        /**
+         * {@code true} value in a JSON array or object. The position of the
+         * parser is after the {@code true} value.
+         */
+        VALUE_TRUE,
+        /**
+         * {@code false} value in a JSON array or object. The position of the
+         * parser is after the {@code false} value.
+         */
+        VALUE_FALSE,
+        /**
+         * {@code null} value in a JSON array or object. The position of the
+         * parser is after the {@code null} value.
+         */
+        VALUE_NULL,
+        /**
+         * End of a JSON object. The position of the parser is after '}'.
+         */
+        END_OBJECT,
+        /**
+         * End of a JSON array. The position of the parser is after ']'.
+         */
+        END_ARRAY
+    }
+
+    /**
+     * Returns {@code true} if there are more parsing states. This method returns
+     * {@code false} if the parser reaches the end of the JSON text.
+     *
+     * @return {@code true} if there are more parsing states.
+     * @throws javax.json.JsonException if an i/o error occurs (IOException
+     * would be cause of JsonException)
+     * @throws JsonParsingException if the parser encounters invalid JSON
+     * when advancing to next state.
+     */
+    boolean hasNext();
+
+    /**
+     * Returns the event for the next parsing state.
+     *
+     * @throws javax.json.JsonException if an i/o error occurs (IOException
+     * would be cause of JsonException)
+     * @throws JsonParsingException if the parser encounters invalid JSON
+     * when advancing to next state.
+     * @throws java.util.NoSuchElementException if there are no more parsing
+     * states.
+     * @return the event for the next parsing state
+     */
+    Event next();
+
+    /**
+     * Returns a {@code String} for the name in a name/value pair,
+     * for a string value or a number value. This method should only be called
+     * when the parser state is {@link Event#KEY_NAME}, {@link Event#VALUE_STRING},
+     * or {@link Event#VALUE_NUMBER}.
+     *
+     * @return a name when the parser state is {@link Event#KEY_NAME}
+     *         a string value when the parser state is {@link Event#VALUE_STRING}
+     *         a number value when the parser state is {@link Event#VALUE_NUMBER}
+     * @throws IllegalStateException when the parser state is not
+     *      {@code KEY_NAME}, {@code VALUE_STRING}, or {@code VALUE_NUMBER}
+     */
+    String getString();
+
+    /**
+     * Returns true if the JSON number at the current parser state is a
+     * integral number. A {@link BigDecimal} may be used to store the value
+     * internally and this method semantics are defined using its
+     * {@code scale()}. If the scale is zero, then it is considered integral
+     * type. This integral type information can be used to invoke an
+     * appropriate accessor method to obtain a numeric value as in the
+     * following example:
+     *
+     * <pre>
+     * <code>
+     * JsonParser parser = ...
+     * if (parser.isIntegralNumber()) {
+     *     parser.getInt();     // or other methods to get integral value
+     * } else {
+     *     parser.getBigDecimal();
+     * }
+     * </code>
+     * </pre>
+     *
+     * @return true if this number is a integral number, otherwise false
+     * @throws IllegalStateException when the parser state is not
+     *      {@code VALUE_NUMBER}
+     */
+    boolean isIntegralNumber();
+
+    /**
+     * Returns a JSON number as an integer. The returned value is equal
+     * to {@code new BigDecimal(getString()).intValue()}. Note that
+     * this conversion can lose information about the overall magnitude
+     * and precision of the number value as well as return a result with
+     * the opposite sign. This method should only be called when the parser
+     * state is {@link Event#VALUE_NUMBER}.
+     *
+     * @return an integer for a JSON number
+     * @throws IllegalStateException when the parser state is not
+     *      {@code VALUE_NUMBER}
+     * @see java.math.BigDecimal#intValue()
+     */
+    int getInt();
+
+    /**
+     * Returns a JSON number as a long. The returned value is equal
+     * to {@code new BigDecimal(getString()).longValue()}. Note that this
+     * conversion can lose information about the overall magnitude and
+     * precision of the number value as well as return a result with
+     * the opposite sign. This method is only called when the parser state is
+     * {@link Event#VALUE_NUMBER}.
+     *
+     * @return a long for a JSON number
+     * @throws IllegalStateException when the parser state is not
+     *      {@code VALUE_NUMBER}
+     * @see java.math.BigDecimal#longValue()
+     */
+    long getLong();
+
+    /**
+     * Returns a JSON number as a {@code BigDecimal}. The {@code BigDecimal}
+     * is created using {@code new BigDecimal(getString())}. This
+     * method should only called when the parser state is
+     * {@link Event#VALUE_NUMBER}.
+     *
+     * @return a {@code BigDecimal} for a JSON number
+     * @throws IllegalStateException when the parser state is not
+     *      {@code VALUE_NUMBER}
+     */
+    BigDecimal getBigDecimal();
+
+    /**
+     * Return the location that corresponds to the parser's current state in
+     * the JSON input source. The location information is only valid in the
+     * current parser state (or until the parser is advanced to a next state).
+     *
+     * @return a non-null location corresponding to the current parser state
+     * in JSON input source
+     */
+    JsonLocation getLocation();
+
+    /**
+     * Returns a {@code JsonObject} and advances the parser to the
+     * corresponding {@code END_OBJECT}.
+     *
+     * @return the {@code JsonObject} at the current parser position
+     *
+     * @throws IllegalStateException when the parser state is not
+     *     {@code START_OBJECT}
+     *
+     * @since 1.1
+     */
+    default public JsonObject getObject() {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Returns a {@code JsonValue} at the current parser position.
+     * If the parser state is {@code START_ARRAY}, the behavior is
+     * the same as {@link #getArray}. If the parser state is
+     * {@code START_OBJECT}, the behavior is the same as
+     * {@link #getObject}. For all other cases, if applicable, the JSON value is
+     * read and returned.
+     *
+     * @return the {@code JsonValue} at the current parser position.
+     * @throws IllegalStateException when the parser state is
+     *     {@code END_OBJECT} or {@code END_ARRAY}
+     *
+     * @since 1.1
+     */
+    default public JsonValue getValue() {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Returns a {@code JsonArray} and advance the parser to the
+     * the corresponding {@code END_ARRAY}.
+     *
+     * @return the {@code JsonArray} at the current parser position
+     *
+     * @throws IllegalStateException when the parser state is not
+     *     {@code START_ARRAY}
+     *
+     * @since 1.1
+     */
+    default public JsonArray getArray() {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Returns a stream of the {@code JsonArray} elements.
+     * The parser state must be {@code START_ARRAY}.
+     * The elements are read lazily, on an as-needed basis, as
+     * required by the stream operations.
+     * If the stream operations do not consume
+     * all of the array elements, {@link skipArray} can be used to
+     * skip the unprocessed array elements.
+     *
+     * @return a stream of elements of the {@code JsonArray}
+     *
+     * @throws IllegalStateException when the parser state is not
+     *     {@code START_ARRAY}
+     *
+     * @since 1.1
+     */
+    default public Stream<JsonValue> getArrayStream() {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Returns a stream of the {@code JsonObject}'s
+     * name/value pairs. The parser state must be {@code START_OBJECT}.
+     * The name/value pairs are read lazily, on an as-needed basis, as
+     * required by the stream operations.
+     * If the stream operations do not consume
+     * all of the object's name/value pairs, {@link skipObject} can be
+     * used to skip the unprocessed elements.
+     *
+     * @return a stream of name/value pairs of the {@code JsonObject}
+     *
+     * @throws IllegalStateException when the parser state is not
+     *     {@code START_OBJECT}
+     *
+     * @since 1.1
+     */
+    default public Stream<Map.Entry<String,JsonValue>> getObjectStream() {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Returns a stream of {@code JsonValue} from a sequence of
+     * JSON values. The values are read lazily, on an as-needed basis,
+     * as needed by the stream operations.
+     *
+     * @return a Stream of {@code JsonValue}
+     *
+     * @throws IllegalStateException if the parser is in an array or object.
+     *
+     * @since 1.1
+     */
+    default public Stream<JsonValue> getValueStream() {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Advance the parser to {@code END_ARRAY}.
+     * If the parser is in array context, i.e. it has previously
+     * encountered a {@code START_ARRAY} without encountering the
+     * corresponding {@code END_ARRAY}, the parser is advanced to
+     * the corresponding {@code END_ARRAY}.
+     * If the parser is not in any array context, nothing happens.
+     *
+     * @since 1.1
+     */
+    default public void skipArray() {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Advance the parser to {@code END_OBJECT}.
+     * If the parser is in object context, i.e. it has previously
+     * encountered a {@code START_OBJECT} without encountering the
+     * corresponding {@code END_OBJECT}, the parser is advanced to
+     * the corresponding {@code END_OBJECT}.
+     * If the parser is not in any object context, nothing happens.
+     *
+     * @since 1.1
+     */
+    default public void skipObject() {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Closes this parser and frees any resources associated with the
+     * parser. This method closes the underlying input source.
+     *
+     * @throws javax.json.JsonException if an i/o error occurs (IOException
+     * would be cause of JsonException)
+     */
+    @Override
+    void close();
+}
diff --git a/src/javax/json/stream/JsonParserFactory.java b/src/javax/json/stream/JsonParserFactory.java
index d7df14b..a15f2a8 100644
--- a/src/javax/json/stream/JsonParserFactory.java
+++ b/src/javax/json/stream/JsonParserFactory.java
@@ -1,129 +1,132 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2011-2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json.stream;
-
-import javax.json.JsonArray;
-import javax.json.JsonObject;
-import java.io.InputStream;
-import java.io.Reader;
-import java.nio.charset.Charset;
-import java.util.Map;
-
-/**
- * Factory for creating {@link JsonParser} instances. If a factory
- * instance is configured with a configuration, the configuration applies
- * to all parser instances created using that factory instance.
- *
- * <p>
- * The class {@link javax.json.Json Json} also provides methods to create
- * {@link JsonParser} instances, but using {@code JsonParserFactory} is 
- * preferred when creating multiple parser instances as shown in the following
- * example:
- *
- * <pre>
- * <code>
- * JsonParserFactory factory = Json.createParserFactory();
- * JsonParser parser1 = factory.createParser(...);
- * JsonParser parser2 = factory.createParser(...);
- * </code>
- * </pre>
- *
- * <p> All the methods in this class are safe for use by multiple concurrent
- * threads.
- *
- * @author Jitendra Kotamraju
- */
-public interface JsonParserFactory {
-
-    /**
-     * Creates a JSON parser from a character stream.
-     *
-     * @param reader a i/o reader from which JSON is to be read
-     */
-    JsonParser createParser(Reader reader);
-
-    /**
-     * Creates a JSON parser from the specified byte stream.
-     * The character encoding of the stream is determined
-     * as specified in <a href="http://tools.ietf.org/rfc/rfc4627.txt">RFC 4627</a>.
-     *
-     * @param in i/o stream from which JSON is to be read
-     * @throws javax.json.JsonException if encoding cannot be determined
-     *         or i/o error (IOException would be cause of JsonException)
-     */
-    JsonParser createParser(InputStream in);
-
-    /**
-     * Creates a JSON parser from the specified byte stream.
-     * The bytes of the stream are decoded to characters using the
-     * specified charset.
-     *
-     * @param in i/o stream from which JSON is to be read
-     * @param charset a charset
-     */
-    JsonParser createParser(InputStream in, Charset charset);
-
-    /**
-     * Creates a JSON parser from the specified JSON object.
-     *
-     * @param obj a JSON object
-     */
-    JsonParser createParser(JsonObject obj);
-
-    /**
-     * Creates a JSON parser from the specified JSON array.
-     *
-     * @param array a JSON array
-     */
-    JsonParser createParser(JsonArray array);
-
-    /**
-     * Returns a read-only map of supported provider specific configuration
-     * properties that are used to configure the JSON parsers.
-     * If there are any specified configuration properties that are not
-     * supported by the provider, they won't be part of the returned map.
-     *
-     * @return a map of supported provider specific properties that are used
-     * to configure the created parsers. The map may be empty but not null
-     */
-    Map<String, ?> getConfigInUse();
-
-}
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2011-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.json.stream;
+
+import javax.json.JsonArray;
+import javax.json.JsonObject;
+import java.io.InputStream;
+import java.io.Reader;
+import java.nio.charset.Charset;
+import java.util.Map;
+
+/**
+ * Factory for creating {@link JsonParser} instances. If a factory
+ * instance is configured with a configuration, the configuration applies
+ * to all parser instances created using that factory instance.
+ *
+ * <p>
+ * The class {@link javax.json.Json Json} also provides methods to create
+ * {@link JsonParser} instances, but using {@code JsonParserFactory} is 
+ * preferred when creating multiple parser instances as shown in the following
+ * example:
+ *
+ * <pre>
+ * <code>
+ * JsonParserFactory factory = Json.createParserFactory();
+ * JsonParser parser1 = factory.createParser(...);
+ * JsonParser parser2 = factory.createParser(...);
+ * </code>
+ * </pre>
+ *
+ * <p> All the methods in this class are safe for use by multiple concurrent
+ * threads.
+ */
+public interface JsonParserFactory {
+
+    /**
+     * Creates a JSON parser from a character stream.
+     *
+     * @param reader a i/o reader from which JSON is to be read
+     * @return the created JSON parser
+     */
+    JsonParser createParser(Reader reader);
+
+    /**
+     * Creates a JSON parser from the specified byte stream.
+     * The character encoding of the stream is determined
+     * as specified in <a href="http://tools.ietf.org/rfc/rfc7159.txt">RFC 7159</a>.
+     *
+     * @param in i/o stream from which JSON is to be read
+     * @return the created JSON parser
+     * @throws javax.json.JsonException if encoding cannot be determined
+     *         or i/o error (IOException would be cause of JsonException)
+     */
+    JsonParser createParser(InputStream in);
+
+    /**
+     * Creates a JSON parser from the specified byte stream.
+     * The bytes of the stream are decoded to characters using the
+     * specified charset.
+     *
+     * @param in i/o stream from which JSON is to be read
+     * @param charset a charset
+     * @return the created JSON parser
+     */
+    JsonParser createParser(InputStream in, Charset charset);
+
+    /**
+     * Creates a JSON parser from the specified JSON object.
+     *
+     * @param obj a JSON object
+     * @return the created JSON parser
+     */
+    JsonParser createParser(JsonObject obj);
+
+    /**
+     * Creates a JSON parser from the specified JSON array.
+     *
+     * @param array a JSON array
+     * @return the created JSON parser
+     */
+    JsonParser createParser(JsonArray array);
+
+    /**
+     * Returns a read-only map of supported provider specific configuration
+     * properties that are used to configure the JSON parsers.
+     * If there are any specified configuration properties that are not
+     * supported by the provider, they won't be part of the returned map.
+     *
+     * @return a map of supported provider specific properties that are used
+     * to configure the created parsers. The map may be empty but not null
+     */
+    Map<String, ?> getConfigInUse();
+
+}
diff --git a/src/javax/json/stream/JsonParsingException.java b/src/javax/json/stream/JsonParsingException.java
index bb460d0..d8b99e6 100644
--- a/src/javax/json/stream/JsonParsingException.java
+++ b/src/javax/json/stream/JsonParsingException.java
@@ -1,98 +1,96 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2012-2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json.stream;
-
-import javax.json.JsonException;
-
-/**
- * {@code JsonParsingException} is used when an incorrect JSON is
- * being parsed.
- *
- * @author Jitendra Kotamraju
- */
-public class JsonParsingException extends JsonException {
-
-    private final JsonLocation location;
-
-    /**
-     * Constructs a new runtime exception with the specified detail message.
-     * The cause is not initialized, and may subsequently be initialized by a
-     * call to {@link #initCause}.
-     *
-     * @param message the detail message. The detail message is saved for
-     *                later retrieval by the {@link #getMessage()} method.
-     * @param location the location of the incorrect JSON
-     */
-    public JsonParsingException(String message, JsonLocation location) {
-        super(message);
-        this.location = location;
-    }
-
-    /**
-     * Constructs a new runtime exception with the specified detail message and
-     * cause.  <p>Note that the detail message associated with
-     * {@code cause} is <i>not</i> automatically incorporated in
-     * this runtime exception's detail message.
-     *
-     * @param message the detail message (which is saved for later retrieval
-     *                by the {@link #getMessage()} method).
-     * @param cause the cause (which is saved for later retrieval by the
-     *              {@link #getCause()} method). (A <tt>null</tt> value is
-     *              permitted, and indicates that the cause is nonexistent or
-     *              unknown.)
-     * @param location the location of the incorrect JSON
-     */
-    public JsonParsingException(String message, Throwable cause, JsonLocation location) {
-        super(message, cause);
-        this.location = location;
-    }
-
-    /**
-     * Return the location of the incorrect JSON.
-     *
-     * @return the non-null location of the incorrect JSON
-     */
-    public JsonLocation getLocation() {
-        return location;
-    }
-
-}
-
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2012-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.json.stream;
+
+import javax.json.JsonException;
+
+/**
+ * {@code JsonParsingException} is used when an incorrect JSON is
+ * being parsed.
+ */
+public class JsonParsingException extends JsonException {
+
+    private final JsonLocation location;
+
+    /**
+     * Constructs a new runtime exception with the specified detail message.
+     * The cause is not initialized, and may subsequently be initialized by a
+     * call to {@link #initCause}.
+     *
+     * @param message the detail message. The detail message is saved for
+     *                later retrieval by the {@link #getMessage()} method.
+     * @param location the location of the incorrect JSON
+     */
+    public JsonParsingException(String message, JsonLocation location) {
+        super(message);
+        this.location = location;
+    }
+
+    /**
+     * Constructs a new runtime exception with the specified detail message and
+     * cause.  <p>Note that the detail message associated with
+     * {@code cause} is <i>not</i> automatically incorporated in
+     * this runtime exception's detail message.
+     *
+     * @param message the detail message (which is saved for later retrieval
+     *                by the {@link #getMessage()} method).
+     * @param cause the cause (which is saved for later retrieval by the
+     *              {@link #getCause()} method). (A <tt>null</tt> value is
+     *              permitted, and indicates that the cause is nonexistent or
+     *              unknown.)
+     * @param location the location of the incorrect JSON
+     */
+    public JsonParsingException(String message, Throwable cause, JsonLocation location) {
+        super(message, cause);
+        this.location = location;
+    }
+
+    /**
+     * Return the location of the incorrect JSON.
+     *
+     * @return the non-null location of the incorrect JSON
+     */
+    public JsonLocation getLocation() {
+        return location;
+    }
+
+}
+
diff --git a/src/javax/json/stream/package-info.java b/src/javax/json/stream/package-info.java
index ef29648..fb73905 100644
--- a/src/javax/json/stream/package-info.java
+++ b/src/javax/json/stream/package-info.java
@@ -1,72 +1,71 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2012-2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-/**
- * Provides a streaming API to parse and generate
- * <a href="http://json.org/">JSON</a>.
- *
- * <p>
- * The streaming API consists of the interfaces
- * {@link javax.json.stream.JsonParser} and
- * {@link javax.json.stream.JsonGenerator}. The interface {@code JsonParser}
- * contains methods to parse JSON in a streaming way. The interface
- * {@code JsonGenerator} contains methods to write JSON to an output source
- * in a streaming way.
- *
- * <p>
- * {@code JsonParser} provides forward, read-only access to JSON data using the
- * pull parsing programming model. In this model the application code controls
- * the thread and calls methods in the parser interface to move the parser
- * forward or to obtain JSON data from the current state of the parser.
- *
- * <p>
- * {@code JsonGenerator} provides methods to write JSON to an output source.
- * The generator writes name/value pairs in JSON objects and values in JSON
- * arrays.
- * 
- * <p>
- * The streaming API is a low-level API designed to process large amounts of
- * JSON data efficiently. Other JSON frameworks (such as JSON binding) can be
- * implemented using this API.
- *
- * @since JSON Processing 1.0
- * @author Jitendra Kotamraju
- */
-package javax.json.stream;
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2012-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+/**
+ * Provides a streaming API to parse and generate
+ * <a href="http://json.org/">JSON</a>.
+ *
+ * <p>
+ * The streaming API consists of the interfaces
+ * {@link javax.json.stream.JsonParser} and
+ * {@link javax.json.stream.JsonGenerator}. The interface {@code JsonParser}
+ * contains methods to parse JSON in a streaming way. The interface
+ * {@code JsonGenerator} contains methods to write JSON to an output source
+ * in a streaming way.
+ *
+ * <p>
+ * {@code JsonParser} provides forward, read-only access to JSON data using the
+ * pull parsing programming model. In this model the application code controls
+ * the thread and calls methods in the parser interface to move the parser
+ * forward or to obtain JSON data from the current state of the parser.
+ *
+ * <p>
+ * {@code JsonGenerator} provides methods to write JSON to an output source.
+ * The generator writes name/value pairs in JSON objects and values in JSON
+ * arrays.
+ * 
+ * <p>
+ * The streaming API is a low-level API designed to process large amounts of
+ * JSON data efficiently. Other JSON frameworks (such as JSON binding) can be
+ * implemented using this API.
+ *
+ * @since JSON Processing 1.0
+ */
+package javax.json.stream;
diff --git a/src/org/glassfish/json/BufferPoolImpl.java b/src/org/glassfish/json/BufferPoolImpl.java
index 6c28b5a..7b64448 100644
--- a/src/org/glassfish/json/BufferPoolImpl.java
+++ b/src/org/glassfish/json/BufferPoolImpl.java
@@ -1,98 +1,98 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import org.glassfish.json.api.BufferPool;
-
-import java.lang.ref.WeakReference;
-import java.util.concurrent.ConcurrentLinkedQueue;
-
-/**
- * char[] pool that pool instances of char[] which are expensive to create.
- *
- * @author Jitendra Kotamraju
- */
-class BufferPoolImpl implements BufferPool {
-
-    // volatile since multiple threads may access queue reference
-    private volatile WeakReference<ConcurrentLinkedQueue<char[]>> queue;
-
-    /**
-     * Gets a new object from the pool.
-     *
-     * <p>
-     * If no object is available in the pool, this method creates a new one.
-     *
-     * @return
-     *      always non-null.
-     */
-    @Override
-    public final char[] take() {
-        char[] t = getQueue().poll();
-        if (t==null)
-            return new char[4096];
-        return t;
-    }
-
-    private ConcurrentLinkedQueue<char[]> getQueue() {
-        WeakReference<ConcurrentLinkedQueue<char[]>> q = queue;
-        if (q != null) {
-            ConcurrentLinkedQueue<char[]> d = q.get();
-            if (d != null)
-                return d;
-        }
-
-        // overwrite the queue
-        ConcurrentLinkedQueue<char[]> d = new ConcurrentLinkedQueue<char[]>();
-        queue = new WeakReference<ConcurrentLinkedQueue<char[]>>(d);
-
-        return d;
-    }
-
-    /**
-     * Returns an object back to the pool.
-     */
-    @Override
-    public final void recycle(char[] t) {
-        getQueue().offer(t);
-    }
-
-}
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2013-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package org.glassfish.json;
+
+import org.glassfish.json.api.BufferPool;
+
+import java.lang.ref.WeakReference;
+import java.util.concurrent.ConcurrentLinkedQueue;
+
+/**
+ * char[] pool that pool instances of char[] which are expensive to create.
+ *
+ * @author Jitendra Kotamraju
+ */
+class BufferPoolImpl implements BufferPool {
+
+    // volatile since multiple threads may access queue reference
+    private volatile WeakReference<ConcurrentLinkedQueue<char[]>> queue;
+
+    /**
+     * Gets a new object from the pool.
+     *
+     * <p>
+     * If no object is available in the pool, this method creates a new one.
+     *
+     * @return
+     *      always non-null.
+     */
+    @Override
+    public final char[] take() {
+        char[] t = getQueue().poll();
+        if (t==null)
+            return new char[4096];
+        return t;
+    }
+
+    private ConcurrentLinkedQueue<char[]> getQueue() {
+        WeakReference<ConcurrentLinkedQueue<char[]>> q = queue;
+        if (q != null) {
+            ConcurrentLinkedQueue<char[]> d = q.get();
+            if (d != null)
+                return d;
+        }
+
+        // overwrite the queue
+        ConcurrentLinkedQueue<char[]> d = new ConcurrentLinkedQueue<>();
+        queue = new WeakReference<>(d);
+
+        return d;
+    }
+
+    /**
+     * Returns an object back to the pool.
+     */
+    @Override
+    public final void recycle(char[] t) {
+        getQueue().offer(t);
+    }
+
+}
diff --git a/src/org/glassfish/json/JsonArrayBuilderImpl.java b/src/org/glassfish/json/JsonArrayBuilderImpl.java
index c01fc81..e534e63 100644
--- a/src/org/glassfish/json/JsonArrayBuilderImpl.java
+++ b/src/org/glassfish/json/JsonArrayBuilderImpl.java
@@ -1,275 +1,503 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2012-2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import org.glassfish.json.api.BufferPool;
-
-import javax.json.*;
-import java.io.StringWriter;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.AbstractList;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * JsonArrayBuilder impl
- *
- * @author Jitendra Kotamraju
- */
-class JsonArrayBuilderImpl implements JsonArrayBuilder {
-    private ArrayList<JsonValue> valueList;
-    private final BufferPool bufferPool;
-
-    JsonArrayBuilderImpl(BufferPool bufferPool) {
-        this.bufferPool = bufferPool;
-    }
-
-    public JsonArrayBuilder add(JsonValue value) {
-        validateValue(value);
-        addValueList(value);
-        return this;
-    }
-
-    public JsonArrayBuilder add(String value) {
-        validateValue(value);
-        addValueList(new JsonStringImpl(value));
-        return this;
-    }
-
-    public JsonArrayBuilder add(BigDecimal value) {
-        validateValue(value);
-        addValueList(JsonNumberImpl.getJsonNumber(value));
-        return this;
-    }
-
-    public JsonArrayBuilder add(BigInteger value) {
-        validateValue(value);
-        addValueList(JsonNumberImpl.getJsonNumber(value));
-        return this;
-    }
-
-    public JsonArrayBuilder add(int value) {
-        addValueList(JsonNumberImpl.getJsonNumber(value));
-        return this;
-    }
-
-    public JsonArrayBuilder add(long value) {
-        addValueList(JsonNumberImpl.getJsonNumber(value));
-        return this;
-    }
-
-    public JsonArrayBuilder add(double value) {
-        addValueList(JsonNumberImpl.getJsonNumber(value));
-        return this;
-    }
-
-    public JsonArrayBuilder add(boolean value) {
-        addValueList(value ? JsonValue.TRUE : JsonValue.FALSE);
-        return this;
-    }
-
-    public JsonArrayBuilder addNull() {
-        addValueList(JsonValue.NULL);
-        return this;
-    }
-
-    public JsonArrayBuilder add(JsonObjectBuilder builder) {
-        if (builder == null) {
-            throw new NullPointerException(JsonMessages.ARRBUILDER_OBJECT_BUILDER_NULL());
-        }
-        addValueList(builder.build());
-        return this;
-    }
-
-    public JsonArrayBuilder add(JsonArrayBuilder builder) {
-        if (builder == null) {
-            throw new NullPointerException(JsonMessages.ARRBUILDER_ARRAY_BUILDER_NULL());
-        }
-        addValueList(builder.build());
-        return this;
-    }
-
-    public JsonArray build() {
-        List<JsonValue> snapshot;
-        if (valueList == null) {
-            snapshot = Collections.emptyList();
-        } else {
-            // Should we trim to minimize storage ?
-            // valueList.trimToSize();
-            snapshot = Collections.unmodifiableList(valueList);
-        }
-        valueList = null;
-        return new JsonArrayImpl(snapshot, bufferPool);
-    }
-
-    private void addValueList(JsonValue value) {
-        if (valueList == null) {
-            valueList = new ArrayList<JsonValue>();
-        }
-        valueList.add(value);
-    }
-
-    private void validateValue(Object value) {
-        if (value == null) {
-            throw new NullPointerException(JsonMessages.ARRBUILDER_VALUE_NULL());
-        }
-    }
-
-    private static final class JsonArrayImpl extends AbstractList<JsonValue> implements JsonArray {
-        private final List<JsonValue> valueList;    // Unmodifiable
-        private final BufferPool bufferPool;
-
-        JsonArrayImpl(List<JsonValue> valueList, BufferPool bufferPool) {
-            this.valueList = valueList;
-            this.bufferPool = bufferPool;
-        }
-
-        @Override
-        public int size() {
-            return valueList.size();
-        }
-
-        @Override
-        public JsonObject getJsonObject(int index) {
-            return (JsonObject)valueList.get(index);
-        }
-
-        @Override
-        public JsonArray getJsonArray(int index) {
-            return (JsonArray)valueList.get(index);
-        }
-
-        @Override
-        public JsonNumber getJsonNumber(int index) {
-            return (JsonNumber)valueList.get(index);
-        }
-
-        @Override
-        public JsonString getJsonString(int index) {
-            return (JsonString)valueList.get(index);
-        }
-
-        @Override
-        @SuppressWarnings("unchecked")
-        public <T extends JsonValue> List<T> getValuesAs(Class<T> clazz) {
-            return (List<T>)valueList;
-        }
-
-        @Override
-        public String getString(int index) {
-            return getJsonString(index).getString();
-        }
-
-        @Override
-        public String getString(int index, String defaultValue) {
-            try {
-                return getString(index);
-            } catch (Exception e) {
-                return defaultValue;
-            }
-        }
-
-        @Override
-        public int getInt(int index) {
-            return getJsonNumber(index).intValue();
-        }
-
-        @Override
-        public int getInt(int index, int defaultValue) {
-            try {
-                return getInt(index);
-            } catch (Exception e) {
-                return defaultValue;
-            }
-        }
-
-        @Override
-        public boolean getBoolean(int index) {
-            JsonValue jsonValue = get(index);
-            if (jsonValue == JsonValue.TRUE) {
-                return true;
-            } else if (jsonValue == JsonValue.FALSE) {
-                return false;
-            } else {
-                throw new ClassCastException();
-            }
-        }
-
-        @Override
-        public boolean getBoolean(int index, boolean defaultValue) {
-            try {
-                return getBoolean(index);
-            } catch (Exception e) {
-                return defaultValue;
-            }
-        }
-
-        @Override
-        public boolean isNull(int index) {
-            return valueList.get(index).equals(JsonValue.NULL);
-        }
-
-        @Override
-        public ValueType getValueType() {
-            return ValueType.ARRAY;
-        }
-
-        @Override
-        public JsonValue get(int index) {
-            return valueList.get(index);
-        }
-
-        @Override
-        public String toString() {
-            StringWriter sw = new StringWriter();
-            JsonWriter jw = new JsonWriterImpl(sw, bufferPool);
-            jw.write(this);
-            jw.close();
-            return sw.toString();
-        }
-    }
-
-}
-
-
-
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2012-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package org.glassfish.json;
+
+import org.glassfish.json.api.BufferPool;
+
+import javax.json.*;
+import java.io.StringWriter;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.AbstractList;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * JsonArrayBuilder implementation
+ *
+ * @author Jitendra Kotamraju
+ * @author Kin-man Chung
+ */
+
+class JsonArrayBuilderImpl implements JsonArrayBuilder {
+    private ArrayList<JsonValue> valueList;
+    private final BufferPool bufferPool;
+
+    JsonArrayBuilderImpl(BufferPool bufferPool) {
+        this.bufferPool = bufferPool;
+    }
+
+    JsonArrayBuilderImpl(JsonArray array, BufferPool bufferPool) {
+        this.bufferPool = bufferPool;
+        valueList = new ArrayList<>();
+        valueList.addAll(array);
+    }
+
+    JsonArrayBuilderImpl(Collection<?> collection, BufferPool bufferPool) {
+        this.bufferPool = bufferPool;
+        valueList = new ArrayList<>();
+        populate(collection);
+    }
+
+    @Override
+    public JsonArrayBuilder add(JsonValue value) {
+        validateValue(value);
+        addValueList(value);
+        return this;
+    }
+
+    @Override
+    public JsonArrayBuilder add(String value) {
+        validateValue(value);
+        addValueList(new JsonStringImpl(value));
+        return this;
+    }
+
+    @Override
+    public JsonArrayBuilder add(BigDecimal value) {
+        validateValue(value);
+        addValueList(JsonNumberImpl.getJsonNumber(value));
+        return this;
+    }
+
+    @Override
+    public JsonArrayBuilder add(BigInteger value) {
+        validateValue(value);
+        addValueList(JsonNumberImpl.getJsonNumber(value));
+        return this;
+    }
+
+    @Override
+    public JsonArrayBuilder add(int value) {
+        addValueList(JsonNumberImpl.getJsonNumber(value));
+        return this;
+    }
+
+    @Override
+    public JsonArrayBuilder add(long value) {
+        addValueList(JsonNumberImpl.getJsonNumber(value));
+        return this;
+    }
+
+    @Override
+    public JsonArrayBuilder add(double value) {
+        addValueList(JsonNumberImpl.getJsonNumber(value));
+        return this;
+    }
+
+    @Override
+    public JsonArrayBuilder add(boolean value) {
+        addValueList(value ? JsonValue.TRUE : JsonValue.FALSE);
+        return this;
+    }
+
+    @Override
+    public JsonArrayBuilder addNull() {
+        addValueList(JsonValue.NULL);
+        return this;
+    }
+
+    @Override
+    public JsonArrayBuilder add(JsonObjectBuilder builder) {
+        if (builder == null) {
+            throw new NullPointerException(JsonMessages.ARRBUILDER_OBJECT_BUILDER_NULL());
+        }
+        addValueList(builder.build());
+        return this;
+    }
+
+    @Override
+    public JsonArrayBuilder add(JsonArrayBuilder builder) {
+        if (builder == null) {
+            throw new NullPointerException(JsonMessages.ARRBUILDER_ARRAY_BUILDER_NULL());
+        }
+        addValueList(builder.build());
+        return this;
+    }
+
+    @Override
+    public JsonArrayBuilder addAll(JsonArrayBuilder builder) {
+        if (builder == null) {
+            throw new NullPointerException(JsonMessages.ARRBUILDER_ARRAY_BUILDER_NULL());
+        }
+        if (valueList == null) {
+            valueList = new ArrayList<>();
+        }
+        valueList.addAll(builder.build());
+        return this;
+    }
+
+    @Override
+    public JsonArrayBuilder add(int index, JsonValue value) {
+        validateValue(value);
+        addValueList(index, value);
+        return this;
+    }
+
+    @Override
+    public JsonArrayBuilder add(int index, String value) {
+        validateValue(value);
+        addValueList(index, new JsonStringImpl(value));
+        return this;
+    }
+
+    @Override
+    public JsonArrayBuilder add(int index, BigDecimal value) {
+        validateValue(value);
+        addValueList(index, JsonNumberImpl.getJsonNumber(value));
+        return this;
+    }
+
+    @Override
+    public JsonArrayBuilder add(int index, BigInteger value) {
+        validateValue(value);
+        addValueList(index, JsonNumberImpl.getJsonNumber(value));
+        return this;
+    }
+
+    @Override
+    public JsonArrayBuilder add(int index, int value) {
+        addValueList(index, JsonNumberImpl.getJsonNumber(value));
+        return this;
+    }
+
+    @Override
+    public JsonArrayBuilder add(int index, long value) {
+        addValueList(index, JsonNumberImpl.getJsonNumber(value));
+        return this;
+    }
+
+    @Override
+    public JsonArrayBuilder add(int index, double value) {
+        addValueList(index, JsonNumberImpl.getJsonNumber(value));
+        return this;
+    }
+
+    @Override
+    public JsonArrayBuilder add(int index, boolean value) {
+        addValueList(index, value ? JsonValue.TRUE : JsonValue.FALSE);
+        return this;
+    }
+
+    @Override
+    public JsonArrayBuilder addNull(int index) {
+        addValueList(index, JsonValue.NULL);
+        return this;
+    }
+
+    @Override
+    public JsonArrayBuilder add(int index, JsonObjectBuilder builder) {
+        if (builder == null) {
+            throw new NullPointerException(JsonMessages.ARRBUILDER_OBJECT_BUILDER_NULL());
+        }
+        addValueList(index, builder.build());
+        return this;
+    }
+
+    @Override
+    public JsonArrayBuilder add(int index, JsonArrayBuilder builder) {
+        if (builder == null) {
+            throw new NullPointerException(JsonMessages.ARRBUILDER_OBJECT_BUILDER_NULL());
+        }
+        addValueList(index, builder.build());
+        return this;
+    }
+
+    @Override
+    public JsonArrayBuilder set(int index, JsonValue value) {
+        validateValue(value);
+        setValueList(index, value);
+        return this;
+    }
+
+    @Override
+    public JsonArrayBuilder set(int index, String value) {
+        validateValue(value);
+        setValueList(index, new JsonStringImpl(value));
+        return this;
+    }
+
+    @Override
+    public JsonArrayBuilder set(int index, BigDecimal value) {
+        validateValue(value);
+        setValueList(index, JsonNumberImpl.getJsonNumber(value));
+        return this;
+    }
+
+    @Override
+    public JsonArrayBuilder set(int index, BigInteger value) {
+        validateValue(value);
+        setValueList(index, JsonNumberImpl.getJsonNumber(value));
+        return this;
+    }
+
+    @Override
+    public JsonArrayBuilder set(int index, int value) {
+        setValueList(index, JsonNumberImpl.getJsonNumber(value));
+        return this;
+    }
+
+    @Override
+    public JsonArrayBuilder set(int index, long value) {
+        setValueList(index, JsonNumberImpl.getJsonNumber(value));
+        return this;
+    }
+
+    @Override
+    public JsonArrayBuilder set(int index, double value) {
+        setValueList(index, JsonNumberImpl.getJsonNumber(value));
+        return this;
+    }
+
+    @Override
+    public JsonArrayBuilder set(int index, boolean value) {
+        setValueList(index, value ? JsonValue.TRUE : JsonValue.FALSE);
+        return this;
+    }
+
+    @Override
+    public JsonArrayBuilder setNull(int index) {
+        setValueList(index, JsonValue.NULL);
+        return this;
+    }
+
+    @Override
+    public JsonArrayBuilder set(int index, JsonObjectBuilder builder) {
+        if (builder == null) {
+            throw new NullPointerException(JsonMessages.ARRBUILDER_OBJECT_BUILDER_NULL());
+        }
+        setValueList(index, builder.build());
+        return this;
+    }
+
+    @Override
+    public JsonArrayBuilder set(int index, JsonArrayBuilder builder) {
+        if (builder == null) {
+            throw new NullPointerException(JsonMessages.ARRBUILDER_OBJECT_BUILDER_NULL());
+        }
+        setValueList(index, builder.build());
+        return this;
+    }
+
+    @Override
+    public JsonArrayBuilder remove(int index) {
+        if (valueList == null) {
+            throw new IndexOutOfBoundsException(JsonMessages.ARRBUILDER_VALUELIST_NULL(index, 0));
+        }
+        valueList.remove(index);
+        return this;
+    }
+
+    @Override
+    public JsonArray build() {
+        List<JsonValue> snapshot;
+        if (valueList == null) {
+            snapshot = Collections.emptyList();
+        } else {
+            // Should we trim to minimize storage ?
+            // valueList.trimToSize();
+            snapshot = Collections.unmodifiableList(valueList);
+        }
+        valueList = null;
+        return new JsonArrayImpl(snapshot, bufferPool);
+    }
+
+    private void populate(Collection<?> collection) {
+        for (Object value : collection) {
+            if (value != null && value instanceof Optional) {
+                ((Optional<?>) value).ifPresent(v ->
+                        this.valueList.add(MapUtil.handle(v, bufferPool)));
+            } else {
+                this.valueList.add(MapUtil.handle(value, bufferPool));
+            }
+        }
+    }
+
+    private void addValueList(JsonValue value) {
+        if (valueList == null) {
+            valueList = new ArrayList<>();
+        }
+        valueList.add(value);
+    }
+
+    private void addValueList(int index, JsonValue value) {
+        if (valueList == null) {
+            valueList = new ArrayList<>();
+        }
+        valueList.add(index, value);
+    }
+
+    private void setValueList(int index, JsonValue value) {
+        if (valueList == null) {
+            throw new IndexOutOfBoundsException(JsonMessages.ARRBUILDER_VALUELIST_NULL(index, 0));
+        }
+        valueList.set(index, value);
+    }
+
+    private void validateValue(Object value) {
+        if (value == null) {
+            throw new NullPointerException(JsonMessages.ARRBUILDER_VALUE_NULL());
+        }
+    }
+
+    private static final class JsonArrayImpl extends AbstractList<JsonValue> implements JsonArray {
+        private final List<JsonValue> valueList;    // Unmodifiable
+        private final BufferPool bufferPool;
+
+        JsonArrayImpl(List<JsonValue> valueList, BufferPool bufferPool) {
+            this.valueList = valueList;
+            this.bufferPool = bufferPool;
+        }
+
+        @Override
+        public int size() {
+            return valueList.size();
+        }
+
+        @Override
+        public JsonObject getJsonObject(int index) {
+            return (JsonObject)valueList.get(index);
+        }
+
+        @Override
+        public JsonArray getJsonArray(int index) {
+            return (JsonArray)valueList.get(index);
+        }
+
+        @Override
+        public JsonNumber getJsonNumber(int index) {
+            return (JsonNumber)valueList.get(index);
+        }
+
+        @Override
+        public JsonString getJsonString(int index) {
+            return (JsonString)valueList.get(index);
+        }
+
+        @Override
+        @SuppressWarnings("unchecked")
+        public <T extends JsonValue> List<T> getValuesAs(Class<T> clazz) {
+            return (List<T>)valueList;
+        }
+
+        @Override
+        public String getString(int index) {
+            return getJsonString(index).getString();
+        }
+
+        @Override
+        public String getString(int index, String defaultValue) {
+            try {
+                return getString(index);
+            } catch (Exception e) {
+                return defaultValue;
+            }
+        }
+
+        @Override
+        public int getInt(int index) {
+            return getJsonNumber(index).intValue();
+        }
+
+        @Override
+        public int getInt(int index, int defaultValue) {
+            try {
+                return getInt(index);
+            } catch (Exception e) {
+                return defaultValue;
+            }
+        }
+
+        @Override
+        public boolean getBoolean(int index) {
+            JsonValue jsonValue = get(index);
+            if (jsonValue == JsonValue.TRUE) {
+                return true;
+            } else if (jsonValue == JsonValue.FALSE) {
+                return false;
+            } else {
+                throw new ClassCastException();
+            }
+        }
+
+        @Override
+        public boolean getBoolean(int index, boolean defaultValue) {
+            try {
+                return getBoolean(index);
+            } catch (Exception e) {
+                return defaultValue;
+            }
+        }
+
+        @Override
+        public boolean isNull(int index) {
+            return valueList.get(index).equals(JsonValue.NULL);
+        }
+
+        @Override
+        public ValueType getValueType() {
+            return ValueType.ARRAY;
+        }
+
+        @Override
+        public JsonValue get(int index) {
+            return valueList.get(index);
+        }
+
+        @Override
+        public String toString() {
+            StringWriter sw = new StringWriter();
+            try (JsonWriter jw = new JsonWriterImpl(sw, bufferPool)) {
+                jw.write(this);
+            }
+            return sw.toString();
+        }
+
+        @Override
+        public JsonArray asJsonArray() {
+            return this;
+        }
+    }
+}
+
diff --git a/src/org/glassfish/json/JsonBuilderFactoryImpl.java b/src/org/glassfish/json/JsonBuilderFactoryImpl.java
index 4893946..4bb0447 100644
--- a/src/org/glassfish/json/JsonBuilderFactoryImpl.java
+++ b/src/org/glassfish/json/JsonBuilderFactoryImpl.java
@@ -1,77 +1,100 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import org.glassfish.json.api.BufferPool;
-
-import javax.json.JsonArrayBuilder;
-import javax.json.JsonBuilderFactory;
-import javax.json.JsonObjectBuilder;
-import java.util.Collections;
-import java.util.Map;
-
-/**
- * @author Jitendra Kotamraju
- */
-class JsonBuilderFactoryImpl implements JsonBuilderFactory {
-    private final Map<String, ?> config;
-    private final BufferPool bufferPool;
-
-    JsonBuilderFactoryImpl(BufferPool bufferPool) {
-        this.config = Collections.emptyMap();
-        this.bufferPool = bufferPool;
-    }
-
-    @Override
-    public JsonObjectBuilder createObjectBuilder() {
-        return new JsonObjectBuilderImpl(bufferPool);
-    }
-
-    @Override
-    public JsonArrayBuilder createArrayBuilder() {
-        return new JsonArrayBuilderImpl(bufferPool);
-    }
-
-    @Override
-    public Map<String, ?> getConfigInUse() {
-        return config;
-    }
-}
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2013-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package org.glassfish.json;
+
+import java.util.Collection;
+import org.glassfish.json.api.BufferPool;
+
+import javax.json.JsonObject;
+import javax.json.JsonArray;
+import javax.json.JsonArrayBuilder;
+import javax.json.JsonBuilderFactory;
+import javax.json.JsonObjectBuilder;
+import java.util.Collections;
+import java.util.Map;
+
+/**
+ * @author Jitendra Kotamraju
+ */
+class JsonBuilderFactoryImpl implements JsonBuilderFactory {
+    private final Map<String, ?> config;
+    private final BufferPool bufferPool;
+
+    JsonBuilderFactoryImpl(BufferPool bufferPool) {
+        this.config = Collections.emptyMap();
+        this.bufferPool = bufferPool;
+    }
+
+    @Override
+    public JsonObjectBuilder createObjectBuilder() {
+        return new JsonObjectBuilderImpl(bufferPool);
+    }
+ 
+    @Override
+    public JsonObjectBuilder createObjectBuilder(JsonObject object) {
+        return new JsonObjectBuilderImpl(object, bufferPool);
+    }
+
+    @Override
+    public JsonObjectBuilder createObjectBuilder(Map<String, Object> object) {
+        return new JsonObjectBuilderImpl(object, bufferPool);
+    }
+
+    @Override
+    public JsonArrayBuilder createArrayBuilder() {
+        return new JsonArrayBuilderImpl(bufferPool);
+    }
+
+    @Override
+    public JsonArrayBuilder createArrayBuilder(JsonArray array) {
+        return new JsonArrayBuilderImpl(array, bufferPool);
+    }
+
+    @Override
+    public JsonArrayBuilder createArrayBuilder(Collection<?> collection) {
+        return new JsonArrayBuilderImpl(collection, bufferPool);
+    }
+
+    @Override
+    public Map<String, ?> getConfigInUse() {
+        return config;
+    }
+}
diff --git a/src/org/glassfish/json/JsonGeneratorFactoryImpl.java b/src/org/glassfish/json/JsonGeneratorFactoryImpl.java
index 043eaf5..00e779a 100644
--- a/src/org/glassfish/json/JsonGeneratorFactoryImpl.java
+++ b/src/org/glassfish/json/JsonGeneratorFactoryImpl.java
@@ -1,94 +1,94 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2012-2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import org.glassfish.json.api.BufferPool;
-
-import javax.json.stream.JsonGenerator;
-import javax.json.stream.JsonGeneratorFactory;
-import java.io.OutputStream;
-import java.io.Writer;
-import java.nio.charset.Charset;
-import java.util.Map;
-
-/**
- * @author Jitendra Kotamraju
- */
-class JsonGeneratorFactoryImpl implements JsonGeneratorFactory {
-
-    private final boolean prettyPrinting;
-    private final Map<String, ?> config;    // unmodifiable map
-    private final BufferPool bufferPool;
-
-    JsonGeneratorFactoryImpl(Map<String, ?> config, boolean prettyPrinting,
-            BufferPool bufferPool) {
-        this.config = config;
-        this.prettyPrinting = prettyPrinting;
-        this.bufferPool = bufferPool;
-    }
-
-    @Override
-    public JsonGenerator createGenerator(Writer writer) {
-        return prettyPrinting
-                ? new JsonPrettyGeneratorImpl(writer, bufferPool)
-                : new JsonGeneratorImpl(writer, bufferPool);
-    }
-
-    @Override
-    public JsonGenerator createGenerator(OutputStream out) {
-        return prettyPrinting
-                ? new JsonPrettyGeneratorImpl(out, bufferPool)
-                : new JsonGeneratorImpl(out, bufferPool);
-    }
-
-    @Override
-    public JsonGenerator createGenerator(OutputStream out, Charset charset) {
-        return prettyPrinting
-                ? new JsonPrettyGeneratorImpl(out, charset, bufferPool)
-                : new JsonGeneratorImpl(out, charset, bufferPool);
-    }
-
-    @Override
-    public Map<String, ?> getConfigInUse() {
-        return config;
-    }
-
-}
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2012-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package org.glassfish.json;
+
+import org.glassfish.json.api.BufferPool;
+
+import javax.json.stream.JsonGenerator;
+import javax.json.stream.JsonGeneratorFactory;
+import java.io.OutputStream;
+import java.io.Writer;
+import java.nio.charset.Charset;
+import java.util.Map;
+
+/**
+ * @author Jitendra Kotamraju
+ */
+class JsonGeneratorFactoryImpl implements JsonGeneratorFactory {
+
+    private final boolean prettyPrinting;
+    private final Map<String, ?> config;    // unmodifiable map
+    private final BufferPool bufferPool;
+
+    JsonGeneratorFactoryImpl(Map<String, ?> config, boolean prettyPrinting,
+            BufferPool bufferPool) {
+        this.config = config;
+        this.prettyPrinting = prettyPrinting;
+        this.bufferPool = bufferPool;
+    }
+
+    @Override
+    public JsonGenerator createGenerator(Writer writer) {
+        return prettyPrinting
+                ? new JsonPrettyGeneratorImpl(writer, bufferPool)
+                : new JsonGeneratorImpl(writer, bufferPool);
+    }
+
+    @Override
+    public JsonGenerator createGenerator(OutputStream out) {
+        return prettyPrinting
+                ? new JsonPrettyGeneratorImpl(out, bufferPool)
+                : new JsonGeneratorImpl(out, bufferPool);
+    }
+
+    @Override
+    public JsonGenerator createGenerator(OutputStream out, Charset charset) {
+        return prettyPrinting
+                ? new JsonPrettyGeneratorImpl(out, charset, bufferPool)
+                : new JsonGeneratorImpl(out, charset, bufferPool);
+    }
+
+    @Override
+    public Map<String, ?> getConfigInUse() {
+        return config;
+    }
+
+}
diff --git a/src/org/glassfish/json/JsonGeneratorImpl.java b/src/org/glassfish/json/JsonGeneratorImpl.java
index 9d3e93e..b0a006b 100644
--- a/src/org/glassfish/json/JsonGeneratorImpl.java
+++ b/src/org/glassfish/json/JsonGeneratorImpl.java
@@ -1,709 +1,731 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2012-2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import org.glassfish.json.api.BufferPool;
-
-import javax.json.*;
-import javax.json.stream.JsonGenerationException;
-import javax.json.stream.JsonGenerator;
-import java.io.*;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.nio.charset.Charset;
-import java.util.ArrayDeque;
-import java.util.Deque;
-import java.util.Map;
-
-/**
- * @author Jitendra Kotamraju
- */
-class JsonGeneratorImpl implements JsonGenerator {
-    private static final Charset UTF_8 = Charset.forName("UTF-8");
-
-    private static final char[] INT_MIN_VALUE_CHARS = "-2147483648".toCharArray();
-    private static final int[] INT_CHARS_SIZE_TABLE = { 9, 99, 999, 9999, 99999,
-            999999, 9999999, 99999999, 999999999, Integer.MAX_VALUE };
-
-    private static final char [] DIGIT_TENS = {
-            '0', '0', '0', '0', '0', '0', '0', '0', '0', '0',
-            '1', '1', '1', '1', '1', '1', '1', '1', '1', '1',
-            '2', '2', '2', '2', '2', '2', '2', '2', '2', '2',
-            '3', '3', '3', '3', '3', '3', '3', '3', '3', '3',
-            '4', '4', '4', '4', '4', '4', '4', '4', '4', '4',
-            '5', '5', '5', '5', '5', '5', '5', '5', '5', '5',
-            '6', '6', '6', '6', '6', '6', '6', '6', '6', '6',
-            '7', '7', '7', '7', '7', '7', '7', '7', '7', '7',
-            '8', '8', '8', '8', '8', '8', '8', '8', '8', '8',
-            '9', '9', '9', '9', '9', '9', '9', '9', '9', '9',
-    } ;
-
-    private static final char [] DIGIT_ONES = {
-            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
-            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
-            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
-            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
-            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
-            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
-            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
-            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
-            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
-            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
-    } ;
-
-    /**
-     * All possible chars for representing a number as a String
-     */
-    private static final char[] DIGITS = {
-            '0' , '1' , '2' , '3' , '4' , '5' ,
-            '6' , '7' , '8' , '9'
-    };
-
-    private static enum Scope {
-        IN_NONE,
-        IN_OBJECT,
-        IN_ARRAY
-    }
-
-    private final BufferPool bufferPool;
-    private final Writer writer;
-    private Context currentContext = new Context(Scope.IN_NONE);
-    private final Deque<Context> stack = new ArrayDeque<Context>();
-
-    // Using own buffering mechanism as JDK's BufferedWriter uses synchronized
-    // methods. Also, flushBuffer() is useful when you don't want to actually
-    // flush the underlying output source
-    private final char buf[];     // capacity >= INT_MIN_VALUE_CHARS.length
-    private int len = 0;
-
-    JsonGeneratorImpl(Writer writer, BufferPool bufferPool) {
-        this.writer = writer;
-        this.bufferPool = bufferPool;
-        this.buf = bufferPool.take();
-    }
-
-    JsonGeneratorImpl(OutputStream out, BufferPool bufferPool) {
-        this(out, UTF_8, bufferPool);
-    }
-
-    JsonGeneratorImpl(OutputStream out, Charset encoding, BufferPool bufferPool) {
-        this(new OutputStreamWriter(out, encoding), bufferPool);
-    }
-
-    @Override
-    public void flush() {
-        flushBuffer();
-        try {
-            writer.flush();
-        } catch (IOException ioe) {
-            throw new JsonException(JsonMessages.GENERATOR_FLUSH_IO_ERR(), ioe);
-        }
-    }
-
-    @Override
-    public JsonGenerator writeStartObject() {
-        if (currentContext.scope == Scope.IN_OBJECT) {
-            throw new JsonGenerationException(JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
-        }
-        if (currentContext.scope == Scope.IN_NONE && !currentContext.first) {
-            throw new JsonGenerationException(JsonMessages.GENERATOR_ILLEGAL_MULTIPLE_TEXT());
-        }
-        writeComma();
-        writeChar('{');
-        stack.push(currentContext);
-        currentContext = new Context(Scope.IN_OBJECT);
-        return this;
-    }
-
-    @Override
-    public JsonGenerator writeStartObject(String name) {
-        if (currentContext.scope != Scope.IN_OBJECT) {
-            throw new JsonGenerationException(
-                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
-        }
-        writeName(name);
-        writeChar('{');
-        stack.push(currentContext);
-        currentContext = new Context(Scope.IN_OBJECT);
-        return this;
-    }
-
-    private JsonGenerator writeName(String name) {
-        writeComma();
-        writeEscapedString(name);
-        writeChar(':');
-        return this;
-    }
-
-    @Override
-    public JsonGenerator write(String name, String fieldValue) {
-        if (currentContext.scope != Scope.IN_OBJECT) {
-            throw new JsonGenerationException(
-                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
-        }
-        writeName(name);
-        writeEscapedString(fieldValue);
-        return this;
-    }
-
-    @Override
-    public JsonGenerator write(String name, int value) {
-        if (currentContext.scope != Scope.IN_OBJECT) {
-            throw new JsonGenerationException(
-                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
-        }
-        writeName(name);
-        writeInt(value);
-        return this;
-    }
-
-    @Override
-    public JsonGenerator write(String name, long value) {
-        if (currentContext.scope != Scope.IN_OBJECT) {
-            throw new JsonGenerationException(
-                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
-        }
-        writeName(name);
-        writeString(String.valueOf(value));
-        return this;
-    }
-
-    @Override
-    public JsonGenerator write(String name, double value) {
-        if (currentContext.scope != Scope.IN_OBJECT) {
-            throw new JsonGenerationException(
-                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
-        }
-        if (Double.isInfinite(value) || Double.isNaN(value)) {
-            throw new NumberFormatException(JsonMessages.GENERATOR_DOUBLE_INFINITE_NAN());
-        }
-        writeName(name);
-        writeString(String.valueOf(value));
-        return this;
-    }
-
-    @Override
-    public JsonGenerator write(String name, BigInteger value) {
-        if (currentContext.scope != Scope.IN_OBJECT) {
-            throw new JsonGenerationException(
-                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
-        }
-        writeName(name);
-        writeString(String.valueOf(value));
-        return this;
-    }
-
-    @Override
-    public JsonGenerator write(String name, BigDecimal value) {
-        if (currentContext.scope != Scope.IN_OBJECT) {
-            throw new JsonGenerationException(
-                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
-        }
-        writeName(name);
-        writeString(String.valueOf(value));
-        return this;
-    }
-
-    @Override
-    public JsonGenerator write(String name, boolean value) {
-        if (currentContext.scope != Scope.IN_OBJECT) {
-            throw new JsonGenerationException(
-                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
-        }
-        writeName(name);
-        writeString(value? "true" : "false");
-        return this;
-    }
-
-    @Override
-    public JsonGenerator writeNull(String name) {
-        if (currentContext.scope != Scope.IN_OBJECT) {
-            throw new JsonGenerationException(
-                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
-        }
-        writeName(name);
-        writeString("null");
-        return this;
-    }
-
-    @Override
-    public JsonGenerator write(JsonValue value) {
-        if (currentContext.scope != Scope.IN_ARRAY) {
-            throw new JsonGenerationException(
-                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
-        }
-        switch (value.getValueType()) {
-            case ARRAY:
-                JsonArray array = (JsonArray)value;
-                writeStartArray();
-                for(JsonValue child: array) {
-                    write(child);
-                }
-                writeEnd();
-                break;
-            case OBJECT:
-                JsonObject object = (JsonObject)value;
-                writeStartObject();
-                for(Map.Entry<String, JsonValue> member: object.entrySet()) {
-                    write(member.getKey(), member.getValue());
-                }
-                writeEnd();
-                break;
-            case STRING:
-                JsonString str = (JsonString)value;
-                write(str.getString());
-                break;
-            case NUMBER:
-                JsonNumber number = (JsonNumber)value;
-                writeValue(number.toString());
-                break;
-            case TRUE:
-                write(true);
-                break;
-            case FALSE:
-                write(false);
-                break;
-            case NULL:
-                writeNull();
-                break;
-        }
-
-        return this;
-    }
-
-    @Override
-    public JsonGenerator writeStartArray() {
-        if (currentContext.scope == Scope.IN_OBJECT) {
-            throw new JsonGenerationException(JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
-        }
-        if (currentContext.scope == Scope.IN_NONE && !currentContext.first) {
-            throw new JsonGenerationException(JsonMessages.GENERATOR_ILLEGAL_MULTIPLE_TEXT());
-        }
-        writeComma();
-        writeChar('[');
-        stack.push(currentContext);
-        currentContext = new Context(Scope.IN_ARRAY);
-        return this;
-    }
-
-    @Override
-    public JsonGenerator writeStartArray(String name) {
-        if (currentContext.scope != Scope.IN_OBJECT) {
-            throw new JsonGenerationException(
-                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
-        }
-        writeName(name);
-        writeChar('[');
-        stack.push(currentContext);
-        currentContext = new Context(Scope.IN_ARRAY);
-        return this;
-    }
-
-    @Override
-    public JsonGenerator write(String name, JsonValue value) {
-        if (currentContext.scope != Scope.IN_OBJECT) {
-            throw new JsonGenerationException(
-                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
-        }
-        switch (value.getValueType()) {
-            case ARRAY:
-                JsonArray array = (JsonArray)value;
-                writeStartArray(name);
-                for(JsonValue child: array) {
-                    write(child);
-                }
-                writeEnd();
-                break;
-            case OBJECT:
-                JsonObject object = (JsonObject)value;
-                writeStartObject(name);
-                for(Map.Entry<String, JsonValue> member: object.entrySet()) {
-                    write(member.getKey(), member.getValue());
-                }
-                writeEnd();
-                break;
-            case STRING:
-                JsonString str = (JsonString)value;
-                write(name, str.getString());
-                break;
-            case NUMBER:
-                JsonNumber number = (JsonNumber)value;
-                writeValue(name, number.toString());
-                break;
-            case TRUE:
-                write(name, true);
-                break;
-            case FALSE:
-                write(name, false);
-                break;
-            case NULL:
-                writeNull(name);
-                break;
-        }
-        return this;
-    }
-
-    public JsonGenerator write(String value) {
-        if (currentContext.scope != Scope.IN_ARRAY) {
-            throw new JsonGenerationException(
-                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
-        }
-        writeComma();
-        writeEscapedString(value);
-        return this;
-    }
-
-
-    public JsonGenerator write(int value) {
-        if (currentContext.scope != Scope.IN_ARRAY) {
-            throw new JsonGenerationException(
-                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
-        }
-        writeComma();
-        writeInt(value);
-        return this;
-    }
-
-    @Override
-    public JsonGenerator write(long value) {
-        if (currentContext.scope != Scope.IN_ARRAY) {
-            throw new JsonGenerationException(
-                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
-        }
-        writeValue(String.valueOf(value));
-        return this;
-    }
-
-    @Override
-    public JsonGenerator write(double value) {
-        if (currentContext.scope != Scope.IN_ARRAY) {
-            throw new JsonGenerationException(
-                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
-        }
-        if (Double.isInfinite(value) || Double.isNaN(value)) {
-            throw new NumberFormatException(JsonMessages.GENERATOR_DOUBLE_INFINITE_NAN());
-        }
-        writeValue(String.valueOf(value));
-        return this;
-    }
-
-    @Override
-    public JsonGenerator write(BigInteger value) {
-        if (currentContext.scope != Scope.IN_ARRAY) {
-            throw new JsonGenerationException(
-                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
-        }
-        writeValue(value.toString());
-        return this;
-    }
-
-    @Override
-    public JsonGenerator write(BigDecimal value) {
-        if (currentContext.scope != Scope.IN_ARRAY) {
-            throw new JsonGenerationException(
-                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
-        }
-        writeValue(value.toString());
-        return this;
-    }
-
-    public JsonGenerator write(boolean value) {
-        if (currentContext.scope != Scope.IN_ARRAY) {
-            throw new JsonGenerationException(
-                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
-        }
-        writeComma();
-        writeString(value ? "true" : "false");
-        return this;
-    }
-
-    public JsonGenerator writeNull() {
-        if (currentContext.scope != Scope.IN_ARRAY) {
-            throw new JsonGenerationException(
-                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
-        }
-        writeComma();
-        writeString("null");
-        return this;
-    }
-
-    private void writeValue(String value) {
-        writeComma();
-        writeString(value);
-    }
-
-    private void writeValue(String name, String value) {
-        writeComma();
-        writeEscapedString(name);
-        writeChar(':');
-        writeString(value);
-    }
-
-    @Override
-    public JsonGenerator writeEnd() {
-        if (currentContext.scope == Scope.IN_NONE) {
-            throw new JsonGenerationException("writeEnd() cannot be called in no context");
-        }
-        writeChar(currentContext.scope == Scope.IN_ARRAY ? ']' : '}');
-        currentContext = stack.pop();
-        return this;
-    }
-
-    protected void writeComma() {
-        if (!currentContext.first) {
-            writeChar(',');
-        }
-        currentContext.first = false;
-    }
-
-    private static class Context {
-        boolean first = true;
-        final Scope scope;
-
-        Context(Scope scope) {
-            this.scope = scope;
-        }
-
-    }
-
-    public void close() {
-        if (currentContext.scope != Scope.IN_NONE || currentContext.first) {
-            throw new JsonGenerationException(JsonMessages.GENERATOR_INCOMPLETE_JSON());
-        }
-        flushBuffer();
-        try {
-            writer.close();
-        } catch (IOException ioe) {
-            throw new JsonException(JsonMessages.GENERATOR_CLOSE_IO_ERR(), ioe);
-        }
-        bufferPool.recycle(buf);
-    }
-
-    // begin, end-1 indexes represent characters that need not
-    // be escaped
-    //
-    // XXXssssssssssssXXXXXXXXXXXXXXXXXXXXXXrrrrrrrrrrrrrrXXXXXX
-    //    ^           ^                     ^             ^
-    //    |           |                     |             |
-    //   begin       end                   begin         end
-    void writeEscapedString(String string) {
-        writeChar('"');
-        int len = string.length();
-        for(int i = 0; i < len; i++) {
-            int begin = i, end = i;
-            char c = string.charAt(i);
-            // find all the characters that need not be escaped
-            // unescaped = %x20-21 | %x23-5B | %x5D-10FFFF
-            while(c >= 0x20 && c <= 0x10ffff && c != 0x22 && c != 0x5c) {
-                i++; end = i;
-                if (i < len) {
-                    c = string.charAt(i);
-                } else {
-                    break;
-                }
-            }
-            // Write characters without escaping
-            if (begin < end) {
-                writeString(string, begin, end);
-                if (i == len) {
-                    break;
-                }
-            }
-
-            switch (c) {
-                case '"':
-                case '\\':
-                    writeChar('\\'); writeChar(c);
-                    break;
-                case '\b':
-                    writeChar('\\'); writeChar('b');
-                    break;
-                case '\f':
-                    writeChar('\\'); writeChar('f');
-                    break;
-                case '\n':
-                    writeChar('\\'); writeChar('n');
-                    break;
-                case '\r':
-                    writeChar('\\'); writeChar('r');
-                    break;
-                case '\t':
-                    writeChar('\\'); writeChar('t');
-                    break;
-                default:
-                    String hex = "000" + Integer.toHexString(c);
-                    writeString("\\u" + hex.substring(hex.length() - 4));
-            }
-        }
-        writeChar('"');
-    }
-
-    void writeString(String str, int begin, int end) {
-        while (begin < end) {       // source begin and end indexes
-            int no = Math.min(buf.length - len, end - begin);
-            str.getChars(begin, begin + no, buf, len);
-            begin += no;            // Increment source index
-            len += no;              // Increment dest index
-            if (len >= buf.length) {
-                flushBuffer();
-            }
-        }
-    }
-
-    void writeString(String str) {
-        writeString(str, 0, str.length());
-    }
-
-    void writeChar(char c) {
-        if (len >= buf.length) {
-            flushBuffer();
-        }
-        buf[len++] = c;
-    }
-
-    // Not using Integer.toString() since it creates intermediary String
-    // Also, we want the chars to be copied to our buffer directly
-    void writeInt(int num) {
-        int size;
-        if (num == Integer.MIN_VALUE) {
-            size = INT_MIN_VALUE_CHARS.length;
-        } else {
-            size = (num < 0) ? stringSize(-num) + 1 : stringSize(num);
-        }
-        if (len+size >= buf.length) {
-            flushBuffer();
-        }
-        if (num == Integer.MIN_VALUE) {
-            System.arraycopy(INT_MIN_VALUE_CHARS, 0, buf, len, size);
-        } else {
-            fillIntChars(num, buf, len+size);
-        }
-        len += size;
-    }
-
-    // flushBuffer writes the buffered contents to writer. But incase of
-    // byte stream, an OuputStreamWriter is created and that buffers too.
-    // We may need to call OutputStreamWriter#flushBuffer() using
-    // reflection if that is really required (commented out below)
-    void flushBuffer() {
-        try {
-            if (len > 0) {
-                writer.write(buf, 0, len);
-                len = 0;
-            }
-        } catch (IOException ioe) {
-            throw new JsonException(JsonMessages.GENERATOR_WRITE_IO_ERR(), ioe);
-        }
-    }
-
-//    private static final Method flushBufferMethod;
-//    static {
-//        Method m = null;
-//        try {
-//            m = OutputStreamWriter.class.getDeclaredMethod("flushBuffer");
-//            m.setAccessible(true);
-//        } catch (Exception e) {
-//            // no-op
-//        }
-//        flushBufferMethod = m;
-//    }
-//    void flushBufferOSW() {
-//        flushBuffer();
-//        if (writer instanceof OutputStreamWriter) {
-//            try {
-//                flushBufferMethod.invoke(writer);
-//            } catch (Exception e) {
-//                // no-op
-//            }
-//        }
-//    }
-
-    // Requires positive x
-    private static int stringSize(int x) {
-        for (int i=0; ; i++)
-            if (x <= INT_CHARS_SIZE_TABLE[i])
-                return i+1;
-    }
-
-    /**
-     * Places characters representing the integer i into the
-     * character array buf. The characters are placed into
-     * the buffer backwards starting with the least significant
-     * digit at the specified index (exclusive), and working
-     * backwards from there.
-     *
-     * Will fail if i == Integer.MIN_VALUE
-     */
-    private static void fillIntChars(int i, char[] buf, int index) {
-        int q, r;
-        int charPos = index;
-        char sign = 0;
-
-        if (i < 0) {
-            sign = '-';
-            i = -i;
-        }
-
-        // Generate two digits per iteration
-        while (i >= 65536) {
-            q = i / 100;
-            // really: r = i - (q * 100);
-            r = i - ((q << 6) + (q << 5) + (q << 2));
-            i = q;
-            buf [--charPos] = DIGIT_ONES[r];
-            buf [--charPos] = DIGIT_TENS[r];
-        }
-
-        // Fall thru to fast mode for smaller numbers
-        // assert(i <= 65536, i);
-        for (;;) {
-            q = (i * 52429) >>> (16+3);
-            r = i - ((q << 3) + (q << 1));  // r = i-(q*10) ...
-            buf [--charPos] = DIGITS[r];
-            i = q;
-            if (i == 0) break;
-        }
-        if (sign != 0) {
-            buf [--charPos] = sign;
-        }
-    }
-
-}
\ No newline at end of file
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2012-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package org.glassfish.json;
+
+import org.glassfish.json.api.BufferPool;
+
+import javax.json.*;
+import javax.json.stream.JsonGenerationException;
+import javax.json.stream.JsonGenerator;
+import java.io.*;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayDeque;
+import java.util.Deque;
+import java.util.Map;
+
+/**
+ * @author Jitendra Kotamraju
+ */
+class JsonGeneratorImpl implements JsonGenerator {
+
+    private static final char[] INT_MIN_VALUE_CHARS = "-2147483648".toCharArray();
+    private static final int[] INT_CHARS_SIZE_TABLE = { 9, 99, 999, 9999, 99999,
+            999999, 9999999, 99999999, 999999999, Integer.MAX_VALUE };
+
+    private static final char [] DIGIT_TENS = {
+            '0', '0', '0', '0', '0', '0', '0', '0', '0', '0',
+            '1', '1', '1', '1', '1', '1', '1', '1', '1', '1',
+            '2', '2', '2', '2', '2', '2', '2', '2', '2', '2',
+            '3', '3', '3', '3', '3', '3', '3', '3', '3', '3',
+            '4', '4', '4', '4', '4', '4', '4', '4', '4', '4',
+            '5', '5', '5', '5', '5', '5', '5', '5', '5', '5',
+            '6', '6', '6', '6', '6', '6', '6', '6', '6', '6',
+            '7', '7', '7', '7', '7', '7', '7', '7', '7', '7',
+            '8', '8', '8', '8', '8', '8', '8', '8', '8', '8',
+            '9', '9', '9', '9', '9', '9', '9', '9', '9', '9',
+    } ;
+
+    private static final char [] DIGIT_ONES = {
+            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+    } ;
+
+    /**
+     * All possible chars for representing a number as a String
+     */
+    private static final char[] DIGITS = {
+            '0' , '1' , '2' , '3' , '4' , '5' ,
+            '6' , '7' , '8' , '9'
+    };
+
+    private static enum Scope {
+        IN_NONE,
+        IN_OBJECT,
+        IN_FIELD,
+        IN_ARRAY
+    }
+
+    private final BufferPool bufferPool;
+    private final Writer writer;
+    private Context currentContext = new Context(Scope.IN_NONE);
+    private final Deque<Context> stack = new ArrayDeque<>();
+
+    // Using own buffering mechanism as JDK's BufferedWriter uses synchronized
+    // methods. Also, flushBuffer() is useful when you don't want to actually
+    // flush the underlying output source
+    private final char buf[];     // capacity >= INT_MIN_VALUE_CHARS.length
+    private int len = 0;
+
+    JsonGeneratorImpl(Writer writer, BufferPool bufferPool) {
+        this.writer = writer;
+        this.bufferPool = bufferPool;
+        this.buf = bufferPool.take();
+    }
+
+    JsonGeneratorImpl(OutputStream out, BufferPool bufferPool) {
+        this(out, StandardCharsets.UTF_8, bufferPool);
+    }
+
+    JsonGeneratorImpl(OutputStream out, Charset encoding, BufferPool bufferPool) {
+        this(new OutputStreamWriter(out, encoding), bufferPool);
+    }
+
+    @Override
+    public void flush() {
+        flushBuffer();
+        try {
+            writer.flush();
+        } catch (IOException ioe) {
+            throw new JsonException(JsonMessages.GENERATOR_FLUSH_IO_ERR(), ioe);
+        }
+    }
+
+    @Override
+    public JsonGenerator writeStartObject() {
+        if (currentContext.scope == Scope.IN_OBJECT) {
+            throw new JsonGenerationException(JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
+        }
+        if (currentContext.scope == Scope.IN_NONE && !currentContext.first) {
+            throw new JsonGenerationException(JsonMessages.GENERATOR_ILLEGAL_MULTIPLE_TEXT());
+        }
+        writeComma();
+        writeChar('{');
+        stack.push(currentContext);
+        currentContext = new Context(Scope.IN_OBJECT);
+        return this;
+    }
+
+    @Override
+    public JsonGenerator writeStartObject(String name) {
+        if (currentContext.scope != Scope.IN_OBJECT) {
+            throw new JsonGenerationException(
+                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
+        }
+        writeName(name);
+        writeChar('{');
+        stack.push(currentContext);
+        currentContext = new Context(Scope.IN_OBJECT);
+        return this;
+    }
+
+    private JsonGenerator writeName(String name) {
+        writeComma();
+        writeEscapedString(name);
+        writeColon();
+        return this;
+    }
+
+    @Override
+    public JsonGenerator write(String name, String fieldValue) {
+        if (currentContext.scope != Scope.IN_OBJECT) {
+            throw new JsonGenerationException(
+                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
+        }
+        writeName(name);
+        writeEscapedString(fieldValue);
+        return this;
+    }
+
+    @Override
+    public JsonGenerator write(String name, int value) {
+        if (currentContext.scope != Scope.IN_OBJECT) {
+            throw new JsonGenerationException(
+                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
+        }
+        writeName(name);
+        writeInt(value);
+        return this;
+    }
+
+    @Override
+    public JsonGenerator write(String name, long value) {
+        if (currentContext.scope != Scope.IN_OBJECT) {
+            throw new JsonGenerationException(
+                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
+        }
+        writeName(name);
+        writeString(String.valueOf(value));
+        return this;
+    }
+
+    @Override
+    public JsonGenerator write(String name, double value) {
+        if (currentContext.scope != Scope.IN_OBJECT) {
+            throw new JsonGenerationException(
+                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
+        }
+        if (Double.isInfinite(value) || Double.isNaN(value)) {
+            throw new NumberFormatException(JsonMessages.GENERATOR_DOUBLE_INFINITE_NAN());
+        }
+        writeName(name);
+        writeString(String.valueOf(value));
+        return this;
+    }
+
+    @Override
+    public JsonGenerator write(String name, BigInteger value) {
+        if (currentContext.scope != Scope.IN_OBJECT) {
+            throw new JsonGenerationException(
+                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
+        }
+        writeName(name);
+        writeString(String.valueOf(value));
+        return this;
+    }
+
+    @Override
+    public JsonGenerator write(String name, BigDecimal value) {
+        if (currentContext.scope != Scope.IN_OBJECT) {
+            throw new JsonGenerationException(
+                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
+        }
+        writeName(name);
+        writeString(String.valueOf(value));
+        return this;
+    }
+
+    @Override
+    public JsonGenerator write(String name, boolean value) {
+        if (currentContext.scope != Scope.IN_OBJECT) {
+            throw new JsonGenerationException(
+                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
+        }
+        writeName(name);
+        writeString(value? "true" : "false");
+        return this;
+    }
+
+    @Override
+    public JsonGenerator writeNull(String name) {
+        if (currentContext.scope != Scope.IN_OBJECT) {
+            throw new JsonGenerationException(
+                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
+        }
+        writeName(name);
+        writeString("null");
+        return this;
+    }
+
+    @Override
+    public JsonGenerator write(JsonValue value) {
+        checkContextForValue();
+
+        switch (value.getValueType()) {
+            case ARRAY:
+                JsonArray array = (JsonArray)value;
+                writeStartArray();
+                for(JsonValue child: array) {
+                    write(child);
+                }
+                writeEnd();
+                break;
+            case OBJECT:
+                JsonObject object = (JsonObject)value;
+                writeStartObject();
+                for(Map.Entry<String, JsonValue> member: object.entrySet()) {
+                    write(member.getKey(), member.getValue());
+                }
+                writeEnd();
+                break;
+            case STRING:
+                JsonString str = (JsonString)value;
+                write(str.getString());
+                break;
+            case NUMBER:
+                JsonNumber number = (JsonNumber)value;
+                writeValue(number.toString());
+                popFieldContext();
+                break;
+            case TRUE:
+                write(true);
+                break;
+            case FALSE:
+                write(false);
+                break;
+            case NULL:
+                writeNull();
+                break;
+        }
+
+        return this;
+    }
+
+    @Override
+    public JsonGenerator writeStartArray() {
+        if (currentContext.scope == Scope.IN_OBJECT) {
+            throw new JsonGenerationException(JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
+        }
+        if (currentContext.scope == Scope.IN_NONE && !currentContext.first) {
+            throw new JsonGenerationException(JsonMessages.GENERATOR_ILLEGAL_MULTIPLE_TEXT());
+        }
+        writeComma();
+        writeChar('[');
+        stack.push(currentContext);
+        currentContext = new Context(Scope.IN_ARRAY);
+        return this;
+    }
+
+    @Override
+    public JsonGenerator writeStartArray(String name) {
+        if (currentContext.scope != Scope.IN_OBJECT) {
+            throw new JsonGenerationException(
+                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
+        }
+        writeName(name);
+        writeChar('[');
+        stack.push(currentContext);
+        currentContext = new Context(Scope.IN_ARRAY);
+        return this;
+    }
+
+    @Override
+    public JsonGenerator write(String name, JsonValue value) {
+        if (currentContext.scope != Scope.IN_OBJECT) {
+            throw new JsonGenerationException(
+                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
+        }
+        switch (value.getValueType()) {
+            case ARRAY:
+                JsonArray array = (JsonArray)value;
+                writeStartArray(name);
+                for(JsonValue child: array) {
+                    write(child);
+                }
+                writeEnd();
+                break;
+            case OBJECT:
+                JsonObject object = (JsonObject)value;
+                writeStartObject(name);
+                for(Map.Entry<String, JsonValue> member: object.entrySet()) {
+                    write(member.getKey(), member.getValue());
+                }
+                writeEnd();
+                break;
+            case STRING:
+                JsonString str = (JsonString)value;
+                write(name, str.getString());
+                break;
+            case NUMBER:
+                JsonNumber number = (JsonNumber)value;
+                writeValue(name, number.toString());
+                break;
+            case TRUE:
+                write(name, true);
+                break;
+            case FALSE:
+                write(name, false);
+                break;
+            case NULL:
+                writeNull(name);
+                break;
+        }
+        return this;
+    }
+
+    @Override
+    public JsonGenerator write(String value) {
+        checkContextForValue();
+        writeComma();
+        writeEscapedString(value);
+        popFieldContext();
+        return this;
+    }
+
+
+    @Override
+    public JsonGenerator write(int value) {
+        checkContextForValue();
+        writeComma();
+        writeInt(value);
+        popFieldContext();
+        return this;
+    }
+
+    @Override
+    public JsonGenerator write(long value) {
+        checkContextForValue();
+        writeValue(String.valueOf(value));
+        popFieldContext();
+        return this;
+    }
+
+    @Override
+    public JsonGenerator write(double value) {
+        checkContextForValue();
+        if (Double.isInfinite(value) || Double.isNaN(value)) {
+            throw new NumberFormatException(JsonMessages.GENERATOR_DOUBLE_INFINITE_NAN());
+        }
+        writeValue(String.valueOf(value));
+        popFieldContext();
+        return this;
+    }
+
+    @Override
+    public JsonGenerator write(BigInteger value) {
+        checkContextForValue();
+        writeValue(value.toString());
+        popFieldContext();
+        return this;
+    }
+
+    private void checkContextForValue() {
+        if ((!currentContext.first && currentContext.scope != Scope.IN_ARRAY && currentContext.scope != Scope.IN_FIELD)
+                || (currentContext.first && currentContext.scope == Scope.IN_OBJECT)) {
+            throw new JsonGenerationException(
+                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
+        }
+    }
+
+    @Override
+    public JsonGenerator write(BigDecimal value) {
+        checkContextForValue();
+        writeValue(value.toString());
+        popFieldContext();
+
+        return this;
+    }
+
+    private void popFieldContext() {
+        if (currentContext.scope == Scope.IN_FIELD) {
+            currentContext = stack.pop();
+        }
+    }
+
+    @Override
+    public JsonGenerator write(boolean value) {
+        checkContextForValue();
+        writeComma();
+        writeString(value ? "true" : "false");
+        popFieldContext();
+        return this;
+    }
+
+    @Override
+    public JsonGenerator writeNull() {
+        checkContextForValue();
+        writeComma();
+        writeString("null");
+        popFieldContext();
+        return this;
+    }
+
+    private void writeValue(String value) {
+        writeComma();
+        writeString(value);
+    }
+
+    private void writeValue(String name, String value) {
+        writeComma();
+        writeEscapedString(name);
+        writeColon();
+        writeString(value);
+    }
+
+    @Override
+    public JsonGenerator writeKey(String name) {
+        if (currentContext.scope != Scope.IN_OBJECT) {
+            throw new JsonGenerationException(
+                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
+        }
+        writeName(name);
+        stack.push(currentContext);
+        currentContext = new Context(Scope.IN_FIELD);
+        currentContext.first = false;
+        return this;
+    }
+
+    @Override
+    public JsonGenerator writeEnd() {
+        if (currentContext.scope == Scope.IN_NONE) {
+            throw new JsonGenerationException("writeEnd() cannot be called in no context");
+        }
+        writeChar(currentContext.scope == Scope.IN_ARRAY ? ']' : '}');
+        currentContext = stack.pop();
+        popFieldContext();
+        return this;
+    }
+
+    protected void writeComma() {
+        if (!currentContext.first && currentContext.scope != Scope.IN_FIELD) {
+            writeChar(',');
+        }
+        currentContext.first = false;
+    }
+
+    protected void writeColon() {
+        writeChar(':');
+    }
+
+    private static class Context {
+        boolean first = true;
+        final Scope scope;
+
+        Context(Scope scope) {
+            this.scope = scope;
+        }
+
+    }
+
+    @Override
+    public void close() {
+        if (currentContext.scope != Scope.IN_NONE || currentContext.first) {
+            throw new JsonGenerationException(JsonMessages.GENERATOR_INCOMPLETE_JSON());
+        }
+        flushBuffer();
+        try {
+            writer.close();
+        } catch (IOException ioe) {
+            throw new JsonException(JsonMessages.GENERATOR_CLOSE_IO_ERR(), ioe);
+        }
+        bufferPool.recycle(buf);
+    }
+
+    // begin, end-1 indexes represent characters that need not
+    // be escaped
+    //
+    // XXXssssssssssssXXXXXXXXXXXXXXXXXXXXXXrrrrrrrrrrrrrrXXXXXX
+    //    ^           ^                     ^             ^
+    //    |           |                     |             |
+    //   begin       end                   begin         end
+    void writeEscapedString(String string) {
+        writeChar('"');
+        int len = string.length();
+        for(int i = 0; i < len; i++) {
+            int begin = i, end = i;
+            char c = string.charAt(i);
+            // find all the characters that need not be escaped
+            // unescaped = %x20-21 | %x23-5B | %x5D-10FFFF
+            while(c >= 0x20 && c <= 0x10ffff && c != 0x22 && c != 0x5c) {
+                i++; end = i;
+                if (i < len) {
+                    c = string.charAt(i);
+                } else {
+                    break;
+                }
+            }
+            // Write characters without escaping
+            if (begin < end) {
+                writeString(string, begin, end);
+                if (i == len) {
+                    break;
+                }
+            }
+
+            switch (c) {
+                case '"':
+                case '\\':
+                    writeChar('\\'); writeChar(c);
+                    break;
+                case '\b':
+                    writeChar('\\'); writeChar('b');
+                    break;
+                case '\f':
+                    writeChar('\\'); writeChar('f');
+                    break;
+                case '\n':
+                    writeChar('\\'); writeChar('n');
+                    break;
+                case '\r':
+                    writeChar('\\'); writeChar('r');
+                    break;
+                case '\t':
+                    writeChar('\\'); writeChar('t');
+                    break;
+                default:
+                    String hex = "000" + Integer.toHexString(c);
+                    writeString("\\u" + hex.substring(hex.length() - 4));
+            }
+        }
+        writeChar('"');
+    }
+
+    void writeString(String str, int begin, int end) {
+        while (begin < end) {       // source begin and end indexes
+            int no = Math.min(buf.length - len, end - begin);
+            str.getChars(begin, begin + no, buf, len);
+            begin += no;            // Increment source index
+            len += no;              // Increment dest index
+            if (len >= buf.length) {
+                flushBuffer();
+            }
+        }
+    }
+
+    void writeString(String str) {
+        writeString(str, 0, str.length());
+    }
+
+    void writeChar(char c) {
+        if (len >= buf.length) {
+            flushBuffer();
+        }
+        buf[len++] = c;
+    }
+
+    // Not using Integer.toString() since it creates intermediary String
+    // Also, we want the chars to be copied to our buffer directly
+    void writeInt(int num) {
+        int size;
+        if (num == Integer.MIN_VALUE) {
+            size = INT_MIN_VALUE_CHARS.length;
+        } else {
+            size = (num < 0) ? stringSize(-num) + 1 : stringSize(num);
+        }
+        if (len+size >= buf.length) {
+            flushBuffer();
+        }
+        if (num == Integer.MIN_VALUE) {
+            System.arraycopy(INT_MIN_VALUE_CHARS, 0, buf, len, size);
+        } else {
+            fillIntChars(num, buf, len+size);
+        }
+        len += size;
+    }
+
+    // flushBuffer writes the buffered contents to writer. But incase of
+    // byte stream, an OuputStreamWriter is created and that buffers too.
+    // We may need to call OutputStreamWriter#flushBuffer() using
+    // reflection if that is really required (commented out below)
+    void flushBuffer() {
+        try {
+            if (len > 0) {
+                writer.write(buf, 0, len);
+                len = 0;
+            }
+        } catch (IOException ioe) {
+            throw new JsonException(JsonMessages.GENERATOR_WRITE_IO_ERR(), ioe);
+        }
+    }
+
+//    private static final Method flushBufferMethod;
+//    static {
+//        Method m = null;
+//        try {
+//            m = OutputStreamWriter.class.getDeclaredMethod("flushBuffer");
+//            m.setAccessible(true);
+//        } catch (Exception e) {
+//            // no-op
+//        }
+//        flushBufferMethod = m;
+//    }
+//    void flushBufferOSW() {
+//        flushBuffer();
+//        if (writer instanceof OutputStreamWriter) {
+//            try {
+//                flushBufferMethod.invoke(writer);
+//            } catch (Exception e) {
+//                // no-op
+//            }
+//        }
+//    }
+
+    // Requires positive x
+    private static int stringSize(int x) {
+        for (int i=0; ; i++)
+            if (x <= INT_CHARS_SIZE_TABLE[i])
+                return i+1;
+    }
+
+    /**
+     * Places characters representing the integer i into the
+     * character array buf. The characters are placed into
+     * the buffer backwards starting with the least significant
+     * digit at the specified index (exclusive), and working
+     * backwards from there.
+     *
+     * Will fail if i == Integer.MIN_VALUE
+     */
+    private static void fillIntChars(int i, char[] buf, int index) {
+        int q, r;
+        int charPos = index;
+        char sign = 0;
+
+        if (i < 0) {
+            sign = '-';
+            i = -i;
+        }
+
+        // Generate two digits per iteration
+        while (i >= 65536) {
+            q = i / 100;
+            // really: r = i - (q * 100);
+            r = i - ((q << 6) + (q << 5) + (q << 2));
+            i = q;
+            buf [--charPos] = DIGIT_ONES[r];
+            buf [--charPos] = DIGIT_TENS[r];
+        }
+
+        // Fall thru to fast mode for smaller numbers
+        // assert(i <= 65536, i);
+        for (;;) {
+            q = (i * 52429) >>> (16+3);
+            r = i - ((q << 3) + (q << 1));  // r = i-(q*10) ...
+            buf [--charPos] = DIGITS[r];
+            i = q;
+            if (i == 0) break;
+        }
+        if (sign != 0) {
+            buf [--charPos] = sign;
+        }
+    }
+
+}
diff --git a/src/org/glassfish/json/JsonLocationImpl.java b/src/org/glassfish/json/JsonLocationImpl.java
index f5b806a..a9a4e90 100644
--- a/src/org/glassfish/json/JsonLocationImpl.java
+++ b/src/org/glassfish/json/JsonLocationImpl.java
@@ -1,80 +1,81 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import javax.json.stream.JsonLocation;
-
-/**
- * @author Jitendra Kotamraju
- */
-class JsonLocationImpl implements JsonLocation {
-    static final JsonLocation UNKNOWN = new JsonLocationImpl(-1, -1, -1);
-
-    private final long columnNo;
-    private final long lineNo;
-    private final long offset;
-
-    JsonLocationImpl(long lineNo, long columnNo, long streamOffset) {
-        this.lineNo = lineNo;
-        this.columnNo = columnNo;
-        this.offset = streamOffset;
-    }
-
-    @Override
-    public long getLineNumber() {
-        return lineNo;
-    }
-
-    @Override
-    public long getColumnNumber() {
-        return columnNo;
-    }
-
-    @Override
-    public long getStreamOffset() {
-        return offset;
-    }
-
-    public String toString() {
-        return "(line no="+lineNo+", column no="+columnNo+", offset="+ offset +")";
-    }
-
-}
\ No newline at end of file
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2013-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package org.glassfish.json;
+
+import javax.json.stream.JsonLocation;
+
+/**
+ * @author Jitendra Kotamraju
+ */
+class JsonLocationImpl implements JsonLocation {
+    static final JsonLocation UNKNOWN = new JsonLocationImpl(-1, -1, -1);
+
+    private final long columnNo;
+    private final long lineNo;
+    private final long offset;
+
+    JsonLocationImpl(long lineNo, long columnNo, long streamOffset) {
+        this.lineNo = lineNo;
+        this.columnNo = columnNo;
+        this.offset = streamOffset;
+    }
+
+    @Override
+    public long getLineNumber() {
+        return lineNo;
+    }
+
+    @Override
+    public long getColumnNumber() {
+        return columnNo;
+    }
+
+    @Override
+    public long getStreamOffset() {
+        return offset;
+    }
+
+    @Override
+    public String toString() {
+        return "(line no="+lineNo+", column no="+columnNo+", offset="+ offset +")";
+    }
+
+}
diff --git a/src/org/glassfish/json/JsonMergePatchImpl.java b/src/org/glassfish/json/JsonMergePatchImpl.java
new file mode 100644
index 0000000..9bfc23a
--- /dev/null
+++ b/src/org/glassfish/json/JsonMergePatchImpl.java
@@ -0,0 +1,142 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2015-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package org.glassfish.json;
+
+import javax.json.Json;
+import javax.json.JsonMergePatch;
+import javax.json.JsonObject;
+import javax.json.JsonObjectBuilder;
+import javax.json.JsonValue;
+
+/**
+ * This class is an implementation of a JSON Merge Patch as specified in
+ * <a href="http://tools.ietf.org/html/rfc7396">RFC 7396</a>.
+ *
+ * @since 1.1
+ */
+
+public final class JsonMergePatchImpl implements JsonMergePatch {
+
+    private JsonValue patch;
+
+    public JsonMergePatchImpl(JsonValue patch) {
+        this.patch = patch;
+    }
+
+    @Override
+    public JsonValue apply(JsonValue target) {
+        return mergePatch(target, patch);
+    }
+
+    @Override
+    public JsonValue toJsonValue() {
+        return patch;
+    }
+    /**
+     * Applies the specified patch to the specified target.
+     * The target is not modified by the patch.
+     *
+     * @param target the {@code JsonValue} to apply the patch operations
+     * @param patch the patch
+     * @return the {@code JsonValue} as the result of applying the patch
+     *    operations on the target.
+     */
+    private static JsonValue mergePatch(JsonValue target, JsonValue patch) {
+
+        if (patch.getValueType() != JsonValue.ValueType.OBJECT) {
+            return patch;
+        }
+        if (target.getValueType() != JsonValue.ValueType.OBJECT) {
+            target = JsonValue.EMPTY_JSON_OBJECT;
+        }
+        JsonObject targetJsonObject = target.asJsonObject();
+        JsonObjectBuilder builder =
+            Json.createObjectBuilder(targetJsonObject);
+        patch.asJsonObject().forEach((key, value) -> {
+            if (value == JsonValue.NULL) {
+                if (targetJsonObject.containsKey(key)) {
+                    builder.remove(key);
+                }
+            } else if (targetJsonObject.containsKey(key)) {
+                builder.add(key, mergePatch(targetJsonObject.get(key), value));
+            } else {
+                builder.add(key, mergePatch(JsonValue.EMPTY_JSON_OBJECT, value));
+            }
+        });
+        return builder.build();
+    }
+
+    /**
+     * Generate a JSON Merge Patch from the source and target {@code JsonValue}.
+     * @param source the source
+     * @param target the target
+     * @return a JSON Patch which when applied to the source, yields the target
+     */
+    static JsonValue diff(JsonValue source, JsonValue target) {
+        if (source.getValueType() != JsonValue.ValueType.OBJECT ||
+                target.getValueType() != JsonValue.ValueType.OBJECT) {
+            return target;
+        }
+        JsonObject s = (JsonObject) source;
+        JsonObject t = (JsonObject) target;
+        JsonObjectBuilder builder = Json.createObjectBuilder();
+        // First find members to be replaced or removed
+        s.forEach((key, value) -> {
+            if (t.containsKey(key)) {
+                // key present in both.
+                if (! value.equals(t.get(key))) {
+                    // If the values are equal, nop, else get diff for the values
+                    builder.add(key, diff(value, t.get(key)));
+                }
+            } else {
+                builder.addNull(key);
+            }
+        });
+        // Then find members to be added
+        t.forEach((key, value) -> {
+            if (! s.containsKey(key))
+                builder.add(key, value);
+        });
+        return builder.build();
+    }
+
+}
+
diff --git a/src/org/glassfish/json/JsonMessages.java b/src/org/glassfish/json/JsonMessages.java
index 173da78..3f92eec 100644
--- a/src/org/glassfish/json/JsonMessages.java
+++ b/src/org/glassfish/json/JsonMessages.java
@@ -1,214 +1,310 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-
-import javax.json.stream.JsonLocation;
-import javax.json.stream.JsonParser;
-import java.text.MessageFormat;
-import java.util.ResourceBundle;
-
-/**
- * Defines string formatting method for each constant in the resource file
- *
- * @author Jitendra Kotamraju
- */
-final class JsonMessages {
-    private static final ResourceBundle BUNDLE =
-            ResourceBundle.getBundle("org.glassfish.json.messages");
-
-    // tokenizer messages
-    static String TOKENIZER_UNEXPECTED_CHAR(int unexpected, JsonLocation location) {
-        return localize("tokenizer.unexpected.char", unexpected, location);
-    }
-
-    static String TOKENIZER_EXPECTED_CHAR(int unexpected, JsonLocation location, char expected) {
-        return localize("tokenizer.expected.char", unexpected, location, expected);
-    }
-
-    static String TOKENIZER_IO_ERR() {
-        return localize("tokenizer.io.err");
-    }
-
-
-    // parser messages
-    static String PARSER_GETSTRING_ERR(JsonParser.Event event) {
-        return localize("parser.getString.err", event);
-    }
-
-    static String PARSER_ISINTEGRALNUMBER_ERR(JsonParser.Event event) {
-        return localize("parser.isIntegralNumber.err", event);
-    }
-
-    static String PARSER_GETINT_ERR(JsonParser.Event event) {
-        return localize("parser.getInt.err", event);
-    }
-
-    static String PARSER_GETLONG_ERR(JsonParser.Event event) {
-        return localize("parser.getLong.err", event);
-    }
-
-    static String PARSER_GETBIGDECIMAL_ERR(JsonParser.Event event) {
-        return localize("parser.getBigDecimal.err", event);
-    }
-
-    static String PARSER_EXPECTED_EOF(JsonTokenizer.JsonToken token) {
-        return localize("parser.expected.eof", token);
-    }
-
-    static String PARSER_TOKENIZER_CLOSE_IO() {
-        return localize("parser.tokenizer.close.io");
-    }
-
-    static String PARSER_INVALID_TOKEN(JsonTokenizer.JsonToken token, JsonLocation location, String expectedTokens) {
-        return localize("parser.invalid.token", token, location, expectedTokens);
-    }
-
-
-    // generator messages
-    static String GENERATOR_FLUSH_IO_ERR() {
-        return localize("generator.flush.io.err");
-    }
-
-    static String GENERATOR_CLOSE_IO_ERR() {
-        return localize("generator.close.io.err");
-    }
-
-    static String GENERATOR_WRITE_IO_ERR() {
-        return localize("generator.write.io.err");
-    }
-
-    static String GENERATOR_ILLEGAL_METHOD(Object scope) {
-        return localize("generator.illegal.method", scope);
-    }
-
-    static String GENERATOR_DOUBLE_INFINITE_NAN() {
-        return localize("generator.double.infinite.nan");
-    }
-
-    static String GENERATOR_INCOMPLETE_JSON() {
-        return localize("generator.incomplete.json");
-    }
-
-    static String GENERATOR_ILLEGAL_MULTIPLE_TEXT() {
-        return localize("generator.illegal.multiple.text");
-    }
-
-
-
-    // writer messages
-    static String WRITER_WRITE_ALREADY_CALLED() {
-        return localize("writer.write.already.called");
-    }
-
-
-    // reader messages
-    static String READER_READ_ALREADY_CALLED() {
-        return localize("reader.read.already.called");
-    }
-
-    static String READER_EXPECTED_ARRAY_GOT_OBJECT() {
-        return localize("reader.expected.array.got.object");
-    }
-
-    static String READER_EXPECTED_OBJECT_GOT_ARRAY() {
-        return localize("reader.expected.object.got.array");
-    }
-
-
-    // obj builder messages
-    static String OBJBUILDER_NAME_NULL() {
-        return localize("objbuilder.name.null");
-    }
-
-    static String OBJBUILDER_VALUE_NULL() {
-        return localize("objbuilder.value.null");
-    }
-
-    static String OBJBUILDER_OBJECT_BUILDER_NULL() {
-        return localize("objbuilder.object.builder.null");
-    }
-
-    static String OBJBUILDER_ARRAY_BUILDER_NULL() {
-        return localize("objbuilder.array.builder.null");
-    }
-
-
-    // array builder messages
-    static String ARRBUILDER_VALUE_NULL() {
-        return localize("arrbuilder.value.null");
-    }
-
-    static String ARRBUILDER_OBJECT_BUILDER_NULL() {
-        return localize("arrbuilder.object.builder.null");
-    }
-
-    static String ARRBUILDER_ARRAY_BUILDER_NULL() {
-        return localize("arrbuilder.array.builder.null");
-    }
-
-
-    private static String localize(String key, Object ... args) {
-        try {
-            String msg = BUNDLE.getString(key);
-            return MessageFormat.format(msg, args);
-        } catch (Exception e) {
-            return getDefaultMessage(key, args);
-        }
-    }
-
-    private static String getDefaultMessage(String key, Object ... args) {
-        StringBuilder sb = new StringBuilder();
-        sb.append("[failed to localize] ");
-        sb.append(key);
-        if (args != null) {
-            sb.append('(');
-            for (int i = 0; i < args.length; ++i) {
-                if (i != 0)
-                    sb.append(", ");
-                sb.append(String.valueOf(args[i]));
-            }
-            sb.append(')');
-        }
-        return sb.toString();
-    }
-
-}
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2013-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package org.glassfish.json;
+
+
+import javax.json.stream.JsonLocation;
+import javax.json.stream.JsonParser;
+import java.text.MessageFormat;
+import java.util.ResourceBundle;
+import javax.json.JsonObject;
+import javax.json.JsonValue;
+
+/**
+ * Defines string formatting method for each constant in the resource file
+ *
+ * @author Jitendra Kotamraju
+ */
+final class JsonMessages {
+    private static final ResourceBundle BUNDLE =
+            ResourceBundle.getBundle("org.glassfish.json.messages");
+
+    // global/shared messages
+    static String INTERNAL_ERROR() {
+        return localize("internal.error");
+    }
+
+    // tokenizer messages
+    static String TOKENIZER_UNEXPECTED_CHAR(int unexpected, JsonLocation location) {
+        return localize("tokenizer.unexpected.char", unexpected, location);
+    }
+
+    static String TOKENIZER_EXPECTED_CHAR(int unexpected, JsonLocation location, char expected) {
+        return localize("tokenizer.expected.char", unexpected, location, expected);
+    }
+
+    static String TOKENIZER_IO_ERR() {
+        return localize("tokenizer.io.err");
+    }
+
+
+    // parser messages
+    static String PARSER_GETSTRING_ERR(JsonParser.Event event) {
+        return localize("parser.getString.err", event);
+    }
+
+    static String PARSER_ISINTEGRALNUMBER_ERR(JsonParser.Event event) {
+        return localize("parser.isIntegralNumber.err", event);
+    }
+
+    static String PARSER_GETINT_ERR(JsonParser.Event event) {
+        return localize("parser.getInt.err", event);
+    }
+
+    static String PARSER_GETLONG_ERR(JsonParser.Event event) {
+        return localize("parser.getLong.err", event);
+    }
+
+    static String PARSER_GETBIGDECIMAL_ERR(JsonParser.Event event) {
+        return localize("parser.getBigDecimal.err", event);
+    }
+
+    static String PARSER_GETARRAY_ERR(JsonParser.Event event) {
+        return localize("parser.getArray.err", event);
+    }
+
+    static String PARSER_GETOBJECT_ERR(JsonParser.Event event) {
+        return localize("parser.getObject.err", event);
+    }
+
+    static String PARSER_GETVALUE_ERR(JsonParser.Event event) {
+        return localize("parser.getValue.err", event);
+    }
+
+    static String PARSER_GETVALUESTREAM_ERR() {
+        return localize("parser.getValueStream.err");
+    }
+
+    static String PARSER_EXPECTED_EOF(JsonTokenizer.JsonToken token) {
+        return localize("parser.expected.eof", token);
+    }
+
+    static String PARSER_TOKENIZER_CLOSE_IO() {
+        return localize("parser.tokenizer.close.io");
+    }
+
+    static String PARSER_INVALID_TOKEN(JsonTokenizer.JsonToken token, JsonLocation location, String expectedTokens) {
+        return localize("parser.invalid.token", token, location, expectedTokens);
+    }
+
+    static String PARSER_STATE_ERR(JsonValue.ValueType type) {
+        return localize("parser.state.err", type);
+    }
+
+    static String PARSER_SCOPE_ERR(JsonValue value) {
+        return localize("parser.scope.err", value);
+    }
+
+    static String PARSER_INPUT_ENC_DETECT_FAILED() {
+        return localize("parser.input.enc.detect.failed");
+    }
+
+    static String PARSER_INPUT_ENC_DETECT_IOERR() {
+        return localize("parser.input.enc.detect.ioerr");
+    }
+
+    // generator messages
+    static String GENERATOR_FLUSH_IO_ERR() {
+        return localize("generator.flush.io.err");
+    }
+
+    static String GENERATOR_CLOSE_IO_ERR() {
+        return localize("generator.close.io.err");
+    }
+
+    static String GENERATOR_WRITE_IO_ERR() {
+        return localize("generator.write.io.err");
+    }
+
+    static String GENERATOR_ILLEGAL_METHOD(Object scope) {
+        return localize("generator.illegal.method", scope);
+    }
+
+    static String GENERATOR_DOUBLE_INFINITE_NAN() {
+        return localize("generator.double.infinite.nan");
+    }
+
+    static String GENERATOR_INCOMPLETE_JSON() {
+        return localize("generator.incomplete.json");
+    }
+
+    static String GENERATOR_ILLEGAL_MULTIPLE_TEXT() {
+        return localize("generator.illegal.multiple.text");
+    }
+
+
+
+    // writer messages
+    static String WRITER_WRITE_ALREADY_CALLED() {
+        return localize("writer.write.already.called");
+    }
+
+    // reader messages
+    static String READER_READ_ALREADY_CALLED() {
+        return localize("reader.read.already.called");
+    }
+
+
+    // obj builder messages
+    static String OBJBUILDER_NAME_NULL() {
+        return localize("objbuilder.name.null");
+    }
+
+    static String OBJBUILDER_VALUE_NULL() {
+        return localize("objbuilder.value.null");
+    }
+
+    static String OBJBUILDER_OBJECT_BUILDER_NULL() {
+        return localize("objbuilder.object.builder.null");
+    }
+
+    static String OBJBUILDER_ARRAY_BUILDER_NULL() {
+        return localize("objbuilder.array.builder.null");
+    }
+
+
+    // array builder messages
+    static String ARRBUILDER_VALUE_NULL() {
+        return localize("arrbuilder.value.null");
+    }
+
+    static String ARRBUILDER_OBJECT_BUILDER_NULL() {
+        return localize("arrbuilder.object.builder.null");
+    }
+
+    static String ARRBUILDER_ARRAY_BUILDER_NULL() {
+        return localize("arrbuilder.array.builder.null");
+    }
+
+    static String ARRBUILDER_VALUELIST_NULL(int index, int size) {
+        return localize("arrbuilder.valuelist.null", index, size);
+    }
+
+    // json pointer messages
+    static String POINTER_FORMAT_INVALID() {
+        return localize("pointer.format.invalid");
+    }
+
+    static String POINTER_MAPPING_MISSING(JsonObject object, String key) {
+        return localize("pointer.mapping.missing", object, key);
+    }
+
+    static String POINTER_REFERENCE_INVALID(JsonValue.ValueType type) {
+        return localize("pointer.reference.invalid", type.name());
+    }
+
+    static String POINTER_ARRAY_INDEX_ERR(String token) {
+        return localize("pointer.array.index.err", token);
+    }
+
+    static String POINTER_ARRAY_INDEX_ILLEGAL(String token) {
+        return localize("pointer.array.index.illegal", token);
+    }
+
+    // nodereference messages
+    static String NODEREF_VALUE_ADD_ERR() {
+        return localize("noderef.value.add.err");
+    }
+
+    static String NODEREF_VALUE_CANNOT_REMOVE() {
+        return localize("noderef.value.cannot.remove");
+    }
+
+    static String NODEREF_OBJECT_MISSING(String key) {
+        return localize("noderef.object.missing", key);
+    }
+
+    static String NODEREF_ARRAY_INDEX_ERR(int index, int size) {
+        return localize("noderef.array.index.err", index, size);
+    }
+
+    // json patch messages
+    static String PATCH_MUST_BE_ARRAY() {
+        return localize("patch.must.be.array");
+    }
+
+    static String PATCH_MOVE_PROPER_PREFIX(String from, String path) {
+        return localize("patch.move.proper.prefix", from, path);
+    }
+
+    static String PATCH_MOVE_TARGET_NULL(String from) {
+        return localize("patch.move.target.null", from);
+    }
+
+    static String PATCH_TEST_FAILED(String path, String value) {
+        return localize("patch.test.failed", path, value);
+    }
+
+    static String PATCH_ILLEGAL_OPERATION(String operation) {
+        return localize("patch.illegal.operation", operation);
+    }
+
+    static String PATCH_MEMBER_MISSING(String operation, String member) {
+        return localize("patch.member.missing", operation, member);
+    }
+
+
+    private static String localize(String key, Object ... args) {
+        try {
+            String msg = BUNDLE.getString(key);
+            return MessageFormat.format(msg, args);
+        } catch (Exception e) {
+            return getDefaultMessage(key, args);
+        }
+    }
+
+    private static String getDefaultMessage(String key, Object ... args) {
+        StringBuilder sb = new StringBuilder();
+        sb.append("[failed to localize] ");
+        sb.append(key);
+        if (args != null) {
+            sb.append('(');
+            for (int i = 0; i < args.length; ++i) {
+                if (i != 0)
+                    sb.append(", ");
+                sb.append(String.valueOf(args[i]));
+            }
+            sb.append(')');
+        }
+        return sb.toString();
+    }
+
+}
diff --git a/src/org/glassfish/json/JsonNumberImpl.java b/src/org/glassfish/json/JsonNumberImpl.java
index d85d48a..60931fc 100644
--- a/src/org/glassfish/json/JsonNumberImpl.java
+++ b/src/org/glassfish/json/JsonNumberImpl.java
@@ -1,260 +1,288 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import javax.json.JsonNumber;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-/**
- * JsonNumber impl. Subclasses provide optimized implementations
- * when backed by int, long, BigDecimal
- *
- * @author Jitendra Kotamraju
- */
-abstract class JsonNumberImpl implements JsonNumber {
-
-    static JsonNumber getJsonNumber(int num) {
-        return new JsonIntNumber(num);
-    }
-
-    static JsonNumber getJsonNumber(long num) {
-        return new JsonLongNumber(num);
-    }
-
-    static JsonNumber getJsonNumber(BigInteger value) {
-        return new JsonBigDecimalNumber(new BigDecimal(value));
-    }
-
-    static JsonNumber getJsonNumber(double value) {
-        //bigDecimal = new BigDecimal(value);
-        // This is the preferred way to convert double to BigDecimal
-        return new JsonBigDecimalNumber(BigDecimal.valueOf(value));
-    }
-
-    static JsonNumber getJsonNumber(BigDecimal value) {
-        return new JsonBigDecimalNumber(value);
-    }
-
-    // Optimized JsonNumber impl for int numbers.
-    private static final class JsonIntNumber extends JsonNumberImpl {
-        private final int num;
-        private BigDecimal bigDecimal;  // assigning it lazily on demand
-
-        JsonIntNumber(int num) {
-            this.num = num;
-        }
-
-        @Override
-        public boolean isIntegral() {
-            return true;
-        }
-
-        @Override
-        public int intValue() {
-            return num;
-        }
-
-        @Override
-        public int intValueExact() {
-            return num;
-        }
-
-        @Override
-        public long longValue() {
-            return num;
-        }
-
-        @Override
-        public long longValueExact() {
-            return num;
-        }
-
-        @Override
-        public double doubleValue() {
-            return num;
-        }
-
-        @Override
-        public BigDecimal bigDecimalValue() {
-            // reference assignments are atomic. At the most some more temp
-            // BigDecimal objects are created
-            BigDecimal bd = bigDecimal;
-            if (bd == null) {
-                bigDecimal = bd = new BigDecimal(num);
-            }
-            return bd;
-        }
-
-        @Override
-        public String toString() {
-            return Integer.toString(num);
-        }
-    }
-
-    // Optimized JsonNumber impl for long numbers.
-    private static final class JsonLongNumber extends JsonNumberImpl {
-        private final long num;
-        private BigDecimal bigDecimal;  // assigning it lazily on demand
-
-        JsonLongNumber(long num) {
-            this.num = num;
-        }
-
-        @Override
-        public boolean isIntegral() {
-            return true;
-        }
-
-        @Override
-        public long longValue() {
-            return num;
-        }
-
-        @Override
-        public long longValueExact() {
-            return num;
-        }
-
-        @Override
-        public double doubleValue() {
-            return num;
-        }
-
-        @Override
-        public BigDecimal bigDecimalValue() {
-            // reference assignments are atomic. At the most some more temp
-            // BigDecimal objects are created
-            BigDecimal bd = bigDecimal;
-            if (bd == null) {
-                bigDecimal = bd = new BigDecimal(num);
-            }
-            return bd;
-        }
-
-        @Override
-        public String toString() {
-            return Long.toString(num);
-        }
-
-    }
-
-    // JsonNumber impl using BigDecimal numbers.
-    private static final class JsonBigDecimalNumber extends JsonNumberImpl {
-        private final BigDecimal bigDecimal;
-
-        JsonBigDecimalNumber(BigDecimal value) {
-            this.bigDecimal = value;
-        }
-
-        @Override
-        public BigDecimal bigDecimalValue() {
-            return bigDecimal;
-        }
-
-    }
-
-    @Override
-    public boolean isIntegral() {
-        return bigDecimalValue().scale() == 0;
-    }
-
-    @Override
-    public int intValue() {
-        return bigDecimalValue().intValue();
-    }
-
-    @Override
-    public int intValueExact() {
-        return bigDecimalValue().intValueExact();
-    }
-
-    @Override
-    public long longValue() {
-        return bigDecimalValue().longValue();
-    }
-
-    @Override
-    public long longValueExact() {
-        return bigDecimalValue().longValueExact();
-    }
-
-    @Override
-    public double doubleValue() {
-        return bigDecimalValue().doubleValue();
-    }
-
-    @Override
-    public BigInteger bigIntegerValue() {
-        return bigDecimalValue().toBigInteger();
-    }
-
-    @Override
-    public BigInteger bigIntegerValueExact() {
-        return bigDecimalValue().toBigIntegerExact();
-    }
-
-    @Override
-    public ValueType getValueType() {
-        return ValueType.NUMBER;
-    }
-
-    @Override
-    public int hashCode() {
-        return bigDecimalValue().hashCode();
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (!(obj instanceof JsonNumber)) {
-            return false;
-        }
-        JsonNumber other = (JsonNumber)obj;
-        return bigDecimalValue().equals(other.bigDecimalValue());
-    }
-
-    @Override
-    public String toString() {
-        return bigDecimalValue().toString();
-    }
-
-}
-
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2013-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package org.glassfish.json;
+
+import javax.json.JsonNumber;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+
+/**
+ * JsonNumber impl. Subclasses provide optimized implementations
+ * when backed by int, long, BigDecimal
+ *
+ * @author Jitendra Kotamraju
+ */
+abstract class JsonNumberImpl implements JsonNumber {
+
+    static JsonNumber getJsonNumber(int num) {
+        return new JsonIntNumber(num);
+    }
+
+    static JsonNumber getJsonNumber(long num) {
+        return new JsonLongNumber(num);
+    }
+
+    static JsonNumber getJsonNumber(BigInteger value) {
+        return new JsonBigDecimalNumber(new BigDecimal(value));
+    }
+
+    static JsonNumber getJsonNumber(double value) {
+        //bigDecimal = new BigDecimal(value);
+        // This is the preferred way to convert double to BigDecimal
+        return new JsonBigDecimalNumber(BigDecimal.valueOf(value));
+    }
+
+    static JsonNumber getJsonNumber(BigDecimal value) {
+        return new JsonBigDecimalNumber(value);
+    }
+
+    // Optimized JsonNumber impl for int numbers.
+    private static final class JsonIntNumber extends JsonNumberImpl {
+        private final int num;
+        private BigDecimal bigDecimal;  // assigning it lazily on demand
+
+        JsonIntNumber(int num) {
+            this.num = num;
+        }
+
+        @Override
+        public boolean isIntegral() {
+            return true;
+        }
+
+        @Override
+        public int intValue() {
+            return num;
+        }
+
+        @Override
+        public int intValueExact() {
+            return num;
+        }
+
+        @Override
+        public long longValue() {
+            return num;
+        }
+
+        @Override
+        public long longValueExact() {
+            return num;
+        }
+
+        @Override
+        public double doubleValue() {
+            return num;
+        }
+
+        @Override
+        public BigDecimal bigDecimalValue() {
+            // reference assignments are atomic. At the most some more temp
+            // BigDecimal objects are created
+            BigDecimal bd = bigDecimal;
+            if (bd == null) {
+                bigDecimal = bd = new BigDecimal(num);
+            }
+            return bd;
+        }
+
+        @Override
+        public Number numberValue() {
+            return num;
+        }
+
+        @Override
+        public String toString() {
+            return Integer.toString(num);
+        }
+    }
+
+    // Optimized JsonNumber impl for long numbers.
+    private static final class JsonLongNumber extends JsonNumberImpl {
+        private final long num;
+        private BigDecimal bigDecimal;  // assigning it lazily on demand
+
+        JsonLongNumber(long num) {
+            this.num = num;
+        }
+
+        @Override
+        public boolean isIntegral() {
+            return true;
+        }
+
+        @Override
+        public int intValue() {
+            return (int) num;
+        }
+
+        @Override
+        public int intValueExact() {
+            return Math.toIntExact(num);
+        }
+
+        @Override
+        public long longValue() {
+            return num;
+        }
+
+        @Override
+        public long longValueExact() {
+            return num;
+        }
+
+        @Override
+        public double doubleValue() {
+            return num;
+        }
+
+        @Override
+        public BigDecimal bigDecimalValue() {
+            // reference assignments are atomic. At the most some more temp
+            // BigDecimal objects are created
+            BigDecimal bd = bigDecimal;
+            if (bd == null) {
+                bigDecimal = bd = new BigDecimal(num);
+            }
+            return bd;
+        }
+
+        @Override
+        public Number numberValue() {
+            return num;
+        }
+
+        @Override
+        public String toString() {
+            return Long.toString(num);
+        }
+
+    }
+
+    // JsonNumber impl using BigDecimal numbers.
+    private static final class JsonBigDecimalNumber extends JsonNumberImpl {
+        private final BigDecimal bigDecimal;
+
+        JsonBigDecimalNumber(BigDecimal value) {
+            this.bigDecimal = value;
+        }
+
+        @Override
+        public BigDecimal bigDecimalValue() {
+            return bigDecimal;
+        }
+
+        @Override
+        public Number numberValue() {
+            return bigDecimalValue();
+        }
+
+    }
+
+    @Override
+    public boolean isIntegral() {
+        return bigDecimalValue().scale() == 0;
+    }
+
+    @Override
+    public int intValue() {
+        return bigDecimalValue().intValue();
+    }
+
+    @Override
+    public int intValueExact() {
+        return bigDecimalValue().intValueExact();
+    }
+
+    @Override
+    public long longValue() {
+        return bigDecimalValue().longValue();
+    }
+
+    @Override
+    public long longValueExact() {
+        return bigDecimalValue().longValueExact();
+    }
+
+    @Override
+    public double doubleValue() {
+        return bigDecimalValue().doubleValue();
+    }
+
+    @Override
+    public BigInteger bigIntegerValue() {
+        return bigDecimalValue().toBigInteger();
+    }
+
+    @Override
+    public BigInteger bigIntegerValueExact() {
+        return bigDecimalValue().toBigIntegerExact();
+    }
+
+    @Override
+    public ValueType getValueType() {
+        return ValueType.NUMBER;
+    }
+
+    @Override
+    public int hashCode() {
+        return bigDecimalValue().hashCode();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj){
+            return true;
+        }
+        if (!(obj instanceof JsonNumber)) {
+            return false;
+        }
+        JsonNumber other = (JsonNumber)obj;
+        return bigDecimalValue().equals(other.bigDecimalValue());
+    }
+
+    @Override
+    public String toString() {
+        return bigDecimalValue().toString();
+    }
+
+}
+
diff --git a/src/org/glassfish/json/JsonObjectBuilderImpl.java b/src/org/glassfish/json/JsonObjectBuilderImpl.java
index 0b19824..68435c2 100644
--- a/src/org/glassfish/json/JsonObjectBuilderImpl.java
+++ b/src/org/glassfish/json/JsonObjectBuilderImpl.java
@@ -1,273 +1,351 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2012-2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import org.glassfish.json.api.BufferPool;
-
-import javax.json.JsonArrayBuilder;
-import javax.json.*;
-import java.io.StringWriter;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.*;
-
-/**
- * JsonObjectBuilder impl
- *
- * @author Jitendra Kotamraju
- */
-class JsonObjectBuilderImpl implements JsonObjectBuilder {
-    private Map<String, JsonValue> valueMap;
-    private final BufferPool bufferPool;
-
-    JsonObjectBuilderImpl(BufferPool bufferPool) {
-        this.bufferPool = bufferPool;
-    }
-
-    public JsonObjectBuilder add(String name, JsonValue value) {
-        validateName(name);
-        validateValue(value);
-        putValueMap(name, value);
-        return this;
-    }
-
-    public JsonObjectBuilder add(String name, String value) {
-        validateName(name);
-        validateValue(value);
-        putValueMap(name, new JsonStringImpl(value));
-        return this;
-    }
-
-    public JsonObjectBuilder add(String name, BigInteger value) {
-        validateName(name);
-        validateValue(value);
-        putValueMap(name, JsonNumberImpl.getJsonNumber(value));
-        return this;
-    }
-
-    public JsonObjectBuilder add(String name, BigDecimal value) {
-        validateName(name);
-        validateValue(value);
-        putValueMap(name, JsonNumberImpl.getJsonNumber(value));
-        return this;
-    }
-
-    public JsonObjectBuilder add(String name, int value) {
-        validateName(name);
-        putValueMap(name, JsonNumberImpl.getJsonNumber(value));
-        return this;
-    }
-
-    public JsonObjectBuilder add(String name, long value) {
-        validateName(name);
-        putValueMap(name, JsonNumberImpl.getJsonNumber(value));
-        return this;
-    }
-
-    public JsonObjectBuilder add(String name, double value) {
-        validateName(name);
-        putValueMap(name, JsonNumberImpl.getJsonNumber(value));
-        return this;
-    }
-
-    public JsonObjectBuilder add(String name, boolean value) {
-        validateName(name);
-        putValueMap(name, value ? JsonValue.TRUE : JsonValue.FALSE);
-        return this;
-    }
-
-    public JsonObjectBuilder addNull(String name) {
-        validateName(name);
-        putValueMap(name, JsonValue.NULL);
-        return this;
-    }
-
-    public JsonObjectBuilder add(String name, JsonObjectBuilder builder) {
-        validateName(name);
-        if (builder == null) {
-            throw new NullPointerException(JsonMessages.OBJBUILDER_OBJECT_BUILDER_NULL());
-        }
-        putValueMap(name, builder.build());
-        return this;
-    }
-
-    public JsonObjectBuilder add(String name, JsonArrayBuilder builder) {
-        validateName(name);
-        if (builder == null) {
-            throw new NullPointerException(JsonMessages.OBJBUILDER_ARRAY_BUILDER_NULL());
-        }
-        putValueMap(name, builder.build());
-        return this;
-    }
-
-    public JsonObject build() {
-        Map<String, JsonValue> snapshot = (valueMap == null)
-                ? Collections.<String, JsonValue>emptyMap()
-                : Collections.unmodifiableMap(valueMap);
-        valueMap = null;
-        return new JsonObjectImpl(snapshot, bufferPool);
-    }
-
-    private void putValueMap(String name, JsonValue value) {
-        if (valueMap == null) {
-            this.valueMap = new LinkedHashMap<String, JsonValue>();
-        }
-        valueMap.put(name, value);
-    }
-
-    private void validateName(String name) {
-        if (name == null) {
-            throw new NullPointerException(JsonMessages.OBJBUILDER_NAME_NULL());
-        }
-    }
-
-    private void validateValue(Object value) {
-        if (value == null) {
-            throw new NullPointerException(JsonMessages.OBJBUILDER_VALUE_NULL());
-        }
-    }
-
-    private static final class JsonObjectImpl extends AbstractMap<String, JsonValue> implements JsonObject {
-        private final Map<String, JsonValue> valueMap;      // unmodifiable
-        private final BufferPool bufferPool;
-
-        JsonObjectImpl(Map<String, JsonValue> valueMap, BufferPool bufferPool) {
-            this.valueMap = valueMap;
-            this.bufferPool = bufferPool;
-        }
-
-        @Override
-        public JsonArray getJsonArray(String name) {
-            return (JsonArray)get(name);
-        }
-
-        @Override
-        public JsonObject getJsonObject(String name) {
-            return (JsonObject)get(name);
-        }
-
-        @Override
-        public JsonNumber getJsonNumber(String name) {
-            return (JsonNumber)get(name);
-        }
-
-        @Override
-        public JsonString getJsonString(String name) {
-            return (JsonString)get(name);
-        }
-
-        @Override
-        public String getString(String name) {
-            return getJsonString(name).getString();
-        }
-
-        @Override
-        public String getString(String name, String defaultValue) {
-            try {
-                return getString(name);
-            } catch (Exception e) {
-                return defaultValue;
-            }
-        }
-
-        @Override
-        public int getInt(String name) {
-            return getJsonNumber(name).intValue();
-        }
-
-        @Override
-        public int getInt(String name, int defaultValue) {
-            try {
-                return getInt(name);
-            } catch (Exception e) {
-                return defaultValue;
-            }
-        }
-
-        @Override
-        public boolean getBoolean(String name) {
-            JsonValue value = get(name);
-            if (value == null) {
-                throw new NullPointerException();
-            } else if (value == JsonValue.TRUE) {
-                return true;
-            } else if (value == JsonValue.FALSE) {
-                return false;
-            } else {
-                throw new ClassCastException();
-            }
-        }
-
-        @Override
-        public boolean getBoolean(String name, boolean defaultValue) {
-            try {
-                return getBoolean(name);
-            } catch (Exception e) {
-                return defaultValue;
-            }
-        }
-
-        @Override
-        public boolean isNull(String name) {
-            return get(name).equals(JsonValue.NULL);
-        }
-
-        @Override
-        public ValueType getValueType() {
-            return ValueType.OBJECT;
-        }
-
-        @Override
-        public Set<Entry<String, JsonValue>> entrySet() {
-            return valueMap.entrySet();
-        }
-
-        @Override
-        public String toString() {
-            StringWriter sw = new StringWriter();
-            JsonWriter jw = new JsonWriterImpl(sw, bufferPool);
-            jw.write(this);
-            jw.close();
-            return sw.toString();
-        }
-    }
-
-}
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2012-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package org.glassfish.json;
+
+import org.glassfish.json.api.BufferPool;
+
+import javax.json.JsonArrayBuilder;
+import javax.json.*;
+import java.io.StringWriter;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.*;
+
+/**
+ * JsonObjectBuilder implementation
+ *
+ * @author Jitendra Kotamraju
+ * @author Kin-man Chung
+ */
+class JsonObjectBuilderImpl implements JsonObjectBuilder {
+
+    private Map<String, JsonValue> valueMap;
+    private final BufferPool bufferPool;
+
+    JsonObjectBuilderImpl(BufferPool bufferPool) {
+        this.bufferPool = bufferPool;
+    }
+
+    JsonObjectBuilderImpl(JsonObject object, BufferPool bufferPool) {
+        this.bufferPool = bufferPool;
+        valueMap = new LinkedHashMap<>();
+        valueMap.putAll(object);
+    }
+
+    JsonObjectBuilderImpl(Map<String, Object> map, BufferPool bufferPool) {
+        this.bufferPool = bufferPool;
+        valueMap = new LinkedHashMap<>();
+        populate(map);
+    }
+
+    @Override
+    public JsonObjectBuilder add(String name, JsonValue value) {
+        validateName(name);
+        validateValue(value);
+        putValueMap(name, value);
+        return this;
+    }
+
+    @Override
+    public JsonObjectBuilder add(String name, String value) {
+        validateName(name);
+        validateValue(value);
+        putValueMap(name, new JsonStringImpl(value));
+        return this;
+    }
+
+    @Override
+    public JsonObjectBuilder add(String name, BigInteger value) {
+        validateName(name);
+        validateValue(value);
+        putValueMap(name, JsonNumberImpl.getJsonNumber(value));
+        return this;
+    }
+
+    @Override
+    public JsonObjectBuilder add(String name, BigDecimal value) {
+        validateName(name);
+        validateValue(value);
+        putValueMap(name, JsonNumberImpl.getJsonNumber(value));
+        return this;
+    }
+
+    @Override
+    public JsonObjectBuilder add(String name, int value) {
+        validateName(name);
+        putValueMap(name, JsonNumberImpl.getJsonNumber(value));
+        return this;
+    }
+
+    @Override
+    public JsonObjectBuilder add(String name, long value) {
+        validateName(name);
+        putValueMap(name, JsonNumberImpl.getJsonNumber(value));
+        return this;
+    }
+
+    @Override
+    public JsonObjectBuilder add(String name, double value) {
+        validateName(name);
+        putValueMap(name, JsonNumberImpl.getJsonNumber(value));
+        return this;
+    }
+
+    @Override
+    public JsonObjectBuilder add(String name, boolean value) {
+        validateName(name);
+        putValueMap(name, value ? JsonValue.TRUE : JsonValue.FALSE);
+        return this;
+    }
+
+    @Override
+    public JsonObjectBuilder addNull(String name) {
+        validateName(name);
+        putValueMap(name, JsonValue.NULL);
+        return this;
+    }
+
+    @Override
+    public JsonObjectBuilder add(String name, JsonObjectBuilder builder) {
+        validateName(name);
+        if (builder == null) {
+            throw new NullPointerException(JsonMessages.OBJBUILDER_OBJECT_BUILDER_NULL());
+        }
+        putValueMap(name, builder.build());
+        return this;
+    }
+
+    @Override
+    public JsonObjectBuilder add(String name, JsonArrayBuilder builder) {
+        validateName(name);
+        if (builder == null) {
+            throw new NullPointerException(JsonMessages.OBJBUILDER_ARRAY_BUILDER_NULL());
+        }
+        putValueMap(name, builder.build());
+        return this;
+    }
+
+    @Override
+    public JsonObjectBuilder addAll(JsonObjectBuilder builder) {
+        if (builder == null) {
+            throw new NullPointerException(JsonMessages.OBJBUILDER_OBJECT_BUILDER_NULL());
+        }
+        if (valueMap == null) {
+            this.valueMap = new LinkedHashMap<>();
+        }
+        this.valueMap.putAll(builder.build());
+        return this;
+    }
+
+    @Override
+    public JsonObjectBuilder remove(String name) {
+        validateName(name);
+        this.valueMap.remove(name);
+        return this;
+    }
+
+    @Override
+    public JsonObject build() {
+        Map<String, JsonValue> snapshot = (valueMap == null)
+                ? Collections.<String, JsonValue>emptyMap()
+                : Collections.unmodifiableMap(valueMap);
+        valueMap = null;
+        return new JsonObjectImpl(snapshot, bufferPool);
+    }
+
+    private void populate(Map<String, Object> map) {
+        final Set<String> fields = map.keySet();
+        for (String field : fields) {
+            Object value = map.get(field);
+            if (value != null && value instanceof Optional) {
+                ((Optional<?>) value).ifPresent(v ->
+                        this.valueMap.put(field, MapUtil.handle(v, bufferPool)));
+            } else {
+                this.valueMap.put(field, MapUtil.handle(value, bufferPool));
+            }
+        }
+    }
+
+    private void putValueMap(String name, JsonValue value) {
+        if (valueMap == null) {
+            this.valueMap = new LinkedHashMap<>();
+        }
+        valueMap.put(name, value);
+    }
+
+    private void validateName(String name) {
+        if (name == null) {
+            throw new NullPointerException(JsonMessages.OBJBUILDER_NAME_NULL());
+        }
+    }
+
+    private void validateValue(Object value) {
+        if (value == null) {
+            throw new NullPointerException(JsonMessages.OBJBUILDER_VALUE_NULL());
+        }
+    }
+
+    private static final class JsonObjectImpl extends AbstractMap<String, JsonValue> implements JsonObject {
+        private final Map<String, JsonValue> valueMap;      // unmodifiable
+        private final BufferPool bufferPool;
+
+        JsonObjectImpl(Map<String, JsonValue> valueMap, BufferPool bufferPool) {
+            this.valueMap = valueMap;
+            this.bufferPool = bufferPool;
+        }
+
+        @Override
+        public JsonArray getJsonArray(String name) {
+            return (JsonArray)get(name);
+        }
+
+        @Override
+        public JsonObject getJsonObject(String name) {
+            return (JsonObject)get(name);
+        }
+
+        @Override
+        public JsonNumber getJsonNumber(String name) {
+            return (JsonNumber)get(name);
+        }
+
+        @Override
+        public JsonString getJsonString(String name) {
+            return (JsonString)get(name);
+        }
+
+        @Override
+        public String getString(String name) {
+            return getJsonString(name).getString();
+        }
+
+        @Override
+        public String getString(String name, String defaultValue) {
+            try {
+                return getString(name);
+            } catch (Exception e) {
+                return defaultValue;
+            }
+        }
+
+        @Override
+        public int getInt(String name) {
+            return getJsonNumber(name).intValue();
+        }
+
+        @Override
+        public int getInt(String name, int defaultValue) {
+            try {
+                return getInt(name);
+            } catch (Exception e) {
+                return defaultValue;
+            }
+        }
+
+        @Override
+        public boolean getBoolean(String name) {
+            JsonValue value = get(name);
+            if (value == null) {
+                throw new NullPointerException();
+            } else if (value == JsonValue.TRUE) {
+                return true;
+            } else if (value == JsonValue.FALSE) {
+                return false;
+            } else {
+                throw new ClassCastException();
+            }
+        }
+
+        @Override
+        public boolean getBoolean(String name, boolean defaultValue) {
+            try {
+                return getBoolean(name);
+            } catch (Exception e) {
+                return defaultValue;
+            }
+        }
+
+        @Override
+        public boolean isNull(String name) {
+            return get(name).equals(JsonValue.NULL);
+        }
+
+        @Override
+        public ValueType getValueType() {
+            return ValueType.OBJECT;
+        }
+
+        @Override
+        public Set<Entry<String, JsonValue>> entrySet() {
+            return valueMap.entrySet();
+        }
+
+        @Override
+        public String toString() {
+            StringWriter sw = new StringWriter();
+            try (JsonWriter jw = new JsonWriterImpl(sw, bufferPool)) {
+                jw.write(this);
+            }
+            return sw.toString();
+        }
+
+        @Override
+        public JsonObject asJsonObject() {
+            return this;
+        }
+
+        @Override
+        public int size() {
+            return valueMap.size();
+        }
+
+        @Override
+        public JsonValue get(Object key) {
+            return valueMap.get(key);
+        }
+
+        @Override
+        public boolean containsKey(Object key) {
+            return valueMap.containsKey(key);
+        }
+    }
+
+}
diff --git a/src/org/glassfish/json/JsonParserFactoryImpl.java b/src/org/glassfish/json/JsonParserFactoryImpl.java
index 3964bdf..8a08998 100644
--- a/src/org/glassfish/json/JsonParserFactoryImpl.java
+++ b/src/org/glassfish/json/JsonParserFactoryImpl.java
@@ -1,95 +1,95 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2012-2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import org.glassfish.json.api.BufferPool;
-
-import javax.json.JsonArray;
-import javax.json.JsonObject;
-import javax.json.stream.JsonParserFactory;
-import javax.json.stream.JsonParser;
-import java.io.InputStream;
-import java.io.Reader;
-import java.nio.charset.Charset;
-import java.util.Collections;
-import java.util.Map;
-
-/**
- * @author Jitendra Kotamraju
- */
-class JsonParserFactoryImpl implements JsonParserFactory {
-    private final Map<String, ?> config = Collections.emptyMap();
-    private final BufferPool bufferPool;
-
-    JsonParserFactoryImpl(BufferPool bufferPool) {
-        this.bufferPool = bufferPool;
-    }
-
-    @Override
-    public JsonParser createParser(Reader reader) {
-        return new JsonParserImpl(reader, bufferPool);
-    }
-
-    @Override
-    public JsonParser createParser(InputStream in) {
-        return new JsonParserImpl(in, bufferPool);
-    }
-
-    @Override
-    public JsonParser createParser(InputStream in, Charset charset) {
-        return new JsonParserImpl(in, charset, bufferPool);
-    }
-
-    @Override
-    public JsonParser createParser(JsonArray array) {
-        return new JsonStructureParser(array);
-    }
-
-    @Override
-    public Map<String, ?> getConfigInUse() {
-        return config;
-    }
-
-    @Override
-    public JsonParser createParser(JsonObject object) {
-        return new JsonStructureParser(object);
-    }
-}
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2012-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package org.glassfish.json;
+
+import org.glassfish.json.api.BufferPool;
+
+import javax.json.JsonArray;
+import javax.json.JsonObject;
+import javax.json.stream.JsonParserFactory;
+import javax.json.stream.JsonParser;
+import java.io.InputStream;
+import java.io.Reader;
+import java.nio.charset.Charset;
+import java.util.Collections;
+import java.util.Map;
+
+/**
+ * @author Jitendra Kotamraju
+ */
+class JsonParserFactoryImpl implements JsonParserFactory {
+    private final Map<String, ?> config = Collections.emptyMap();
+    private final BufferPool bufferPool;
+
+    JsonParserFactoryImpl(BufferPool bufferPool) {
+        this.bufferPool = bufferPool;
+    }
+
+    @Override
+    public JsonParser createParser(Reader reader) {
+        return new JsonParserImpl(reader, bufferPool);
+    }
+
+    @Override
+    public JsonParser createParser(InputStream in) {
+        return new JsonParserImpl(in, bufferPool);
+    }
+
+    @Override
+    public JsonParser createParser(InputStream in, Charset charset) {
+        return new JsonParserImpl(in, charset, bufferPool);
+    }
+
+    @Override
+    public JsonParser createParser(JsonArray array) {
+        return new JsonStructureParser(array);
+    }
+
+    @Override
+    public Map<String, ?> getConfigInUse() {
+        return config;
+    }
+
+    @Override
+    public JsonParser createParser(JsonObject object) {
+        return new JsonStructureParser(object);
+    }
+}
diff --git a/src/org/glassfish/json/JsonParserImpl.java b/src/org/glassfish/json/JsonParserImpl.java
index 379deea..e432c9e 100644
--- a/src/org/glassfish/json/JsonParserImpl.java
+++ b/src/org/glassfish/json/JsonParserImpl.java
@@ -1,332 +1,563 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2012-2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import javax.json.*;
-import javax.json.stream.JsonLocation;
-import javax.json.stream.JsonParser;
-import javax.json.stream.JsonParsingException;
-import java.io.*;
-import java.math.BigDecimal;
-import java.nio.charset.Charset;
-import java.util.*;
-
-import org.glassfish.json.JsonTokenizer.JsonToken;
-import org.glassfish.json.api.BufferPool;
-
-/**
- * JSON parser implementation. NoneContext, ArrayContext, ObjectContext is used
- * to go to next parser state.
- *
- * @author Jitendra Kotamraju
- */
-public class JsonParserImpl implements JsonParser {
-
-    private Context currentContext = new NoneContext();
-    private Event currentEvent;
-
-    private final Stack stack = new Stack();
-    private final StateIterator stateIterator;
-    private final JsonTokenizer tokenizer;
-
-    public JsonParserImpl(Reader reader, BufferPool bufferPool) {
-        tokenizer = new JsonTokenizer(reader, bufferPool);
-        stateIterator = new StateIterator();
-    }
-
-    public JsonParserImpl(InputStream in, BufferPool bufferPool) {
-        UnicodeDetectingInputStream uin = new UnicodeDetectingInputStream(in);
-        tokenizer = new JsonTokenizer(new InputStreamReader(uin, uin.getCharset()), bufferPool);
-        stateIterator = new StateIterator();
-    }
-
-    public JsonParserImpl(InputStream in, Charset encoding, BufferPool bufferPool) {
-        tokenizer = new JsonTokenizer(new InputStreamReader(in, encoding), bufferPool);
-        stateIterator = new StateIterator();
-    }
-
-    public String getString() {
-        if (currentEvent == Event.KEY_NAME || currentEvent == Event.VALUE_STRING
-                || currentEvent == Event.VALUE_NUMBER) {
-            return tokenizer.getValue();
-        }
-        throw new IllegalStateException(
-                JsonMessages.PARSER_GETSTRING_ERR(currentEvent));
-    }
-
-    @Override
-    public boolean isIntegralNumber() {
-        if (currentEvent != Event.VALUE_NUMBER) {
-            throw new IllegalStateException(
-                    JsonMessages.PARSER_ISINTEGRALNUMBER_ERR(currentEvent));
-        }
-        return tokenizer.isIntegral();
-    }
-
-    @Override
-    public int getInt() {
-        if (currentEvent != Event.VALUE_NUMBER) {
-            throw new IllegalStateException(
-                    JsonMessages.PARSER_GETINT_ERR(currentEvent));
-        }
-        return tokenizer.getInt();
-    }
-
-    boolean isDefinitelyInt() {
-        return tokenizer.isDefinitelyInt();
-    }
-
-    @Override
-    public long getLong() {
-        if (currentEvent != Event.VALUE_NUMBER) {
-            throw new IllegalStateException(
-                    JsonMessages.PARSER_GETLONG_ERR(currentEvent));
-        }
-        return tokenizer.getBigDecimal().longValue();
-    }
-
-    @Override
-    public BigDecimal getBigDecimal() {
-        if (currentEvent != Event.VALUE_NUMBER) {
-            throw new IllegalStateException(
-                    JsonMessages.PARSER_GETBIGDECIMAL_ERR(currentEvent));
-        }
-        return tokenizer.getBigDecimal();
-    }
-
-    @Override
-    public JsonLocation getLocation() {
-        return tokenizer.getLocation();
-    }
-
-    public JsonLocation getLastCharLocation() {
-        return tokenizer.getLastCharLocation();
-    }
-
-    public boolean hasNext() {
-        return stateIterator.hasNext();
-    }
-
-    public Event next() {
-        return stateIterator.next();
-    }
-
-    private class StateIterator implements  Iterator<JsonParser.Event> {
-
-        @Override
-        public boolean hasNext() {
-            if (stack.isEmpty() && (currentEvent == Event.END_ARRAY || currentEvent == Event.END_OBJECT)) {
-                JsonToken token = tokenizer.nextToken();
-                if (token != JsonToken.EOF) {
-                    throw new JsonParsingException(JsonMessages.PARSER_EXPECTED_EOF(token),
-                            getLastCharLocation());
-                }
-                return false;
-            }
-            return true;
-        }
-
-        @Override
-        public JsonParser.Event next() {
-            if (!hasNext()) {
-                throw new NoSuchElementException();
-            }
-            return currentEvent = currentContext.getNextEvent();
-        }
-
-        @Override
-        public void remove() {
-            throw new UnsupportedOperationException();
-        }
-    }
-
-    public void close() {
-        try {
-            tokenizer.close();
-        } catch (IOException e) {
-            throw new JsonException(JsonMessages.PARSER_TOKENIZER_CLOSE_IO(), e);
-        }
-    }
-
-    // Using the optimized stack impl as we don't require other things
-    // like iterator etc.
-    private static final class Stack {
-        private Context head;
-
-        private void push(Context context) {
-            context.next = head;
-            head = context;
-        }
-
-        private Context pop() {
-            if (head == null) {
-                throw new NoSuchElementException();
-            }
-            Context temp = head;
-            head = head.next;
-            return temp;
-        }
-
-        private boolean isEmpty() {
-            return head == null;
-        }
-    }
-
-    private abstract class Context {
-        Context next;
-        abstract Event getNextEvent();
-    }
-
-    private final class NoneContext extends Context {
-        @Override
-        public Event getNextEvent() {
-            // Handle 1. {     2. [
-            JsonToken token = tokenizer.nextToken();
-            if (token == JsonToken.CURLYOPEN) {
-                stack.push(currentContext);
-                currentContext = new ObjectContext();
-                return Event.START_OBJECT;
-            } else if (token == JsonToken.SQUAREOPEN) {
-                stack.push(currentContext);
-                currentContext = new ArrayContext();
-                return Event.START_ARRAY;
-            }
-            throw parsingException(token, "[CURLYOPEN, SQUAREOPEN]");
-        }
-    }
-
-    private JsonParsingException parsingException(JsonToken token, String expectedTokens) {
-        JsonLocation location = getLastCharLocation();
-        return new JsonParsingException(
-                JsonMessages.PARSER_INVALID_TOKEN(token, location, expectedTokens), location);
-    }
-
-    private final class ObjectContext extends Context {
-        private boolean firstValue = true;
-
-        /*
-         * Some more things could be optimized. For example, instead
-         * tokenizer.nextToken(), one could use tokenizer.matchColonToken() to
-         * match ':'. That might optimize a bit, but will fragment nextToken().
-         * I think the current one is more readable.
-         *
-         */
-        @Override
-        public Event getNextEvent() {
-            // Handle 1. }   2. name:value   3. ,name:value
-            JsonToken token = tokenizer.nextToken();
-            if (currentEvent == Event.KEY_NAME) {
-                // Handle 1. :value
-                if (token != JsonToken.COLON) {
-                    throw parsingException(token, "[COLON]");
-                }
-                token = tokenizer.nextToken();
-                if (token.isValue()) {
-                    return token.getEvent();
-                } else if (token == JsonToken.CURLYOPEN) {
-                    stack.push(currentContext);
-                    currentContext = new ObjectContext();
-                    return Event.START_OBJECT;
-                } else if (token == JsonToken.SQUAREOPEN) {
-                    stack.push(currentContext);
-                    currentContext = new ArrayContext();
-                    return Event.START_ARRAY;
-                }
-                throw parsingException(token, "[CURLYOPEN, SQUAREOPEN, STRING, NUMBER, TRUE, FALSE, NULL]");
-            } else {
-                // Handle 1. }   2. name   3. ,name
-                if (token == JsonToken.CURLYCLOSE) {
-                    currentContext = stack.pop();
-                    return Event.END_OBJECT;
-                }
-                if (firstValue) {
-                    firstValue = false;
-                } else {
-                    if (token != JsonToken.COMMA) {
-                        throw parsingException(token, "[COMMA]");
-                    }
-                    token = tokenizer.nextToken();
-                }
-                if (token == JsonToken.STRING) {
-                    return Event.KEY_NAME;
-                }
-                throw parsingException(token, "[STRING]");
-            }
-        }
-
-    }
-
-    private final class ArrayContext extends Context {
-        private boolean firstValue = true;
-
-        // Handle 1. ]   2. value   3. ,value
-        @Override
-        public Event getNextEvent() {
-            JsonToken token = tokenizer.nextToken();
-            if (token == JsonToken.SQUARECLOSE) {
-                currentContext = stack.pop();
-                return Event.END_ARRAY;
-            }
-            if (firstValue) {
-                firstValue = false;
-            } else {
-                if (token != JsonToken.COMMA) {
-                    throw parsingException(token, "[COMMA]");
-                }
-                token = tokenizer.nextToken();
-            }
-            if (token.isValue()) {
-                return token.getEvent();
-            } else if (token == JsonToken.CURLYOPEN) {
-                stack.push(currentContext);
-                currentContext = new ObjectContext();
-                return Event.START_OBJECT;
-            } else if (token == JsonToken.SQUAREOPEN) {
-                stack.push(currentContext);
-                currentContext = new ArrayContext();
-                return Event.START_ARRAY;
-            }
-            throw parsingException(token, "[CURLYOPEN, SQUAREOPEN, STRING, NUMBER, TRUE, FALSE, NULL]");
-        }
-
-    }
-
-}
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2012-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package org.glassfish.json;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.math.BigDecimal;
+import java.nio.charset.Charset;
+import java.util.AbstractMap;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.Spliterator;
+import java.util.Spliterators;
+import java.util.function.Consumer;
+import java.util.stream.Stream;
+import java.util.stream.StreamSupport;
+
+import javax.json.JsonArray;
+import javax.json.JsonArrayBuilder;
+import javax.json.JsonException;
+import javax.json.JsonObject;
+import javax.json.JsonObjectBuilder;
+import javax.json.JsonValue;
+import javax.json.stream.JsonLocation;
+import javax.json.stream.JsonParser;
+import javax.json.stream.JsonParser.Event;
+import javax.json.stream.JsonParsingException;
+
+import org.glassfish.json.JsonTokenizer.JsonToken;
+import org.glassfish.json.api.BufferPool;
+
+/**
+ * JSON parser implementation. NoneContext, ArrayContext, ObjectContext is used
+ * to go to next parser state.
+ *
+ * @author Jitendra Kotamraju
+ * @author Kin-man Chung
+ */
+public class JsonParserImpl implements JsonParser {
+
+    private final BufferPool bufferPool;
+    private Context currentContext = new NoneContext();
+    private Event currentEvent;
+
+    private final Stack stack = new Stack();
+    private final JsonTokenizer tokenizer;
+
+    public JsonParserImpl(Reader reader, BufferPool bufferPool) {
+        this.bufferPool = bufferPool;
+        tokenizer = new JsonTokenizer(reader, bufferPool);
+    }
+
+    public JsonParserImpl(InputStream in, BufferPool bufferPool) {
+        this.bufferPool = bufferPool;
+        UnicodeDetectingInputStream uin = new UnicodeDetectingInputStream(in);
+        tokenizer = new JsonTokenizer(new InputStreamReader(uin, uin.getCharset()), bufferPool);
+    }
+
+    public JsonParserImpl(InputStream in, Charset encoding, BufferPool bufferPool) {
+        this.bufferPool = bufferPool;
+        tokenizer = new JsonTokenizer(new InputStreamReader(in, encoding), bufferPool);
+    }
+
+    @Override
+    public String getString() {
+        if (currentEvent == Event.KEY_NAME || currentEvent == Event.VALUE_STRING
+                || currentEvent == Event.VALUE_NUMBER) {
+            return tokenizer.getValue();
+        }
+        throw new IllegalStateException(
+                JsonMessages.PARSER_GETSTRING_ERR(currentEvent));
+    }
+
+    @Override
+    public boolean isIntegralNumber() {
+        if (currentEvent != Event.VALUE_NUMBER) {
+            throw new IllegalStateException(
+                    JsonMessages.PARSER_ISINTEGRALNUMBER_ERR(currentEvent));
+        }
+        return tokenizer.isIntegral();
+    }
+
+    @Override
+    public int getInt() {
+        if (currentEvent != Event.VALUE_NUMBER) {
+            throw new IllegalStateException(
+                    JsonMessages.PARSER_GETINT_ERR(currentEvent));
+        }
+        return tokenizer.getInt();
+    }
+
+    boolean isDefinitelyInt() {
+        return tokenizer.isDefinitelyInt();
+    }
+
+    boolean isDefinitelyLong() {
+    	return tokenizer.isDefinitelyLong();
+    }
+
+    @Override
+    public long getLong() {
+        if (currentEvent != Event.VALUE_NUMBER) {
+            throw new IllegalStateException(
+                    JsonMessages.PARSER_GETLONG_ERR(currentEvent));
+        }
+        return tokenizer.getLong();
+    }
+
+    @Override
+    public BigDecimal getBigDecimal() {
+        if (currentEvent != Event.VALUE_NUMBER) {
+            throw new IllegalStateException(
+                    JsonMessages.PARSER_GETBIGDECIMAL_ERR(currentEvent));
+        }
+        return tokenizer.getBigDecimal();
+    }
+
+    @Override
+    public JsonArray getArray() {
+        if (currentEvent != Event.START_ARRAY) {
+            throw new IllegalStateException(
+                JsonMessages.PARSER_GETARRAY_ERR(currentEvent));
+        }
+        return getArray(new JsonArrayBuilderImpl(bufferPool));
+    }
+
+    @Override
+    public JsonObject getObject() {
+        if (currentEvent != Event.START_OBJECT) {
+            throw new IllegalStateException(
+                JsonMessages.PARSER_GETOBJECT_ERR(currentEvent));
+        }
+        return getObject(new JsonObjectBuilderImpl(bufferPool));
+    }
+
+    @Override
+    public JsonValue getValue() {
+        switch (currentEvent) {
+            case START_ARRAY:
+                return getArray(new JsonArrayBuilderImpl(bufferPool));
+            case START_OBJECT:
+                return getObject(new JsonObjectBuilderImpl(bufferPool));
+            case KEY_NAME:
+            case VALUE_STRING:
+                return new JsonStringImpl(getString());
+            case VALUE_NUMBER:
+                if (isDefinitelyInt()) {
+                    return JsonNumberImpl.getJsonNumber(getInt());
+                } else if (isDefinitelyLong()) {
+                    return JsonNumberImpl.getJsonNumber(getLong());
+                }
+                return JsonNumberImpl.getJsonNumber(getBigDecimal());
+            case VALUE_TRUE:
+                return JsonValue.TRUE;
+            case VALUE_FALSE:
+                return JsonValue.FALSE;
+            case VALUE_NULL:
+                return JsonValue.NULL;
+            case END_ARRAY:
+            case END_OBJECT:
+            default:
+            	throw new IllegalStateException(JsonMessages.PARSER_GETVALUE_ERR(currentEvent));
+        }
+    }
+
+    @Override
+    public Stream<JsonValue> getArrayStream() {
+        if (currentEvent != Event.START_ARRAY) {
+            throw new IllegalStateException(
+                JsonMessages.PARSER_GETARRAY_ERR(currentEvent));
+        }
+        Spliterator<JsonValue> spliterator =
+                new Spliterators.AbstractSpliterator<JsonValue>(Long.MAX_VALUE, Spliterator.ORDERED) {
+            @Override
+            public Spliterator<JsonValue> trySplit() {
+                return null;
+            }
+            @Override
+            public boolean tryAdvance(Consumer<? super JsonValue> action) {
+                if (action == null) {
+                    throw new NullPointerException();
+                }
+                if (! hasNext()) {
+                    return false;
+                }
+                if (next() == JsonParser.Event.END_ARRAY) {
+                    return false;
+                }
+                action.accept(getValue());
+                return true;
+            }
+        };
+        return StreamSupport.stream(spliterator, false);
+    }
+
+    @Override
+    public Stream<Map.Entry<String, JsonValue>> getObjectStream() {
+        if (currentEvent != Event.START_OBJECT) {
+            throw new IllegalStateException(
+                JsonMessages.PARSER_GETOBJECT_ERR(currentEvent));
+        }
+        Spliterator<Map.Entry<String, JsonValue>> spliterator =
+                new Spliterators.AbstractSpliterator<Map.Entry<String, JsonValue>>(Long.MAX_VALUE, Spliterator.ORDERED) {
+            @Override
+            public Spliterator<Map.Entry<String,JsonValue>> trySplit() {
+                return null;
+            }
+            @Override
+            public boolean tryAdvance(Consumer<? super Map.Entry<String, JsonValue>> action) {
+                if (action == null) {
+                    throw new NullPointerException();
+                }
+                if (! hasNext()) {
+                    return false;
+                }
+                JsonParser.Event e = next();
+                if (e == JsonParser.Event.END_OBJECT) {
+                    return false;
+                }
+                if (e != JsonParser.Event.KEY_NAME) {
+                    throw new JsonException(JsonMessages.INTERNAL_ERROR());
+                }
+                String key = getString();
+                if (! hasNext()) {
+                    throw new JsonException(JsonMessages.INTERNAL_ERROR());
+                }
+                next();
+                JsonValue value = getValue();
+                action.accept(new AbstractMap.SimpleImmutableEntry<>(key, value));
+                return true;
+            }
+        };
+        return StreamSupport.stream(spliterator, false);
+    }
+
+    @Override
+    public Stream<JsonValue> getValueStream() {
+        if (! (currentContext instanceof NoneContext)) {
+            throw new IllegalStateException(
+                JsonMessages.PARSER_GETVALUESTREAM_ERR());
+        }
+        Spliterator<JsonValue> spliterator =
+                new Spliterators.AbstractSpliterator<JsonValue>(Long.MAX_VALUE, Spliterator.ORDERED) {
+            @Override
+            public Spliterator<JsonValue> trySplit() {
+                return null;
+            }
+            @Override
+            public boolean tryAdvance(Consumer<? super JsonValue> action) {
+                if (action == null) {
+                    throw new NullPointerException();
+                }
+                if (! hasNext()) {
+                    return false;
+                }
+                next();
+                action.accept(getValue());
+                return true;
+            }
+        };
+        return StreamSupport.stream(spliterator, false);
+    }
+
+    @Override
+    public void skipArray() {
+        if (currentEvent == Event.START_ARRAY) {
+            currentContext.skip();
+            currentContext = stack.pop();
+        }
+    }
+
+    @Override
+    public void skipObject() {
+        if (currentEvent == Event.START_OBJECT) {
+            currentContext.skip();
+            currentContext = stack.pop();
+        }
+    }
+
+    private JsonArray getArray(JsonArrayBuilder builder) {
+        while(hasNext()) {
+            JsonParser.Event e = next();
+            if (e == JsonParser.Event.END_ARRAY) {
+                return builder.build();
+            }
+            builder.add(getValue());
+        }
+        throw parsingException(JsonToken.EOF, "[CURLYOPEN, SQUAREOPEN, STRING, NUMBER, TRUE, FALSE, NULL, SQUARECLOSE]");
+    }
+
+    private JsonObject getObject(JsonObjectBuilder builder) {
+        while(hasNext()) {
+            JsonParser.Event e = next();
+            if (e == JsonParser.Event.END_OBJECT) {
+                return builder.build();
+            }
+            String key = getString();
+            next();
+            builder.add(key, getValue());
+        }
+        throw parsingException(JsonToken.EOF, "[STRING, CURLYCLOSE]");
+    }
+
+    @Override
+    public JsonLocation getLocation() {
+        return tokenizer.getLocation();
+    }
+
+    public JsonLocation getLastCharLocation() {
+        return tokenizer.getLastCharLocation();
+    }
+
+    @Override
+    public boolean hasNext() {
+        return tokenizer.hasNextToken();
+    }
+
+    @Override
+    public Event next() {
+        if (!hasNext()) {
+            throw new NoSuchElementException();
+        }
+        return currentEvent = currentContext.getNextEvent();
+    }
+
+    @Override
+    public void close() {
+        try {
+            tokenizer.close();
+        } catch (IOException e) {
+            throw new JsonException(JsonMessages.PARSER_TOKENIZER_CLOSE_IO(), e);
+        }
+    }
+
+    // Using the optimized stack impl as we don't require other things
+    // like iterator etc.
+    private static final class Stack {
+        private Context head;
+
+        private void push(Context context) {
+            context.next = head;
+            head = context;
+        }
+
+        private Context pop() {
+            if (head == null) {
+                throw new NoSuchElementException();
+            }
+            Context temp = head;
+            head = head.next;
+            return temp;
+        }
+
+        private Context peek() {
+            return head;
+        }
+
+        private boolean isEmpty() {
+            return head == null;
+        }
+    }
+
+    private abstract class Context {
+        Context next;
+        abstract Event getNextEvent();
+        abstract void skip();
+    }
+
+    private final class NoneContext extends Context {
+        @Override
+        public Event getNextEvent() {
+            // Handle 1. {   2. [   3. value
+            JsonToken token = tokenizer.nextToken();
+            if (token == JsonToken.CURLYOPEN) {
+                stack.push(currentContext);
+                currentContext = new ObjectContext();
+                return Event.START_OBJECT;
+            } else if (token == JsonToken.SQUAREOPEN) {
+                stack.push(currentContext);
+                currentContext = new ArrayContext();
+                return Event.START_ARRAY;
+            } else if (token.isValue()) {
+                return token.getEvent();
+            }
+            throw parsingException(token, "[CURLYOPEN, SQUAREOPEN, STRING, NUMBER, TRUE, FALSE, NULL]");
+        }
+
+        @Override
+        void skip() {
+            // no-op
+        }
+    }
+
+    private JsonParsingException parsingException(JsonToken token, String expectedTokens) {
+        JsonLocation location = getLastCharLocation();
+        return new JsonParsingException(
+                JsonMessages.PARSER_INVALID_TOKEN(token, location, expectedTokens), location);
+    }
+
+    private final class ObjectContext extends Context {
+        private boolean firstValue = true;
+
+        /*
+         * Some more things could be optimized. For example, instead
+         * tokenizer.nextToken(), one could use tokenizer.matchColonToken() to
+         * match ':'. That might optimize a bit, but will fragment nextToken().
+         * I think the current one is more readable.
+         *
+         */
+        @Override
+        public Event getNextEvent() {
+            // Handle 1. }   2. name:value   3. ,name:value
+            JsonToken token = tokenizer.nextToken();
+            if (currentEvent == Event.KEY_NAME) {
+                // Handle 1. :value
+                if (token != JsonToken.COLON) {
+                    throw parsingException(token, "[COLON]");
+                }
+                token = tokenizer.nextToken();
+                if (token.isValue()) {
+                    return token.getEvent();
+                } else if (token == JsonToken.CURLYOPEN) {
+                    stack.push(currentContext);
+                    currentContext = new ObjectContext();
+                    return Event.START_OBJECT;
+                } else if (token == JsonToken.SQUAREOPEN) {
+                    stack.push(currentContext);
+                    currentContext = new ArrayContext();
+                    return Event.START_ARRAY;
+                }
+                throw parsingException(token, "[CURLYOPEN, SQUAREOPEN, STRING, NUMBER, TRUE, FALSE, NULL]");
+            } else {
+                // Handle 1. }   2. name   3. ,name
+                if (token == JsonToken.CURLYCLOSE) {
+                    currentContext = stack.pop();
+                    return Event.END_OBJECT;
+                }
+                if (firstValue) {
+                    firstValue = false;
+                } else {
+                    if (token != JsonToken.COMMA) {
+                        throw parsingException(token, "[COMMA]");
+                    }
+                    token = tokenizer.nextToken();
+                }
+                if (token == JsonToken.STRING) {
+                    return Event.KEY_NAME;
+                }
+                throw parsingException(token, "[STRING]");
+            }
+        }
+
+        @Override
+        void skip() {
+            JsonToken token;
+            int depth = 1;
+            do {
+                token = tokenizer.nextToken();
+                switch (token) {
+                    case CURLYCLOSE:
+                        depth--;
+                        break;
+                    case CURLYOPEN:
+                        depth++;
+                        break;
+                }
+            } while (!(token == JsonToken.CURLYCLOSE && depth == 0));
+        }
+
+    }
+
+    private final class ArrayContext extends Context {
+        private boolean firstValue = true;
+
+        // Handle 1. ]   2. value   3. ,value
+        @Override
+        public Event getNextEvent() {
+            JsonToken token = tokenizer.nextToken();
+            if (token == JsonToken.SQUARECLOSE) {
+                currentContext = stack.pop();
+                return Event.END_ARRAY;
+            }
+            if (firstValue) {
+                firstValue = false;
+            } else {
+                if (token != JsonToken.COMMA) {
+                    throw parsingException(token, "[COMMA]");
+                }
+                token = tokenizer.nextToken();
+            }
+            if (token.isValue()) {
+                return token.getEvent();
+            } else if (token == JsonToken.CURLYOPEN) {
+                stack.push(currentContext);
+                currentContext = new ObjectContext();
+                return Event.START_OBJECT;
+            } else if (token == JsonToken.SQUAREOPEN) {
+                stack.push(currentContext);
+                currentContext = new ArrayContext();
+                return Event.START_ARRAY;
+            }
+            throw parsingException(token, "[CURLYOPEN, SQUAREOPEN, STRING, NUMBER, TRUE, FALSE, NULL]");
+        }
+
+        @Override
+        void skip() {
+            JsonToken token;
+            int depth = 1;
+            do {
+                token = tokenizer.nextToken();
+                switch (token) {
+                    case SQUARECLOSE:
+                        depth--;
+                        break;
+                    case SQUAREOPEN:
+                        depth++;
+                        break;
+                }
+            } while (!(token == JsonToken.SQUARECLOSE && depth == 0));
+        }
+    }
+
+}
diff --git a/src/org/glassfish/json/JsonPatchBuilderImpl.java b/src/org/glassfish/json/JsonPatchBuilderImpl.java
new file mode 100644
index 0000000..0837c09
--- /dev/null
+++ b/src/org/glassfish/json/JsonPatchBuilderImpl.java
@@ -0,0 +1,362 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2015-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package org.glassfish.json;
+
+import javax.json.Json;
+import javax.json.JsonArray;
+import javax.json.JsonArrayBuilder;
+import javax.json.JsonException;
+import javax.json.JsonPatch;
+import javax.json.JsonPatch.Operation;
+import javax.json.JsonPatchBuilder;
+import javax.json.JsonStructure;
+import javax.json.JsonValue;
+
+/**
+ * A builder for constructing a JSON Patch by adding
+ * JSON Patch operations incrementally.
+ * <p>
+ * The following illustrates the approach.
+ * <pre>
+ *   JsonPatchBuilder builder = Json.createPatchBuilder();
+ *   JsonPatch patch = builder.add("/John/phones/office", "1234-567")
+ *                            .remove("/Amy/age")
+ *                            .build();
+ * </pre>
+ * The result is equivalent to the following JSON Patch.
+ * <pre>
+ * [
+ *    {"op" = "add", "path" = "/John/phones/office", "value" = "1234-567"},
+ *    {"op" = "remove", "path" = "/Amy/age"}
+ * ] </pre>
+ *
+ * @since 1.1
+ */
+public final class JsonPatchBuilderImpl implements JsonPatchBuilder {
+
+    private final JsonArrayBuilder builder;
+
+    /**
+     * Creates a JsonPatchBuilderImpl, starting with the specified
+     * JSON Patch
+     * @param patch the JSON Patch
+     */
+    public JsonPatchBuilderImpl(JsonArray patch) {
+        builder = Json.createArrayBuilder(patch);
+    }
+
+    /**
+     * Creates JsonPatchBuilderImpl with empty JSON Patch
+     */
+    public JsonPatchBuilderImpl() {
+        builder = Json.createArrayBuilder();
+    }
+
+    /**
+     * A convenience method for {@code new JsonPatchImpl(build()).apply(target)}.
+     * The target is not modified by the patch.
+     *
+     * @param <T> the target type, must be a subtype of {@link JsonStructure}
+     * @param target the target to apply the patch operations
+     * @return the transformed target after the patch
+     * @throws JsonException if the supplied JSON Patch is malformed or if
+     *    it contains references to non-existing members
+     */
+    public <T extends JsonStructure> T apply(T target) {
+        return build().apply(target);
+    }
+
+    /**
+     * Adds an "add" JSON Patch operation.
+     * @param path the "path" member of the operation
+     * @param value the "value" member of the operation
+     * @return this JsonPatchBuilder
+     */
+    @Override
+    public JsonPatchBuilder add(String path, JsonValue value) {
+        builder.add(Json.createObjectBuilder()
+                           .add("op", Operation.ADD.operationName())
+                           .add("path", path)
+                           .add("value", value)
+                   );
+        return this;
+    }
+
+    /**
+     * Adds an "add" JSON Patch operation
+     * @param path the "path" member of the operation
+     * @param value the "value" member of the operation
+     * @return this JsonPatchBuilder
+     */
+    @Override
+    public JsonPatchBuilder add(String path, String value) {
+        builder.add(Json.createObjectBuilder()
+                           .add("op", Operation.ADD.operationName())
+                           .add("path", path)
+                           .add("value", value)
+                   );
+        return this;
+    }
+
+    /**
+     * Adds an "add" JSON Patch operation
+     * @param path the "path" member of the operation
+     * @param value the "value" member of the operation
+     * @return this JsonPatchBuilder
+     */
+    @Override
+    public JsonPatchBuilder add(String path, int value) {
+        builder.add(Json.createObjectBuilder()
+                           .add("op", Operation.ADD.operationName())
+                           .add("path", path)
+                           .add("value", value)
+                  );
+        return this;
+    }
+
+    /**
+     * Adds an "add" JSON Patch operation
+     * @param path the "path" member of the operation
+     * @param value the "value" member of the operation
+     * @return this JsonPatchBuilder
+     */
+    @Override
+    public JsonPatchBuilder add(String path, boolean value) {
+        builder.add(Json.createObjectBuilder()
+                           .add("op", Operation.ADD.operationName())
+                           .add("path", path)
+                           .add("value", value)
+                   );
+        return this;
+    }
+
+    /**
+     * Adds a "remove" JSON Patch operation.
+     * @param path the "path" member of the operation
+     * @return this JsonPatchBuilder
+     */
+    @Override
+    public JsonPatchBuilder remove(String path) {
+        builder.add(Json.createObjectBuilder()
+                           .add("op", Operation.REMOVE.operationName())
+                           .add("path", path)
+                    );
+        return this;
+    }
+
+    /**
+     * Adds a "replace" JSON Patch operation.
+     * @param path the "path" member of the operation
+     * @param value the "value" member of the operation
+     * @return this JsonPatchBuilder
+     */
+    @Override
+    public JsonPatchBuilder replace(String path, JsonValue value) {
+        builder.add(Json.createObjectBuilder()
+                           .add("op", Operation.REPLACE.operationName())
+                           .add("path", path)
+                           .add("value", value)
+                  );
+        return this;
+    }
+
+    /**
+     * Adds a "replace" JSON Patch operation.
+     * @param path the "path" member of the operation
+     * @param value the "value" member of the operation
+     * @return this JsonPatchBuilder
+     */
+    @Override
+    public JsonPatchBuilder replace(String path, String value) {
+        builder.add(Json.createObjectBuilder()
+                           .add("op", Operation.REPLACE.operationName())
+                           .add("path", path)
+                           .add("value", value)
+                  );
+        return this;
+    }
+
+    /**
+     * Adds a "replace" JSON Patch operation.
+     * @param path the "path" member of the operation
+     * @param value the "value" member of the operation
+     * @return this JsonPatchBuilder
+     */
+    @Override
+    public JsonPatchBuilder replace(String path, int value) {
+        builder.add(Json.createObjectBuilder()
+                           .add("op", Operation.REPLACE.operationName())
+                           .add("path", path)
+                           .add("value", value)
+                  );
+        return this;
+    }
+
+    /**
+     * Adds a "replace" JSON Patch operation.
+     * @param path the "path" member of the operation
+     * @param value the "value" member of the operation
+     * @return this JsonPatchBuilder
+     */
+    @Override
+    public JsonPatchBuilder replace(String path, boolean value) {
+        builder.add(Json.createObjectBuilder()
+                           .add("op", Operation.REPLACE.operationName())
+                           .add("path", path)
+                           .add("value", value)
+                  );
+        return this;
+    }
+
+    /**
+     * Adds a "move" JSON Patch operation.
+     * @param path the "path" member of the operation
+     * @param from the "from" member of the operation
+     * @return this JsonPatchBuilder
+     */
+    @Override
+    public JsonPatchBuilder move(String path, String from) {
+        builder.add(Json.createObjectBuilder()
+                           .add("op", Operation.MOVE.operationName())
+                           .add("path", path)
+                           .add("from", from)
+                  );
+        return this;
+    }
+
+    /**
+     * Adds a "copy" JSON Patch operation.
+     * @param path the "path" member of the operation
+     * @param from the "from" member of the operation
+     * @return this JsonPatchBuilder
+     */
+    @Override
+    public JsonPatchBuilder copy(String path, String from) {
+        builder.add(Json.createObjectBuilder()
+                           .add("op", Operation.COPY.operationName())
+                           .add("path", path)
+                           .add("from", from)
+                  );
+        return this;
+    }
+
+    /**
+     * Adds a "test" JSON Patch operation.
+     * @param path the "path" member of the operation
+     * @param value the "value" member of the operation
+     * @return this JsonPatchBuilder
+     */
+    @Override
+    public JsonPatchBuilder test(String path, JsonValue value) {
+        builder.add(Json.createObjectBuilder()
+                           .add("op", Operation.TEST.operationName())
+                           .add("path", path)
+                           .add("value", value)
+                  );
+        return this;
+    }
+
+    /**
+     * Adds a "test" JSON Patch operation.
+     * @param path the "path" member of the operation
+     * @param value the "value" member of the operation
+     * @return this JsonPatchBuilder
+     */
+    @Override
+    public JsonPatchBuilder test(String path, String value) {
+        builder.add(Json.createObjectBuilder()
+                           .add("op", Operation.TEST.operationName())
+                           .add("path", path)
+                           .add("value", value)
+                  );
+        return this;
+    }
+
+    /**
+     * Adds a "test" JSON Patch operation.
+     * @param path the "path" member of the operation
+     * @param value the "value" member of the operation
+     * @return this JsonPatchBuilder
+     */
+    @Override
+    public JsonPatchBuilder test(String path, int value) {
+        builder.add(Json.createObjectBuilder()
+                           .add("op", Operation.TEST.operationName())
+                           .add("path", path)
+                           .add("value", value)
+                  );
+        return this;
+    }
+
+    /**
+     * Adds a "test" JSON Patch operation.
+     * @param path the "path" member of the operation
+     * @param value the "value" member of the operation
+     * @return this JsonPatchBuilder
+     */
+    @Override
+    public JsonPatchBuilder test(String path, boolean value) {
+        builder.add(Json.createObjectBuilder()
+                           .add("op", Operation.TEST.operationName())
+                           .add("path", path)
+                           .add("value", value)
+                  );
+        return this;
+    }
+
+    /**
+     * Returns the patch operations in a JsonArray
+     * @return the patch operations in a JsonArray
+     */
+    public JsonArray buildAsJsonArray() {
+        return builder.build();
+    }
+
+    /**
+     * Returns the patch operation in a JsonPatch
+     * @return the patch operation in a JsonPatch
+     */
+    @Override
+    public JsonPatch build() {
+        return new JsonPatchImpl(buildAsJsonArray());
+    }
+}
+
diff --git a/src/org/glassfish/json/JsonPatchImpl.java b/src/org/glassfish/json/JsonPatchImpl.java
new file mode 100644
index 0000000..33e99c6
--- /dev/null
+++ b/src/org/glassfish/json/JsonPatchImpl.java
@@ -0,0 +1,321 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2015-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package org.glassfish.json;
+
+import javax.json.*;
+import javax.json.JsonValue.ValueType;
+
+/**
+ * This class is an immutable representation of a JSON Patch as specified in
+ * <a href="http://tools.ietf.org/html/rfc6902">RFC 6902</a>.
+ * <p>A {@code JsonPatch} can be instantiated with {@link Json#createPatch(JsonArray)}
+ * by specifying the patch operations in a JSON Patch. Alternately, it
+ * can also be constructed with a {@link JsonPatchBuilder}.
+ * </p>
+ * The following illustrates both approaches.
+ * <p>1. Construct a JsonPatch with a JSON Patch.
+ * <pre>{@code
+ *   JsonArray contacts = ... // The target to be patched
+ *   JsonArray patch = ...  ; // JSON Patch
+ *   JsonPatch jsonpatch = Json.createPatch(patch);
+ *   JsonArray result = jsonpatch.apply(contacts);
+ * } </pre>
+ * 2. Construct a JsonPatch with JsonPatchBuilder.
+ * <pre>{@code
+ *   JsonPatchBuilder builder = Json.createPatchBuilder();
+ *   JsonArray result = builder.add("/John/phones/office", "1234-567")
+ *                             .remove("/Amy/age")
+ *                             .build()
+ *                             .apply(contacts);
+ * } </pre>
+ *
+ * @since 1.1
+ */
+public class JsonPatchImpl implements JsonPatch {
+
+    private final JsonArray patch;
+
+    /**
+     * Constructs a JsonPatchImpl
+     * @param patch the JSON Patch
+     */
+    public JsonPatchImpl(JsonArray patch) {
+        this.patch = patch;
+    }
+
+    /**
+     * Compares this {@code JsonPatchImpl} with another object.
+     * @param obj the object to compare this {@code JsonPatchImpl} against
+     * @return true if the given object is a {@code JsonPatchImpl} with the same
+     * reference tokens as this one, false otherwise.
+     */
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null || obj.getClass() != JsonPatchImpl.class)
+            return false;
+        return patch.equals(((JsonPatchImpl)obj).patch);
+    }
+
+    /**
+     * Returns the hash code value for this {@code JsonPatchImpl}.
+     *
+     * @return the hash code value for this {@code JsonPatchImpl} object
+     */
+    @Override
+    public int hashCode() {
+        return patch.hashCode();
+    }
+
+    /**
+     * Returns the JSON Patch text
+     * @return the JSON Patch text
+     */
+    @Override
+    public String toString() {
+        return patch.toString();
+    }
+
+    /**
+     * Applies the patch operations to the specified {@code target}.
+     * The target is not modified by the patch.
+     *
+     * @param target the target to apply the patch operations
+     * @return the transformed target after the patch
+     * @throws JsonException if the supplied JSON Patch is malformed or if
+     *    it contains references to non-existing members
+     */
+    @Override
+    public JsonStructure apply(JsonStructure target) {
+
+        JsonStructure result = target;
+
+        for (JsonValue operation: patch) {
+            if (operation.getValueType() != ValueType.OBJECT) {
+                throw new JsonException(JsonMessages.PATCH_MUST_BE_ARRAY());
+            }
+            result = apply(result, (JsonObject) operation);
+        }
+        return result;
+    }
+
+    @Override
+    public JsonArray toJsonArray() {
+        return patch;
+    }
+
+    /**
+     * Generates a JSON Patch from the source and target {@code JsonStructure}.
+     * The generated JSON Patch need not be unique.
+     * @param source the source
+     * @param target the target, must be the same type as the source
+     * @return a JSON Patch which when applied to the source, yields the target
+     */
+    public static JsonArray diff(JsonStructure source, JsonStructure target) {
+        return (new DiffGenerator()).diff(source, target);
+    }
+
+    /**
+     * Applies a JSON Patch operation to the target.
+     * @param target the target to apply the operation
+     * @param operation the JSON Patch operation
+     * @return the target after the patch
+     */
+    private JsonStructure apply(JsonStructure target, JsonObject operation) {
+
+        JsonPointer pointer = getPointer(operation, "path");
+        JsonPointer from;
+        switch (Operation.fromOperationName(operation.getString("op"))) {
+            case ADD:
+                return pointer.add(target, getValue(operation));
+            case REPLACE:
+                return pointer.replace(target, getValue(operation));
+            case REMOVE:
+                return pointer.remove(target);
+            case COPY:
+                from = getPointer(operation, "from");
+                return pointer.add(target, from.getValue(target));
+            case MOVE:
+                // Check if from is a proper prefix of path
+                String dest = operation.getString("path");
+                String src = operation.getString("from");
+                if (dest.startsWith(src) && src.length() < dest.length()) {
+                    throw new JsonException(JsonMessages.PATCH_MOVE_PROPER_PREFIX(src, dest));
+                }
+                from = getPointer(operation, "from");
+                // Check if 'from' exists in target object
+                if (!from.containsValue(target)) {
+                    throw new JsonException(JsonMessages.PATCH_MOVE_TARGET_NULL(src));
+                }
+                if (pointer.equals(from)) {
+                    // nop
+                    return target;
+                }
+                return pointer.add(from.remove(target), from.getValue(target));
+            case TEST:
+                if (! getValue(operation).equals(pointer.getValue(target))) {
+                    throw new JsonException(JsonMessages.PATCH_TEST_FAILED(operation.getString("path"), getValue(operation).toString()));
+                }
+                return target;
+            default:
+                throw new JsonException(JsonMessages.PATCH_ILLEGAL_OPERATION(operation.getString("op")));
+        }
+    }
+
+    private JsonPointer getPointer(JsonObject operation, String member) {
+        JsonString pointerString = operation.getJsonString(member);
+        if (pointerString == null) {
+            missingMember(operation.getString("op"), member);
+        }
+        return Json.createPointer(pointerString.getString());
+    }
+
+    private JsonValue getValue(JsonObject operation) {
+        JsonValue value = operation.get("value");
+        if (value == null) {
+            missingMember(operation.getString("op"), "value");
+        }
+        return value;
+    }
+
+    private void missingMember(String op, String  member) {
+        throw new JsonException(JsonMessages.PATCH_MEMBER_MISSING(op, member));
+    }
+
+    static class DiffGenerator {
+        private JsonPatchBuilder builder;
+
+        JsonArray diff(JsonStructure source, JsonStructure target) {
+            builder = Json.createPatchBuilder();
+            diff("", source, target);
+            return builder.build().toJsonArray();
+        }
+
+        private void diff(String path, JsonValue source, JsonValue target) {
+            if (source.equals(target)) {
+                return;
+            }
+            ValueType s = source.getValueType();
+            ValueType t = target.getValueType();
+            if (s == ValueType.OBJECT && t == ValueType.OBJECT) {
+                diffObject(path, (JsonObject) source, (JsonObject) target);
+            } else if (s == ValueType.ARRAY && t == ValueType.ARRAY) {
+                diffArray(path, (JsonArray) source, (JsonArray) target);
+            } else {
+                builder.replace(path, target);
+            }
+        }
+
+        private void diffObject(String path, JsonObject source, JsonObject target) {
+            source.forEach((key, value) -> {
+                if (target.containsKey(key)) {
+                    diff(path + '/' + key, value, target.get(key));
+                } else {
+                    builder.remove(path + '/' + key);
+                }
+            });
+            target.forEach((key, value) -> {
+                if (! source.containsKey(key)) {
+                    builder.add(path + '/' + key, value);
+                }
+            });
+        }
+
+        /*
+         * For array element diff, find the longest common subsequence, per
+         * http://en.wikipedia.org/wiki/Longest_common_subsequence_problem .
+         * We modify the algorithm to generate a replace if possible.
+         */
+        private void diffArray(String path, JsonArray source, JsonArray target) {
+            /* The array c keeps track of length of the subsequence. To avoid
+             * computing the equality of array elements again, we
+             * left shift its value by 1, and use the low order bit to mark
+             * that two items are equal.
+             */
+            int m = source.size();
+            int n = target.size();
+            int [][] c = new int[m+1][n+1];
+            for (int i = 0; i < m+1; i++)
+                c[i][0] = 0;
+            for (int i = 0; i < n+1; i++)
+                c[0][i] = 0;
+            for (int i = 0; i < m; i++) {
+                for (int j = 0; j < n; j++) {
+                    if (source.get(i).equals(target.get(j))) {
+                        c[i+1][j+1] = ((c[i][j]) & ~1) + 3;
+                        // 3 = (1 << 1) | 1;
+                    } else {
+                        c[i+1][j+1] = Math.max(c[i+1][j], c[i][j+1]) & ~1;
+                    }
+                }
+            }
+
+            int i = m;
+            int j = n;
+            while (i > 0 || j > 0) {
+                if (i == 0) {
+                    j--;
+                    builder.add(path + '/' + j, target.get(j));
+                } else if (j == 0) {
+                    i--;
+                    builder.remove(path + '/' + i);
+                } else if ((c[i][j] & 1) == 1) {
+                    i--; j--;
+                } else {
+                    int f = c[i][j-1] >> 1;
+                    int g = c[i-1][j] >> 1;
+                    if (f > g) {
+                        j--;
+                        builder.add(path + '/' + j, target.get(j));
+                    } else if (f < g) {
+                        i--;
+                        builder.remove(path + '/' + i);
+                    } else { // f == g) {
+                       i--; j--;
+                       diff(path + '/' + i, source.get(i), target.get(j));
+                    }
+                }
+            }
+        }
+    }
+}
+
diff --git a/src/org/glassfish/json/JsonPointerImpl.java b/src/org/glassfish/json/JsonPointerImpl.java
new file mode 100644
index 0000000..149dcc2
--- /dev/null
+++ b/src/org/glassfish/json/JsonPointerImpl.java
@@ -0,0 +1,316 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2015-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package org.glassfish.json;
+
+import javax.json.JsonArray;
+import javax.json.JsonException;
+import javax.json.JsonObject;
+import javax.json.JsonPointer;
+import javax.json.JsonStructure;
+import javax.json.JsonValue;
+import java.io.Serializable;
+import java.util.function.BiFunction;
+
+/**
+ * <p>This class is an immutable representation of a JSON Pointer as specified in
+ * <a href="http://tools.ietf.org/html/rfc6901">RFC 6901</a>.
+ * </p>
+ * <p> A JSON Pointer, when applied to a target {@link JsonValue},
+ * defines a reference location in the target.</p>
+ * <p> An empty JSON Pointer string defines a reference to the target itself.</p>
+ * <p> If the JSON Pointer string is non-empty, it must be a sequence
+ * of '/' prefixed tokens, and the target must either be a {@link JsonArray}
+ * or {@link JsonObject}. If the target is a {@code JsonArray}, the pointer
+ * defines a reference to an array element, and the last token specifies the index.
+ * If the target is a {@link JsonObject}, the pointer defines a reference to a
+ * name/value pair, and the last token specifies the name.
+ * </p>
+ * <p> The method {@link #getValue getValue()} returns the referenced value.
+ * The methods {@link #add add()}, {@link #replace replace()},
+ * and {@link #remove remove()} executes the operations specified in
+ * <a href="http://tools.ietf.org/html/rfc6902">RFC 6902</a>. </p>
+ *
+ * @since 1.1
+ */
+
+public final class JsonPointerImpl implements JsonPointer, Serializable {
+
+    private static final long serialVersionUID = -8123110179640843141L;
+    private final String[] tokens;
+    private final String jsonPointer;
+
+    /**
+     * Constructs and initializes a JsonPointerImpl.
+     * @param jsonPointer the JSON Pointer string
+     * @throws NullPointerException if {@code jsonPointer} is {@code null}
+     * @throws JsonException if {@code jsonPointer} is not a valid JSON Pointer
+     */
+    public JsonPointerImpl(String jsonPointer) {
+        this.jsonPointer = jsonPointer;
+        tokens = jsonPointer.split("/", -1);  // keep the trailing blanks
+        if (! "".equals(tokens[0])) {
+            throw new JsonException(JsonMessages.POINTER_FORMAT_INVALID());
+        }
+        for (int i = 1; i < tokens.length; i++) {
+            String token = tokens[i];
+            StringBuilder reftoken = new StringBuilder();
+            for (int j = 0; j < token.length(); j++) {
+                char ch = token.charAt(j);
+                if (ch == '~' && j < token.length() - 1) {
+                    char ch1 = token.charAt(j+1);
+                    if (ch1 == '0') {
+                        ch = '~'; j++;
+                    } else if (ch1 == '1') {
+                        ch = '/'; j++;
+                    }
+                }
+                reftoken.append(ch);
+            }
+            tokens[i] = reftoken.toString();
+        }
+    }
+
+    /**
+     * Compares this {@code JsonPointer} with another object.
+     * @param obj the object to compare this {@code JsonPointer} against
+     * @return true if the given object is a {@code JsonPointer} with the same
+     * reference tokens as this one, false otherwise.
+     */
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null || obj.getClass() != JsonPointerImpl.class)
+            return false;
+        return jsonPointer.equals(((JsonPointerImpl)obj).jsonPointer);
+    }
+
+    /**
+     * Returns the hash code value for this {@code JsonPointer} object.
+     * The hash code of this object is defined by the hash codes of it's reference tokens.
+     *
+     * @return the hash code value for this {@code JsonPointer} object
+     */
+    @Override
+    public int hashCode() {
+        return jsonPointer.hashCode();
+    }
+
+    /**
+     * Returns {@code true} if there is a value at the referenced location in the specified {@code target}.
+     *
+     * @param target the target referenced by this {@code JsonPointer}
+     * @return {@code true} if this pointer points to a value in a specified {@code target}.
+     */
+    @Override
+    public boolean containsValue(JsonStructure target) {
+        NodeReference[] refs = getReferences(target);
+        return refs[0].contains();
+    }
+
+    /**
+     * Returns the value at the referenced location in the specified {@code target}
+     *
+     * @param target the target referenced by this {@code JsonPointer}
+     * @return the referenced value in the target.
+     * @throws NullPointerException if {@code target} is null
+     * @throws JsonException if the referenced value does not exist
+     */
+    @Override
+    public JsonValue getValue(JsonStructure target) {
+        NodeReference[] refs = getReferences(target);
+        return refs[0].get();
+    }
+
+    /**
+     * Adds or replaces a value at the referenced location in the specified
+     * {@code target} with the specified {@code value}.
+     * <ol>
+     * <li>If the reference is the target (empty JSON Pointer string),
+     * the specified {@code value}, which must be the same type as
+     * specified {@code target}, is returned.</li>
+     * <li>If the reference is an array element, the specified {@code value} is inserted
+     * into the array, at the referenced index. The value currently at that location, and
+     * any subsequent values, are shifted to the right (adds one to the indices).
+     * Index starts with 0. If the reference is specified with a "-", or if the
+     * index is equal to the size of the array, the value is appended to the array.</li>
+     * <li>If the reference is a name/value pair of a {@code JsonObject}, and the
+     * referenced value exists, the value is replaced by the specified {@code value}.
+     * If the value does not exist, a new name/value pair is added to the object.</li>
+     * </ol>
+     *
+     * @param target the target referenced by this {@code JsonPointer}
+     * @param value the value to be added
+     * @return the transformed {@code target} after the value is added.
+     * @throws NullPointerException if {@code target} is {@code null}
+     * @throws JsonException if the reference is an array element and
+     * the index is out of range ({@code index < 0 || index > array size}),
+     * or if the pointer contains references to non-existing objects or arrays.
+     */
+    @Override
+    public JsonStructure add(JsonStructure target, JsonValue value) {
+        return execute(NodeReference::add, target, value);
+    }
+
+    /**
+     * Replaces the value at the referenced location in the specified
+     * {@code target} with the specified {@code value}.
+     *
+     * @param target the target referenced by this {@code JsonPointer}
+     * @param value the value to be stored at the referenced location
+     * @return the transformed {@code target} after the value is replaced.
+     * @throws NullPointerException if {@code target} is {@code null}
+     * @throws JsonException if the referenced value does not exist,
+     *    or if the reference is the target.
+     */
+    @Override
+    public JsonStructure replace(JsonStructure target, JsonValue value) {
+        return execute(NodeReference::replace, target, value);
+    }
+
+    /**
+     * Removes the value at the reference location in the specified {@code target}
+     *
+     * @param target the target referenced by this {@code JsonPointer}
+     * @return the transformed {@code target} after the value is removed.
+     * @throws NullPointerException if {@code target} is {@code null}
+     * @throws JsonException if the referenced value does not exist,
+     *    or if the reference is the target.
+     */
+    @Override
+    public JsonStructure remove(JsonStructure target) {
+        return execute((r,v)->r.remove(), target, null);
+    }
+
+    /**
+     * Executes the operation
+     * @param op a {code BiFunction} used to specify the operation to execute on
+     *    the leaf node of the Json Pointer
+     * @param target the target JsonStructure for this JsonPointer
+     * @param value the JsonValue for add and replace, can be null for getvalue and remove
+     */
+    private JsonStructure execute(BiFunction<NodeReference, JsonValue, JsonStructure> op,
+            JsonStructure target, JsonValue value) {
+
+        NodeReference[] refs = getReferences(target);
+        JsonStructure result = op.apply(refs[0], value);
+        for (int i = 1; i < refs.length; i++) {
+            result = refs[i].replace(result);
+        }
+        return result;
+    }
+
+    /**
+     * Computes the {@code NodeReference}s for each node on the path of
+     * the JSON Pointer, in reverse order, starting from the leaf node
+     */
+    private NodeReference[] getReferences(JsonStructure target) {
+        NodeReference[] references;
+        // First check if this is a reference to a JSON value tree
+        if (tokens.length == 1) {
+            references = new NodeReference[1];
+            references[0] = NodeReference.of(target);
+            return references;
+        }
+
+        references = new NodeReference[tokens.length-1];
+        JsonValue value = target;
+        int s = tokens.length;
+        for (int i = 1; i < s; i++) {
+             // Start with index 1, skipping the "" token
+            switch (value.getValueType()) {
+                case OBJECT:
+                    JsonObject object = (JsonObject) value;
+                    references[s-i-1] = NodeReference.of(object, tokens[i]);
+                    if (i < s-1) {
+                        value = object.get(tokens[i]);
+                        if (value == null) {
+                            // Except for the last name, the mapping must exist
+                            throw new JsonException(JsonMessages.POINTER_MAPPING_MISSING(object, tokens[i]));
+                        }
+                    }
+                    break;
+                case ARRAY:
+                    int index = getIndex(tokens[i]);
+                    JsonArray array = (JsonArray) value;
+                    references[s-i-1] = NodeReference.of(array, index);
+                    if (i < s-1 && index != -1) {
+                        if (index >= array.size()) {
+                            throw new JsonException(JsonMessages.NODEREF_ARRAY_INDEX_ERR(index, array.size()));
+                        }
+                        // The last array index in the path can have index value of -1
+                        // ("-" in the JSON pointer)
+                        value = array.get(index);
+                    }
+                    break;
+                default:
+                    throw new JsonException(JsonMessages.POINTER_REFERENCE_INVALID(value.getValueType()));
+             }
+        }
+        return references;
+    }
+
+    /**
+     * Computes the array index
+     * @param token the input string token
+     * @return the array index. -1 if the token is "-"
+     * @throws JsonException if the string token is not in correct format
+     */
+    static private int getIndex(String token) {
+        if (token == null || token.length() == 0) {
+            throw new JsonException(JsonMessages.POINTER_ARRAY_INDEX_ERR(token));
+        }
+        if (token.equals("-")) {
+            return -1;
+        }
+        if (token.equals("0")) {
+            return 0;
+        }
+        if (token.charAt(0) == '+' || token.charAt(0) == '-') {
+            throw new JsonException(JsonMessages.POINTER_ARRAY_INDEX_ERR(token));
+        }
+        try {
+            return Integer.parseInt(token);
+        } catch (NumberFormatException ex) {
+            throw new JsonException(JsonMessages.POINTER_ARRAY_INDEX_ILLEGAL(token), ex);
+       }
+    }
+}
diff --git a/src/org/glassfish/json/JsonPrettyGeneratorImpl.java b/src/org/glassfish/json/JsonPrettyGeneratorImpl.java
index e5b02a9..dcf45b8 100644
--- a/src/org/glassfish/json/JsonPrettyGeneratorImpl.java
+++ b/src/org/glassfish/json/JsonPrettyGeneratorImpl.java
@@ -1,122 +1,128 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2012-2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import org.glassfish.json.api.BufferPool;
-
-import javax.json.stream.JsonGenerator;
-import java.io.OutputStream;
-import java.io.Writer;
-import java.nio.charset.Charset;
-
-/**
- * @author Jitendra Kotamraju
- */
-public class JsonPrettyGeneratorImpl extends JsonGeneratorImpl {
-    private int indentLevel;
-    private static final String INDENT = "    ";
-
-    public JsonPrettyGeneratorImpl(Writer writer, BufferPool bufferPool) {
-        super(writer, bufferPool);
-    }
-
-    public JsonPrettyGeneratorImpl(OutputStream out, BufferPool bufferPool) {
-        super(out, bufferPool);
-    }
-
-    public JsonPrettyGeneratorImpl(OutputStream out, Charset encoding, BufferPool bufferPool) {
-        super(out, encoding, bufferPool);
-    }
-
-    @Override
-    public JsonGenerator writeStartObject() {
-        super.writeStartObject();
-        indentLevel++;
-        return this;
-    }
-
-    @Override
-    public JsonGenerator writeStartObject(String name) {
-        super.writeStartObject(name);
-        indentLevel++;
-        return this;
-    }
-
-    @Override
-    public JsonGenerator writeStartArray() {
-        super.writeStartArray();
-        indentLevel++;
-        return this;
-    }
-
-    @Override
-    public JsonGenerator writeStartArray(String name) {
-        super.writeStartArray(name);
-        indentLevel++;
-        return this;
-    }
-
-    @Override
-    public JsonGenerator writeEnd() {
-        writeNewLine();
-        indentLevel--;
-        writeIndent();
-        super.writeEnd();
-        return this;
-    }
-
-    private void writeIndent() {
-        for(int i=0; i < indentLevel; i++) {
-            writeString(INDENT);
-        }
-    }
-
-    @Override
-    protected void writeComma() {
-        super.writeComma();
-        writeChar('\n');
-        writeIndent();
-    }
-
-    private void writeNewLine() {
-        writeChar('\n');
-    }
-}
\ No newline at end of file
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2012-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package org.glassfish.json;
+
+import org.glassfish.json.api.BufferPool;
+
+import javax.json.stream.JsonGenerator;
+import java.io.OutputStream;
+import java.io.Writer;
+import java.nio.charset.Charset;
+
+/**
+ * @author Jitendra Kotamraju
+ */
+public class JsonPrettyGeneratorImpl extends JsonGeneratorImpl {
+    private int indentLevel;
+    private static final String INDENT = "    ";
+
+    public JsonPrettyGeneratorImpl(Writer writer, BufferPool bufferPool) {
+        super(writer, bufferPool);
+    }
+
+    public JsonPrettyGeneratorImpl(OutputStream out, BufferPool bufferPool) {
+        super(out, bufferPool);
+    }
+
+    public JsonPrettyGeneratorImpl(OutputStream out, Charset encoding, BufferPool bufferPool) {
+        super(out, encoding, bufferPool);
+    }
+
+    @Override
+    public JsonGenerator writeStartObject() {
+        super.writeStartObject();
+        indentLevel++;
+        return this;
+    }
+
+    @Override
+    public JsonGenerator writeStartObject(String name) {
+        super.writeStartObject(name);
+        indentLevel++;
+        return this;
+    }
+
+    @Override
+    public JsonGenerator writeStartArray() {
+        super.writeStartArray();
+        indentLevel++;
+        return this;
+    }
+
+    @Override
+    public JsonGenerator writeStartArray(String name) {
+        super.writeStartArray(name);
+        indentLevel++;
+        return this;
+    }
+
+    @Override
+    public JsonGenerator writeEnd() {
+        writeNewLine();
+        indentLevel--;
+        writeIndent();
+        super.writeEnd();
+        return this;
+    }
+
+    private void writeIndent() {
+        for(int i=0; i < indentLevel; i++) {
+            writeString(INDENT);
+        }
+    }
+
+    @Override
+    protected void writeComma() {
+        super.writeComma();
+        writeChar('\n');
+        writeIndent();
+    }
+
+    @Override
+    protected void writeColon() {
+        super.writeColon();
+        writeChar(' ');
+    }
+
+    private void writeNewLine() {
+        writeChar('\n');
+    }
+}
diff --git a/src/org/glassfish/json/JsonProviderImpl.java b/src/org/glassfish/json/JsonProviderImpl.java
index 82a3da9..cb408fe 100644
--- a/src/org/glassfish/json/JsonProviderImpl.java
+++ b/src/org/glassfish/json/JsonProviderImpl.java
@@ -1,206 +1,296 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2012-2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import org.glassfish.json.api.BufferPool;
-
-import javax.json.*;
-import javax.json.stream.JsonGenerator;
-import javax.json.stream.JsonGeneratorFactory;
-import javax.json.stream.JsonParser;
-import javax.json.stream.JsonParserFactory;
-import javax.json.spi.JsonProvider;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.Reader;
-import java.io.Writer;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * @author Jitendra Kotamraju
- */
-public class JsonProviderImpl extends JsonProvider {
-
-    private final BufferPool bufferPool = new BufferPoolImpl();
-
-    @Override
-    public JsonGenerator createGenerator(Writer writer) {
-        return new JsonGeneratorImpl(writer, bufferPool);
-    }
-
-    @Override
-    public JsonGenerator createGenerator(OutputStream out) {
-        return new JsonGeneratorImpl(out, bufferPool);
-    }
-
-    @Override
-    public JsonParser createParser(Reader reader) {
-        return new JsonParserImpl(reader, bufferPool);
-    }
-
-    @Override
-    public JsonParser createParser(InputStream in) {
-        return new JsonParserImpl(in, bufferPool);
-    }
-
-    @Override
-    public JsonParserFactory createParserFactory(Map<String, ?> config) {
-        BufferPool pool = null;
-        if (config != null && config.containsKey(BufferPool.class.getName())) {
-            pool = (BufferPool)config.get(BufferPool.class.getName());
-        }
-        if (pool == null) {
-            pool = bufferPool;
-        }
-        return new JsonParserFactoryImpl(pool);
-    }
-
-    @Override
-    public JsonGeneratorFactory createGeneratorFactory(Map<String, ?> config) {
-        Map<String, Object> providerConfig;
-        boolean prettyPrinting;
-        BufferPool pool;
-        if (config == null) {
-            providerConfig = Collections.emptyMap();
-            prettyPrinting = false;
-            pool = bufferPool;
-        } else {
-            providerConfig = new HashMap<String, Object>();
-            if (prettyPrinting=JsonProviderImpl.isPrettyPrintingEnabled(config)) {
-                providerConfig.put(JsonGenerator.PRETTY_PRINTING, true);
-            }
-            pool = (BufferPool)config.get(BufferPool.class.getName());
-            if (pool != null) {
-                providerConfig.put(BufferPool.class.getName(), pool);
-            } else {
-                pool = bufferPool;
-            }
-            providerConfig = Collections.unmodifiableMap(providerConfig);
-        }
-
-        return new JsonGeneratorFactoryImpl(providerConfig, prettyPrinting, pool);
-    }
-
-    @Override
-    public JsonReader createReader(Reader reader) {
-        return new JsonReaderImpl(reader, bufferPool);
-    }
-
-    @Override
-    public JsonReader createReader(InputStream in) {
-        return new JsonReaderImpl(in, bufferPool);
-    }
-
-    @Override
-    public JsonWriter createWriter(Writer writer) {
-        return new JsonWriterImpl(writer, bufferPool);
-    }
-
-    @Override
-    public JsonWriter createWriter(OutputStream out) {
-        return new JsonWriterImpl(out, bufferPool);
-    }
-
-    @Override
-    public JsonWriterFactory createWriterFactory(Map<String, ?> config) {
-        Map<String, Object> providerConfig;
-        boolean prettyPrinting;
-        BufferPool pool;
-        if (config == null) {
-            providerConfig = Collections.emptyMap();
-            prettyPrinting = false;
-            pool = bufferPool;
-        } else {
-            providerConfig = new HashMap<String, Object>();
-            if (prettyPrinting=JsonProviderImpl.isPrettyPrintingEnabled(config)) {
-                providerConfig.put(JsonGenerator.PRETTY_PRINTING, true);
-            }
-            pool = (BufferPool)config.get(BufferPool.class.getName());
-            if (pool != null) {
-                providerConfig.put(BufferPool.class.getName(), pool);
-            } else {
-                pool = bufferPool;
-            }
-            providerConfig = Collections.unmodifiableMap(providerConfig);
-        }
-        return new JsonWriterFactoryImpl(providerConfig, prettyPrinting, pool);
-    }
-
-    @Override
-    public JsonReaderFactory createReaderFactory(Map<String, ?> config) {
-        BufferPool pool = null;
-        if (config != null && config.containsKey(BufferPool.class.getName())) {
-            pool = (BufferPool)config.get(BufferPool.class.getName());
-        }
-        if (pool == null) {
-            pool = bufferPool;
-        }
-        return new JsonReaderFactoryImpl(pool);
-    }
-
-    @Override
-    public JsonObjectBuilder createObjectBuilder() {
-        return new JsonObjectBuilderImpl(bufferPool);
-    }
-
-    @Override
-    public JsonArrayBuilder createArrayBuilder() {
-        return new JsonArrayBuilderImpl(bufferPool);
-    }
-
-    @Override
-    public JsonBuilderFactory createBuilderFactory(Map<String,?> config) {
-        BufferPool pool = null ;
-        if (config != null && config.containsKey(BufferPool.class.getName())) {
-            pool = (BufferPool)config.get(BufferPool.class.getName());
-        }
-        if (pool == null) {
-            pool = bufferPool;
-        }
-        return new JsonBuilderFactoryImpl(pool);
-    }
-
-    static boolean isPrettyPrintingEnabled(Map<String, ?> config) {
-        return config.containsKey(JsonGenerator.PRETTY_PRINTING);
-    }
-}
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2012-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package org.glassfish.json;
+
+import org.glassfish.json.api.BufferPool;
+
+import javax.json.*;
+import javax.json.stream.JsonGenerator;
+import javax.json.stream.JsonGeneratorFactory;
+import javax.json.stream.JsonParser;
+import javax.json.stream.JsonParserFactory;
+import javax.json.spi.JsonProvider;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.Reader;
+import java.io.Writer;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+
+/**
+ * @author Jitendra Kotamraju
+ * @author Kin-man Chung
+ * @author Alex Soto
+ */
+public class JsonProviderImpl extends JsonProvider {
+
+    private final BufferPool bufferPool = new BufferPoolImpl();
+
+    @Override
+    public JsonGenerator createGenerator(Writer writer) {
+        return new JsonGeneratorImpl(writer, bufferPool);
+    }
+
+    @Override
+    public JsonGenerator createGenerator(OutputStream out) {
+        return new JsonGeneratorImpl(out, bufferPool);
+    }
+
+    @Override
+    public JsonParser createParser(Reader reader) {
+        return new JsonParserImpl(reader, bufferPool);
+    }
+
+    @Override
+    public JsonParser createParser(InputStream in) {
+        return new JsonParserImpl(in, bufferPool);
+    }
+
+    @Override
+    public JsonParserFactory createParserFactory(Map<String, ?> config) {
+        BufferPool pool = null;
+        if (config != null && config.containsKey(BufferPool.class.getName())) {
+            pool = (BufferPool)config.get(BufferPool.class.getName());
+        }
+        if (pool == null) {
+            pool = bufferPool;
+        }
+        return new JsonParserFactoryImpl(pool);
+    }
+
+    @Override
+    public JsonGeneratorFactory createGeneratorFactory(Map<String, ?> config) {
+        Map<String, Object> providerConfig;
+        boolean prettyPrinting;
+        BufferPool pool;
+        if (config == null) {
+            providerConfig = Collections.emptyMap();
+            prettyPrinting = false;
+            pool = bufferPool;
+        } else {
+            providerConfig = new HashMap<>();
+            if (prettyPrinting=JsonProviderImpl.isPrettyPrintingEnabled(config)) {
+                providerConfig.put(JsonGenerator.PRETTY_PRINTING, true);
+            }
+            pool = (BufferPool)config.get(BufferPool.class.getName());
+            if (pool != null) {
+                providerConfig.put(BufferPool.class.getName(), pool);
+            } else {
+                pool = bufferPool;
+            }
+            providerConfig = Collections.unmodifiableMap(providerConfig);
+        }
+
+        return new JsonGeneratorFactoryImpl(providerConfig, prettyPrinting, pool);
+    }
+
+    @Override
+    public JsonReader createReader(Reader reader) {
+        return new JsonReaderImpl(reader, bufferPool);
+    }
+
+    @Override
+    public JsonReader createReader(InputStream in) {
+        return new JsonReaderImpl(in, bufferPool);
+    }
+
+    @Override
+    public JsonWriter createWriter(Writer writer) {
+        return new JsonWriterImpl(writer, bufferPool);
+    }
+
+    @Override
+    public JsonWriter createWriter(OutputStream out) {
+        return new JsonWriterImpl(out, bufferPool);
+    }
+
+    @Override
+    public JsonWriterFactory createWriterFactory(Map<String, ?> config) {
+        Map<String, Object> providerConfig;
+        boolean prettyPrinting;
+        BufferPool pool;
+        if (config == null) {
+            providerConfig = Collections.emptyMap();
+            prettyPrinting = false;
+            pool = bufferPool;
+        } else {
+            providerConfig = new HashMap<>();
+            if (prettyPrinting=JsonProviderImpl.isPrettyPrintingEnabled(config)) {
+                providerConfig.put(JsonGenerator.PRETTY_PRINTING, true);
+            }
+            pool = (BufferPool)config.get(BufferPool.class.getName());
+            if (pool != null) {
+                providerConfig.put(BufferPool.class.getName(), pool);
+            } else {
+                pool = bufferPool;
+            }
+            providerConfig = Collections.unmodifiableMap(providerConfig);
+        }
+        return new JsonWriterFactoryImpl(providerConfig, prettyPrinting, pool);
+    }
+
+    @Override
+    public JsonReaderFactory createReaderFactory(Map<String, ?> config) {
+        BufferPool pool = null;
+        if (config != null && config.containsKey(BufferPool.class.getName())) {
+            pool = (BufferPool)config.get(BufferPool.class.getName());
+        }
+        if (pool == null) {
+            pool = bufferPool;
+        }
+        return new JsonReaderFactoryImpl(pool);
+    }
+
+    @Override
+    public JsonObjectBuilder createObjectBuilder() {
+        return new JsonObjectBuilderImpl(bufferPool);
+    }
+
+    @Override
+    public JsonObjectBuilder createObjectBuilder(JsonObject object) {
+        return new JsonObjectBuilderImpl(object, bufferPool);
+    }
+
+    @Override
+    public JsonObjectBuilder createObjectBuilder(Map<String, Object> map) {
+        return new JsonObjectBuilderImpl(map, bufferPool);
+    }
+
+    @Override
+    public JsonArrayBuilder createArrayBuilder() {
+        return new JsonArrayBuilderImpl(bufferPool);
+    }
+
+    @Override
+    public JsonArrayBuilder createArrayBuilder(JsonArray array) {
+        return new JsonArrayBuilderImpl(array, bufferPool);
+    }
+
+    @Override
+    public JsonArrayBuilder createArrayBuilder(Collection<?> collection) {
+        return new JsonArrayBuilderImpl(collection, bufferPool);
+    }
+
+    @Override
+    public JsonPointer createPointer(String jsonPointer) {
+        return new JsonPointerImpl(jsonPointer);
+    }
+
+    @Override
+    public JsonPatchBuilder createPatchBuilder() {
+        return new JsonPatchBuilderImpl();
+    }
+
+    @Override
+    public JsonPatchBuilder createPatchBuilder(JsonArray array) {
+        return new JsonPatchBuilderImpl(array);
+    }
+
+    @Override
+    public JsonPatch createPatch(JsonArray array) {
+        return new JsonPatchImpl(array);
+    }
+
+    @Override
+    public JsonPatch createDiff(JsonStructure source, JsonStructure target) {
+        return new JsonPatchImpl(JsonPatchImpl.diff(source, target));
+    }
+
+    @Override
+    public JsonMergePatch createMergePatch(JsonValue patch) {
+        return new JsonMergePatchImpl(patch);
+    }
+
+    @Override
+    public JsonMergePatch createMergeDiff(JsonValue source, JsonValue target) {
+        return new JsonMergePatchImpl(JsonMergePatchImpl.diff(source, target));
+    }
+
+    @Override
+    public JsonString createValue(String value) {
+        return new JsonStringImpl(value);
+    }
+
+    @Override
+    public JsonNumber createValue(int value) {
+        return JsonNumberImpl.getJsonNumber(value);
+    }
+
+    @Override
+    public JsonNumber createValue(long value) {
+        return JsonNumberImpl.getJsonNumber(value);
+    }
+
+    @Override
+    public JsonNumber createValue(double value) {
+        return JsonNumberImpl.getJsonNumber(value);
+    }
+
+    @Override
+    public JsonNumber createValue(BigInteger value) {
+        return JsonNumberImpl.getJsonNumber(value);
+    }
+
+    @Override
+    public JsonNumber createValue(BigDecimal value) {
+        return JsonNumberImpl.getJsonNumber(value);
+    }
+
+    @Override
+    public JsonBuilderFactory createBuilderFactory(Map<String,?> config) {
+        BufferPool pool = null ;
+        if (config != null && config.containsKey(BufferPool.class.getName())) {
+            pool = (BufferPool)config.get(BufferPool.class.getName());
+        }
+        if (pool == null) {
+            pool = bufferPool;
+        }
+        return new JsonBuilderFactoryImpl(pool);
+    }
+
+    static boolean isPrettyPrintingEnabled(Map<String, ?> config) {
+        return config.containsKey(JsonGenerator.PRETTY_PRINTING);
+    }
+}
diff --git a/src/org/glassfish/json/JsonReaderFactoryImpl.java b/src/org/glassfish/json/JsonReaderFactoryImpl.java
index 3edd6c0..d4291a7 100644
--- a/src/org/glassfish/json/JsonReaderFactoryImpl.java
+++ b/src/org/glassfish/json/JsonReaderFactoryImpl.java
@@ -1,83 +1,83 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import org.glassfish.json.api.BufferPool;
-
-import javax.json.JsonReader;
-import javax.json.JsonReaderFactory;
-import java.io.InputStream;
-import java.io.Reader;
-import java.nio.charset.Charset;
-import java.util.Collections;
-import java.util.Map;
-
-/**
- * @author Jitendra Kotamraju
- */
-class JsonReaderFactoryImpl implements JsonReaderFactory {
-    private final Map<String, ?> config = Collections.emptyMap();
-    private final BufferPool bufferPool;
-
-    JsonReaderFactoryImpl(BufferPool bufferPool) {
-        this.bufferPool = bufferPool;
-    }
-
-    @Override
-    public JsonReader createReader(Reader reader) {
-        return new JsonReaderImpl(reader, bufferPool);
-    }
-
-    @Override
-    public JsonReader createReader(InputStream in) {
-        return new JsonReaderImpl(in, bufferPool);
-    }
-
-    @Override
-    public JsonReader createReader(InputStream in, Charset charset) {
-        return new JsonReaderImpl(in, charset, bufferPool);
-    }
-
-    @Override
-    public Map<String, ?> getConfigInUse() {
-        return config;
-    }
-}
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2013-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package org.glassfish.json;
+
+import org.glassfish.json.api.BufferPool;
+
+import javax.json.JsonReader;
+import javax.json.JsonReaderFactory;
+import java.io.InputStream;
+import java.io.Reader;
+import java.nio.charset.Charset;
+import java.util.Collections;
+import java.util.Map;
+
+/**
+ * @author Jitendra Kotamraju
+ */
+class JsonReaderFactoryImpl implements JsonReaderFactory {
+    private final Map<String, ?> config = Collections.emptyMap();
+    private final BufferPool bufferPool;
+
+    JsonReaderFactoryImpl(BufferPool bufferPool) {
+        this.bufferPool = bufferPool;
+    }
+
+    @Override
+    public JsonReader createReader(Reader reader) {
+        return new JsonReaderImpl(reader, bufferPool);
+    }
+
+    @Override
+    public JsonReader createReader(InputStream in) {
+        return new JsonReaderImpl(in, bufferPool);
+    }
+
+    @Override
+    public JsonReader createReader(InputStream in, Charset charset) {
+        return new JsonReaderImpl(in, charset, bufferPool);
+    }
+
+    @Override
+    public Map<String, ?> getConfigInUse() {
+        return config;
+    }
+}
diff --git a/src/org/glassfish/json/JsonReaderImpl.java b/src/org/glassfish/json/JsonReaderImpl.java
index 8c888e7..4e06c92 100644
--- a/src/org/glassfish/json/JsonReaderImpl.java
+++ b/src/org/glassfish/json/JsonReaderImpl.java
@@ -1,218 +1,159 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import org.glassfish.json.api.BufferPool;
-
-import javax.json.*;
-import javax.json.stream.JsonParser;
-import java.io.InputStream;
-import java.io.Reader;
-import java.math.BigDecimal;
-import java.nio.charset.Charset;
-
-/**
- * JsonReader impl using parser and builders.
- *
- * @author Jitendra Kotamraju
- */
-class JsonReaderImpl implements JsonReader {
-    private final JsonParserImpl parser;
-    private boolean readDone;
-    private final BufferPool bufferPool;
-
-    JsonReaderImpl(Reader reader, BufferPool bufferPool) {
-        parser = new JsonParserImpl(reader, bufferPool);
-        this.bufferPool = bufferPool;
-    }
-
-    JsonReaderImpl(InputStream in, BufferPool bufferPool) {
-        parser = new JsonParserImpl(in, bufferPool);
-        this.bufferPool = bufferPool;
-    }
-
-    JsonReaderImpl(InputStream in, Charset charset, BufferPool bufferPool) {
-        parser = new JsonParserImpl(in, charset, bufferPool);
-        this.bufferPool = bufferPool;
-    }
-
-    @Override
-    public JsonStructure read() {
-        if (readDone) {
-            throw new IllegalStateException(JsonMessages.READER_READ_ALREADY_CALLED());
-        }
-        readDone = true;
-        if (parser.hasNext()) {
-            JsonParser.Event e = parser.next();
-            if (e == JsonParser.Event.START_ARRAY) {
-                return readArray(new JsonArrayBuilderImpl(bufferPool));
-            } else if (e == JsonParser.Event.START_OBJECT) {
-                return readObject(new JsonObjectBuilderImpl(bufferPool));
-            }
-        }
-        throw new JsonException("Internal Error");
-    }
-
-    @Override
-    public JsonObject readObject() {
-        if (readDone) {
-            throw new IllegalStateException(JsonMessages.READER_READ_ALREADY_CALLED());
-        }
-        readDone = true;
-        if (parser.hasNext()) {
-            JsonParser.Event e = parser.next();
-            if (e == JsonParser.Event.START_OBJECT) {
-                return readObject(new JsonObjectBuilderImpl(bufferPool));
-            } else if (e == JsonParser.Event.START_ARRAY) {
-                throw new JsonException(JsonMessages.READER_EXPECTED_OBJECT_GOT_ARRAY());
-            }
-        }
-        throw new JsonException("Internal Error");
-    }
-
-    @Override
-    public JsonArray readArray() {
-        if (readDone) {
-            throw new IllegalStateException(JsonMessages.READER_READ_ALREADY_CALLED());
-        }
-        readDone = true;
-        if (parser.hasNext()) {
-            JsonParser.Event e = parser.next();
-            if (e == JsonParser.Event.START_ARRAY) {
-                return readArray(new JsonArrayBuilderImpl(bufferPool));
-            } else if (e == JsonParser.Event.START_OBJECT) {
-                throw new JsonException(JsonMessages.READER_EXPECTED_ARRAY_GOT_OBJECT());
-            }
-        }
-        throw new JsonException("Internal Error");
-    }
-
-    @Override
-    public void close() {
-        readDone = true;
-        parser.close();
-    }
-
-    private JsonArray readArray(JsonArrayBuilder builder) {
-        while(parser.hasNext()) {
-            JsonParser.Event e = parser.next();
-            switch (e) {
-                case START_ARRAY:
-                    JsonArray array = readArray(new JsonArrayBuilderImpl(bufferPool));
-                    builder.add(array);
-                    break;
-                case START_OBJECT:
-                    JsonObject object = readObject(new JsonObjectBuilderImpl(bufferPool));
-                    builder.add(object);
-                    break;
-                case VALUE_STRING:
-                    builder.add(parser.getString());
-                    break;
-                case VALUE_NUMBER:
-                    if (parser.isDefinitelyInt()) {
-                        builder.add(parser.getInt());
-                    } else {
-                        builder.add(parser.getBigDecimal());
-                    }
-                    break;
-                case VALUE_TRUE:
-                    builder.add(JsonValue.TRUE);
-                    break;
-                case VALUE_FALSE:
-                    builder.add(JsonValue.FALSE);
-                    break;
-                case VALUE_NULL:
-                    builder.addNull();
-                    break;
-                case END_ARRAY:
-                    return builder.build();
-                default:
-                    throw new JsonException("Internal Error");
-            }
-        }
-        throw new JsonException("Internal Error");
-    }
-
-    private JsonObject readObject(JsonObjectBuilder builder) {
-        String key = null;
-        while(parser.hasNext()) {
-            JsonParser.Event e = parser .next();
-            switch (e) {
-                case START_ARRAY:
-                    JsonArray array = readArray(new JsonArrayBuilderImpl(bufferPool));
-                    builder.add(key, array);
-                    break;
-                case START_OBJECT:
-                    JsonObject object = readObject(new JsonObjectBuilderImpl(bufferPool));
-                    builder.add(key, object);
-                    break;
-                case KEY_NAME:
-                    key = parser.getString();
-                    break;
-                case VALUE_STRING:
-                    builder.add(key, parser.getString());
-                    break;
-                case VALUE_NUMBER:
-                    if (parser.isDefinitelyInt()) {
-                        builder.add(key, parser.getInt());
-                    } else {
-                        builder.add(key, parser.getBigDecimal());
-                    }
-                    break;
-                case VALUE_TRUE:
-                    builder.add(key, JsonValue.TRUE);
-                    break;
-                case VALUE_FALSE:
-                    builder.add(key, JsonValue.FALSE);
-                    break;
-                case VALUE_NULL:
-                    builder.addNull(key);
-                    break;
-                case END_OBJECT:
-                    return builder.build();
-                default:
-                    throw new JsonException("Internal Error");
-            }
-        }
-        throw new JsonException("Internal Error");
-    }
-
-}
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2013-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package org.glassfish.json;
+
+import org.glassfish.json.api.BufferPool;
+
+import java.io.InputStream;
+import java.io.Reader;
+import java.nio.charset.Charset;
+import javax.json.JsonArray;
+import javax.json.JsonException;
+import javax.json.JsonObject;
+import javax.json.JsonReader;
+import javax.json.JsonStructure;
+import javax.json.JsonValue;
+import javax.json.stream.JsonParser;
+import javax.json.stream.JsonParsingException;
+
+/**
+ * JsonReader impl using parser and builders.
+ *
+ * @author Jitendra Kotamraju
+ */
+class JsonReaderImpl implements JsonReader {
+    private final JsonParserImpl parser;
+    private boolean readDone;
+    private final BufferPool bufferPool;
+
+    JsonReaderImpl(Reader reader, BufferPool bufferPool) {
+        parser = new JsonParserImpl(reader, bufferPool);
+        this.bufferPool = bufferPool;
+    }
+
+    JsonReaderImpl(InputStream in, BufferPool bufferPool) {
+        parser = new JsonParserImpl(in, bufferPool);
+        this.bufferPool = bufferPool;
+    }
+
+    JsonReaderImpl(InputStream in, Charset charset, BufferPool bufferPool) {
+        parser = new JsonParserImpl(in, charset, bufferPool);
+        this.bufferPool = bufferPool;
+    }
+
+    @Override
+    public JsonStructure read() {
+        if (readDone) {
+            throw new IllegalStateException(JsonMessages.READER_READ_ALREADY_CALLED());
+        }
+        readDone = true;
+        if (parser.hasNext()) {
+            try {
+                JsonParser.Event e = parser.next();
+                if (e == JsonParser.Event.START_ARRAY) {
+                    return parser.getArray();
+                } else if (e == JsonParser.Event.START_OBJECT) {
+                    return parser.getObject();
+                }
+            } catch (IllegalStateException ise) {
+                throw new JsonParsingException(ise.getMessage(), ise, parser.getLastCharLocation());
+            }
+        }
+        throw new JsonException(JsonMessages.INTERNAL_ERROR());
+    }
+
+    @Override
+    public JsonObject readObject() {
+        if (readDone) {
+            throw new IllegalStateException(JsonMessages.READER_READ_ALREADY_CALLED());
+        }
+        readDone = true;
+        if (parser.hasNext()) {
+            try {
+                parser.next();
+                return parser.getObject();
+            } catch (IllegalStateException ise) {
+                throw new JsonParsingException(ise.getMessage(), ise, parser.getLastCharLocation());
+            }
+        }
+        throw new JsonException(JsonMessages.INTERNAL_ERROR());
+    }
+
+    @Override
+    public JsonArray readArray() {
+        if (readDone) {
+            throw new IllegalStateException(JsonMessages.READER_READ_ALREADY_CALLED());
+        }
+        readDone = true;
+        if (parser.hasNext()) {
+            try {
+                parser.next();
+                return parser.getArray();
+            } catch (IllegalStateException ise) {
+                throw new JsonParsingException(ise.getMessage(), ise, parser.getLastCharLocation());
+            }
+        }
+        throw new JsonException(JsonMessages.INTERNAL_ERROR());
+    }
+
+    @Override
+    public JsonValue readValue() {
+        if (readDone) {
+            throw new IllegalStateException(JsonMessages.READER_READ_ALREADY_CALLED());
+        }
+        readDone = true;
+        if (parser.hasNext()) {
+            try {
+                parser.next();
+                return parser.getValue();
+            } catch (IllegalStateException ise) {
+                throw new JsonParsingException(ise.getMessage(), ise, parser.getLastCharLocation());
+            }
+        }
+        throw new JsonException(JsonMessages.INTERNAL_ERROR());
+    }
+
+    @Override
+    public void close() {
+        readDone = true;
+        parser.close();
+    }
+}
diff --git a/src/org/glassfish/json/JsonStringImpl.java b/src/org/glassfish/json/JsonStringImpl.java
index 4bd8124..b684bc1 100644
--- a/src/org/glassfish/json/JsonStringImpl.java
+++ b/src/org/glassfish/json/JsonStringImpl.java
@@ -1,129 +1,132 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import javax.json.JsonString;
-
-/**
- * JsonString impl
- *
- * @author Jitendra Kotamraju
- */
-final class JsonStringImpl implements JsonString {
-
-    private final String value;
-
-    JsonStringImpl(String value) {
-        this.value = value;
-    }
-
-    @Override
-    public String getString() {
-        return value;
-    }
-
-    @Override
-    public CharSequence getChars() {
-        return value;
-    }
-
-    @Override
-    public ValueType getValueType() {
-        return ValueType.STRING;
-    }
-
-    @Override
-    public int hashCode() {
-        return getString().hashCode();
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (!(obj instanceof JsonString)) {
-            return false;
-        }
-        JsonString other = (JsonString)obj;
-        return getString().equals(other.getString());
-    }
-
-    @Override
-    public String toString() {
-        StringBuilder sb = new StringBuilder();
-        sb.append('"');
-
-        for(int i = 0; i < value.length(); i++) {
-            char c = value.charAt(i);
-            // unescaped = %x20-21 | %x23-5B | %x5D-10FFFF
-            if (c >= 0x20 && c <= 0x10ffff && c != 0x22 && c != 0x5c) {
-                sb.append(c);
-            } else {
-                switch (c) {
-                    case '"':
-                    case '\\':
-                        sb.append('\\'); sb.append(c);
-                        break;
-                    case '\b':
-                        sb.append('\\'); sb.append('b');
-                        break;
-                    case '\f':
-                        sb.append('\\'); sb.append('f');
-                        break;
-                    case '\n':
-                        sb.append('\\'); sb.append('n');
-                        break;
-                    case '\r':
-                        sb.append('\\'); sb.append('r');
-                        break;
-                    case '\t':
-                        sb.append('\\'); sb.append('t');
-                        break;
-                    default:
-                        String hex = "000" + Integer.toHexString(c);
-                        sb.append("\\u").append(hex.substring(hex.length() - 4));
-                }
-            }
-        }
-
-        sb.append('"');
-        return sb.toString();
-    }
-}
-
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2013-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package org.glassfish.json;
+
+import javax.json.JsonString;
+
+/**
+ * JsonString impl
+ *
+ * @author Jitendra Kotamraju
+ */
+final class JsonStringImpl implements JsonString {
+
+    private final String value;
+
+    JsonStringImpl(String value) {
+        this.value = value;
+    }
+
+    @Override
+    public String getString() {
+        return value;
+    }
+
+    @Override
+    public CharSequence getChars() {
+        return value;
+    }
+
+    @Override
+    public ValueType getValueType() {
+        return ValueType.STRING;
+    }
+
+    @Override
+    public int hashCode() {
+        return getString().hashCode();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj){
+            return true;
+        }
+        if (!(obj instanceof JsonString)) {
+            return false;
+        }
+        JsonString other = (JsonString)obj;
+        return getString().equals(other.getString());
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append('"');
+
+        for(int i = 0; i < value.length(); i++) {
+            char c = value.charAt(i);
+            // unescaped = %x20-21 | %x23-5B | %x5D-10FFFF
+            if (c >= 0x20 && c <= 0x10ffff && c != 0x22 && c != 0x5c) {
+                sb.append(c);
+            } else {
+                switch (c) {
+                    case '"':
+                    case '\\':
+                        sb.append('\\'); sb.append(c);
+                        break;
+                    case '\b':
+                        sb.append('\\'); sb.append('b');
+                        break;
+                    case '\f':
+                        sb.append('\\'); sb.append('f');
+                        break;
+                    case '\n':
+                        sb.append('\\'); sb.append('n');
+                        break;
+                    case '\r':
+                        sb.append('\\'); sb.append('r');
+                        break;
+                    case '\t':
+                        sb.append('\\'); sb.append('t');
+                        break;
+                    default:
+                        String hex = "000" + Integer.toHexString(c);
+                        sb.append("\\u").append(hex.substring(hex.length() - 4));
+                }
+            }
+        }
+
+        sb.append('"');
+        return sb.toString();
+    }
+}
+
diff --git a/src/org/glassfish/json/JsonStructureParser.java b/src/org/glassfish/json/JsonStructureParser.java
index 9956c61..978e3f0 100644
--- a/src/org/glassfish/json/JsonStructureParser.java
+++ b/src/org/glassfish/json/JsonStructureParser.java
@@ -1,271 +1,335 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2012-2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import javax.json.*;
-import javax.json.stream.JsonLocation;
-import javax.json.stream.JsonParser;
-import java.math.BigDecimal;
-import java.util.*;
-
-/**
- * {@link JsonParser} implementation on top of JsonArray/JsonObject
- *
- * @author Jitendra Kotamraju
- */
-class JsonStructureParser implements JsonParser {
-
-    private Scope current;
-    private Event state;
-    private final Deque<Scope> scopeStack = new ArrayDeque<Scope>();
-
-    JsonStructureParser(JsonArray array) {
-        current = new ArrayScope(array);
-    }
-
-    JsonStructureParser(JsonObject object) {
-        current = new ObjectScope(object);
-    }
-
-    @Override
-    public String getString() {
-        if (state == Event.KEY_NAME) {
-            return ((ObjectScope)current).key;
-        } else if (state == Event.VALUE_STRING) {
-            return ((JsonString)current.getJsonValue()).getString();
-        }
-        throw new IllegalStateException(JsonMessages.PARSER_GETSTRING_ERR(state));
-    }
-
-    @Override
-    public boolean isIntegralNumber() {
-        if (state == Event.VALUE_NUMBER) {
-            return ((JsonNumber)current.getJsonValue()).isIntegral();
-        }
-        throw new IllegalStateException(JsonMessages.PARSER_ISINTEGRALNUMBER_ERR(state));
-    }
-
-    @Override
-    public int getInt() {
-        if (state == Event.VALUE_NUMBER) {
-            return ((JsonNumber)current.getJsonValue()).intValue();
-        }
-        throw new IllegalStateException(JsonMessages.PARSER_GETINT_ERR(state));
-    }
-
-    @Override
-    public long getLong() {
-        if (state == Event.VALUE_NUMBER) {
-            return ((JsonNumber)current.getJsonValue()).longValue();
-        }
-        throw new IllegalStateException(JsonMessages.PARSER_GETLONG_ERR(state));
-    }
-
-    @Override
-    public BigDecimal getBigDecimal() {
-        if (state == Event.VALUE_NUMBER) {
-            return ((JsonNumber)current.getJsonValue()).bigDecimalValue();
-        }
-        throw new IllegalStateException(JsonMessages.PARSER_GETBIGDECIMAL_ERR(state));
-    }
-
-    @Override
-    public JsonLocation getLocation() {
-        return JsonLocationImpl.UNKNOWN;
-    }
-
-    @Override
-    public boolean hasNext() {
-        return !((state == Event.END_OBJECT || state == Event.END_ARRAY) && scopeStack.isEmpty());
-    }
-
-    @Override
-    public Event next() {
-        if (!hasNext()) {
-            throw new NoSuchElementException();
-        }
-        transition();
-        return state;
-    }
-
-    private void transition() {
-        if (state == null) {
-            state = current instanceof ArrayScope ? Event.START_ARRAY : Event.START_OBJECT;
-        } else {
-            if (state == Event.END_OBJECT || state == Event.END_ARRAY) {
-                current = scopeStack.pop();
-            }
-            if (current instanceof ArrayScope) {
-                if (current.hasNext()) {
-                    current.next();
-                    state = getState(current.getJsonValue());
-                    if (state == Event.START_ARRAY || state == Event.START_OBJECT) {
-                        scopeStack.push(current);
-                        current = Scope.createScope(current.getJsonValue());
-                    }
-                } else {
-                    state = Event.END_ARRAY;
-                }
-            } else {
-                // ObjectScope
-                if (state == Event.KEY_NAME) {
-                    state = getState(current.getJsonValue());
-                    if (state == Event.START_ARRAY || state == Event.START_OBJECT) {
-                        scopeStack.push(current);
-                        current = Scope.createScope(current.getJsonValue());
-                    }
-                } else {
-                    if (current.hasNext()) {
-                        current.next();
-                        state = Event.KEY_NAME;
-                    } else {
-                        state = Event.END_OBJECT;
-                    }
-                }
-            }
-        }
-    }
-
-    @Override
-    public void close() {
-        // no-op
-    }
-
-    private static Event getState(JsonValue value) {
-        switch (value.getValueType()) {
-            case ARRAY:
-                return Event.START_ARRAY;
-            case OBJECT:
-                return Event.START_OBJECT;
-            case STRING:
-                return Event.VALUE_STRING;
-            case NUMBER:
-                return Event.VALUE_NUMBER;
-            case TRUE:
-                return Event.VALUE_TRUE;
-            case FALSE:
-                return Event.VALUE_FALSE;
-            case NULL:
-                return Event.VALUE_NULL;
-            default:
-                throw new JsonException("Unknown value type="+value.getValueType());
-        }
-    }
-
-    private static abstract class Scope implements Iterator {
-        abstract JsonValue getJsonValue();
-
-        static Scope createScope(JsonValue value) {
-            if (value instanceof JsonArray) {
-                return new ArrayScope((JsonArray)value);
-            } else if (value instanceof JsonObject) {
-                return new ObjectScope((JsonObject)value);
-            }
-            throw new JsonException("Cannot be called for value="+value);
-        }
-    }
-
-    private static class ArrayScope extends Scope {
-        private final Iterator<JsonValue> it;
-        private JsonValue value;
-
-        ArrayScope(JsonArray array) {
-            this.it = array.iterator();
-        }
-
-        @Override
-        public boolean hasNext() {
-            return it.hasNext();
-        }
-
-        @Override
-        public JsonValue next() {
-            value = it.next();
-            return value;
-        }
-
-        @Override
-        public void remove() {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        JsonValue getJsonValue() {
-            return value;
-        }
-
-    }
-
-    private static class ObjectScope extends Scope {
-        private final Iterator<Map.Entry<String, JsonValue>> it;
-        private JsonValue value;
-        private String key;
-
-        ObjectScope(JsonObject object) {
-            this.it = object.entrySet().iterator();
-        }
-
-        @Override
-        public boolean hasNext() {
-            return it.hasNext();
-        }
-
-        @Override
-        public Map.Entry<String, JsonValue> next() {
-            Map.Entry<String, JsonValue> next = it.next();
-            this.key = next.getKey();
-            this.value = next.getValue();
-            return next;
-        }
-
-        @Override
-        public void remove() {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        JsonValue getJsonValue() {
-            return value;
-        }
-
-    }
-
-}
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2012-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package org.glassfish.json;
+
+import javax.json.*;
+import javax.json.stream.JsonLocation;
+import javax.json.stream.JsonParser;
+import java.math.BigDecimal;
+import java.util.ArrayDeque;
+import java.util.Deque;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.NoSuchElementException;
+
+/**
+ * {@link JsonParser} implementation on top of JsonArray/JsonObject
+ *
+ * @author Jitendra Kotamraju
+ */
+class JsonStructureParser implements JsonParser {
+
+    private Scope current;
+    private Event state;
+    private final Deque<Scope> scopeStack = new ArrayDeque<>();
+
+    JsonStructureParser(JsonArray array) {
+        current = new ArrayScope(array);
+    }
+
+    JsonStructureParser(JsonObject object) {
+        current = new ObjectScope(object);
+    }
+
+    @Override
+    public String getString() {
+        switch (state) {
+            case KEY_NAME:
+                return ((ObjectScope)current).key;
+            case VALUE_STRING:
+                return ((JsonString)current.getJsonValue()).getString();
+            case VALUE_NUMBER:
+                return ((JsonNumber)current.getJsonValue()).toString();
+            default:
+                throw new IllegalStateException(JsonMessages.PARSER_GETSTRING_ERR(state));
+        }
+    }
+
+    @Override
+    public boolean isIntegralNumber() {
+        if (state == Event.VALUE_NUMBER) {
+            return ((JsonNumber)current.getJsonValue()).isIntegral();
+        }
+        throw new IllegalStateException(JsonMessages.PARSER_ISINTEGRALNUMBER_ERR(state));
+    }
+
+    @Override
+    public int getInt() {
+        if (state == Event.VALUE_NUMBER) {
+            return ((JsonNumber)current.getJsonValue()).intValue();
+        }
+        throw new IllegalStateException(JsonMessages.PARSER_GETINT_ERR(state));
+    }
+
+    @Override
+    public long getLong() {
+        if (state == Event.VALUE_NUMBER) {
+            return ((JsonNumber)current.getJsonValue()).longValue();
+        }
+        throw new IllegalStateException(JsonMessages.PARSER_GETLONG_ERR(state));
+    }
+
+    @Override
+    public BigDecimal getBigDecimal() {
+        if (state == Event.VALUE_NUMBER) {
+            return ((JsonNumber)current.getJsonValue()).bigDecimalValue();
+        }
+        throw new IllegalStateException(JsonMessages.PARSER_GETBIGDECIMAL_ERR(state));
+    }
+
+    @Override
+    public JsonLocation getLocation() {
+        return JsonLocationImpl.UNKNOWN;
+    }
+
+    @Override
+    public boolean hasNext() {
+        return !((state == Event.END_OBJECT || state == Event.END_ARRAY) && scopeStack.isEmpty());
+    }
+
+    @Override
+    public Event next() {
+        if (!hasNext()) {
+            throw new NoSuchElementException();
+        }
+        transition();
+        return state;
+    }
+
+    private void transition() {
+        if (state == null) {
+            state = current instanceof ArrayScope ? Event.START_ARRAY : Event.START_OBJECT;
+        } else {
+            if (state == Event.END_OBJECT || state == Event.END_ARRAY) {
+                current = scopeStack.pop();
+            }
+            if (current instanceof ArrayScope) {
+                if (current.hasNext()) {
+                    current.next();
+                    state = getState(current.getJsonValue());
+                    if (state == Event.START_ARRAY || state == Event.START_OBJECT) {
+                        scopeStack.push(current);
+                        current = Scope.createScope(current.getJsonValue());
+                    }
+                } else {
+                    state = Event.END_ARRAY;
+                }
+            } else {
+                // ObjectScope
+                if (state == Event.KEY_NAME) {
+                    state = getState(current.getJsonValue());
+                    if (state == Event.START_ARRAY || state == Event.START_OBJECT) {
+                        scopeStack.push(current);
+                        current = Scope.createScope(current.getJsonValue());
+                    }
+                } else {
+                    if (current.hasNext()) {
+                        current.next();
+                        state = Event.KEY_NAME;
+                    } else {
+                        state = Event.END_OBJECT;
+                    }
+                }
+            }
+        }
+    }
+
+    @Override
+    public void close() {
+        // no-op
+    }
+
+    @Override
+    public void skipObject() {
+        if (current instanceof ObjectScope) {
+            int depth = 1;
+            do {
+                if (state == Event.KEY_NAME) {
+                    state = getState(current.getJsonValue());
+                    switch (state) {
+                        case START_OBJECT:
+                            depth++;
+                            break;
+                        case END_OBJECT:
+                            depth--;
+                            break;
+                        default:
+                            //no-op
+                    }
+                } else {
+                    if (current.hasNext()) {
+                        current.next();
+                        state = Event.KEY_NAME;
+                    } else {
+                        state = Event.END_OBJECT;
+                        depth--;
+                    }
+                }
+            } while (state != Event.END_OBJECT && depth > 0);
+        }
+    }
+
+    @Override
+    public void skipArray() {
+        if (current instanceof ArrayScope) {
+            int depth = 1;
+            do {
+                if (current.hasNext()) {
+                    current.next();
+                    state = getState(current.getJsonValue());
+                    switch (state) {
+                        case START_ARRAY:
+                            depth++;
+                            break;
+                        case END_ARRAY:
+                            depth--;
+                            break;
+                        default:
+                            //no-op
+                    }
+                } else {
+                    state = Event.END_ARRAY;
+                    depth--;
+                }
+            } while (!(state == Event.END_ARRAY && depth == 0));
+        }
+    }
+
+    private static Event getState(JsonValue value) {
+        switch (value.getValueType()) {
+            case ARRAY:
+                return Event.START_ARRAY;
+            case OBJECT:
+                return Event.START_OBJECT;
+            case STRING:
+                return Event.VALUE_STRING;
+            case NUMBER:
+                return Event.VALUE_NUMBER;
+            case TRUE:
+                return Event.VALUE_TRUE;
+            case FALSE:
+                return Event.VALUE_FALSE;
+            case NULL:
+                return Event.VALUE_NULL;
+            default:
+                throw new JsonException(JsonMessages.PARSER_STATE_ERR(value.getValueType()));
+        }
+    }
+
+    private static abstract class Scope implements Iterator {
+        abstract JsonValue getJsonValue();
+
+        static Scope createScope(JsonValue value) {
+            if (value instanceof JsonArray) {
+                return new ArrayScope((JsonArray)value);
+            } else if (value instanceof JsonObject) {
+                return new ObjectScope((JsonObject)value);
+            }
+            throw new JsonException(JsonMessages.PARSER_SCOPE_ERR(value));
+        }
+    }
+
+    private static class ArrayScope extends Scope {
+        private final Iterator<JsonValue> it;
+        private JsonValue value;
+
+        ArrayScope(JsonArray array) {
+            this.it = array.iterator();
+        }
+
+        @Override
+        public boolean hasNext() {
+            return it.hasNext();
+        }
+
+        @Override
+        public JsonValue next() {
+            value = it.next();
+            return value;
+        }
+
+        @Override
+        public void remove() {
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
+        JsonValue getJsonValue() {
+            return value;
+        }
+
+    }
+
+    private static class ObjectScope extends Scope {
+        private final Iterator<Map.Entry<String, JsonValue>> it;
+        private JsonValue value;
+        private String key;
+
+        ObjectScope(JsonObject object) {
+            this.it = object.entrySet().iterator();
+        }
+
+        @Override
+        public boolean hasNext() {
+            return it.hasNext();
+        }
+
+        @Override
+        public Map.Entry<String, JsonValue> next() {
+            Map.Entry<String, JsonValue> next = it.next();
+            this.key = next.getKey();
+            this.value = next.getValue();
+            return next;
+        }
+
+        @Override
+        public void remove() {
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
+        JsonValue getJsonValue() {
+            return value;
+        }
+
+    }
+
+}
diff --git a/src/org/glassfish/json/JsonTokenizer.java b/src/org/glassfish/json/JsonTokenizer.java
index 17b3131..c8776e4 100644
--- a/src/org/glassfish/json/JsonTokenizer.java
+++ b/src/org/glassfish/json/JsonTokenizer.java
@@ -1,542 +1,610 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2012-2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import org.glassfish.json.api.BufferPool;
-
-import javax.json.JsonException;
-import javax.json.stream.JsonLocation;
-import javax.json.stream.JsonParser;
-import javax.json.stream.JsonParsingException;
-import java.io.*;
-import java.math.BigDecimal;
-import java.util.Arrays;
-
-import javax.json.stream.JsonParser.Event;
-
-/**
- * JSON Tokenizer
- *
- * @author Jitendra Kotamraju
- */
-final class JsonTokenizer implements Closeable {
-    // Table to look up hex ch -> value (for e.g HEX['F'] = 15, HEX['5'] = 5)
-    private final static int[] HEX = new int[128];
-    static {
-        Arrays.fill(HEX, -1);
-        for (int i='0'; i <= '9'; i++) {
-            HEX[i] = i-'0';
-        }
-        for (int i='A'; i <= 'F'; i++) {
-            HEX[i] = 10+i-'A';
-        }
-        for (int i='a'; i <= 'f'; i++) {
-            HEX[i] = 10+i-'a';
-        }
-    }
-    private final static int HEX_LENGTH = HEX.length;
-
-    private final BufferPool bufferPool;
-
-    private final Reader reader;
-
-    // Internal buffer that is used for parsing. It is also used
-    // for storing current string and number value token
-    private char[] buf;
-
-    // Indexes in buffer
-    //
-    // XXXssssssssssssXXXXXXXXXXXXXXXXXXXXXXrrrrrrrrrrrrrrXXXXXX
-    //    ^           ^                     ^             ^
-    //    |           |                     |             |
-    //   storeBegin  storeEnd            readBegin      readEnd
-    private int readBegin;
-    private int readEnd;
-    private int storeBegin;
-    private int storeEnd;
-
-    // line number of the current pointer of parsing char
-    private long lineNo = 1;
-
-    // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-    // ^
-    // |
-    // bufferOffset
-    //
-    // offset of the last \r\n or \n. will be used to calculate column number
-    // of a token or an error. This may be outside of the buffer.
-    private long lastLineOffset = 0;
-    // offset in the stream for the start of the buffer, will be used in
-    // calculating JsonLocation's stream offset, column no.
-    private long bufferOffset = 0;
-
-    private boolean minus;
-    private boolean fracOrExp;
-    private BigDecimal bd;
-
-    enum JsonToken {
-        CURLYOPEN(Event.START_OBJECT, false),
-        SQUAREOPEN(Event.START_ARRAY, false),
-        COLON(null, false),
-        COMMA(null, false),
-        STRING(Event.VALUE_STRING, true),
-        NUMBER(Event.VALUE_NUMBER, true),
-        TRUE(Event.VALUE_TRUE, true),
-        FALSE(Event.VALUE_FALSE, true),
-        NULL(Event.VALUE_NULL, true),
-        CURLYCLOSE(Event.END_OBJECT, false),
-        SQUARECLOSE(Event.END_ARRAY, false),
-        EOF(null, false);
-
-        private final JsonParser.Event event;
-        private final boolean value;
-
-        JsonToken(JsonParser.Event event, boolean value) {
-            this.event = event;
-            this.value = value;
-        }
-
-        JsonParser.Event getEvent() {
-            return event;
-        }
-
-        boolean isValue() {
-            return value;
-        }
-    }
-
-    JsonTokenizer(Reader reader, BufferPool bufferPool) {
-        this.reader = reader;
-        this.bufferPool = bufferPool;
-        buf = bufferPool.take();
-    }
-
-    private void readString() {
-        // when inPlace is true, no need to copy chars
-        boolean inPlace = true;
-        storeBegin = storeEnd = readBegin;
-
-        do {
-            // Write unescaped char block within the current buffer
-            if (inPlace) {
-                int ch;
-                while(readBegin < readEnd && ((ch=buf[readBegin]) >= 0x20) && ch != '\\') {
-                    if (ch == '"') {
-                        storeEnd = readBegin++; // ++ to consume quote char
-                        return;                 // Got the entire string
-                    }
-                    readBegin++;                // consume unescaped char
-                }
-                storeEnd = readBegin;
-            }
-
-            // string may be crossing buffer boundaries and may contain
-            // escaped characters.
-            int ch = read();
-            if (ch >= 0x20 && ch != 0x22 && ch != 0x5c) {
-                if (!inPlace) {
-                    buf[storeEnd] = (char)ch;
-                }
-                storeEnd++;
-                continue;
-            }
-            switch (ch) {
-                case '\\':
-                    inPlace = false;        // Now onwards need to copy chars
-                    unescape();
-                    break;
-                case '"':
-                    return;
-                default:
-                    throw unexpectedChar(ch);
-            }
-        } while (true);
-    }
-
-    private void unescape() {
-        int ch = read();
-        switch (ch) {
-            case 'b':
-                buf[storeEnd++] = '\b';
-                break;
-            case 't':
-                buf[storeEnd++] = '\t';
-                break;
-            case 'n':
-                buf[storeEnd++] = '\n';
-                break;
-            case 'f':
-                buf[storeEnd++] = '\f';
-                break;
-            case 'r':
-                buf[storeEnd++] = '\r';
-                break;
-            case '"':
-            case '\\':
-            case '/':
-                buf[storeEnd++] = (char)ch;
-                break;
-            case 'u': {
-                int unicode = 0;
-                for (int i = 0; i < 4; i++) {
-                    int ch3 = read();
-                    int digit = (ch3 >= 0 && ch3 < HEX_LENGTH) ? HEX[ch3] : -1;
-                    if (digit < 0) {
-                        throw unexpectedChar(ch3);
-                    }
-                    unicode = (unicode << 4)|digit;
-                }
-                buf[storeEnd++] = (char)unicode;
-                break;
-            }
-            default:
-                throw unexpectedChar(ch);
-        }
-    }
-
-    // Reads a number char. If the char is within the buffer, directly
-    // reads from the buffer. Otherwise, uses read() which takes care
-    // of resizing, filling up the buf, adjusting the pointers
-    private int readNumberChar() {
-        if (readBegin < readEnd) {
-            return buf[readBegin++];
-        } else {
-            storeEnd = readBegin;
-            return read();
-        }
-    }
-
-    private void readNumber(int ch)  {
-        storeBegin = storeEnd = readBegin-1;
-        // sign
-        if (ch == '-') {
-            this.minus = true;
-            ch = readNumberChar();
-            if (ch < '0' || ch >'9') {
-                throw unexpectedChar(ch);
-            }
-        }
-
-        // int
-        if (ch == '0') {
-            ch = readNumberChar();
-        } else {
-            do {
-                ch = readNumberChar();
-            } while (ch >= '0' && ch <= '9');
-        }
-
-        // frac
-        if (ch == '.') {
-            this.fracOrExp = true;
-            int count = 0;
-            do {
-                ch = readNumberChar();
-                count++;
-            } while (ch >= '0' && ch <= '9');
-            if (count == 1) {
-                throw unexpectedChar(ch);
-            }
-        }
-
-        // exp
-        if (ch == 'e' || ch == 'E') {
-            this.fracOrExp = true;
-            ch = readNumberChar();
-            if (ch == '+' || ch == '-') {
-                ch = readNumberChar();
-            }
-            int count;
-            for (count = 0; ch >= '0' && ch <= '9'; count++) {
-                ch = readNumberChar();
-            }
-            if (count == 0) {
-                throw unexpectedChar(ch);
-            }
-        }
-        readBegin--;
-        storeEnd = readBegin;
-    }
-
-    private void readTrue() {
-        int ch1 = read();
-        if (ch1 != 'r') {
-            throw expectedChar(ch1, 'r');
-        }
-        int ch2 = read();
-        if (ch2 != 'u') {
-            throw expectedChar(ch2, 'u');
-        }
-        int ch3 = read();
-        if (ch3 != 'e') {
-            throw expectedChar(ch3, 'e');
-        }
-    }
-
-    private void readFalse() {
-        int ch1 = read();
-        if (ch1 != 'a') {
-            throw expectedChar(ch1, 'a');
-        }
-        int ch2 = read();
-        if (ch2 != 'l') {
-            throw expectedChar(ch2, 'l');
-        }
-        int ch3 = read();
-        if (ch3 != 's') {
-            throw expectedChar(ch3, 's');
-        }
-        int ch4 = read();
-        if (ch4 != 'e') {
-            throw expectedChar(ch4, 'e');
-        }
-    }
-
-    private void readNull() {
-        int ch1 = read();
-        if (ch1 != 'u') {
-            throw expectedChar(ch1, 'u');
-        }
-        int ch2 = read();
-        if (ch2 != 'l') {
-            throw expectedChar(ch2, 'l');
-        }
-        int ch3 = read();
-        if (ch3 != 'l') {
-            throw expectedChar(ch3, 'l');
-        }
-    }
-
-    /*
-     * Could be optimized if the parser uses separate methods to match colon
-     * etc (that would avoid the switch statement cost in certain cases)
-     */
-    JsonToken nextToken() {
-        reset();
-        int ch = read();
-
-        // whitespace
-        while (ch == 0x20 || ch == 0x09 || ch == 0x0a || ch == 0x0d) {
-            if (ch == '\r') {
-                ++lineNo;
-                ch = read();
-                if (ch == '\n') {
-                    lastLineOffset = bufferOffset+readBegin;
-                } else {
-                    lastLineOffset = bufferOffset+readBegin-1;
-                    continue;
-                }
-            } else if (ch == '\n') {
-                ++lineNo;
-                lastLineOffset = bufferOffset+readBegin;
-            }
-            ch = read();
-        }
-
-        switch (ch) {
-            case '"':
-                readString();
-                return JsonToken.STRING;
-            case '{':
-                return JsonToken.CURLYOPEN;
-            case '[':
-                return JsonToken.SQUAREOPEN;
-            case ':':
-                return JsonToken.COLON;
-            case ',':
-                return JsonToken.COMMA;
-            case 't':
-                readTrue();
-                return JsonToken.TRUE;
-            case 'f':
-                readFalse();
-                return JsonToken.FALSE;
-            case 'n':
-                readNull();
-                return JsonToken.NULL;
-            case ']':
-                return JsonToken.SQUARECLOSE;
-            case '}':
-                return JsonToken.CURLYCLOSE;
-            case '0':
-            case '1':
-            case '2':
-            case '3':
-            case '4':
-            case '5':
-            case '6':
-            case '7':
-            case '8':
-            case '9':
-            case '-':
-                readNumber(ch);
-                return JsonToken.NUMBER;
-            case -1:
-                return JsonToken.EOF;
-            default:
-                throw unexpectedChar(ch);
-        }
-    }
-
-    // Gives the location of the last char. Used for
-    // JsonParsingException.getLocation
-    JsonLocation getLastCharLocation() {
-        // Already read the char, so subtracting -1
-        return new JsonLocationImpl(lineNo, bufferOffset +readBegin-lastLineOffset, bufferOffset +readBegin-1);
-    }
-
-    // Gives the parser location. Used for JsonParser.getLocation
-    JsonLocation getLocation() {
-        return new JsonLocationImpl(lineNo, bufferOffset +readBegin-lastLineOffset+1, bufferOffset +readBegin);
-    }
-
-    private int read() {
-        try {
-            if (readBegin == readEnd) {     // need to fill the buffer
-                int len = fillBuf();
-                if (len == -1) {
-                    return -1;
-                }
-                assert len != 0;
-                readBegin = storeEnd;
-                readEnd = readBegin+len;
-            }
-            return buf[readBegin++];
-        } catch (IOException ioe) {
-            throw new JsonException(JsonMessages.TOKENIZER_IO_ERR(), ioe);
-        }
-    }
-
-    private int fillBuf() throws IOException {
-        if (storeEnd != 0) {
-            int storeLen = storeEnd-storeBegin;
-            if (storeLen > 0) {
-                // there is some store data
-                if (storeLen == buf.length) {
-                    // buffer is full, double the capacity
-                    char[] doubleBuf = Arrays.copyOf(buf, 2 * buf.length);
-                    bufferPool.recycle(buf);
-                    buf = doubleBuf;
-                } else {
-                    // Left shift all the stored data to make space
-                    System.arraycopy(buf, storeBegin, buf, 0, storeLen);
-                    storeEnd = storeLen;
-                    storeBegin = 0;
-                    bufferOffset += readBegin-storeEnd;
-                }
-            } else {
-                storeBegin = storeEnd = 0;
-                bufferOffset += readBegin;
-            }
-        } else {
-            bufferOffset += readBegin;
-        }
-        // Fill the rest of the buf
-        return reader.read(buf, storeEnd, buf.length-storeEnd);
-    }
-
-    // state associated with the current token is no more valid
-    private void reset() {
-        if (storeEnd != 0) {
-            storeBegin = 0;
-            storeEnd = 0;
-            bd = null;
-            minus = false;
-            fracOrExp = false;
-        }
-    }
-
-    String getValue() {
-        return new String(buf, storeBegin, storeEnd-storeBegin);
-    }
-
-    BigDecimal getBigDecimal() {
-        if (bd == null) {
-            bd = new BigDecimal(buf, storeBegin, storeEnd-storeBegin);
-        }
-        return bd;
-    }
-
-    int getInt() {
-        // no need to create BigDecimal for common integer values (1-9 digits)
-        int storeLen = storeEnd-storeBegin;
-        if (!fracOrExp && (storeLen <= 9 || (minus && storeLen == 10))) {
-            int num = 0;
-            int i = minus ? 1 : 0;
-            for(; i < storeLen; i++) {
-                num = num * 10 + (buf[storeBegin+i] - '0');
-            }
-            return minus ? -num : num;
-        } else {
-            return getBigDecimal().intValue();
-        }
-    }
-
-    // returns true for common integer values (1-9 digits).
-    // So there are cases it will return false even though the number is int
-    boolean isDefinitelyInt() {
-        int storeLen = storeEnd-storeBegin;
-        return !fracOrExp && (storeLen <= 9 || (minus && storeLen == 10));
-    }
-
-    boolean isIntegral() {
-        return !fracOrExp || getBigDecimal().scale() == 0;
-    }
-
-    @Override
-    public void close() throws IOException {
-        reader.close();
-        bufferPool.recycle(buf);
-    }
-
-    private JsonParsingException unexpectedChar(int ch) {
-        JsonLocation location = getLastCharLocation();
-        return new JsonParsingException(
-            JsonMessages.TOKENIZER_UNEXPECTED_CHAR(ch, location), location);
-    }
-
-    private JsonParsingException expectedChar(int unexpected, char expected) {
-        JsonLocation location = getLastCharLocation();
-        return new JsonParsingException(
-                JsonMessages.TOKENIZER_EXPECTED_CHAR(unexpected, location, expected), location);
-    }
-    
-}
\ No newline at end of file
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2012-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package org.glassfish.json;
+
+import org.glassfish.json.api.BufferPool;
+
+import javax.json.JsonException;
+import javax.json.stream.JsonLocation;
+import javax.json.stream.JsonParser;
+import javax.json.stream.JsonParsingException;
+import java.io.*;
+import java.math.BigDecimal;
+import java.util.Arrays;
+
+import javax.json.stream.JsonParser.Event;
+
+/**
+ * JSON Tokenizer
+ *
+ * @author Jitendra Kotamraju
+ */
+final class JsonTokenizer implements Closeable {
+    // Table to look up hex ch -> value (for e.g HEX['F'] = 15, HEX['5'] = 5)
+    private final static int[] HEX = new int[128];
+    static {
+        Arrays.fill(HEX, -1);
+        for (int i='0'; i <= '9'; i++) {
+            HEX[i] = i-'0';
+        }
+        for (int i='A'; i <= 'F'; i++) {
+            HEX[i] = 10+i-'A';
+        }
+        for (int i='a'; i <= 'f'; i++) {
+            HEX[i] = 10+i-'a';
+        }
+    }
+    private final static int HEX_LENGTH = HEX.length;
+
+    private final BufferPool bufferPool;
+
+    private final Reader reader;
+
+    // Internal buffer that is used for parsing. It is also used
+    // for storing current string and number value token
+    private char[] buf;
+
+    // Indexes in buffer
+    //
+    // XXXssssssssssssXXXXXXXXXXXXXXXXXXXXXXrrrrrrrrrrrrrrXXXXXX
+    //    ^           ^                     ^             ^
+    //    |           |                     |             |
+    //   storeBegin  storeEnd            readBegin      readEnd
+    private int readBegin;
+    private int readEnd;
+    private int storeBegin;
+    private int storeEnd;
+
+    // line number of the current pointer of parsing char
+    private long lineNo = 1;
+
+    // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+    // ^
+    // |
+    // bufferOffset
+    //
+    // offset of the last \r\n or \n. will be used to calculate column number
+    // of a token or an error. This may be outside of the buffer.
+    private long lastLineOffset = 0;
+    // offset in the stream for the start of the buffer, will be used in
+    // calculating JsonLocation's stream offset, column no.
+    private long bufferOffset = 0;
+
+    private boolean minus;
+    private boolean fracOrExp;
+    private BigDecimal bd;
+
+    enum JsonToken {
+        CURLYOPEN(Event.START_OBJECT, false),
+        SQUAREOPEN(Event.START_ARRAY, false),
+        COLON(null, false),
+        COMMA(null, false),
+        STRING(Event.VALUE_STRING, true),
+        NUMBER(Event.VALUE_NUMBER, true),
+        TRUE(Event.VALUE_TRUE, true),
+        FALSE(Event.VALUE_FALSE, true),
+        NULL(Event.VALUE_NULL, true),
+        CURLYCLOSE(Event.END_OBJECT, false),
+        SQUARECLOSE(Event.END_ARRAY, false),
+        EOF(null, false);
+
+        private final JsonParser.Event event;
+        private final boolean value;
+
+        JsonToken(JsonParser.Event event, boolean value) {
+            this.event = event;
+            this.value = value;
+        }
+
+        JsonParser.Event getEvent() {
+            return event;
+        }
+
+        boolean isValue() {
+            return value;
+        }
+    }
+
+    JsonTokenizer(Reader reader, BufferPool bufferPool) {
+        this.reader = reader;
+        this.bufferPool = bufferPool;
+        buf = bufferPool.take();
+    }
+
+    private void readString() {
+        // when inPlace is true, no need to copy chars
+        boolean inPlace = true;
+        storeBegin = storeEnd = readBegin;
+
+        do {
+            // Write unescaped char block within the current buffer
+            if (inPlace) {
+                int ch;
+                while(readBegin < readEnd && ((ch=buf[readBegin]) >= 0x20) && ch != '\\') {
+                    if (ch == '"') {
+                        storeEnd = readBegin++; // ++ to consume quote char
+                        return;                 // Got the entire string
+                    }
+                    readBegin++;                // consume unescaped char
+                }
+                storeEnd = readBegin;
+            }
+
+            // string may be crossing buffer boundaries and may contain
+            // escaped characters.
+            int ch = read();
+            if (ch >= 0x20 && ch != 0x22 && ch != 0x5c) {
+                if (!inPlace) {
+                    buf[storeEnd] = (char)ch;
+                }
+                storeEnd++;
+                continue;
+            }
+            switch (ch) {
+                case '\\':
+                    inPlace = false;        // Now onwards need to copy chars
+                    unescape();
+                    break;
+                case '"':
+                    return;
+                default:
+                    throw unexpectedChar(ch);
+            }
+        } while (true);
+    }
+
+    private void unescape() {
+        int ch = read();
+        switch (ch) {
+            case 'b':
+                buf[storeEnd++] = '\b';
+                break;
+            case 't':
+                buf[storeEnd++] = '\t';
+                break;
+            case 'n':
+                buf[storeEnd++] = '\n';
+                break;
+            case 'f':
+                buf[storeEnd++] = '\f';
+                break;
+            case 'r':
+                buf[storeEnd++] = '\r';
+                break;
+            case '"':
+            case '\\':
+            case '/':
+                buf[storeEnd++] = (char)ch;
+                break;
+            case 'u': {
+                int unicode = 0;
+                for (int i = 0; i < 4; i++) {
+                    int ch3 = read();
+                    int digit = (ch3 >= 0 && ch3 < HEX_LENGTH) ? HEX[ch3] : -1;
+                    if (digit < 0) {
+                        throw unexpectedChar(ch3);
+                    }
+                    unicode = (unicode << 4)|digit;
+                }
+                buf[storeEnd++] = (char)unicode;
+                break;
+            }
+            default:
+                throw unexpectedChar(ch);
+        }
+    }
+
+    // Reads a number char. If the char is within the buffer, directly
+    // reads from the buffer. Otherwise, uses read() which takes care
+    // of resizing, filling up the buf, adjusting the pointers
+    private int readNumberChar() {
+        if (readBegin < readEnd) {
+            return buf[readBegin++];
+        } else {
+            storeEnd = readBegin;
+            return read();
+        }
+    }
+
+    private void readNumber(int ch)  {
+        storeBegin = storeEnd = readBegin-1;
+        // sign
+        if (ch == '-') {
+            this.minus = true;
+            ch = readNumberChar();
+            if (ch < '0' || ch >'9') {
+                throw unexpectedChar(ch);
+            }
+        }
+
+        // int
+        if (ch == '0') {
+            ch = readNumberChar();
+        } else {
+            do {
+                ch = readNumberChar();
+            } while (ch >= '0' && ch <= '9');
+        }
+
+        // frac
+        if (ch == '.') {
+            this.fracOrExp = true;
+            int count = 0;
+            do {
+                ch = readNumberChar();
+                count++;
+            } while (ch >= '0' && ch <= '9');
+            if (count == 1) {
+                throw unexpectedChar(ch);
+            }
+        }
+
+        // exp
+        if (ch == 'e' || ch == 'E') {
+            this.fracOrExp = true;
+            ch = readNumberChar();
+            if (ch == '+' || ch == '-') {
+                ch = readNumberChar();
+            }
+            int count;
+            for (count = 0; ch >= '0' && ch <= '9'; count++) {
+                ch = readNumberChar();
+            }
+            if (count == 0) {
+                throw unexpectedChar(ch);
+            }
+        }
+        if (ch != -1) {
+            // Only reset readBegin if eof has not been reached
+            readBegin--;
+            storeEnd = readBegin;
+        }
+    }
+
+    private void readTrue() {
+        int ch1 = read();
+        if (ch1 != 'r') {
+            throw expectedChar(ch1, 'r');
+        }
+        int ch2 = read();
+        if (ch2 != 'u') {
+            throw expectedChar(ch2, 'u');
+        }
+        int ch3 = read();
+        if (ch3 != 'e') {
+            throw expectedChar(ch3, 'e');
+        }
+    }
+
+    private void readFalse() {
+        int ch1 = read();
+        if (ch1 != 'a') {
+            throw expectedChar(ch1, 'a');
+        }
+        int ch2 = read();
+        if (ch2 != 'l') {
+            throw expectedChar(ch2, 'l');
+        }
+        int ch3 = read();
+        if (ch3 != 's') {
+            throw expectedChar(ch3, 's');
+        }
+        int ch4 = read();
+        if (ch4 != 'e') {
+            throw expectedChar(ch4, 'e');
+        }
+    }
+
+    private void readNull() {
+        int ch1 = read();
+        if (ch1 != 'u') {
+            throw expectedChar(ch1, 'u');
+        }
+        int ch2 = read();
+        if (ch2 != 'l') {
+            throw expectedChar(ch2, 'l');
+        }
+        int ch3 = read();
+        if (ch3 != 'l') {
+            throw expectedChar(ch3, 'l');
+        }
+    }
+
+    /*
+     * Could be optimized if the parser uses separate methods to match colon
+     * etc (that would avoid the switch statement cost in certain cases)
+     */
+    JsonToken nextToken() {
+        reset();
+        int ch = read();
+
+        // whitespace
+        while (ch == 0x20 || ch == 0x09 || ch == 0x0a || ch == 0x0d) {
+            if (ch == '\r') {
+                ++lineNo;
+                ch = read();
+                if (ch == '\n') {
+                    lastLineOffset = bufferOffset+readBegin;
+                } else {
+                    lastLineOffset = bufferOffset+readBegin-1;
+                    continue;
+                }
+            } else if (ch == '\n') {
+                ++lineNo;
+                lastLineOffset = bufferOffset+readBegin;
+            }
+            ch = read();
+        }
+
+        switch (ch) {
+            case '"':
+                readString();
+                return JsonToken.STRING;
+            case '{':
+                return JsonToken.CURLYOPEN;
+            case '[':
+                return JsonToken.SQUAREOPEN;
+            case ':':
+                return JsonToken.COLON;
+            case ',':
+                return JsonToken.COMMA;
+            case 't':
+                readTrue();
+                return JsonToken.TRUE;
+            case 'f':
+                readFalse();
+                return JsonToken.FALSE;
+            case 'n':
+                readNull();
+                return JsonToken.NULL;
+            case ']':
+                return JsonToken.SQUARECLOSE;
+            case '}':
+                return JsonToken.CURLYCLOSE;
+            case '0':
+            case '1':
+            case '2':
+            case '3':
+            case '4':
+            case '5':
+            case '6':
+            case '7':
+            case '8':
+            case '9':
+            case '-':
+                readNumber(ch);
+                return JsonToken.NUMBER;
+            case -1:
+                return JsonToken.EOF;
+            default:
+                throw unexpectedChar(ch);
+        }
+    }
+
+    boolean hasNextToken() {
+        reset();
+        int ch = peek();
+
+        // whitespace
+        while (ch == 0x20 || ch == 0x09 || ch == 0x0a || ch == 0x0d) {
+            if (ch == '\r') {
+                ++lineNo;
+                ++readBegin;
+                ch = peek();
+                if (ch == '\n') {
+                    lastLineOffset = bufferOffset+readBegin+1;
+                } else {
+                    lastLineOffset = bufferOffset+readBegin;
+                    continue;
+                }
+            } else if (ch == '\n') {
+                ++lineNo;
+                lastLineOffset = bufferOffset+readBegin+1;
+            }
+            ++readBegin;
+            ch = peek();
+        }
+        return ch != -1;
+    }
+
+    private int peek() {
+        try {
+            if (readBegin == readEnd) {     // need to fill the buffer
+                int len = fillBuf();
+                if (len == -1) {
+                    return -1;
+                }
+                assert len != 0;
+                readBegin = storeEnd;
+                readEnd = readBegin+len;
+            }
+            return buf[readBegin];
+        } catch (IOException ioe) {
+            throw new JsonException(JsonMessages.TOKENIZER_IO_ERR(), ioe);
+        }
+    }
+
+    // Gives the location of the last char. Used for
+    // JsonParsingException.getLocation
+    JsonLocation getLastCharLocation() {
+        // Already read the char, so subtracting -1
+        return new JsonLocationImpl(lineNo, bufferOffset +readBegin-lastLineOffset, bufferOffset +readBegin-1);
+    }
+
+    // Gives the parser location. Used for JsonParser.getLocation
+    JsonLocation getLocation() {
+        return new JsonLocationImpl(lineNo, bufferOffset +readBegin-lastLineOffset+1, bufferOffset +readBegin);
+    }
+
+    private int read() {
+        try {
+            if (readBegin == readEnd) {     // need to fill the buffer
+                int len = fillBuf();
+                if (len == -1) {
+                    return -1;
+                }
+                assert len != 0;
+                readBegin = storeEnd;
+                readEnd = readBegin+len;
+            }
+            return buf[readBegin++];
+        } catch (IOException ioe) {
+            throw new JsonException(JsonMessages.TOKENIZER_IO_ERR(), ioe);
+        }
+    }
+
+    private int fillBuf() throws IOException {
+        if (storeEnd != 0) {
+            int storeLen = storeEnd-storeBegin;
+            if (storeLen > 0) {
+                // there is some store data
+                if (storeLen == buf.length) {
+                    // buffer is full, double the capacity
+                    char[] doubleBuf = Arrays.copyOf(buf, 2 * buf.length);
+                    bufferPool.recycle(buf);
+                    buf = doubleBuf;
+                } else {
+                    // Left shift all the stored data to make space
+                    System.arraycopy(buf, storeBegin, buf, 0, storeLen);
+                    storeEnd = storeLen;
+                    storeBegin = 0;
+                    bufferOffset += readBegin-storeEnd;
+                }
+            } else {
+                storeBegin = storeEnd = 0;
+                bufferOffset += readBegin;
+            }
+        } else {
+            bufferOffset += readBegin;
+        }
+        // Fill the rest of the buf
+        return reader.read(buf, storeEnd, buf.length-storeEnd);
+    }
+
+    // state associated with the current token is no more valid
+    private void reset() {
+        if (storeEnd != 0) {
+            storeBegin = 0;
+            storeEnd = 0;
+            bd = null;
+            minus = false;
+            fracOrExp = false;
+        }
+    }
+
+    String getValue() {
+        return new String(buf, storeBegin, storeEnd-storeBegin);
+    }
+
+    BigDecimal getBigDecimal() {
+        if (bd == null) {
+            bd = new BigDecimal(buf, storeBegin, storeEnd-storeBegin);
+        }
+        return bd;
+    }
+
+    int getInt() {
+        // no need to create BigDecimal for common integer values (1-9 digits)
+        int storeLen = storeEnd-storeBegin;
+        if (!fracOrExp && (storeLen <= 9 || (minus && storeLen <= 10))) {
+            int num = 0;
+            int i = minus ? 1 : 0;
+            for(; i < storeLen; i++) {
+                num = num * 10 + (buf[storeBegin+i] - '0');
+            }
+            return minus ? -num : num;
+        } else {
+            return getBigDecimal().intValue();
+        }
+    }
+    
+    long getLong() {
+        // no need to create BigDecimal for common integer values (1-18 digits)
+        int storeLen = storeEnd-storeBegin;
+        if (!fracOrExp && (storeLen <= 18 || (minus && storeLen <= 19))) {
+            long num = 0;
+            int i = minus ? 1 : 0;
+            for(; i < storeLen; i++) {
+                num = num * 10 + (buf[storeBegin+i] - '0');
+            }
+            return minus ? -num : num;
+        } else {
+            return getBigDecimal().longValue();
+        }
+    }
+
+    // returns true for common integer values (1-9 digits).
+    // So there are cases it will return false even though the number is int
+    boolean isDefinitelyInt() {
+        int storeLen = storeEnd-storeBegin;
+        return !fracOrExp && (storeLen <= 9 || (minus && storeLen <= 10));
+    }
+    
+    // returns true for common long values (1-18 digits).
+    // So there are cases it will return false even though the number is long
+    boolean isDefinitelyLong() {
+    	int storeLen = storeEnd-storeBegin;
+    	return !fracOrExp && (storeLen <= 18 || (minus && storeLen <= 19));
+    }
+
+    boolean isIntegral() {
+        return !fracOrExp || getBigDecimal().scale() == 0;
+    }
+
+    @Override
+    public void close() throws IOException {
+        reader.close();
+        bufferPool.recycle(buf);
+    }
+
+    private JsonParsingException unexpectedChar(int ch) {
+        JsonLocation location = getLastCharLocation();
+        return new JsonParsingException(
+            JsonMessages.TOKENIZER_UNEXPECTED_CHAR(ch, location), location);
+    }
+
+    private JsonParsingException expectedChar(int unexpected, char expected) {
+        JsonLocation location = getLastCharLocation();
+        return new JsonParsingException(
+                JsonMessages.TOKENIZER_EXPECTED_CHAR(unexpected, location, expected), location);
+    }
+    
+}
diff --git a/src/org/glassfish/json/JsonUtil.java b/src/org/glassfish/json/JsonUtil.java
new file mode 100644
index 0000000..f696314
--- /dev/null
+++ b/src/org/glassfish/json/JsonUtil.java
@@ -0,0 +1,99 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2015-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package org.glassfish.json;
+
+import java.io.StringReader;
+import javax.json.Json;
+import javax.json.JsonReader;
+import javax.json.JsonValue;
+import javax.json.stream.JsonParsingException;
+
+/**
+ * A utility class
+ * 
+ * @since 1.1
+ */
+public final class JsonUtil {
+
+    private JsonUtil() {
+    }
+
+    /**
+     * Reads the input JSON text and returns a JsonValue.
+     * <p>For convenience, single quotes as well as double quotes
+     * are allowed to delimit JSON strings. If single quotes are
+     * used, any quotes, single or double, in the JSON string must be
+     * escaped (prepend with a '\').
+     *
+     * @param jsonString the input JSON data
+     * @return the object model for {@code jsonString}
+     * @throws JsonParsingException if the input is not legal JSON text
+     */
+    public static JsonValue toJson(String jsonString) {
+        StringBuilder builder = new StringBuilder();
+        boolean single_context = false;
+        for (int i = 0; i < jsonString.length(); i++) {
+            char ch = jsonString.charAt(i);
+            if (ch == '\\') {
+                i = i + 1;
+                if (i < jsonString.length()) {
+                    ch = jsonString.charAt(i);
+                    if (!(single_context && ch == '\'')) {
+                        // unescape ' inside single quotes
+                        builder.append('\\');
+                    }
+                }
+            } else if (ch == '\'') {
+                // Turn ' into ", for proper JSON string
+                ch = '"';
+                single_context = ! single_context;
+            }
+            builder.append(ch);
+        }
+                   
+        JsonReader reader = Json.createReader(
+                                new StringReader(builder.toString()));
+        JsonValue value = reader.readValue();
+        reader.close();
+        return value;
+    }
+}
+
diff --git a/src/org/glassfish/json/JsonWriterFactoryImpl.java b/src/org/glassfish/json/JsonWriterFactoryImpl.java
index 59712aa..44e656c 100644
--- a/src/org/glassfish/json/JsonWriterFactoryImpl.java
+++ b/src/org/glassfish/json/JsonWriterFactoryImpl.java
@@ -1,86 +1,86 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import org.glassfish.json.api.BufferPool;
-
-import javax.json.JsonWriter;
-import javax.json.JsonWriterFactory;
-import java.io.OutputStream;
-import java.io.Writer;
-import java.nio.charset.Charset;
-import java.util.Map;
-
-/**
- * @author Jitendra Kotamraju
- */
-class JsonWriterFactoryImpl implements JsonWriterFactory {
-    private final Map<String, ?> config;        // unmodifiable map
-    private final boolean prettyPrinting;
-    private final BufferPool bufferPool;
-
-    JsonWriterFactoryImpl(Map<String, ?> config, boolean prettyPrinting,
-            BufferPool bufferPool) {
-        this.config = config;
-        this.prettyPrinting = prettyPrinting;
-        this.bufferPool = bufferPool;
-    }
-
-    @Override
-    public JsonWriter createWriter(Writer writer) {
-        return new JsonWriterImpl(writer, prettyPrinting, bufferPool);
-    }
-
-    @Override
-    public JsonWriter createWriter(OutputStream out) {
-        return new JsonWriterImpl(out, prettyPrinting, bufferPool);
-    }
-
-    @Override
-    public JsonWriter createWriter(OutputStream out, Charset charset) {
-        return new JsonWriterImpl(out, charset, prettyPrinting, bufferPool);
-    }
-
-    @Override
-    public Map<String, ?> getConfigInUse() {
-        return config;
-    }
-}
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2013-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package org.glassfish.json;
+
+import org.glassfish.json.api.BufferPool;
+
+import javax.json.JsonWriter;
+import javax.json.JsonWriterFactory;
+import java.io.OutputStream;
+import java.io.Writer;
+import java.nio.charset.Charset;
+import java.util.Map;
+
+/**
+ * @author Jitendra Kotamraju
+ */
+class JsonWriterFactoryImpl implements JsonWriterFactory {
+    private final Map<String, ?> config;        // unmodifiable map
+    private final boolean prettyPrinting;
+    private final BufferPool bufferPool;
+
+    JsonWriterFactoryImpl(Map<String, ?> config, boolean prettyPrinting,
+            BufferPool bufferPool) {
+        this.config = config;
+        this.prettyPrinting = prettyPrinting;
+        this.bufferPool = bufferPool;
+    }
+
+    @Override
+    public JsonWriter createWriter(Writer writer) {
+        return new JsonWriterImpl(writer, prettyPrinting, bufferPool);
+    }
+
+    @Override
+    public JsonWriter createWriter(OutputStream out) {
+        return new JsonWriterImpl(out, prettyPrinting, bufferPool);
+    }
+
+    @Override
+    public JsonWriter createWriter(OutputStream out, Charset charset) {
+        return new JsonWriterImpl(out, charset, prettyPrinting, bufferPool);
+    }
+
+    @Override
+    public Map<String, ?> getConfigInUse() {
+        return config;
+    }
+}
diff --git a/src/org/glassfish/json/JsonWriterImpl.java b/src/org/glassfish/json/JsonWriterImpl.java
index 1ce30dc..a68b1a4 100644
--- a/src/org/glassfish/json/JsonWriterImpl.java
+++ b/src/org/glassfish/json/JsonWriterImpl.java
@@ -1,169 +1,191 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import org.glassfish.json.api.BufferPool;
-
-import javax.json.*;
-import java.io.FilterOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.Writer;
-import java.nio.charset.Charset;
-import java.util.Map;
-
-/**
- * JsonWriter impl using generator.
- *
- * @author Jitendra Kotamraju
- */
-class JsonWriterImpl implements JsonWriter {
-    private static final Charset UTF_8 = Charset.forName("UTF-8");
-
-    private final JsonGeneratorImpl generator;
-    private boolean writeDone;
-    private final NoFlushOutputStream os;
-
-    JsonWriterImpl(Writer writer, BufferPool bufferPool) {
-        this(writer, false, bufferPool);
-    }
-
-    JsonWriterImpl(Writer writer, boolean prettyPrinting, BufferPool bufferPool) {
-        generator = prettyPrinting
-                ? new JsonPrettyGeneratorImpl(writer, bufferPool)
-                : new JsonGeneratorImpl(writer, bufferPool);
-        os = null;
-    }
-
-    JsonWriterImpl(OutputStream out, BufferPool bufferPool) {
-        this(out, UTF_8, false, bufferPool);
-    }
-
-    JsonWriterImpl(OutputStream out, boolean prettyPrinting, BufferPool bufferPool) {
-        this(out, UTF_8, prettyPrinting, bufferPool);
-    }
-
-    JsonWriterImpl(OutputStream out, Charset charset,
-                   boolean prettyPrinting, BufferPool bufferPool) {
-        // Decorating the given stream, so that buffered contents can be
-        // written without actually flushing the stream.
-        this.os = new NoFlushOutputStream(out);
-        generator = prettyPrinting
-                ? new JsonPrettyGeneratorImpl(os, charset, bufferPool)
-                : new JsonGeneratorImpl(os, charset, bufferPool);
-    }
-
-    @Override
-    public void writeArray(JsonArray array) {
-        if (writeDone) {
-            throw new IllegalStateException(JsonMessages.WRITER_WRITE_ALREADY_CALLED());
-        }
-        writeDone = true;
-        generator.writeStartArray();
-        for(JsonValue value : array) {
-            generator.write(value);
-        }
-        generator.writeEnd();
-        // Flush the generator's buffered contents. This won't work for byte
-        // streams as intermediary OutputStreamWriter buffers.
-        generator.flushBuffer();
-        // Flush buffered contents but not the byte stream. generator.flush()
-        // does OutputStreamWriter#flushBuffer (package private) and underlying
-        // byte stream#flush(). Here underlying stream's flush() is no-op.
-        if (os != null) {
-            generator.flush();
-        }
-    }
-
-    @Override
-    public void writeObject(JsonObject object) {
-        if (writeDone) {
-            throw new IllegalStateException(JsonMessages.WRITER_WRITE_ALREADY_CALLED());
-        }
-        writeDone = true;
-        generator.writeStartObject();
-        for(Map.Entry<String, JsonValue> e : object.entrySet()) {
-            generator.write(e.getKey(), e.getValue());
-        }
-        generator.writeEnd();
-        // Flush the generator's buffered contents. This won't work for byte
-        // streams as intermediary OutputStreamWriter buffers.
-        generator.flushBuffer();
-        // Flush buffered contents but not the byte stream. generator.flush()
-        // does OutputStreamWriter#flushBuffer (package private) and underlying
-        // byte stream#flush(). Here underlying stream's flush() is no-op.
-        if (os != null) {
-            generator.flush();
-        }
-    }
-
-    @Override
-    public void write(JsonStructure value) {
-        if (value instanceof JsonArray) {
-            writeArray((JsonArray)value);
-        } else {
-            writeObject((JsonObject)value);
-        }
-    }
-
-    @Override
-    public void close() {
-        writeDone = true;
-        generator.close();
-    }
-
-    private static final class NoFlushOutputStream extends FilterOutputStream {
-        public NoFlushOutputStream(OutputStream out) {
-            super(out);
-        }
-
-        @Override
-        public void write(byte b[], int off, int len) throws IOException {
-            out.write(b, off ,len);
-        }
-
-        @Override
-        public void flush() {
-            // no-op
-        }
-    }
-
-}
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2013-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package org.glassfish.json;
+
+import org.glassfish.json.api.BufferPool;
+
+import javax.json.*;
+import java.io.FilterOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.Writer;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.util.Map;
+
+/**
+ * JsonWriter impl using generator.
+ *
+ * @author Jitendra Kotamraju
+ */
+class JsonWriterImpl implements JsonWriter {
+
+    private final JsonGeneratorImpl generator;
+    private boolean writeDone;
+    private final NoFlushOutputStream os;
+
+    JsonWriterImpl(Writer writer, BufferPool bufferPool) {
+        this(writer, false, bufferPool);
+    }
+
+    JsonWriterImpl(Writer writer, boolean prettyPrinting, BufferPool bufferPool) {
+        generator = prettyPrinting
+                ? new JsonPrettyGeneratorImpl(writer, bufferPool)
+                : new JsonGeneratorImpl(writer, bufferPool);
+        os = null;
+    }
+
+    JsonWriterImpl(OutputStream out, BufferPool bufferPool) {
+        this(out, StandardCharsets.UTF_8, false, bufferPool);
+    }
+
+    JsonWriterImpl(OutputStream out, boolean prettyPrinting, BufferPool bufferPool) {
+        this(out, StandardCharsets.UTF_8, prettyPrinting, bufferPool);
+    }
+
+    JsonWriterImpl(OutputStream out, Charset charset,
+                   boolean prettyPrinting, BufferPool bufferPool) {
+        // Decorating the given stream, so that buffered contents can be
+        // written without actually flushing the stream.
+        this.os = new NoFlushOutputStream(out);
+        generator = prettyPrinting
+                ? new JsonPrettyGeneratorImpl(os, charset, bufferPool)
+                : new JsonGeneratorImpl(os, charset, bufferPool);
+    }
+
+    @Override
+    public void writeArray(JsonArray array) {
+        if (writeDone) {
+            throw new IllegalStateException(JsonMessages.WRITER_WRITE_ALREADY_CALLED());
+        }
+        writeDone = true;
+        generator.writeStartArray();
+        for(JsonValue value : array) {
+            generator.write(value);
+        }
+        generator.writeEnd();
+        // Flush the generator's buffered contents. This won't work for byte
+        // streams as intermediary OutputStreamWriter buffers.
+        generator.flushBuffer();
+        // Flush buffered contents but not the byte stream. generator.flush()
+        // does OutputStreamWriter#flushBuffer (package private) and underlying
+        // byte stream#flush(). Here underlying stream's flush() is no-op.
+        if (os != null) {
+            generator.flush();
+        }
+    }
+
+    @Override
+    public void writeObject(JsonObject object) {
+        if (writeDone) {
+            throw new IllegalStateException(JsonMessages.WRITER_WRITE_ALREADY_CALLED());
+        }
+        writeDone = true;
+        generator.writeStartObject();
+        for(Map.Entry<String, JsonValue> e : object.entrySet()) {
+            generator.write(e.getKey(), e.getValue());
+        }
+        generator.writeEnd();
+        // Flush the generator's buffered contents. This won't work for byte
+        // streams as intermediary OutputStreamWriter buffers.
+        generator.flushBuffer();
+        // Flush buffered contents but not the byte stream. generator.flush()
+        // does OutputStreamWriter#flushBuffer (package private) and underlying
+        // byte stream#flush(). Here underlying stream's flush() is no-op.
+        if (os != null) {
+            generator.flush();
+        }
+    }
+
+    @Override
+    public void write(JsonStructure value) {
+        if (value instanceof JsonArray) {
+            writeArray((JsonArray)value);
+        } else {
+            writeObject((JsonObject)value);
+        }
+    }
+
+    @Override
+    public void write(JsonValue value) {
+        switch (value.getValueType()) {
+            case OBJECT:
+                writeObject((JsonObject) value);
+                return;
+            case ARRAY:
+                writeArray((JsonArray) value);
+                return;
+            default:
+                if (writeDone) {
+                    throw new IllegalStateException(JsonMessages.WRITER_WRITE_ALREADY_CALLED());
+                }
+                writeDone = true;
+                generator.write(value);
+                generator.flushBuffer();
+                if (os != null) {
+                    generator.flush();
+                }
+        }
+    }
+
+    @Override
+    public void close() {
+        writeDone = true;
+        generator.close();
+    }
+
+    private static final class NoFlushOutputStream extends FilterOutputStream {
+        public NoFlushOutputStream(OutputStream out) {
+            super(out);
+        }
+
+        @Override
+        public void write(byte b[], int off, int len) throws IOException {
+            out.write(b, off ,len);
+        }
+
+        @Override
+        public void flush() {
+            // no-op
+        }
+    }
+
+}
diff --git a/src/org/glassfish/json/MapUtil.java b/src/org/glassfish/json/MapUtil.java
new file mode 100644
index 0000000..2364d17
--- /dev/null
+++ b/src/org/glassfish/json/MapUtil.java
@@ -0,0 +1,115 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2013-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package org.glassfish.json;
+
+import org.glassfish.json.api.BufferPool;
+
+import javax.json.JsonArrayBuilder;
+import javax.json.JsonObjectBuilder;
+import javax.json.JsonValue;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * Util for transforming a Map to a Json objects.
+ *
+ * @author asotobu
+ */
+public final class MapUtil {
+
+    private MapUtil() {
+        super();
+    }
+
+    static JsonValue handle(Object value, BufferPool bufferPool) {
+
+        if (value == null) {
+            return JsonValue.NULL;
+        }
+
+        if (value instanceof BigDecimal) {
+            return JsonNumberImpl.getJsonNumber((BigDecimal) value);
+        } else {
+            if (value instanceof BigInteger) {
+                return JsonNumberImpl.getJsonNumber((BigInteger) value);
+            } else {
+                if ( value instanceof Boolean) {
+                    Boolean b = (Boolean) value;
+                    return b ? JsonValue.TRUE : JsonValue.FALSE;
+                } else {
+                    if (value instanceof Double) {
+                        return JsonNumberImpl.getJsonNumber((Double) value);
+                    } else {
+                        if (value instanceof Integer) {
+                            return JsonNumberImpl.getJsonNumber((Integer) value);
+                        } else {
+                            if (value instanceof Long) {
+                                return JsonNumberImpl.getJsonNumber((Long) value);
+                            } else {
+                                if (value instanceof String) {
+                                    return new JsonStringImpl((String) value);
+                                } else {
+                                    if (value instanceof Collection) {
+                                        @SuppressWarnings("unchecked")
+                                        Collection<?> collection = (Collection<?>) value;
+                                        JsonArrayBuilder jsonArrayBuilder = new JsonArrayBuilderImpl(collection, bufferPool);
+                                        return jsonArrayBuilder.build();
+                                    } else {
+                                        if (value instanceof Map) {
+                                            @SuppressWarnings("unchecked")
+                                            JsonObjectBuilder object = new JsonObjectBuilderImpl((Map<String, Object>) value, bufferPool);
+                                            return object.build();
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        throw new IllegalArgumentException(String.format("Type %s is not supported.", value.getClass()));
+    }
+
+}
diff --git a/src/org/glassfish/json/NodeReference.java b/src/org/glassfish/json/NodeReference.java
new file mode 100644
index 0000000..1d8beb0
--- /dev/null
+++ b/src/org/glassfish/json/NodeReference.java
@@ -0,0 +1,307 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2015-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package org.glassfish.json;
+
+import javax.json.Json;
+import javax.json.JsonArray;
+import javax.json.JsonArrayBuilder;
+import javax.json.JsonException;
+import javax.json.JsonObject;
+import javax.json.JsonStructure;
+import javax.json.JsonValue;
+
+/**
+ * This class is a helper class for JsonPointer implementation,
+ * and is not part of the API.
+ *
+ * This class encapsulates a reference to a JSON node.
+ * There are three types of references.
+ * <ol><li>a reference to the root of a JSON tree.</li>
+ *     <li>a reference to a name/value (possibly non-existing) pair of a JSON object, identified by a name.</li>
+ *     <li>a reference to a member value of a JSON array, identified by an index.</li>
+ * </ol>
+ * Static factory methods are provided for creating these references.
+ *
+ * <p>A referenced value can be retrieved or replaced.
+ * The value of a JSON object or JSON array can be
+ * removed.  A new value can be added to a JSON object or
+ * inserted into a JSON array</p>
+ *
+ * <p>Since a {@code JsonObject} or {@code JsonArray} is immutable, these operations
+ * must not modify the referenced JSON object or array. The methods {@link #add},
+ * {@link #replace}, and {@link #remove} returns a new
+ * JSON object or array after the execution of the operation.</p>
+ */
+abstract class NodeReference {
+
+    /**
+     * Return {@code true} if a reference points to a valid value, {@code false} otherwise.
+     *
+     * @return {@code true} if a reference points to a value
+     */
+    abstract public boolean contains();
+
+    /**
+     * Get the value at the referenced location.
+     *
+     * @return the JSON value referenced
+     * @throws JsonException if the referenced value does not exist
+     */
+    abstract public JsonValue get();
+
+    /**
+     * Add or replace a value at the referenced location.
+     * If the reference is the root of a JSON tree, the added value must be
+     * a JSON object or array, which becomes the referenced JSON value.
+     * If the reference is an index of a JSON array, the value is inserted
+     * into the array at the index.  If the index is -1, the value is
+     * appended to the array.
+     * If the reference is a name of a JSON object, the name/value pair is added
+     * to the object, replacing any pair with the same name.
+     *
+     * @param value the value to be added
+     * @return the JsonStructure after the operation
+     * @throws JsonException if the index to the array is not -1 or is out of range
+     */
+    abstract public JsonStructure add(JsonValue value);
+
+    /**
+     * Remove the name/value pair from the JSON object, or the value in a JSON array, as specified by the reference
+     *
+     * @return the JsonStructure after the operation
+     * @throws JsonException if the name/value pair of the referenced JSON object
+     *    does not exist, or if the index of the referenced JSON array is
+     *    out of range, or if the reference is a root reference
+     */
+    abstract public JsonStructure remove();
+
+    /**
+     * Replace the referenced value with the specified value.
+     *
+     * @param value the JSON value to be stored at the referenced location
+     * @return the JsonStructure after the operation
+     * @throws JsonException if the name/value pair of the referenced JSON object
+     *    does not exist, or if the index of the referenced JSON array is
+     *    out of range, or if the reference is a root reference
+     */
+    abstract public JsonStructure replace(JsonValue value);
+
+    /**
+     * Returns a {@code NodeReference} for a {@code JsonStructure}.
+     *
+     * @param structure the {@code JsonStructure} referenced
+     * @return the {@code NodeReference}
+     */
+    public static NodeReference of(JsonStructure structure) {
+        return new RootReference(structure);
+    }
+
+    /**
+     * Returns a {@code NodeReference} for a name/value pair in a
+     * JSON object.
+     *
+     * @param object the referenced JSON object
+     * @param name the name of the name/pair
+     * @return the {@code NodeReference}
+     */
+    public static NodeReference of(JsonObject object, String name) {
+        return new ObjectReference(object, name);
+    }
+
+    /**
+     * Returns a {@code NodeReference} for a member value in a
+     * JSON array.
+     *
+     * @param array the referenced JSON array
+     * @param index the index of the member value in the JSON array
+     * @return the {@code NodeReference}
+     */
+    public static NodeReference of(JsonArray array, int index) {
+        return new ArrayReference(array, index);
+    }
+
+    static class RootReference extends NodeReference {
+
+        private JsonStructure root;
+
+        RootReference(JsonStructure root) {
+            this.root = root;
+        }
+
+        @Override
+        public boolean contains() {
+            return root != null;
+        }
+
+        @Override
+        public JsonValue get() {
+            return root;
+        }
+
+        @Override
+        public JsonStructure add(JsonValue value) {
+            switch (value.getValueType() ) {
+                case OBJECT:
+                case ARRAY:
+                    this.root = (JsonStructure) value;
+                    break;
+                default:
+                    throw new JsonException(JsonMessages.NODEREF_VALUE_ADD_ERR());
+            }
+            return root;
+        }
+
+        @Override
+        public JsonStructure remove() {
+            throw new JsonException(JsonMessages.NODEREF_VALUE_CANNOT_REMOVE());
+        }
+
+        @Override
+        public JsonStructure replace(JsonValue value) {
+            return add(value);
+        }
+    }
+
+    static class ObjectReference extends NodeReference {
+
+        private final JsonObject object;
+        private final String key;
+
+        ObjectReference(JsonObject object, String key) {
+            this.object = object;
+            this.key = key;
+        }
+
+        @Override
+        public boolean contains() {
+            return object != null && object.containsKey(key);
+        }
+
+        @Override
+        public JsonValue get() {
+            if (!contains()) {
+                throw new JsonException(JsonMessages.NODEREF_OBJECT_MISSING(key));
+            }
+            return object.get(key);
+        }
+
+        @Override
+        public JsonObject add(JsonValue value) {
+            return Json.createObjectBuilder(object).add(key, value).build();
+        }
+
+        @Override
+        public JsonObject remove() {
+            if (!contains()) {
+                throw new JsonException(JsonMessages.NODEREF_OBJECT_MISSING(key));
+            }
+            return Json.createObjectBuilder(object).remove(key).build();
+        }
+
+        @Override
+        public JsonObject replace(JsonValue value) {
+            if (!contains()) {
+                throw new JsonException(JsonMessages.NODEREF_OBJECT_MISSING(key));
+            }
+            return add(value);
+        }
+    }
+
+    static class ArrayReference extends NodeReference {
+
+        private final JsonArray array;
+        private final int index; // -1 means "-" in JSON Pointer
+
+        ArrayReference(JsonArray array, int index) {
+            this.array = array;
+            this.index = index;
+        }
+
+        @Override
+        public boolean contains() {
+            return array != null && index > -1 && index < array.size();
+        }
+
+        @Override
+        public JsonValue get() {
+            if (!contains()) {
+                throw new JsonException(JsonMessages.NODEREF_ARRAY_INDEX_ERR(index, array.size()));
+            }
+            return array.get(index);
+        }
+
+        @Override
+        public JsonArray add(JsonValue value) {
+            //TODO should we check for arrayoutofbounds?
+            // The spec seems to say index = array.size() is allowed. This is handled as append
+            JsonArrayBuilder builder = Json.createArrayBuilder(this.array);
+            if (index == -1 || index == array.size()) {
+                builder.add(value);
+            } else {
+                if(index < array.size()) {
+                    builder.add(index, value);
+                } else {
+                    throw new JsonException(JsonMessages.NODEREF_ARRAY_INDEX_ERR(index, array.size()));
+                }
+            }
+            return builder.build();
+        }
+
+        @Override
+        public JsonArray remove() {
+            if (!contains()) {
+                throw new JsonException(JsonMessages.NODEREF_ARRAY_INDEX_ERR(index, array.size()));
+            }
+            JsonArrayBuilder builder = Json.createArrayBuilder(this.array);
+            return builder.remove(index).build();
+        }
+
+        @Override
+        public JsonArray replace(JsonValue value) {
+            if (!contains()) {
+                throw new JsonException(JsonMessages.NODEREF_ARRAY_INDEX_ERR(index, array.size()));
+            }
+            JsonArrayBuilder builder = Json.createArrayBuilder(this.array);
+            return builder.set(index, value).build();
+        }
+    }
+}
+
diff --git a/src/org/glassfish/json/UnicodeDetectingInputStream.java b/src/org/glassfish/json/UnicodeDetectingInputStream.java
index 8d8b195..56df8f7 100644
--- a/src/org/glassfish/json/UnicodeDetectingInputStream.java
+++ b/src/org/glassfish/json/UnicodeDetectingInputStream.java
@@ -1,189 +1,188 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2012-2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import javax.json.JsonException;
-import java.io.FilterInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.Charset;
-
-/**
- * A filter stream that detects the unicode encoding for the original
- * stream
- *
- * @author Jitendra Kotamraju
- */
-class UnicodeDetectingInputStream extends FilterInputStream {
-    private static final Charset UTF_8 = Charset.forName("UTF-8");
-    private static final Charset UTF_16BE = Charset.forName("UTF-16BE");
-    private static final Charset UTF_16LE = Charset.forName("UTF-16LE");
-    private static final Charset UTF_32LE = Charset.forName("UTF-32LE");
-    private static final Charset UTF_32BE = Charset.forName("UTF-32BE");
-
-    private static final byte FF = (byte)0xFF;
-    private static final byte FE = (byte)0xFE;
-    private static final byte EF = (byte)0xEF;
-    private static final byte BB = (byte)0xBB;
-    private static final byte BF = (byte)0xBF;
-    private static final byte NUL = (byte)0x00;
-
-    private final byte[] buf = new byte[4];
-    private int bufLen;
-    private int curIndex;
-    private final Charset charset;
-
-    UnicodeDetectingInputStream(InputStream is) {
-        super(is);
-        charset = detectEncoding();
-    }
-
-    Charset getCharset() {
-        return charset;
-    }
-
-    private void fillBuf() {
-        int b1;
-        int b2;
-        int b3;
-        int b4;
-
-        try {
-            b1 = in.read();
-            if (b1 == -1) {
-                return;
-            }
-
-            b2 = in.read();
-            if (b2 == -1) {
-                bufLen = 1;
-                buf[0] = (byte)b1;
-                return;
-            }
-
-            b3 = in.read();
-            if (b3 == -1) {
-                bufLen = 2;
-                buf[0] = (byte)b1;
-                buf[1] = (byte)b2;
-                return;
-            }
-
-            b4 = in.read();
-            if (b4 == -1) {
-                bufLen = 3;
-                buf[0] = (byte)b1;
-                buf[1] = (byte)b2;
-                buf[2] = (byte)b3;
-                return;
-            }
-            bufLen = 4;
-            buf[0] = (byte)b1;
-            buf[1] = (byte)b2;
-            buf[2] = (byte)b3;
-            buf[3] = (byte)b4;
-        } catch (IOException ioe) {
-            throw new JsonException("I/O error while auto-detecting the encoding of stream", ioe);
-        }
-    }
-
-    private Charset detectEncoding() {
-        fillBuf();
-        if (bufLen < 2) {
-            throw new JsonException("Cannot auto-detect encoding, not enough chars");
-        } else if (bufLen == 4) {
-            // Use BOM to detect encoding
-            if (buf[0] == NUL && buf[1] == NUL && buf[2] == FE && buf[3] == FF) {
-                curIndex = 4;
-                return UTF_32BE;
-            } else if (buf[0] == FF && buf[1] == FE && buf[2] == NUL && buf[3] == NUL) {
-                curIndex = 4;
-                return UTF_32LE;
-            } else if (buf[0] == FE && buf[1] == FF) {
-                curIndex = 2;
-                return UTF_16BE;
-            } else if (buf[0] == FF && buf[1] == FE) {
-                curIndex = 2;
-                return UTF_16LE;
-            } else if (buf[0] == EF && buf[1] == BB && buf[2] == BF) {
-                curIndex = 3;
-                return UTF_8;
-            }
-            // No BOM, just use JSON RFC's encoding algo to auto-detect
-            if (buf[0] == NUL && buf[1] == NUL && buf[2] == NUL) {
-                return UTF_32BE;
-            } else if (buf[0] == NUL && buf[2] == NUL) {
-                return UTF_16BE;
-            } else if (buf[1] == NUL && buf[2] == NUL && buf[3] == NUL) {
-                return UTF_32LE;
-            } else if (buf[1] == NUL && buf[3] == NUL) {
-                return UTF_16LE;
-            }
-        }
-        return UTF_8;
-    }
-
-    @Override
-    public int read() throws IOException {
-        if (curIndex < bufLen) {
-            return buf[curIndex++];
-        }
-        return in.read();
-    }
-
-    @Override
-    public int read(byte b[], int off, int len) throws IOException {
-        if (curIndex < bufLen) {
-            if (len == 0) {
-                return 0;
-            }
-            if (off < 0 || len < 0 || len > b.length -off) {
-                throw new IndexOutOfBoundsException();
-            }
-            int min = Math.min(bufLen-curIndex, len);
-            System.arraycopy(buf, curIndex, b, off, min);
-            curIndex += min;
-            return min;
-        }
-        return in.read(b, off, len);
-    }
-
-}
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2012-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package org.glassfish.json;
+
+import javax.json.JsonException;
+import java.io.FilterInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+
+/**
+ * A filter stream that detects the unicode encoding for the original
+ * stream
+ *
+ * @author Jitendra Kotamraju
+ */
+class UnicodeDetectingInputStream extends FilterInputStream {
+
+    private static final Charset UTF_32LE = Charset.forName("UTF-32LE");
+    private static final Charset UTF_32BE = Charset.forName("UTF-32BE");
+
+    private static final byte FF = (byte)0xFF;
+    private static final byte FE = (byte)0xFE;
+    private static final byte EF = (byte)0xEF;
+    private static final byte BB = (byte)0xBB;
+    private static final byte BF = (byte)0xBF;
+    private static final byte NUL = (byte)0x00;
+
+    private final byte[] buf = new byte[4];
+    private int bufLen;
+    private int curIndex;
+    private final Charset charset;
+
+    UnicodeDetectingInputStream(InputStream is) {
+        super(is);
+        charset = detectEncoding();
+    }
+
+    Charset getCharset() {
+        return charset;
+    }
+
+    private void fillBuf() {
+        int b1;
+        int b2;
+        int b3;
+        int b4;
+
+        try {
+            b1 = in.read();
+            if (b1 == -1) {
+                return;
+            }
+
+            b2 = in.read();
+            if (b2 == -1) {
+                bufLen = 1;
+                buf[0] = (byte)b1;
+                return;
+            }
+
+            b3 = in.read();
+            if (b3 == -1) {
+                bufLen = 2;
+                buf[0] = (byte)b1;
+                buf[1] = (byte)b2;
+                return;
+            }
+
+            b4 = in.read();
+            if (b4 == -1) {
+                bufLen = 3;
+                buf[0] = (byte)b1;
+                buf[1] = (byte)b2;
+                buf[2] = (byte)b3;
+                return;
+            }
+            bufLen = 4;
+            buf[0] = (byte)b1;
+            buf[1] = (byte)b2;
+            buf[2] = (byte)b3;
+            buf[3] = (byte)b4;
+        } catch (IOException ioe) {
+            throw new JsonException(JsonMessages.PARSER_INPUT_ENC_DETECT_IOERR(), ioe);
+        }
+    }
+
+    private Charset detectEncoding() {
+        fillBuf();
+        if (bufLen < 2) {
+            throw new JsonException(JsonMessages.PARSER_INPUT_ENC_DETECT_FAILED());
+        } else if (bufLen == 4) {
+            // Use BOM to detect encoding
+            if (buf[0] == NUL && buf[1] == NUL && buf[2] == FE && buf[3] == FF) {
+                curIndex = 4;
+                return UTF_32BE;
+            } else if (buf[0] == FF && buf[1] == FE && buf[2] == NUL && buf[3] == NUL) {
+                curIndex = 4;
+                return UTF_32LE;
+            } else if (buf[0] == FE && buf[1] == FF) {
+                curIndex = 2;
+                return StandardCharsets.UTF_16BE;
+            } else if (buf[0] == FF && buf[1] == FE) {
+                curIndex = 2;
+                return StandardCharsets.UTF_16LE;
+            } else if (buf[0] == EF && buf[1] == BB && buf[2] == BF) {
+                curIndex = 3;
+                return StandardCharsets.UTF_8;
+            }
+            // No BOM, just use JSON RFC's encoding algo to auto-detect
+            if (buf[0] == NUL && buf[1] == NUL && buf[2] == NUL) {
+                return UTF_32BE;
+            } else if (buf[0] == NUL && buf[2] == NUL) {
+                return StandardCharsets.UTF_16BE;
+            } else if (buf[1] == NUL && buf[2] == NUL && buf[3] == NUL) {
+                return UTF_32LE;
+            } else if (buf[1] == NUL && buf[3] == NUL) {
+                return StandardCharsets.UTF_16LE;
+            }
+        }
+        return StandardCharsets.UTF_8;
+    }
+
+    @Override
+    public int read() throws IOException {
+        if (curIndex < bufLen) {
+            return buf[curIndex++];
+        }
+        return in.read();
+    }
+
+    @Override
+    public int read(byte b[], int off, int len) throws IOException {
+        if (curIndex < bufLen) {
+            if (len == 0) {
+                return 0;
+            }
+            if (off < 0 || len < 0 || len > b.length -off) {
+                throw new IndexOutOfBoundsException();
+            }
+            int min = Math.min(bufLen-curIndex, len);
+            System.arraycopy(buf, curIndex, b, off, min);
+            curIndex += min;
+            return min;
+        }
+        return in.read(b, off, len);
+    }
+
+}
diff --git a/src/org/glassfish/json/api/BufferPool.java b/src/org/glassfish/json/api/BufferPool.java
index 5116fe1..c9f6d6e 100644
--- a/src/org/glassfish/json/api/BufferPool.java
+++ b/src/org/glassfish/json/api/BufferPool.java
@@ -1,66 +1,68 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
- * or packager/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at packager/legal/LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json.api;
-
-/**
- * char[] pool that pool instances of char[] which are expensive to create.
- *
- * @author Jitendra Kotamraju
- */
-public interface BufferPool {
-
-    /**
-     * Gets a new char[] object from the pool.
-     *
-     * <p>
-     * If no object is available in the pool, this method creates a new one.
-     *
-     * @return
-     *      always non-null.
-     */
-    char[] take();
-
-    /**
-     * Returns an object back to the pool.
-     */
-    void recycle(char[] buf);
-
-}
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2013-2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://oss.oracle.com/licenses/CDDL+GPL-1.1
+ * or LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package org.glassfish.json.api;
+
+/**
+ * char[] pool that pool instances of char[] which are expensive to create.
+ *
+ * @author Jitendra Kotamraju
+ */
+public interface BufferPool {
+
+    /**
+     * Gets a new char[] object from the pool.
+     *
+     * <p>
+     * If no object is available in the pool, this method creates a new one.
+     *
+     * @return
+     *      always non-null.
+     */
+    char[] take();
+
+    /**
+     * Returns an object back to the pool.
+     *
+     * @param buf object to return back to the pool
+     */
+    void recycle(char[] buf);
+
+}
diff --git a/src/org/glassfish/json/messages.properties b/src/org/glassfish/json/messages.properties
new file mode 100644
index 0000000..42ebcc9
--- /dev/null
+++ b/src/org/glassfish/json/messages.properties
@@ -0,0 +1,112 @@
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+#
+# Copyright (c) 2013-2017 Oracle and/or its affiliates. All rights reserved.
+#
+# The contents of this file are subject to the terms of either the GNU
+# General Public License Version 2 only ("GPL") or the Common Development
+# and Distribution License("CDDL") (collectively, the "License").  You
+# may not use this file except in compliance with the License.  You can
+# obtain a copy of the License at
+# https://oss.oracle.com/licenses/CDDL+GPL-1.1
+# or LICENSE.txt.  See the License for the specific
+# language governing permissions and limitations under the License.
+#
+# When distributing the software, include this License Header Notice in each
+# file and include the License file at LICENSE.txt.
+#
+# GPL Classpath Exception:
+# Oracle designates this particular file as subject to the "Classpath"
+# exception as provided by Oracle in the GPL Version 2 section of the License
+# file that accompanied this code.
+#
+# Modifications:
+# If applicable, add the following below the License Header, with the fields
+# enclosed by brackets [] replaced by your own identifying information:
+# "Portions Copyright [year] [name of copyright owner]"
+#
+# Contributor(s):
+# If you wish your version of this file to be governed by only the CDDL or
+# only the GPL Version 2, indicate your decision by adding "[Contributor]
+# elects to include this software in this distribution under the [CDDL or GPL
+# Version 2] license."  If you don't indicate a single choice of license, a
+# recipient has the option to distribute your version of this file under
+# either the CDDL, the GPL Version 2 or to extend the choice of license to
+# its licensees as provided above.  However, if you add GPL Version 2 code
+# and therefore, elected the GPL Version 2 license, then the option applies
+# only if the new code is made subject to such option by the copyright
+# holder.
+#
+
+internal.error=Internal Error
+
+parser.getString.err=JsonParser#getString() is valid only for KEY_NAME, VALUE_STRING, VALUE_NUMBER parser states. \
+  But current parser state is {0}
+parser.isIntegralNumber.err=JsonParser#isIntegralNumber() is valid only for VALUE_NUMBER parser state. \
+  But current parser state is {0}
+parser.getInt.err=JsonParser#getInt() is valid only for VALUE_NUMBER parser state. \
+  But current parser state is {0}
+parser.getLong.err=JsonParser#getLong() is valid only for VALUE_NUMBER parser state. \
+  But current parser state is {0}
+parser.getBigDecimal.err=JsonParser#getBigDecimal() is valid only for VALUE_NUMBER parser state. \
+  But current parser state is {0}
+parser.getArray.err=JsonParser#getArray() or JsonParser#getArrayStream() is valid only for START_ARRAY parser state. \
+  But current parser state is {0}
+parser.getObject.err=JsonParser#getObject() or JsonParser#getObjectStream() is valid only for START_OBJECT parser state. \
+  But current parser state is {0}
+parser.getValue.err=JsonParser#getValue() is valid only for START_ARRAY, START_OBJECT, KEY_NAME, VALUE_STRING, VALUE_NUMBER, VALUE_NULL, VALUE_FALSE, VALUE_TRUE parser states. \
+  But current parser state is {0}
+parser.getValueStream.err=JsonParser#getValueStream() the parser must not be in an array or object. \
+  But current parser state is {0}
+parser.expected.eof=Expected EOF token, but got {0}
+parser.tokenizer.close.io=I/O error while closing JSON tokenizer
+parser.invalid.token=Invalid token={0} at {1}. Expected tokens are: {2}
+parser.state.err=Unknown value type {0}
+parser.scope.err=Cannot be called for value {0}
+parser.input.enc.detect.failed=Cannot auto-detect encoding, not enough chars
+parser.input.enc.detect.ioerr=I/O error while auto-detecting the encoding of stream
+
+generator.flush.io.err=I/O error while flushing generated JSON
+generator.close.io.err=I/O error while closing JsonGenerator
+generator.write.io.err=I/O error while writing in JsonGenerator
+generator.illegal.method=Illegal method during JSON generation, \
+  not valid in current context {0}
+generator.double.infinite.nan=double value cannot be Infinite or NaN
+generator.incomplete.json=Generating incomplete JSON
+generator.illegal.multiple.text=Cannot generate more than one JSON text
+
+writer.write.already.called=write/writeObject/writeArray/close method is already called
+
+reader.read.already.called=read/readObject/readArray/close method is already called
+
+objbuilder.name.null=Name in JsonObject's name/value pair cannot be null
+objbuilder.value.null=Value in JsonObject's name/value pair cannot be null
+objbuilder.object.builder.null=Object builder that is used to create a value in JsonObject's name/value pair cannot be null
+objbuilder.array.builder.null=Array builder that is used to create a value in JsonObject's name/value pair cannot be null
+
+arrbuilder.value.null=Cannot invoke add(null) while building JsonArray.
+arrbuilder.object.builder.null=Object builder that is used to add a value to JSON array cannot be null
+arrbuilder.array.builder.null=Array builder that is used to add a value to JSON array cannot be null
+arrbuilder.valuelist.null=Index: {0}, Size: {1}
+
+tokenizer.unexpected.char=Unexpected char {0} at {1}
+tokenizer.expected.char=Unexpected char {0} at {1}, expecting ''{2}''
+tokenizer.io.err=I/O error while parsing JSON
+
+pointer.format.invalid=A non-empty JSON Pointer must begin with a ''/''
+pointer.mapping.missing=The JSON Object ''{0}'' contains no mapping for the name ''{1}''
+pointer.reference.invalid=The reference value in a JSON Pointer must be a JSON Object or a JSON Array, was ''{0}''
+pointer.array.index.err=Array index format error, was ''{0}''
+pointer.array.index.illegal=Illegal integer format, was ''{0}''
+
+noderef.value.add.err=The root value only allows adding a JSON object or array
+noderef.value.cannot.remove=The JSON value at the root cannot be removed
+noderef.object.missing=Non-existing name/value pair in the object for key {0}
+noderef.array.index.err=An array item index is out of range. Index: {0}, Size: {1}
+
+patch.must.be.array=A JSON Patch must be an array of JSON Objects
+patch.move.proper.prefix=The ''{0}'' path of the patch operation ''move'' is a proper prefix of the ''{1}'' path
+patch.move.target.null=The ''{0}'' path of the patch operation ''move'' does not exist in target object
+patch.test.failed=The JSON Patch operation ''test'' failed for path ''{0}'' and value ''{1}''
+patch.illegal.operation=Illegal value for the op member of the JSON Patch operation: ''{0}''
+patch.member.missing=The JSON Patch operation ''{0}'' must contain a ''{1}'' member
diff --git a/src/org/openstreetmap/josm/Main.java b/src/org/openstreetmap/josm/Main.java
index d03d398..77e9940 100644
--- a/src/org/openstreetmap/josm/Main.java
+++ b/src/org/openstreetmap/josm/Main.java
@@ -8,7 +8,6 @@ import java.awt.GraphicsEnvironment;
 import java.io.IOException;
 import java.lang.ref.WeakReference;
 import java.net.URL;
-import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -25,9 +24,6 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
 
-import javax.swing.Action;
-
-import org.openstreetmap.josm.actions.JosmAction;
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.Preferences;
 import org.openstreetmap.josm.data.UndoRedoHandler;
@@ -39,13 +35,6 @@ import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.preferences.JosmBaseDirectories;
 import org.openstreetmap.josm.data.projection.Projection;
 import org.openstreetmap.josm.data.projection.ProjectionChangeListener;
-import org.openstreetmap.josm.gui.MainApplication;
-import org.openstreetmap.josm.gui.MainMenu;
-import org.openstreetmap.josm.gui.MainPanel;
-import org.openstreetmap.josm.gui.MapFrame;
-import org.openstreetmap.josm.gui.MapFrameListener;
-import org.openstreetmap.josm.gui.layer.MainLayerManager;
-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;
@@ -58,7 +47,6 @@ import org.openstreetmap.josm.tools.Platform;
 import org.openstreetmap.josm.tools.PlatformHook;
 import org.openstreetmap.josm.tools.PlatformHookOsx;
 import org.openstreetmap.josm.tools.PlatformHookWindows;
-import org.openstreetmap.josm.tools.Shortcut;
 import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.bugreport.BugReport;
 
@@ -81,20 +69,6 @@ public abstract class Main {
     private static final String OSM_WEBSITE = "https://www.openstreetmap.org";
 
     /**
-     * Replies true if JOSM currently displays a map view. False, if it doesn't, i.e. if
-     * it only shows the MOTD panel.
-     * <p>
-     * You do not need this when accessing the layer manager. The layer manager will be empty if no map view is shown.
-     *
-     * @return <code>true</code> if JOSM currently displays a map view
-     * @deprecated use {@link org.openstreetmap.josm.gui.MainApplication#isDisplayingMapView()}
-     */
-    @Deprecated
-    public static boolean isDisplayingMapView() {
-        return MainApplication.isDisplayingMapView();
-    }
-
-    /**
      * Global parent component for all dialogs and message boxes
      */
     public static Component parent;
@@ -105,57 +79,16 @@ public abstract class Main {
     public static volatile Main main;
 
     /**
-     * The worker thread slave. This is for executing all long and intensive
-     * calculations. The executed runnables are guaranteed to be executed separately and sequential.
-     * @deprecated use {@link MainApplication#worker} instead
-     */
-    @Deprecated
-    public static ExecutorService worker;
-
-    /**
      * Global application preferences
      */
     public static final Preferences pref = new Preferences(JosmBaseDirectories.getInstance());
 
     /**
-     * The MapFrame.
-     * <p>
-     * There should be no need to access this to access any map data. Use {@link MainApplication#getLayerManager} instead.
-     *
-     * @deprecated Use {@link MainApplication#getMap()} instead
-     * @see MainPanel
-     */
-    @Deprecated
-    public static MapFrame map;
-
-    /**
-     * The toolbar preference control to register new actions.
-     * @deprecated Use {@link MainApplication#getToolbar} instead
-     */
-    @Deprecated
-    public static volatile ToolbarPreferences toolbar;
-
-    /**
      * The commands undo/redo handler.
      */
     public final UndoRedoHandler undoRedo = new UndoRedoHandler();
 
     /**
-     * The main menu bar at top of screen.
-     * @deprecated Use {@link MainApplication#getMenu} instead
-     */
-    @Deprecated
-    public MainMenu menu;
-
-    /**
-     * The main panel.
-     * @deprecated Use {@link MainApplication#getMainPanel} instead
-     * @since 12125
-     */
-    @Deprecated
-    public MainPanel panel;
-
-    /**
      * The file watcher service.
      */
     public static final FileWatcher fileWatcher = new FileWatcher();
@@ -165,289 +98,6 @@ public abstract class Main {
     private static final Set<OnlineResource> OFFLINE_RESOURCES = EnumSet.noneOf(OnlineResource.class);
 
     /**
-     * Logging level (5 = trace, 4 = debug, 3 = info, 2 = warn, 1 = error, 0 = none).
-     * @since 6248
-     * @deprecated Use {@link Logging} class.
-     */
-    @Deprecated
-    public static int logLevel = 3;
-
-    /**
-     * Replies the first lines of last 5 error and warning messages, used for bug reports
-     * @return the first lines of last 5 error and warning messages
-     * @since 7420
-     * @deprecated Use {@link Logging#getLastErrorAndWarnings}.
-     */
-    @Deprecated
-    public static final Collection<String> getLastErrorAndWarnings() {
-        return Logging.getLastErrorAndWarnings();
-    }
-
-    /**
-     * Clears the list of last error and warning messages.
-     * @since 8959
-     * @deprecated Use {@link Logging#clearLastErrorAndWarnings}.
-     */
-    @Deprecated
-    public static void clearLastErrorAndWarnings() {
-        Logging.clearLastErrorAndWarnings();
-    }
-
-    /**
-     * Prints an error message if logging is on.
-     * @param msg The message to print.
-     * @since 6248
-     * @deprecated Use {@link Logging#error(String)}.
-     */
-    @Deprecated
-    public static void error(String msg) {
-        Logging.error(msg);
-    }
-
-    /**
-     * Prints a warning message if logging is on.
-     * @param msg The message to print.
-     * @deprecated Use {@link Logging#warn(String)}.
-     */
-    @Deprecated
-    public static void warn(String msg) {
-        Logging.warn(msg);
-    }
-
-    /**
-     * Prints an informational message if logging is on.
-     * @param msg The message to print.
-     * @deprecated Use {@link Logging#info(String)}.
-     */
-    @Deprecated
-    public static void info(String msg) {
-        Logging.info(msg);
-    }
-
-    /**
-     * Prints a debug message if logging is on.
-     * @param msg The message to print.
-     * @deprecated Use {@link Logging#debug(String)}.
-     */
-    @Deprecated
-    public static void debug(String msg) {
-        Logging.debug(msg);
-    }
-
-    /**
-     * Prints a trace message if logging is on.
-     * @param msg The message to print.
-     * @deprecated Use {@link Logging#trace(String)}.
-     */
-    @Deprecated
-    public static void trace(String msg) {
-        Logging.trace(msg);
-    }
-
-    /**
-     * Determines if debug log level is enabled.
-     * Useful to avoid costly construction of debug messages when not enabled.
-     * @return {@code true} if log level is at least debug, {@code false} otherwise
-     * @since 6852
-     * @deprecated Use {@link Logging#isDebugEnabled}.
-     */
-    @Deprecated
-    public static boolean isDebugEnabled() {
-        return Logging.isDebugEnabled();
-    }
-
-    /**
-     * Determines if trace log level is enabled.
-     * Useful to avoid costly construction of trace messages when not enabled.
-     * @return {@code true} if log level is at least trace, {@code false} otherwise
-     * @since 6852
-     * @deprecated Use {@link Logging#isTraceEnabled}.
-     */
-    @Deprecated
-    public static boolean isTraceEnabled() {
-        return Logging.isTraceEnabled();
-    }
-
-    /**
-     * Prints a formatted error message if logging is on. Calls {@link MessageFormat#format}
-     * function to format text.
-     * @param msg The formatted message to print.
-     * @param objects The objects to insert into format string.
-     * @since 6248
-     * @deprecated Use {@link Logging#error(String, Object...)}.
-     */
-    @Deprecated
-    public static void error(String msg, Object... objects) {
-        Logging.error(msg, objects);
-    }
-
-    /**
-     * Prints a formatted warning message if logging is on. Calls {@link MessageFormat#format}
-     * function to format text.
-     * @param msg The formatted message to print.
-     * @param objects The objects to insert into format string.
-     * @deprecated Use {@link Logging#warn(String, Object...)}.
-     */
-    @Deprecated
-    public static void warn(String msg, Object... objects) {
-        Logging.warn(msg, objects);
-    }
-
-    /**
-     * Prints a formatted informational message if logging is on. Calls {@link MessageFormat#format}
-     * function to format text.
-     * @param msg The formatted message to print.
-     * @param objects The objects to insert into format string.
-     * @deprecated Use {@link Logging#info(String, Object...)}.
-     */
-    @Deprecated
-    public static void info(String msg, Object... objects) {
-        Logging.info(msg, objects);
-    }
-
-    /**
-     * Prints a formatted debug message if logging is on. Calls {@link MessageFormat#format}
-     * function to format text.
-     * @param msg The formatted message to print.
-     * @param objects The objects to insert into format string.
-     * @deprecated Use {@link Logging#debug(String, Object...)}.
-     */
-    @Deprecated
-    public static void debug(String msg, Object... objects) {
-        Logging.debug(msg, objects);
-    }
-
-    /**
-     * Prints a formatted trace message if logging is on. Calls {@link MessageFormat#format}
-     * function to format text.
-     * @param msg The formatted message to print.
-     * @param objects The objects to insert into format string.
-     * @deprecated Use {@link Logging#trace(String, Object...)}.
-     */
-    @Deprecated
-    public static void trace(String msg, Object... objects) {
-        Logging.trace(msg, objects);
-    }
-
-    /**
-     * Prints an error message for the given Throwable.
-     * @param t The throwable object causing the error
-     * @since 6248
-     * @deprecated Use {@link Logging#error(Throwable)}.
-     */
-    @Deprecated
-    public static void error(Throwable t) {
-        Logging.error(t);
-    }
-
-    /**
-     * Prints a warning message for the given Throwable.
-     * @param t The throwable object causing the error
-     * @since 6248
-     * @deprecated Use {@link Logging#warn(Throwable)}.
-     */
-    @Deprecated
-    public static void warn(Throwable t) {
-        Logging.warn(t);
-    }
-
-    /**
-     * Prints a debug message for the given Throwable. Useful for exceptions usually ignored
-     * @param t The throwable object causing the error
-     * @since 10420
-     * @deprecated Use {@link Logging#debug(Throwable)}.
-     */
-    @Deprecated
-    public static void debug(Throwable t) {
-        Logging.debug(t);
-    }
-
-    /**
-     * Prints a trace message for the given Throwable. Useful for exceptions usually ignored
-     * @param t The throwable object causing the error
-     * @since 10420
-     * @deprecated Use {@link Logging#trace(Throwable)}.
-     */
-    @Deprecated
-    public static void trace(Throwable t) {
-        Logging.trace(t);
-    }
-
-    /**
-     * Prints an error message for the given Throwable.
-     * @param t The throwable object causing the error
-     * @param stackTrace {@code true}, if the stacktrace should be displayed
-     * @since 6642
-     * @deprecated Use {@link Logging#log(java.util.logging.Level, Throwable)}
-     *              or {@link Logging#logWithStackTrace(java.util.logging.Level, Throwable)}.
-     */
-    @Deprecated
-    public static void error(Throwable t, boolean stackTrace) {
-        if (stackTrace) {
-            Logging.log(Logging.LEVEL_ERROR, t);
-        } else {
-            Logging.logWithStackTrace(Logging.LEVEL_ERROR, t);
-        }
-    }
-
-    /**
-     * Prints an error message for the given Throwable.
-     * @param t The throwable object causing the error
-     * @param message additional error message
-     * @since 10420
-     * @deprecated Use {@link Logging#log(java.util.logging.Level, String, Throwable)}.
-     */
-    @Deprecated
-    public static void error(Throwable t, String message) {
-        Logging.log(Logging.LEVEL_ERROR, message, t);
-    }
-
-    /**
-     * Prints a warning message for the given Throwable.
-     * @param t The throwable object causing the error
-     * @param stackTrace {@code true}, if the stacktrace should be displayed
-     * @since 6642
-     * @deprecated Use {@link Logging#log(java.util.logging.Level, Throwable)}
-     *              or {@link Logging#logWithStackTrace(java.util.logging.Level, Throwable)}.
-     */
-    @Deprecated
-    public static void warn(Throwable t, boolean stackTrace) {
-        if (stackTrace) {
-            Logging.log(Logging.LEVEL_WARN, t);
-        } else {
-            Logging.logWithStackTrace(Logging.LEVEL_WARN, t);
-        }
-    }
-
-    /**
-     * Prints a warning message for the given Throwable.
-     * @param t The throwable object causing the error
-     * @param message additional error message
-     * @since 10420
-     * @deprecated Use {@link Logging#log(java.util.logging.Level, String, Throwable)}.
-     */
-    @Deprecated
-    public static void warn(Throwable t, String message) {
-        Logging.log(Logging.LEVEL_WARN, message, t);
-    }
-
-    /**
-     * Returns a human-readable message of error, also usable for developers.
-     * @param t The error
-     * @return The human-readable error message
-     * @since 6642
-     * @deprecated Use {@link Logging#getErrorMessage}.
-     */
-    @Deprecated
-    public static String getErrorMessage(Throwable t) {
-        if (t == null) {
-            return null;
-        } else {
-            return Logging.getErrorMessage(t);
-        }
-    }
-
-    /**
      * Platform specific code goes in here.
      * Plugins may replace it, however, some hooks will be called before any plugins have been loaded.
      * So if you need to hook into those early ones, split your class and send the one with the early hooks
@@ -610,17 +260,6 @@ public abstract class Main {
     }
 
     /**
-     * Returns the main layer manager that is used by the map view.
-     * @return The layer manager. The value returned will never change.
-     * @since 10279
-     * @deprecated use {@link MainApplication#getLayerManager} instead
-     */
-    @Deprecated
-    public static MainLayerManager getLayerManager() {
-        return MainApplication.getLayerManager();
-    }
-
-    /**
      * Replies the current selected primitives, from a end-user point of view.
      * It is not always technically the same collection of primitives than {@link DataSet#getSelected()}.
      * @return The current selected primitives, from a end-user point of view. Can be {@code null}.
@@ -652,70 +291,6 @@ public abstract class Main {
      */
     public abstract boolean containsDataSet(DataSet ds);
 
-    /**
-     * Registers a {@code JosmAction} and its shortcut.
-     * @param action action defining its own shortcut
-     * @deprecated use {@link MainApplication#registerActionShortcut(JosmAction)} instead
-     */
-    @Deprecated
-    public static void registerActionShortcut(JosmAction action) {
-        MainApplication.registerActionShortcut(action);
-    }
-
-    /**
-     * Registers an action and its shortcut.
-     * @param action action to register
-     * @param shortcut shortcut to associate to {@code action}
-     * @deprecated use {@link MainApplication#registerActionShortcut(Action, Shortcut)} instead
-     */
-    @Deprecated
-    public static void registerActionShortcut(Action action, Shortcut shortcut) {
-        MainApplication.registerActionShortcut(action, shortcut);
-    }
-
-    /**
-     * Unregisters a shortcut.
-     * @param shortcut shortcut to unregister
-     * @deprecated use {@link MainApplication#unregisterShortcut(Shortcut)} instead
-     */
-    @Deprecated
-    public static void unregisterShortcut(Shortcut shortcut) {
-        MainApplication.unregisterShortcut(shortcut);
-    }
-
-    /**
-     * Unregisters a {@code JosmAction} and its shortcut.
-     * @param action action to unregister
-     * @deprecated use {@link MainApplication#unregisterActionShortcut(JosmAction)} instead
-     */
-    @Deprecated
-    public static void unregisterActionShortcut(JosmAction action) {
-        MainApplication.unregisterActionShortcut(action);
-    }
-
-    /**
-     * Unregisters an action and its shortcut.
-     * @param action action to unregister
-     * @param shortcut shortcut to unregister
-     * @deprecated use {@link MainApplication#unregisterActionShortcut(Action, Shortcut)} instead
-     */
-    @Deprecated
-    public static void unregisterActionShortcut(Action action, Shortcut shortcut) {
-        MainApplication.unregisterActionShortcut(action, shortcut);
-    }
-
-    /**
-     * Replies the registered action for the given shortcut
-     * @param shortcut The shortcut to look for
-     * @return the registered action for the given shortcut
-     * @deprecated use {@link MainApplication#getRegisteredActionShortcut(Shortcut)} instead
-     * @since 5696
-     */
-    @Deprecated
-    public static Action getRegisteredActionShortcut(Shortcut shortcut) {
-        return MainApplication.getRegisteredActionShortcut(shortcut);
-    }
-
     ///////////////////////////////////////////////////////////////////////////
     //  Implementation part
     ///////////////////////////////////////////////////////////////////////////
@@ -890,66 +465,6 @@ public abstract class Main {
     }
 
     /**
-     * Listener for window switch events.
-     *
-     * These are events, when the user activates a window of another application
-     * or comes back to JOSM. Window switches from one JOSM window to another
-     * are not reported.
-     */
-    public interface WindowSwitchListener {
-        /**
-         * Called when the user activates a window of another application.
-         */
-        void toOtherApplication();
-
-        /**
-         * Called when the user comes from a window of another application back to JOSM.
-         */
-        void fromOtherApplication();
-    }
-
-    /**
-     * Registers a new {@code MapFrameListener} that will be notified of MapFrame changes.
-     * <p>
-     * It will fire an initial mapFrameInitialized event when the MapFrame is present.
-     * Otherwise will only fire when the MapFrame is created or destroyed.
-     * @param listener The MapFrameListener
-     * @return {@code true} if the listeners collection changed as a result of the call
-     * @see #addMapFrameListener
-     * @deprecated use {@link MainApplication#addAndFireMapFrameListener} instead
-     * @since 11904
-     */
-    @Deprecated
-    public static boolean addAndFireMapFrameListener(MapFrameListener listener) {
-        return MainApplication.addAndFireMapFrameListener(listener);
-    }
-
-    /**
-     * Registers a new {@code MapFrameListener} that will be notified of MapFrame changes
-     * @param listener The MapFrameListener
-     * @return {@code true} if the listeners collection changed as a result of the call
-     * @see #addAndFireMapFrameListener
-     * @deprecated use {@link MainApplication#addMapFrameListener} instead
-     * @since 5957
-     */
-    @Deprecated
-    public static boolean addMapFrameListener(MapFrameListener listener) {
-        return MainApplication.addMapFrameListener(listener);
-    }
-
-    /**
-     * Unregisters the given {@code MapFrameListener} from MapFrame changes
-     * @param listener The MapFrameListener
-     * @return {@code true} if the listeners collection changed as a result of the call
-     * @deprecated use {@link MainApplication#removeMapFrameListener} instead
-     * @since 5957
-     */
-    @Deprecated
-    public static boolean removeMapFrameListener(MapFrameListener listener) {
-        return MainApplication.removeMapFrameListener(listener);
-    }
-
-    /**
      * Adds a new network error that occur to give a hint about broken Internet connection.
      * Do not use this method for errors known for sure thrown because of a bad proxy configuration.
      *
diff --git a/src/org/openstreetmap/josm/actions/AbstractMergeAction.java b/src/org/openstreetmap/josm/actions/AbstractMergeAction.java
index 3e4efd7..6c1ac98 100644
--- a/src/org/openstreetmap/josm/actions/AbstractMergeAction.java
+++ b/src/org/openstreetmap/josm/actions/AbstractMergeAction.java
@@ -84,7 +84,7 @@ public abstract class AbstractMergeAction extends JosmAction {
      * @return the chosen layer
      */
     protected static Layer askTargetLayer(List<Layer> targetLayers) {
-        return askTargetLayer(targetLayers.toArray(new Layer[targetLayers.size()]),
+        return askTargetLayer(targetLayers.toArray(new Layer[0]),
                 tr("Please select the target layer."),
                 tr("Select target layer"),
                 tr("Merge"), "dialogs/mergedown");
diff --git a/src/org/openstreetmap/josm/actions/AddImageryLayerAction.java b/src/org/openstreetmap/josm/actions/AddImageryLayerAction.java
index c0fc874..d9456ef 100644
--- a/src/org/openstreetmap/josm/actions/AddImageryLayerAction.java
+++ b/src/org/openstreetmap/josm/actions/AddImageryLayerAction.java
@@ -75,7 +75,7 @@ public class AddImageryLayerAction extends JosmAction implements AdaptableAction
         // change toolbar icon from if specified
         String icon = info.getIcon();
         if (icon != null) {
-            new ImageProvider(icon).setOptional(true).getResourceAsync().thenAccept(result -> {
+            new ImageProvider(icon).setOptional(true).getResourceAsync(result -> {
                 if (result != null) {
                     GuiHelper.runInEDT(() -> result.attachImageIcon(this));
                 }
@@ -168,7 +168,7 @@ public class AddImageryLayerAction extends JosmAction implements AdaptableAction
         final WMSLayerTree tree = new WMSLayerTree();
         tree.updateTree(wms);
         List<String> wmsFormats = wms.getFormats();
-        final JComboBox<String> formats = new JComboBox<>(wmsFormats.toArray(new String[wmsFormats.size()]));
+        final JComboBox<String> formats = new JComboBox<>(wmsFormats.toArray(new String[0]));
         formats.setSelectedItem(wms.getPreferredFormats());
         formats.setToolTipText(tr("Select image format for WMS layer"));
 
diff --git a/src/org/openstreetmap/josm/actions/GpxExportAction.java b/src/org/openstreetmap/josm/actions/GpxExportAction.java
index 29d642a..681888f 100644
--- a/src/org/openstreetmap/josm/actions/GpxExportAction.java
+++ b/src/org/openstreetmap/josm/actions/GpxExportAction.java
@@ -39,6 +39,24 @@ public class GpxExportAction extends DiskAccessAction {
     }
 
     /**
+     * Deferring constructor for child classes.
+     *
+     * @param name see {@code DiskAccessAction}
+     * @param iconName see {@code DiskAccessAction}
+     * @param tooltip see {@code DiskAccessAction}
+     * @param shortcut see {@code DiskAccessAction}
+     * @param register see {@code DiskAccessAction}
+     * @param toolbarId see {@code DiskAccessAction}
+     * @param installAdapters see {@code DiskAccessAction}
+     *
+     * @since 13210
+     */
+    protected GpxExportAction(String name, String iconName, String tooltip, Shortcut shortcut,
+            boolean register, String toolbarId, boolean installAdapters) {
+        super(name, iconName, tooltip, shortcut, register, toolbarId, installAdapters);
+    }
+
+    /**
      * Get the layer to export.
      * @return The layer to export, either a {@link GpxLayer} or {@link OsmDataLayer}.
      */
diff --git a/src/org/openstreetmap/josm/actions/ImageryAdjustAction.java b/src/org/openstreetmap/josm/actions/ImageryAdjustAction.java
index f13566f..44e244d 100644
--- a/src/org/openstreetmap/josm/actions/ImageryAdjustAction.java
+++ b/src/org/openstreetmap/josm/actions/ImageryAdjustAction.java
@@ -32,7 +32,6 @@ import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.MapFrame;
 import org.openstreetmap.josm.gui.MapView;
 import org.openstreetmap.josm.gui.layer.AbstractTileSourceLayer;
-import org.openstreetmap.josm.gui.layer.imagery.TileSourceDisplaySettings;
 import org.openstreetmap.josm.gui.util.WindowGeometry;
 import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
@@ -85,7 +84,7 @@ public class ImageryAdjustAction extends MapMode implements AWTEventListener {
                 Main.getProjection().toCode(),
                 layer.getInfo().getName(),
                 null,
-                curOff.east(), curOff.north(), center.lon(), center.lat());
+                curOff, center);
         layer.getDisplaySettings().setOffsetBookmark(tempOffset);
         addListeners();
         showOffsetDialog(new ImageryOffsetDialog());
@@ -292,10 +291,10 @@ public class ImageryAdjustAction extends MapMode implements AWTEventListener {
                 int precision = Main.getProjection().getDefaultZoomInPPD() >= 1.0 ? 2 : 7;
                 // US locale to force decimal separator to be '.'
                 try (Formatter us = new Formatter(Locale.US)) {
-                    TileSourceDisplaySettings ds = layer.getDisplaySettings();
+                    EastNorth displacement = layer.getDisplaySettings().getDisplacement();
                     tOffset.setText(us.format(new StringBuilder()
                         .append("%1.").append(precision).append("f; %1.").append(precision).append('f').toString(),
-                        ds.getDx(), ds.getDy()).toString());
+                        displacement.east(), displacement.north()).toString());
                 }
             }
         }
diff --git a/src/org/openstreetmap/josm/actions/JoinAreasAction.java b/src/org/openstreetmap/josm/actions/JoinAreasAction.java
index 90b0750..dd0f7fc 100644
--- a/src/org/openstreetmap/josm/actions/JoinAreasAction.java
+++ b/src/org/openstreetmap/josm/actions/JoinAreasAction.java
@@ -1009,7 +1009,7 @@ public class JoinAreasAction extends JosmAction {
 
     /**
      * This is a method that splits way into smaller parts, using the prepared nodes list as split points.
-     * Uses {@link SplitWayAction#splitWay} for the heavy lifting.
+     * Uses {@link SplitWayCommand#splitWay} for the heavy lifting.
      * @param way way to split
      * @param nodes split points
      * @return list of split ways (or original ways if no splitting is done).
diff --git a/src/org/openstreetmap/josm/actions/MergeNodesAction.java b/src/org/openstreetmap/josm/actions/MergeNodesAction.java
index 770b163..d1a1461 100644
--- a/src/org/openstreetmap/josm/actions/MergeNodesAction.java
+++ b/src/org/openstreetmap/josm/actions/MergeNodesAction.java
@@ -284,21 +284,6 @@ public class MergeNodesAction extends JosmAction {
     /**
      * Merges the nodes in {@code nodes} at the specified node's location.
      *
-     * @param layer unused
-     * @param nodes the collection of nodes. Ignored if null.
-     * @param targetLocationNode this node's location will be used for the targetNode.
-     * @return The command necessary to run in order to perform action, or {@code null} if there is nothing to do
-     * @throws IllegalArgumentException if {@code layer} is null
-     * @deprecated use {@link #mergeNodes(Collection, Node)} instead
-     */
-    @Deprecated
-    public static Command mergeNodes(OsmDataLayer layer, Collection<Node> nodes, Node targetLocationNode) {
-        return mergeNodes(nodes, targetLocationNode);
-    }
-
-    /**
-     * Merges the nodes in {@code nodes} at the specified node's location.
-     *
      * @param nodes the collection of nodes. Ignored if null.
      * @param targetLocationNode this node's location will be used for the targetNode.
      * @return The command necessary to run in order to perform action, or {@code null} if there is nothing to do
@@ -311,7 +296,11 @@ public class MergeNodesAction extends JosmAction {
         }
         Set<Node> allNodes = new HashSet<>(nodes);
         allNodes.add(targetLocationNode);
-        return mergeNodes(nodes, selectTargetNode(allNodes), targetLocationNode);
+        Node targetNode = selectTargetNode(allNodes);
+        if (targetNode == null) {
+            return null;
+        }
+        return mergeNodes(nodes, targetNode, targetLocationNode);
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/actions/OpenLocationAction.java b/src/org/openstreetmap/josm/actions/OpenLocationAction.java
index 7013b89..f4ef604 100644
--- a/src/org/openstreetmap/josm/actions/OpenLocationAction.java
+++ b/src/org/openstreetmap/josm/actions/OpenLocationAction.java
@@ -42,6 +42,7 @@ import org.openstreetmap.josm.gui.ExtendedDialog;
 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.util.WindowGeometry;
 import org.openstreetmap.josm.gui.widgets.HistoryComboBox;
 import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
@@ -58,7 +59,11 @@ public class OpenLocationAction extends JosmAction {
     /**
      * true if the URL needs to be opened in a new layer, false otherwise
      */
-    private static final BooleanProperty USE_NEW_LAYER = new BooleanProperty("download.newlayer", false);
+    private static final BooleanProperty USE_NEW_LAYER = new BooleanProperty("download.location.newlayer", false);
+    /**
+     * true to zoom to entire newly downloaded data, false otherwise
+     */
+    private static final BooleanProperty DOWNLOAD_ZOOMTODATA = new BooleanProperty("download.location.zoomtodata", true);
     /**
      * the list of download tasks
      */
@@ -138,6 +143,14 @@ public class OpenLocationAction extends JosmAction {
         layer.setSelected(USE_NEW_LAYER.get());
         all.add(layer, GBC.eop().fill(GBC.BOTH));
 
+        // zoom to downloaded data
+        JCheckBox zoom = new JCheckBox(tr("Zoom to downloaded data"));
+        zoom.setToolTipText(tr("Select to zoom to entire newly downloaded data."));
+        zoom.setSelected(DOWNLOAD_ZOOMTODATA.get());
+        all.add(zoom, GBC.eop().fill(GBC.BOTH));
+
+        ExpertToggleAction.addVisibilitySwitcher(zoom);
+
         ExtendedDialog dialog = new ExtendedDialog(Main.parent,
                 tr("Download Location"),
                 tr("Download URL"), tr("Cancel"))
@@ -147,8 +160,13 @@ public class OpenLocationAction extends JosmAction {
                 tr("Start downloading data"),
                 tr("Close dialog and cancel downloading"))
             .configureContextsensitiveHelp("/Action/OpenLocation", true /* show help button */);
+        dialog.setupDialog();
+        dialog.pack();
+        dialog.setRememberWindowGeometry(getClass().getName() + ".geometry",
+                    WindowGeometry.centerInWindow(Main.parent, dialog.getPreferredSize()));
         if (dialog.showDialog().getValue() == 1) {
             USE_NEW_LAYER.put(layer.isSelected());
+            DOWNLOAD_ZOOMTODATA.put(zoom.isSelected());
             remindUploadAddressHistory(uploadAddresses);
             openUrl(Utils.strip(uploadAddresses.getText()));
         }
@@ -206,7 +224,7 @@ public class OpenLocationAction extends JosmAction {
      * @since 11986 (return type)
      */
     public List<Future<?>> openUrl(boolean newLayer, String url) {
-        return realOpenUrl(newLayer, url);
+        return openUrl(newLayer, DOWNLOAD_ZOOMTODATA.get(), url);
     }
 
     /**
@@ -216,10 +234,18 @@ public class OpenLocationAction extends JosmAction {
      * @since 11986 (return type)
      */
     public List<Future<?>> openUrl(String url) {
-        return realOpenUrl(USE_NEW_LAYER.get(), url);
+        return openUrl(USE_NEW_LAYER.get(), DOWNLOAD_ZOOMTODATA.get(), url);
     }
 
-    private List<Future<?>> realOpenUrl(boolean newLayer, String url) {
+    /**
+     * Open the given URL.
+     * @param newLayer true if the URL needs to be opened in a new layer, false otherwise
+     * @param zoomToData true to zoom to entire newly downloaded data, false otherwise
+     * @param url The URL to open
+     * @return the list of tasks that have been started successfully (can be empty).
+     * @since 13261
+     */
+    public List<Future<?>> openUrl(boolean newLayer, boolean zoomToData, String url) {
         Collection<DownloadTask> tasks = findDownloadTasks(url, false);
 
         if (tasks.size() > 1) {
@@ -234,6 +260,7 @@ public class OpenLocationAction extends JosmAction {
         List<Future<?>> result = new ArrayList<>();
         for (final DownloadTask task : tasks) {
             try {
+                task.setZoomAfterDownload(zoomToData);
                 result.add(MainApplication.worker.submit(new PostDownloadHandler(task, task.loadUrl(newLayer, url, monitor))));
             } catch (IllegalArgumentException e) {
                 Logging.error(e);
@@ -248,7 +275,7 @@ public class OpenLocationAction extends JosmAction {
      * @return the selected tasks from the user or an empty list if the dialog has been canceled
      */
     Collection<DownloadTask> askWhichTasksToLoad(final Collection<DownloadTask> tasks) {
-        final JList<DownloadTask> list = new JList<>(tasks.toArray(new DownloadTask[tasks.size()]));
+        final JList<DownloadTask> list = new JList<>(tasks.toArray(new DownloadTask[0]));
         list.addSelectionInterval(0, tasks.size() - 1);
         final ExtendedDialog dialog = new WhichTasksToPerformDialog(list);
         dialog.showDialog();
diff --git a/src/org/openstreetmap/josm/actions/PurgeAction.java b/src/org/openstreetmap/josm/actions/PurgeAction.java
index b66034e..ff74c04 100644
--- a/src/org/openstreetmap/josm/actions/PurgeAction.java
+++ b/src/org/openstreetmap/josm/actions/PurgeAction.java
@@ -148,7 +148,7 @@ public class PurgeAction extends JosmAction {
                     return type;
                 return Long.compare(o1.getUniqueId(), o2.getUniqueId());
             });
-            JList<OsmPrimitive> list = new JList<>(toPurgeAdditionally.toArray(new OsmPrimitive[toPurgeAdditionally.size()]));
+            JList<OsmPrimitive> list = new JList<>(toPurgeAdditionally.toArray(new OsmPrimitive[0]));
             /* force selection to be active for all entries */
             list.setCellRenderer(new SelectionForcedOsmPrimitivRenderer());
             JScrollPane scroll = new JScrollPane(list);
diff --git a/src/org/openstreetmap/josm/actions/RestartAction.java b/src/org/openstreetmap/josm/actions/RestartAction.java
index eaceece..a944dc2 100644
--- a/src/org/openstreetmap/josm/actions/RestartAction.java
+++ b/src/org/openstreetmap/josm/actions/RestartAction.java
@@ -105,7 +105,7 @@ public class RestartAction extends JosmAction {
             @Override
             public void run() {
                 try {
-                    Runtime.getRuntime().exec(cmd.toArray(new String[cmd.size()]));
+                    Runtime.getRuntime().exec(cmd.toArray(new String[0]));
                 } catch (IOException e) {
                     Logging.error(e);
                 }
@@ -157,7 +157,7 @@ public class RestartAction extends JosmAction {
                 // else it's a .class, add the classpath and mainClass
                 cmd.add("-cp");
                 cmd.add('"' + System.getProperty("java.class.path") + '"');
-                cmd.add(mainCommand[0]);
+                cmd.add(mainCommand[0].replace("jdk.plugin/", "")); // Main class appears to be invalid on Java WebStart 9
             }
             // add JNLP file.
             if (jnlp != null) {
diff --git a/src/org/openstreetmap/josm/actions/SplitWayAction.java b/src/org/openstreetmap/josm/actions/SplitWayAction.java
index abd3742..9b6ec6a 100644
--- a/src/org/openstreetmap/josm/actions/SplitWayAction.java
+++ b/src/org/openstreetmap/josm/actions/SplitWayAction.java
@@ -24,7 +24,6 @@ import javax.swing.JPanel;
 import javax.swing.ListSelectionModel;
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.SplitWayCommand;
 import org.openstreetmap.josm.data.osm.DefaultNameFormatter;
 import org.openstreetmap.josm.data.osm.Node;
@@ -37,7 +36,6 @@ 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.layer.OsmDataLayer;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.Shortcut;
 
@@ -50,77 +48,6 @@ import org.openstreetmap.josm.tools.Shortcut;
 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;
-        private final Way originalWay;
-        private final List<Way> newWays;
-
-        /**
-         * Constructs a new {@code SplitWayResult}.
-         * @param command The command to be performed to split the way (which is saved for later retrieval with {@link #getCommand})
-         * @param newSelection The new list of selected primitives ids (which is saved for later retrieval with {@link #getNewSelection})
-         * @param originalWay The original way being split (which is saved for later retrieval with {@link #getOriginalWay})
-         * @param newWays The resulting new ways (which is saved for later retrieval with {@link #getOriginalWay})
-         */
-        public SplitWayResult(Command command, List<? extends PrimitiveId> newSelection, Way originalWay, List<Way> newWays) {
-            this.command = command;
-            this.newSelection = newSelection;
-            this.originalWay = originalWay;
-            this.newWays = newWays;
-        }
-
-        /**
-         * @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
-         */
-        public Command getCommand() {
-            return command;
-        }
-
-        /**
-         * 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;
-        }
-    }
-
-    /**
      * Create a new SplitWayAction.
      */
     public SplitWayAction() {
@@ -205,7 +132,7 @@ public class SplitWayAction extends JosmAction {
             sel.addAll(selectedWays);
             sel.addAll(selectedRelations);
 
-            final List<Way> newWays = createNewWaysFromChunks(selectedWay, wayChunks);
+            final List<Way> newWays = SplitWayCommand.createNewWaysFromChunks(selectedWay, wayChunks);
             final Way wayToKeep = SplitWayCommand.Strategy.keepLongestChunk().determineWayToKeep(newWays);
 
             if (ExpertToggleAction.isExpert() && !selectedWay.isNew()) {
@@ -242,7 +169,7 @@ public class SplitWayAction extends JosmAction {
             this.newWays = newWays;
             this.selection = selection;
             this.wayToKeep = wayToKeep;
-            this.list = new JList<>(newWays.toArray(new Way[newWays.size()]));
+            this.list = new JList<>(newWays.toArray(new Way[0]));
             configureList();
 
             setButtonIcons("ok", "cancel");
@@ -314,42 +241,6 @@ public class SplitWayAction extends JosmAction {
     }
 
     /**
-     * Determines which way chunk should reuse the old id and its history
-     *
-     * @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 {
-
-        /**
-         * 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 SplitWayCommand.Strategy.keepLongestChunk()::determineWayToKeep;
-        }
-
-        /**
-         * Returns a strategy which selects the first way chunk.
-         * @return strategy which selects the first way chunk
-         */
-        static Strategy keepFirstChunk() {
-            return SplitWayCommand.Strategy.keepFirstChunk()::determineWayToKeep;
-        }
-    }
-
-    /**
      * Determine which ways to split.
      * @param selectedWays List of user selected ways.
      * @param selectedNodes List of user selected nodes.
@@ -384,129 +275,6 @@ public class SplitWayAction extends JosmAction {
         return UnJoinNodeWayAction.getApplicableWays(selectedWays, selectedNodes);
     }
 
-    /**
-     * 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
-     * @deprecated To be removed end of 2017. Use {@link SplitWayCommand#buildSplitChunks} instead
-     */
-    @Deprecated
-    public static List<List<Node>> buildSplitChunks(Way wayToSplit, List<Node> splitPoints) {
-        return SplitWayCommand.buildSplitChunks(wayToSplit, splitPoints);
-    }
-
-    /**
-     * 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
-     * @deprecated To be removed end of 2017. Use {@link SplitWayCommand#createNewWaysFromChunks} instead
-     */
-    @Deprecated
-    protected static List<Way> createNewWaysFromChunks(Way way, Iterable<List<Node>> wayChunks) {
-        return SplitWayCommand.createNewWaysFromChunks(way, wayChunks);
-    }
-
-    /**
-     * 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 layer the layer which the way belongs to.
-     * @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
-     * @deprecated to be removed end of 2017. Use {@link SplitWayCommand#splitWay} instead
-     */
-    @Deprecated
-    public static SplitWayResult splitWay(OsmDataLayer layer, Way way, List<List<Node>> wayChunks,
-            Collection<? extends OsmPrimitive> selection) {
-        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 SplitWayCommand#splitWay} instead
-     */
-    @Deprecated
-    public static SplitWayResult 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 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 layer the layer which the way belongs to.
-     * @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 8954
-     * @deprecated to be removed end of 2017. Use {@link SplitWayCommand#splitWay} instead
-     */
-    @Deprecated
-    public static SplitWayResult splitWay(OsmDataLayer layer, Way way, List<List<Node>> wayChunks,
-            Collection<? extends OsmPrimitive> selection, Strategy splitStrategy) {
-        return splitWay(way, wayChunks, selection, splitStrategy);
-    }
-
-    /**
-     * 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;
@@ -518,51 +286,6 @@ public class SplitWayAction extends JosmAction {
         }
     }
 
-    /**
-     * 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 layer the layer which the way belongs to.
-     * @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
-     * @deprecated to be removed end of 2017. Use {@link SplitWayCommand#split} 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 SplitWayCommand#split} 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(way, chunks, selection) : null;
-    }
-
     @Override
     protected void updateEnabledState() {
         updateEnabledStateOnCurrentSelection();
diff --git a/src/org/openstreetmap/josm/actions/downloadtasks/AbstractDownloadTask.java b/src/org/openstreetmap/josm/actions/downloadtasks/AbstractDownloadTask.java
index ec768c4..08bb8eb 100644
--- a/src/org/openstreetmap/josm/actions/downloadtasks/AbstractDownloadTask.java
+++ b/src/org/openstreetmap/josm/actions/downloadtasks/AbstractDownloadTask.java
@@ -78,11 +78,7 @@ public abstract class AbstractDownloadTask<T> implements DownloadTask {
         return downloadedData;
     }
 
-    /**
-     * Sets whether the map view will zoom to download area after download
-     * @param zoomAfterDownload if true, the map view will zoom to download area after download
-     * @since 11658
-     */
+    @Override
     public final void setZoomAfterDownload(boolean zoomAfterDownload) {
         this.zoomAfterDownload = zoomAfterDownload;
     }
diff --git a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadTask.java b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadTask.java
index 7067ddb..c671eb4 100644
--- a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadTask.java
+++ b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadTask.java
@@ -127,4 +127,11 @@ public interface DownloadTask {
      * @since 5691
      */
     String getConfirmationMessage(URL url);
+
+    /**
+     * Sets whether the map view will zoom to download area after download
+     * @param zoomAfterDownload if true, the map view will zoom to download area after download
+     * @since 13261
+     */
+    void setZoomAfterDownload(boolean zoomAfterDownload);
 }
diff --git a/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java b/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
index 31636fa..9c46c20 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
@@ -29,6 +29,7 @@ import javax.swing.AbstractAction;
 import javax.swing.JCheckBoxMenuItem;
 import javax.swing.JMenuItem;
 import javax.swing.JOptionPane;
+import javax.swing.SwingUtilities;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.JosmAction;
@@ -347,8 +348,11 @@ public class DrawAction extends MapMode implements MapViewPaintable, DataSelecti
     public void selectionChanged(SelectionChangeEvent event) {
         if (!MainApplication.getMap().mapView.isActiveLayerDrawable())
             return;
-        computeHelperLine();
-        addHighlighting();
+        // Make sure helper line is computed later (causes deadlock in selection event chain otherwise)
+        SwingUtilities.invokeLater(() -> {
+            computeHelperLine();
+            addHighlighting();
+        });
     }
 
     private void tryAgain(MouseEvent e) {
@@ -819,8 +823,6 @@ public class DrawAction extends MapMode implements MapViewPaintable, DataSelecti
         mouseOnExistingNode = null;
         mouseOnExistingWays = new HashSet<>();
 
-        showStatusInfo(-1, -1, -1, snapHelper.isSnapOn());
-
         if (!ctrl && mousePos != null) {
             currentMouseNode = mv.getNearestNode(mousePos, OsmPrimitive::isSelectable);
         }
@@ -852,6 +854,7 @@ public class DrawAction extends MapMode implements MapViewPaintable, DataSelecti
         if (getCurrentBaseNode() == null || getCurrentBaseNode() == currentMouseNode)
             return; // Don't create zero length way segments.
 
+        showStatusInfo(-1, -1, -1, snapHelper.isSnapOn());
 
         double curHdg = Utils.toDegrees(getCurrentBaseNode().getEastNorth()
                 .heading(currentMouseEastNorth));
@@ -1309,7 +1312,16 @@ public class DrawAction extends MapMode implements MapViewPaintable, DataSelecti
     @Override
     public Collection<? extends OsmPrimitive> getPreservedPrimitives() {
         DataSet ds = getLayerManager().getEditDataSet();
-        return ds != null ? ds.getSelected() : Collections.emptySet();
+        if (ds != null) {
+            // Preserves selected primitives and selected way nodes
+            Set<OsmPrimitive> result = new HashSet<>();
+            for (Way w : ds.getSelectedWays()) {
+                result.addAll(w.getNodes());
+            }
+            result.addAll(ds.getSelected());
+            return result;
+        }
+        return Collections.emptySet();
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/actions/mapmode/MapMode.java b/src/org/openstreetmap/josm/actions/mapmode/MapMode.java
index 0984515..eac5e30 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/MapMode.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/MapMode.java
@@ -11,13 +11,13 @@ import java.util.Collection;
 import java.util.Collections;
 
 import org.openstreetmap.josm.actions.JosmAction;
-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.spi.preferences.PreferenceChangeEvent;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Shortcut;
 
@@ -64,35 +64,6 @@ public abstract class MapMode extends JosmAction implements MouseListener, Mouse
     }
 
     /**
-     * Constructor for mapmodes without a menu
-     * @param name the action's text
-     * @param iconName icon filename in {@code mapmode} directory
-     * @param tooltip  a longer description of the action that will be displayed in the tooltip.
-     * @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
-    public MapMode(String name, String iconName, String tooltip, Shortcut shortcut, MapFrame mapFrame, Cursor cursor) {
-        this(name, iconName, tooltip, shortcut, cursor);
-    }
-
-    /**
-     * Constructor for mapmodes with a menu (no shortcut will be registered)
-     * @param name the action's text
-     * @param iconName icon filename in {@code mapmode} directory
-     * @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
-    public MapMode(String name, String iconName, String tooltip, MapFrame mapFrame, Cursor cursor) {
-        this(name, iconName, tooltip, cursor);
-    }
-
-    /**
      * Makes this map mode active.
      */
     public void enterMode() {
@@ -178,18 +149,6 @@ public abstract class MapMode extends JosmAction implements MouseListener, Mouse
     }
 
     /**
-     * Update internal ctrl, alt, shift mask from given modifiers mask.
-     * @param modifiers event modifiers mask
-     * @deprecated use {@link #updateKeyModifiersEx} instead
-     */
-    @Deprecated
-    protected void updateKeyModifiers(int modifiers) {
-        ctrl = (modifiers & ActionEvent.CTRL_MASK) != 0;
-        alt = (modifiers & (ActionEvent.ALT_MASK | InputEvent.ALT_GRAPH_MASK)) != 0;
-        shift = (modifiers & ActionEvent.SHIFT_MASK) != 0;
-    }
-
-    /**
      * Update internal ctrl, alt, shift mask from given extended modifiers mask.
      * @param modifiers event extended modifiers mask
      * @since 12517
diff --git a/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java b/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
index f486758..384157d 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
@@ -718,7 +718,9 @@ public class SelectAction extends MapMode implements ModifierExListener, KeyPres
                     LatLon ll = n.getCoor();
                     if (ll != null && ll.isOutSideWorld()) {
                         // Revert move
-                        ((MoveCommand) c).resetToCheckpoint();
+                        if (c instanceof MoveCommand) {
+                            ((MoveCommand) c).resetToCheckpoint();
+                        }
                         // TODO: We might use a simple notification in the lower left corner.
                         JOptionPane.showMessageDialog(
                                 Main.parent,
diff --git a/src/org/openstreetmap/josm/actions/relation/ExportRelationToGpxAction.java b/src/org/openstreetmap/josm/actions/relation/ExportRelationToGpxAction.java
new file mode 100644
index 0000000..e105bc8
--- /dev/null
+++ b/src/org/openstreetmap/josm/actions/relation/ExportRelationToGpxAction.java
@@ -0,0 +1,249 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.actions.relation;
+
+import static org.openstreetmap.josm.actions.relation.ExportRelationToGpxAction.Mode.FROM_FIRST_MEMBER;
+import static org.openstreetmap.josm.actions.relation.ExportRelationToGpxAction.Mode.TO_FILE;
+import static org.openstreetmap.josm.actions.relation.ExportRelationToGpxAction.Mode.TO_LAYER;
+import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.event.ActionEvent;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.Stack;
+
+import org.openstreetmap.josm.actions.GpxExportAction;
+import org.openstreetmap.josm.actions.OsmPrimitiveAction;
+import org.openstreetmap.josm.data.gpx.GpxData;
+import org.openstreetmap.josm.data.gpx.ImmutableGpxTrack;
+import org.openstreetmap.josm.data.gpx.WayPoint;
+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.dialogs.relation.sort.WayConnectionType;
+import org.openstreetmap.josm.gui.dialogs.relation.sort.WayConnectionTypeCalculator;
+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.tools.SubclassFilteredCollection;
+
+/**
+ * Exports the current relation to a single GPX track,
+ * currently for type=route and type=superroute relations only.
+ *
+ * @since 13210
+ */
+public class ExportRelationToGpxAction extends GpxExportAction
+    implements OsmPrimitiveAction {
+
+    /** Enumeration of export variants */
+    public enum Mode {
+        /** concatenate members from first to last element */
+        FROM_FIRST_MEMBER,
+        /** concatenate members from last to first element */
+        FROM_LAST_MEMBER,
+        /** export to GPX layer and add to LayerManager */
+        TO_LAYER,
+        /** export to GPX file and open FileChooser */
+        TO_FILE
+    }
+
+    /** Mode of this ExportToGpxAction */
+    protected final EnumSet<Mode> mode;
+
+    /** Primitives this action works on */
+    protected Collection<Relation> relations = Collections.<Relation>emptySet();
+
+    /** Construct a new ExportRelationToGpxAction with default mode */
+    public ExportRelationToGpxAction() {
+        this(EnumSet.of(FROM_FIRST_MEMBER, TO_FILE));
+    }
+
+    /**
+     * Constructs a new {@code ExportRelationToGpxAction}
+     *
+     * @param mode which mode to use, see {@code ExportRelationToGpxAction.Mode}
+     */
+    public ExportRelationToGpxAction(EnumSet<Mode> mode) {
+        super(name(mode), mode.contains(TO_FILE) ? "exportgpx" : "dialogs/layerlist", tooltip(mode),
+                null, false, null, false);
+        putValue("help", ht("/Action/ExportRelationToGpx"));
+        this.mode = mode;
+    }
+
+    private static String name(EnumSet<Mode> mode) {
+        if (mode.contains(TO_FILE)) {
+            if (mode.contains(FROM_FIRST_MEMBER)) {
+                return tr("Export GPX file starting from first member");
+            } else {
+                return tr("Export GPX file starting from last member");
+            }
+        } else {
+            if (mode.contains(FROM_FIRST_MEMBER)) {
+                return tr("Convert to GPX layer starting from first member");
+            } else {
+                return tr("Convert to GPX layer starting from last member");
+            }
+        }
+    }
+
+    private static String tooltip(EnumSet<Mode> mode) {
+        if (mode.contains(FROM_FIRST_MEMBER)) {
+            return tr("Flatten this relation to a single gpx track recursively, " +
+                    "starting with the first member(s), successively continuing to the last.");
+        } else {
+            return tr("Flatten this relation to a single gpx track recursively, " +
+                    "starting with the last member(s), successively continuing to the first.");
+        }
+    }
+
+    private static final class BidiIterableList {
+        private final List<RelationMember> l;
+
+        private BidiIterableList(List<RelationMember> l) {
+            this.l = l;
+        }
+
+        public Iterator<RelationMember> iterator() {
+            return l.iterator();
+        }
+
+        public Iterator<RelationMember> reverseIterator() {
+            ListIterator<RelationMember> li = l.listIterator(l.size());
+            return new Iterator<RelationMember>() {
+                @Override
+                public boolean hasNext() {
+                    return li.hasPrevious();
+                }
+
+                @Override
+                public RelationMember next() {
+                    return li.previous();
+                }
+
+                @Override
+                public void remove() {
+                    li.remove();
+                }
+            };
+        }
+    }
+
+    @Override
+    protected Layer getLayer() {
+        List<RelationMember> flat = new ArrayList<>();
+
+        List<RelationMember> init = new ArrayList<>();
+        relations.forEach(t -> init.add(new RelationMember("", t)));
+        BidiIterableList l = new BidiIterableList(init);
+
+        Stack<Iterator<RelationMember>> stack = new Stack<>();
+        stack.push(mode.contains(FROM_FIRST_MEMBER) ? l.iterator() : l.reverseIterator());
+
+        List<Relation> relsFound = new ArrayList<>();
+        do {
+            Iterator<RelationMember> i = stack.peek();
+            if (!i.hasNext())
+                stack.pop();
+            while (i.hasNext()) {
+                RelationMember m = i.next();
+                if (m.isRelation() && !m.getRelation().isIncomplete()) {
+                    l = new BidiIterableList(m.getRelation().getMembers());
+                    stack.push(mode.contains(FROM_FIRST_MEMBER) ? l.iterator() : l.reverseIterator());
+                    relsFound.add(m.getRelation());
+                    break;
+                }
+                if (m.isWay()) {
+                    flat.add(m);
+                }
+            }
+        } while (!stack.isEmpty());
+
+        GpxData gpxData = new GpxData();
+        String layerName = " (GPX export)";
+        long time = System.currentTimeMillis()-24*3600*1000;
+
+        if (!flat.isEmpty()) {
+            Map<String, Object> trkAttr = new HashMap<>();
+            Collection<Collection<WayPoint>> trk = new ArrayList<>();
+            List<WayPoint> trkseg = new ArrayList<>();
+            trk.add(trkseg);
+
+            List<WayConnectionType> wct = new WayConnectionTypeCalculator().updateLinks(flat);
+            final HashMap<String, Integer> names = new HashMap<>();
+            for (int i = 0; i < flat.size(); i++) {
+                if (!wct.get(i).isOnewayLoopBackwardPart) {
+                    if (!wct.get(i).direction.isRoundabout()) {
+                        if (!wct.get(i).linkPrev && !trkseg.isEmpty()) {
+                            gpxData.addTrack(new ImmutableGpxTrack(trk, trkAttr));
+                            trkAttr.clear();
+                            trk.clear();
+                            trkseg.clear();
+                            trk.add(trkseg);
+                        }
+                        if (trkAttr.isEmpty()) {
+                            Relation r = Way.getParentRelations(Arrays.asList(flat.get(i).getWay()))
+                                    .stream().filter(relsFound::contains).findFirst().orElseGet(null);
+                            if (r != null)
+                                trkAttr.put("name", r.getName() != null ? r.getName() : r.getId());
+                            GpxData.ensureUniqueName(trkAttr, names);
+                        }
+                        List<Node> ln = flat.get(i).getWay().getNodes();
+                        if (wct.get(i).direction == WayConnectionType.Direction.BACKWARD)
+                            Collections.reverse(ln);
+                        for (Node n: ln) {
+                            trkseg.add(OsmDataLayer.nodeToWayPoint(n, time));
+                            time += 1000;
+                        }
+                    }
+                }
+            }
+            gpxData.addTrack(new ImmutableGpxTrack(trk, trkAttr));
+
+            String lprefix = relations.iterator().next().getName();
+            if (lprefix == null || relations.size() > 1)
+                lprefix = tr("Selected Relations");
+            layerName = lprefix + layerName;
+        }
+
+        return new GpxLayer(gpxData, layerName, true);
+    }
+
+    /**
+     *
+     * @param e the ActionEvent
+     */
+    @Override
+    public void actionPerformed(ActionEvent e) {
+        if (mode.contains(TO_LAYER))
+            MainApplication.getLayerManager().addLayer(getLayer());
+        if (mode.contains(TO_FILE))
+            super.actionPerformed(e);
+    }
+
+    @Override
+    public void setPrimitives(Collection<? extends OsmPrimitive> primitives) {
+        relations = Collections.<Relation>emptySet();
+        if (primitives != null && !primitives.isEmpty()) {
+            relations = new SubclassFilteredCollection<>(primitives,
+                r -> r instanceof Relation && r.hasTag("type", Arrays.asList("route", "superroute")));
+        }
+        updateEnabledState();
+    }
+
+    @Override
+    protected void updateEnabledState() {
+        setEnabled(!relations.isEmpty());
+    }
+}
diff --git a/src/org/openstreetmap/josm/actions/search/SearchAction.java b/src/org/openstreetmap/josm/actions/search/SearchAction.java
index 3bb07d5..49c38dc 100644
--- a/src/org/openstreetmap/josm/actions/search/SearchAction.java
+++ b/src/org/openstreetmap/josm/actions/search/SearchAction.java
@@ -415,7 +415,7 @@ public class SearchAction extends JosmAction implements ParameterizedAction {
                         ss.mapCSSSearch = mapCSSSearch.isSelected();
                         SearchCompiler.compile(ss);
                         super.buttonAction(buttonIndex, evt);
-                    } catch (SearchParseError e) {
+                    } catch (SearchParseError | MapCSSException e) {
                         Logging.debug(e);
                         JOptionPane.showMessageDialog(
                                 Main.parent,
diff --git a/src/org/openstreetmap/josm/command/AddCommand.java b/src/org/openstreetmap/josm/command/AddCommand.java
index dd418e8..64374a4 100644
--- a/src/org/openstreetmap/josm/command/AddCommand.java
+++ b/src/org/openstreetmap/josm/command/AddCommand.java
@@ -15,7 +15,6 @@ import org.openstreetmap.josm.data.osm.DefaultNameFormatter;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
 import org.openstreetmap.josm.data.osm.Way;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.tools.ImageProvider;
 
 /**
@@ -33,28 +32,6 @@ public class AddCommand extends Command {
     private final OsmPrimitive osm;
 
     /**
-     * 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");
-    }
-
-    /**
-     * 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");
-    }
-
-    /**
      * Creates the command and specify the element to add in the context of the given data set.
      * @param data The data set. Must not be {@code null}
      * @param osm The primitive to add
diff --git a/src/org/openstreetmap/josm/command/AddPrimitivesCommand.java b/src/org/openstreetmap/josm/command/AddPrimitivesCommand.java
index 821f178..b46ec40 100644
--- a/src/org/openstreetmap/josm/command/AddPrimitivesCommand.java
+++ b/src/org/openstreetmap/josm/command/AddPrimitivesCommand.java
@@ -18,7 +18,6 @@ import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.NodeData;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.PrimitiveData;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.JosmRuntimeException;
 
@@ -36,41 +35,6 @@ public class AddPrimitivesCommand extends Command {
     private List<OsmPrimitive> createdPrimitives;
 
     /**
-     * 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);
-    }
-
-    /**
-     * Constructs a new {@code AddPrimitivesCommand} to add data to the current edit layer.
-     * @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);
-    }
-
-    /**
-     * Constructs a new {@code AddPrimitivesCommand} to add data to the given layer.
-     * @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}
diff --git a/src/org/openstreetmap/josm/command/ChangeCommand.java b/src/org/openstreetmap/josm/command/ChangeCommand.java
index 1ae699b..01a9eed 100644
--- a/src/org/openstreetmap/josm/command/ChangeCommand.java
+++ b/src/org/openstreetmap/josm/command/ChangeCommand.java
@@ -14,7 +14,6 @@ import org.openstreetmap.josm.data.osm.DefaultNameFormatter;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
 import org.openstreetmap.josm.data.osm.Way;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.ImageProvider;
 
@@ -38,21 +37,6 @@ public class ChangeCommand extends Command {
     }
 
     /**
-     * Constructs a new {@code ChangeCommand} in the context of a given data layer.
-     * @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;
-        this.newOsm = newOsm;
-        sanityChecks();
-    }
-
-    /**
      * Constructs a new {@code ChangeCommand} in the context of a given data set.
      * @param data The data set
      * @param osm The existing primitive to modify
diff --git a/src/org/openstreetmap/josm/command/Command.java b/src/org/openstreetmap/josm/command/Command.java
index 903cb62..cc2f407 100644
--- a/src/org/openstreetmap/josm/command/Command.java
+++ b/src/org/openstreetmap/josm/command/Command.java
@@ -9,7 +9,6 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Objects;
 
-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;
@@ -19,9 +18,6 @@ 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.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.tools.CheckParameterUtil;
 
 /**
@@ -128,41 +124,10 @@ 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
-     * @deprecated to be removed end of 2017. Use {@link #data} instead
-     */
-    @Deprecated
-    private final OsmDataLayer layer;
-
     /** the dataset which this command is applied to */
     private final DataSet data;
 
     /**
-     * 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 : Main.main.getEditDataSet();
-    }
-
-    /**
-     * Creates a new command in the context of a specific data layer
-     *
-     * @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;
-        this.data = layer.data;
-    }
-
-    /**
      * Creates a new command in the context of a specific data set, without data layer
      *
      * @param data the data set. Must not be null.
@@ -171,7 +136,6 @@ public abstract class Command implements PseudoCommand {
      */
     public Command(DataSet data) {
         CheckParameterUtil.ensureParameterNotNull(data, "data");
-        this.layer = null;
         this.data = data;
     }
 
@@ -181,7 +145,6 @@ public abstract class Command implements PseudoCommand {
      * <p>
      * The layer should be invalidated after execution so that it can be re-painted.
      * @return true
-     * @see #invalidateAffectedLayers()
      */
     public boolean executeCommand() {
         CloneVisitor visitor = new CloneVisitor();
@@ -211,20 +174,6 @@ public abstract class Command implements PseudoCommand {
     }
 
     /**
-     * Called when a layer has been removed to have the command remove itself from
-     * any buffer if it is not longer applicable to the dataset (e.g. it was part of
-     * the removed layer)
-     *
-     * @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;
-    }
-
-    /**
      * Lets other commands access the original version
      * of the object. Usually for undoing.
      * @param osm The requested OSM object
@@ -235,16 +184,6 @@ 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;
-    }
-
-    /**
      * Gets the data set this command affects.
      * @return The data set. May be <code>null</code> if no layer was set and no edit layer was found.
      * @since 10467
@@ -312,7 +251,7 @@ public abstract class Command implements PseudoCommand {
 
     @Override
     public int hashCode() {
-        return Objects.hash(cloneMap, layer, data);
+        return Objects.hash(cloneMap, data);
     }
 
     @Override
@@ -321,20 +260,6 @@ public abstract class Command implements PseudoCommand {
         if (obj == null || getClass() != obj.getClass()) return false;
         Command command = (Command) obj;
         return Objects.equals(cloneMap, command.cloneMap) &&
-               Objects.equals(layer, command.layer) &&
                Objects.equals(data, command.data);
     }
-
-    /**
-     * 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) {
-            layer.invalidate();
-        }
-    }
 }
diff --git a/src/org/openstreetmap/josm/command/DeleteCommand.java b/src/org/openstreetmap/josm/command/DeleteCommand.java
index 914e270..a957d53 100644
--- a/src/org/openstreetmap/josm/command/DeleteCommand.java
+++ b/src/org/openstreetmap/josm/command/DeleteCommand.java
@@ -31,7 +31,6 @@ 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.layer.OsmDataLayer;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Utils;
@@ -143,20 +142,6 @@ public class DeleteCommand extends Command {
     /**
      * 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 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
@@ -168,23 +153,6 @@ public class DeleteCommand extends Command {
     }
 
     /**
-     * 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");
-        this.toDelete = data;
-        checkConsistency();
-    }
-
-    /**
      * 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.
@@ -328,25 +296,6 @@ 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 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
-     * @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) {
-        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.
@@ -372,24 +321,6 @@ 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 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(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
@@ -408,25 +339,6 @@ 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 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(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
@@ -478,27 +390,6 @@ 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 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(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.
@@ -517,28 +408,6 @@ 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 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
@@ -607,18 +476,6 @@ public class DeleteCommand extends Command {
 
     /**
      * Create a command that deletes a single way segment. The way may be split by this.
-     * @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
diff --git a/src/org/openstreetmap/josm/command/PurgeCommand.java b/src/org/openstreetmap/josm/command/PurgeCommand.java
index fa79f0c..de7645e 100644
--- a/src/org/openstreetmap/josm/command/PurgeCommand.java
+++ b/src/org/openstreetmap/josm/command/PurgeCommand.java
@@ -29,7 +29,6 @@ import org.openstreetmap.josm.data.osm.RelationMember;
 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;
 
@@ -45,23 +44,6 @@ public class PurgeCommand extends Command {
     protected final ConflictCollection purgedConflicts = new ConflictCollection();
 
     /**
-     * Constructs a new {@code PurgeCommand} (handles conflicts).
-     * This command relies on a number of consistency conditions:
-     *  - makeIncomplete must be a subset of toPurge.
-     *  - Each primitive, that is in toPurge but not in makeIncomplete, must have all its referrers in toPurge.
-     *  - Each element of makeIncomplete must not be new and must have only referrers that are either a relation or included in toPurge.
-     * @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);
-    }
-
-    /**
      * Constructs a new {@code PurgeCommand} (does not handle conflicts).
      * This command relies on a number of consistency conditions:
      *  - makeIncomplete must be a subset of toPurge.
@@ -315,20 +297,6 @@ public class PurgeCommand extends Command {
 
     /**
      * Creates a new {@code PurgeCommand} to purge selected OSM primitives.
-     * @param layer optional osm data layer, can be null
-     * @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 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
diff --git a/src/org/openstreetmap/josm/command/SelectCommand.java b/src/org/openstreetmap/josm/command/SelectCommand.java
index 22ca7b2..8e02f20 100644
--- a/src/org/openstreetmap/josm/command/SelectCommand.java
+++ b/src/org/openstreetmap/josm/command/SelectCommand.java
@@ -26,20 +26,6 @@ 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();
-        } else {
-            this.newSelection = new HashSet<>(newSelection);
-        }
-    }
-
-    /**
-     * Constructs a new select command.
      * @param dataset The dataset the selection belongs to
      * @param newSelection the primitives to select when executing the command.
      * @since 12349
diff --git a/src/org/openstreetmap/josm/command/SequenceCommand.java b/src/org/openstreetmap/josm/command/SequenceCommand.java
index d53e26f..a3c78ba 100644
--- a/src/org/openstreetmap/josm/command/SequenceCommand.java
+++ b/src/org/openstreetmap/josm/command/SequenceCommand.java
@@ -12,7 +12,6 @@ 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;
 
@@ -42,7 +41,7 @@ public class SequenceCommand extends Command {
     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.sequence = sequenz.toArray(new Command[0]);
         this.continueOnError = continueOnError;
     }
 
@@ -150,20 +149,6 @@ 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) {
-            c.invalidateAffectedLayers();
-        }
-    }
-
     @Override
     public int hashCode() {
         return Objects.hash(super.hashCode(), Arrays.hashCode(sequence), sequenceComplete, name, continueOnError);
diff --git a/src/org/openstreetmap/josm/command/SplitWayCommand.java b/src/org/openstreetmap/josm/command/SplitWayCommand.java
index 4303785..c6edcf8 100644
--- a/src/org/openstreetmap/josm/command/SplitWayCommand.java
+++ b/src/org/openstreetmap/josm/command/SplitWayCommand.java
@@ -232,7 +232,7 @@ public class SplitWayCommand extends SequenceCommand {
     /**
      * 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
+     * The {@link SplitWayCommand.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
diff --git a/src/org/openstreetmap/josm/command/conflict/ConflictAddCommand.java b/src/org/openstreetmap/josm/command/conflict/ConflictAddCommand.java
index 884bdfa..e8b0a07 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.layer.OsmDataLayer;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
@@ -29,18 +28,6 @@ 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;
-    }
-
-    /**
-     * Constructs a new {@code ConflictAddCommand}.
      * @param ds the data set. Must not be null.
      * @param conflict the conflict to add
      * @since 12672
diff --git a/src/org/openstreetmap/josm/command/conflict/ConflictResolveCommand.java b/src/org/openstreetmap/josm/command/conflict/ConflictResolveCommand.java
index d63ca12..3522f50 100644
--- a/src/org/openstreetmap/josm/command/conflict/ConflictResolveCommand.java
+++ b/src/org/openstreetmap/josm/command/conflict/ConflictResolveCommand.java
@@ -10,7 +10,6 @@ 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.layer.OsmDataLayer;
 import org.openstreetmap.josm.tools.Logging;
 
 /**
@@ -26,25 +25,6 @@ public abstract class ConflictResolveCommand extends Command {
     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() {
-        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);
-    }
-
-    /**
      * Constructs a new {@code ConflictResolveCommand} in the context of a given data set.
      * @param ds the data set. Must not be null.
      */
diff --git a/src/org/openstreetmap/josm/data/Bounds.java b/src/org/openstreetmap/josm/data/Bounds.java
index e1f7841..5a76199 100644
--- a/src/org/openstreetmap/josm/data/Bounds.java
+++ b/src/org/openstreetmap/josm/data/Bounds.java
@@ -7,12 +7,10 @@ import java.awt.geom.Rectangle2D;
 import java.text.DecimalFormat;
 import java.text.MessageFormat;
 import java.util.Objects;
-import java.util.function.Consumer;
 
 import org.openstreetmap.josm.data.coor.ILatLon;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.BBox;
-import org.openstreetmap.josm.data.projection.Projection;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 
 /**
@@ -564,35 +562,6 @@ public class Bounds {
         maxLon = LatLon.toIntervalLon(maxLon);
     }
 
-    /**
-     * Visit points along the edge of this bounds instance.
-     * @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;
-        //TODO: Use projection to see if there is any need for doing this along each axis.
-        int splitX = Math.max((int) width / 10, 10);
-        int splitY = Math.max((int) height / 10, 10);
-
-        for (int step = 0; step < splitX; step++) {
-            visitor.accept(new LatLon(minLat, minLon + width * step / splitX));
-        }
-        for (int step = 0; step < splitY; step++) {
-            visitor.accept(new LatLon(minLat + height * step / splitY, maxLon));
-        }
-        for (int step = 0; step < splitX; step++) {
-            visitor.accept(new LatLon(maxLat, maxLon - width * step / splitX));
-        }
-        for (int step = 0; step < splitY; step++) {
-            visitor.accept(new LatLon(maxLat - height * step / splitY, minLon));
-        }
-    }
-
     @Override
     public int hashCode() {
         return Objects.hash(minLat, minLon, maxLat, maxLon);
diff --git a/src/org/openstreetmap/josm/data/Preferences.java b/src/org/openstreetmap/josm/data/Preferences.java
index d4e1572..c668181 100644
--- a/src/org/openstreetmap/josm/data/Preferences.java
+++ b/src/org/openstreetmap/josm/data/Preferences.java
@@ -10,8 +10,6 @@ import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.Reader;
 import java.io.StringWriter;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -37,11 +35,7 @@ import javax.swing.JOptionPane;
 import javax.xml.stream.XMLStreamException;
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.preferences.BooleanProperty;
 import org.openstreetmap.josm.data.preferences.ColorInfo;
-import org.openstreetmap.josm.data.preferences.DoubleProperty;
-import org.openstreetmap.josm.data.preferences.IntegerProperty;
-import org.openstreetmap.josm.data.preferences.LongProperty;
 import org.openstreetmap.josm.data.preferences.NamedColorProperty;
 import org.openstreetmap.josm.data.preferences.PreferencesReader;
 import org.openstreetmap.josm.data.preferences.PreferencesWriter;
@@ -50,10 +44,7 @@ import org.openstreetmap.josm.io.OnlineResource;
 import org.openstreetmap.josm.spi.preferences.AbstractPreferences;
 import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.spi.preferences.IBaseDirectories;
-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.CheckParameterUtil;
@@ -136,94 +127,11 @@ public class Preferences extends AbstractPreferences {
      */
     protected boolean initSuccessful;
 
-    /**
-     * 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.
-         * @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();
-    }
-
-    /**
-     * 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.
-         * @param e the preference change event
-         */
-        void preferenceChanged(PreferenceChangeEvent e);
-    }
-
-    /**
-     * @deprecated private class is deprecated
-     */
-    @Deprecated
-    private static class DefaultPreferenceChangeEvent implements PreferenceChangeEvent {
-        private final String key;
-        private final Setting<?> oldValue;
-        private final Setting<?> newValue;
-
-        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;
-        }
-    }
-
     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();
-
-    /**
-     * @deprecated deprecated private field
-     */
-    @Deprecated
-    private final HashMap<String, ListenerList<Preferences.PreferenceChangedListener>> keyListenersDeprecated = new HashMap<>();
-
-    /**
      * Constructs a new {@code Preferences}.
      */
     public Preferences() {
@@ -265,18 +173,6 @@ public class Preferences extends AbstractPreferences {
     }
 
     /**
-     * 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
@@ -287,16 +183,6 @@ public class Preferences extends AbstractPreferences {
     }
 
     /**
-     * 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.
@@ -308,19 +194,6 @@ public class Preferences extends AbstractPreferences {
     }
 
     /**
-     * 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.
@@ -335,16 +208,6 @@ public class Preferences extends AbstractPreferences {
     }
 
     /**
-     * @param key preference key
-     * @return listener list for this key
-     * @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.
@@ -357,20 +220,6 @@ public class Preferences extends AbstractPreferences {
         .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 org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent evt =
                 new org.openstreetmap.josm.spi.preferences.DefaultPreferenceChangeEvent(key, oldValue, newValue);
@@ -380,32 +229,12 @@ public class Preferences extends AbstractPreferences {
         if (forKey != null) {
             forKey.fireEvent(listener -> listener.preferenceChanged(evt));
         }
-        firePreferenceChangedDeprecated(key, oldValue, newValue);
     }
 
     /**
-     * @param key preference key
-     * @param oldValue old value
-     * @param newValue new value
-     * @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));
-        }
-    }
-
-    /**
-     * Get the base name of the JOSM directories for preferences, cache and
-     * user data.
+     * Get the base name of the JOSM directories for preferences, cache and user data.
      * Default value is "JOSM", unless overridden by system property "josm.dir.name".
-     * @return the base name of the JOSM directories for preferences, cache and
-     * user data
+     * @return the base name of the JOSM directories for preferences, cache and user data
      */
     public String getJOSMDirectoryBaseName() {
         String name = System.getProperty("josm.dir.name");
@@ -641,77 +470,6 @@ public class Preferences extends AbstractPreferences {
     }
 
     /**
-     * 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;
-        Setting<?> prop = settingsMap.get(skey);
-        if (prop instanceof StringSetting)
-            return Boolean.parseBoolean(((StringSetting) prop).getValue());
-        else
-            return generic;
-    }
-
-    /**
-     * 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));
-    }
-
-    /**
-     * 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 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));
-    }
-
-    /**
-     * 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 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));
-    }
-
-    /**
-     * 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 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));
-    }
-
-    /**
      * Called after every put. In case of a problem, do nothing but output the error in log.
      * @throws IOException if any I/O error occurs
      */
@@ -1049,92 +807,6 @@ public class Preferences extends AbstractPreferences {
     }
 
     /**
-     * Gets an integer preference
-     * @param key The preference key
-     * @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())
-            return def;
-
-        try {
-            return Integer.parseInt(v);
-        } catch (NumberFormatException e) {
-            // fall out
-            Logging.trace(e);
-        }
-        return def;
-    }
-
-    /**
-     * Gets an integer 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 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())
-            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;
-    }
-
-    /**
-     * 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();
-    }
-
-    /**
-     * 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 = getList(key, null);
-        return val == null ? Collections.<String>emptyList() : val;
-    }
-
-    /**
-     * 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 #getList(String)
-     * @deprecated use {@link PreferencesUtils#removeFromList(IPreferences, String, String)}
-     */
-    @Deprecated
-    public synchronized void removeFromCollection(String key, String value) {
-        List<String> a = new ArrayList<>(getList(key, Collections.<String>emptyList()));
-        a.remove(value);
-        putList(key, a);
-    }
-
-    /**
      * 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
@@ -1217,217 +889,6 @@ public class Preferences extends AbstractPreferences {
         }
     }
 
-    /**
-     * Put a collection.
-     * @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));
-    }
-
-    /**
-     * Saves at most {@code maxsize} items of collection {@code val}.
-     * @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)
-     * @deprecated use {@link PreferencesUtils#putListBounded(IPreferences, String, int, List)}
-     */
-    @Deprecated
-    public boolean putCollectionBounded(String key, int maxsize, Collection<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 putList(key, newCollection);
-    }
-
-    /**
-     * Used to read a 2-dimensional array of strings from the preference file.
-     * If not a single entry could be found, <code>def</code> is returned.
-     * @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);
-        return (Collection) val.getValue();
-    }
-
-    /**
-     * 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;
-    }
-
-    /**
-     * Put an array.
-     * @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));
-    }
-
-    /**
-     * Gets a collection of key/value maps.
-     * @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();
-    }
-
-    /**
-     * Stores a list of structs
-     * @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 #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)));
-    }
-
-    /**
-     * 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)
-     * @deprecated use {@link StructUtils.StructEntry}
-     */
-    @Deprecated
-    @Retention(RetentionPolicy.RUNTIME) // keep annotation at runtime
-    public @interface pref { }
-
-    /**
-     * 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)
-     * @deprecated use {@link StructUtils.WriteExplicitly}
-     */
-    @Deprecated
-    @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 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 StructUtils.getListOfStructs(this, key, klass);
-    }
-
-    /**
-     * same as above, but returns def if nothing was found
-     * @param <T> klass type
-     * @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
-     * @deprecated use {@link StructUtils#getListOfStructs(IPreferences, String, Collection, Class)}
-     */
-    @Deprecated
-    public <T> List<T> getListOfStructs(String key, Collection<T> def, Class<T> klass) {
-        return StructUtils.getListOfStructs(this, key, def, klass);
-    }
-
-    /**
-     * 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 pref} annotation.
-     * The field name is the key and the value will be converted to a string.
-     *
-     * Considers only fields that have the @pref 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 @writeExplicitly annotation.
-     * @param <T> the class,
-     * @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
-     * @deprecated use {@link StructUtils#putListOfStructs(IPreferences, String, Collection, Class)}
-     */
-    @Deprecated
-    public <T> boolean putListOfStructs(String key, Collection<T> val, Class<T> klass) {
-        return StructUtils.putListOfStructs(this, key, val, klass);
-    }
-
-    /**
-     * 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 pref} 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>)
-     * @deprecated use {@link StructUtils#serializeStruct(java.lang.Object, java.lang.Class)}
-     */
-    @Deprecated
-    public static <T> Map<String, String> serializeStruct(T struct, Class<T> klass) {
-        return StructUtils.serializeStruct(struct, klass);
-    }
-
-    /**
-     * 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 pref} 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
-     * @deprecated use {@link StructUtils#deserializeStruct(java.util.Map, java.lang.Class)}
-     */
-    @Deprecated
-    public static <T> T deserializeStruct(Map<String, String> hash, Class<T> klass) {
-        return StructUtils.deserializeStruct(hash, klass);
-    }
-
     @Override
     public Set<String> getKeySet() {
         return Collections.unmodifiableSet(settingsMap.keySet());
diff --git a/src/org/openstreetmap/josm/data/StructUtils.java b/src/org/openstreetmap/josm/data/StructUtils.java
index 46c7fdf..9dccb54 100644
--- a/src/org/openstreetmap/josm/data/StructUtils.java
+++ b/src/org/openstreetmap/josm/data/StructUtils.java
@@ -147,7 +147,6 @@ public final class StructUtils {
      * @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 {
@@ -158,7 +157,7 @@ public final class StructUtils {
 
         Map<String, String> hash = new LinkedHashMap<>();
         for (Field f : klass.getDeclaredFields()) {
-            if (f.getAnnotation(Preferences.pref.class) == null && f.getAnnotation(StructEntry.class) == null) {
+            if (f.getAnnotation(StructEntry.class) == null) {
                 continue;
             }
             Utils.setObjectsAccessible(f);
@@ -166,7 +165,6 @@ public final class StructUtils {
                 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('_', '-');
@@ -198,7 +196,6 @@ public final class StructUtils {
      * @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 {
@@ -215,7 +212,7 @@ public final class StructUtils {
                 Logging.trace(ex);
                 continue;
             }
-            if (f.getAnnotation(Preferences.pref.class) == null && f.getAnnotation(StructEntry.class) == null) {
+            if (f.getAnnotation(StructEntry.class) == null) {
                 continue;
             }
             Utils.setObjectsAccessible(f);
diff --git a/src/org/openstreetmap/josm/data/cache/JCSCacheManager.java b/src/org/openstreetmap/josm/data/cache/JCSCacheManager.java
index 4bcb85d..a3a0ac7 100644
--- a/src/org/openstreetmap/josm/data/cache/JCSCacheManager.java
+++ b/src/org/openstreetmap/josm/data/cache/JCSCacheManager.java
@@ -2,9 +2,10 @@
 package org.openstreetmap.josm.data.cache;
 
 import java.io.File;
-import java.io.FileOutputStream;
 import java.io.IOException;
+import java.nio.channels.FileChannel;
 import java.nio.channels.FileLock;
+import java.nio.file.StandardOpenOption;
 import java.util.Arrays;
 import java.util.Properties;
 import java.util.logging.Handler;
@@ -109,7 +110,7 @@ public final class JCSCacheManager {
         if (!cacheDirLockPath.exists() && !cacheDirLockPath.createNewFile()) {
             Logging.warn("Cannot create cache dir lock file");
         }
-        cacheDirLock = new FileOutputStream(cacheDirLockPath).getChannel().tryLock();
+        cacheDirLock = FileChannel.open(cacheDirLockPath.toPath(), StandardOpenOption.WRITE).tryLock();
 
         if (cacheDirLock == null)
             Logging.warn("Cannot lock cache directory. Will not use disk cache");
diff --git a/src/org/openstreetmap/josm/data/cache/JCSCachedTileLoaderJob.java b/src/org/openstreetmap/josm/data/cache/JCSCachedTileLoaderJob.java
index db04879..dc66e02 100644
--- a/src/org/openstreetmap/josm/data/cache/JCSCachedTileLoaderJob.java
+++ b/src/org/openstreetmap/josm/data/cache/JCSCachedTileLoaderJob.java
@@ -15,6 +15,8 @@ import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.LinkedBlockingDeque;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import org.apache.commons.jcs.access.behavior.ICacheAccess;
 import org.apache.commons.jcs.engine.behavior.ICacheElement;
@@ -49,6 +51,14 @@ public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements
     // even if the refresh from the server fails.
     protected static final long ABSOLUTE_EXPIRE_TIME_LIMIT = TimeUnit.DAYS.toMillis(365);
 
+    // Pattern to detect Tomcat error message. Be careful with change of format:
+    // CHECKSTYLE.OFF: LineLength
+    // https://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/valves/ErrorReportValve.java?r1=1740707&r2=1779641&pathrev=1779641&diff_format=h
+    // CHECKSTYLE.ON: LineLength
+    protected static final Pattern TOMCAT_ERR_MESSAGE = Pattern.compile(
+        ".*<p><b>[^<]+</b>[^<]+</p><p><b>[^<]+</b> (?:<u>)?([^<]*)(?:</u>)?</p><p><b>[^<]+</b> (?:<u>)?[^<]*(?:</u>)?</p>.*",
+        Pattern.CASE_INSENSITIVE);
+
     /**
      * maximum download threads that will be started
      */
@@ -74,8 +84,6 @@ public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements
             Utils.newThreadFactory("JCS-downloader-%d", Thread.NORM_PRIORITY)
             );
 
-
-
     private static final ConcurrentMap<String, Set<ICachedLoaderListener>> inProgress = new ConcurrentHashMap<>();
     private static final ConcurrentMap<String, Boolean> useHead = new ConcurrentHashMap<>();
 
@@ -358,6 +366,17 @@ public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements
                     raw = Utils.readBytesFromStream(urlConn.getContent());
                 } else {
                     raw = new byte[]{};
+                    try {
+                        String data = urlConn.fetchContent();
+                        if (!data.isEmpty()) {
+                            Matcher m = TOMCAT_ERR_MESSAGE.matcher(data);
+                            if (m.matches()) {
+                                attributes.setErrorMessage(m.group(1).replace("'", "''"));
+                            }
+                        }
+                    } catch (IOException e) {
+                        Logging.warn(e);
+                    }
                 }
 
                 if (isResponseLoadable(urlConn.getHeaderFields(), urlConn.getResponseCode(), raw)) {
@@ -389,7 +408,7 @@ public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements
             }
             return doCache;
         } catch (IOException e) {
-            Logging.debug("JCS - IOExecption during communication with server for: {0}", getUrlNoException());
+            Logging.debug("JCS - IOException during communication with server for: {0}", getUrlNoException());
             if (isObjectLoadable()) {
                 return true;
             } else {
diff --git a/src/org/openstreetmap/josm/data/coor/Coordinate.java b/src/org/openstreetmap/josm/data/coor/Coordinate.java
index 79b9505..f66a325 100644
--- a/src/org/openstreetmap/josm/data/coor/Coordinate.java
+++ b/src/org/openstreetmap/josm/data/coor/Coordinate.java
@@ -4,8 +4,6 @@ package org.openstreetmap.josm.data.coor;
 import java.io.Serializable;
 import java.util.Objects;
 
-import org.openstreetmap.josm.data.osm.BBox;
-
 /**
  * Base class of points of both coordinate systems.
  *
@@ -91,20 +89,6 @@ abstract class Coordinate implements Serializable {
         return dx*dx + dy*dy;
     }
 
-    /**
-     * Creates bbox around this coordinate. Coordinate defines
-     * center of bbox, its edge will be 2*r.
-     *
-     * @param r size
-     * @return BBox around this coordinate
-     * @since 6203
-     * @deprecated use {@link BBox#BBox(double, double, double)} instead
-     */
-    @Deprecated
-    public BBox toBBox(final double r) {
-        return new BBox(x, y, r);
-    }
-
     @Override
     public int hashCode() {
         return Objects.hash(x, y);
diff --git a/src/org/openstreetmap/josm/data/coor/CoordinateFormat.java b/src/org/openstreetmap/josm/data/coor/CoordinateFormat.java
deleted file mode 100644
index 78c9387..0000000
--- a/src/org/openstreetmap/josm/data/coor/CoordinateFormat.java
+++ /dev/null
@@ -1,94 +0,0 @@
-// License: GPL. For details, see LICENSE file.
-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"), DecimalDegreesCoordinateFormat.INSTANCE),
-
-    /**
-     * the degrees/minutes/seconds format 9 deg 99 min 99 sec
-     */
-    DEGREES_MINUTES_SECONDS(tr("deg\u00B0 min'' sec\""), DMSCoordinateFormat.INSTANCE),
-
-    /**
-     * the nautical format
-     */
-    NAUTICAL(tr("deg\u00B0 min'' (Nautical)"), NauticalCoordinateFormat.INSTANCE),
-
-    /**
-     * coordinates East/North
-     */
-    EAST_NORTH(tr("Projected Coordinates"), ProjectedCoordinateFormat.INSTANCE);
-
-    private final String displayName;
-    private final ICoordinateFormat migration;
-
-    CoordinateFormat(String displayName, ICoordinateFormat migration) {
-        this.displayName = displayName;
-        this.migration = migration;
-    }
-
-    /**
-     * Replies the display name of the format
-     *
-     * @return the display name
-     */
-    public String getDisplayName() {
-        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();
-    }
-
-    private static volatile CoordinateFormat defaultCoordinateFormat = DECIMAL_DEGREES;
-
-    /**
-     * Replies the default coordinate format to be use
-     *
-     * @return the default coordinate format
-     */
-    public static CoordinateFormat getDefaultFormat() {
-        return defaultCoordinateFormat;
-    }
-
-    /**
-     * Sets the default coordinate format
-     *
-     * @param format the default coordinate format
-     */
-    public static void setCoordinateFormat(CoordinateFormat format) {
-        if (format != null) {
-            defaultCoordinateFormat = format;
-        }
-    }
-}
diff --git a/src/org/openstreetmap/josm/data/coor/ILatLon.java b/src/org/openstreetmap/josm/data/coor/ILatLon.java
index 12b8ce8..0b1bcb4 100644
--- a/src/org/openstreetmap/josm/data/coor/ILatLon.java
+++ b/src/org/openstreetmap/josm/data/coor/ILatLon.java
@@ -1,7 +1,6 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.coor;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.projection.Projecting;
 
 /**
@@ -38,19 +37,6 @@ public interface ILatLon {
     }
 
     /**
-     * <p>Replies the projected east/north 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());
-    }
-
-    /**
      * Replies the projected east/north coordinates.
      * <p>
      * The result of the last conversion may be cached. Null is returned in case this object is invalid.
diff --git a/src/org/openstreetmap/josm/data/coor/LatLon.java b/src/org/openstreetmap/josm/data/coor/LatLon.java
index 2fff5d3..b444e5b 100644
--- a/src/org/openstreetmap/josm/data/coor/LatLon.java
+++ b/src/org/openstreetmap/josm/data/coor/LatLon.java
@@ -8,22 +8,16 @@ import static java.lang.Math.cos;
 import static java.lang.Math.sin;
 import static java.lang.Math.sqrt;
 import static org.openstreetmap.josm.data.projection.Ellipsoid.WGS84;
-import static org.openstreetmap.josm.tools.I18n.trc;
 import static org.openstreetmap.josm.tools.Utils.toRadians;
 
 import java.awt.geom.Area;
 import java.text.DecimalFormat;
 import java.text.NumberFormat;
-import java.util.Arrays;
 import java.util.Locale;
 import java.util.Objects;
 
 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;
 
@@ -86,31 +80,6 @@ public class LatLon extends Coordinate implements ILatLon {
     }
 
     /**
-     * Character denoting South, as string.
-     * @deprecated use {@link LatLonParser#SOUTH}
-     */
-    @Deprecated
-    public static final String SOUTH = trc("compass", "S");
-    /**
-     * Character denoting North, as string.
-     * @deprecated use {@link LatLonParser#NORTH}
-     */
-    @Deprecated
-    public static final String NORTH = trc("compass", "N");
-    /**
-     * Character denoting West, as string.
-     * @deprecated use {@link LatLonParser#WEST}
-     */
-    @Deprecated
-    public static final String WEST = trc("compass", "W");
-    /**
-     * Character denoting East, as string.
-     * @deprecated use {@link LatLonParser#EAST}
-     */
-    @Deprecated
-    public static final String EAST = trc("compass", "E");
-
-    /**
      * Replies true if lat is in the range [-90,90]
      *
      * @param lat the latitude
@@ -184,52 +153,6 @@ public class LatLon extends Coordinate implements ILatLon {
     }
 
     /**
-     * Replies the coordinate in degrees/minutes/seconds format
-     * @param pCoordinate The coordinate to convert
-     * @return The coordinate in degrees/minutes/seconds format
-     * @deprecated use {@link #degreesMinutesSeconds} instead
-     */
-    @Deprecated
-    public static String dms(double pCoordinate) {
-        return degreesMinutesSeconds(pCoordinate);
-    }
-
-    /**
-     * Replies the coordinate in degrees/minutes/seconds format
-     * @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) {
-        return DMSCoordinateFormat.degreesMinutesSeconds(pCoordinate);
-    }
-
-    /**
-     * Replies the coordinate in degrees/minutes format
-     * @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) {
-        return NauticalCoordinateFormat.degreesMinutes(pCoordinate);
-    }
-
-    /**
-     * Replies the coordinate in degrees/minutes format
-     * @param pCoordinate The coordinate to convert
-     * @return The coordinate in degrees/minutes format
-     * @deprecated use {@link #degreesMinutes(double)} instead
-     */
-    @Deprecated
-    public static String dm(double pCoordinate) {
-        return degreesMinutes(pCoordinate);
-    }
-
-    /**
      * Constructs a new object representing the given latitude/longitude.
      * @param lat the latitude, i.e., the north-south position in degrees
      * @param lon the longitude, i.e., the east-west position in degrees
@@ -251,34 +174,12 @@ public class LatLon extends Coordinate implements ILatLon {
         return y;
     }
 
-    /**
-     * 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) {
-        return d.getICoordinateFormat().latToString(this);
-    }
-
     @Override
     public double lon() {
         return x;
     }
 
     /**
-     * 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) {
-        return d.getICoordinateFormat().lonToString(this);
-    }
-
-    /**
      * @param other other lat/lon
      * @return <code>true</code> if the other point has almost the same lat/lon
      * values, only differing by no more than 1 / {@link #MAX_SERVER_PRECISION MAX_SERVER_PRECISION}.
@@ -408,20 +309,6 @@ 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(
-                DecimalDegreesCoordinateFormat.INSTANCE.latToString(this),
-                DecimalDegreesCoordinateFormat.INSTANCE.lonToString(this)
-        ));
-    }
-
-    /**
      * Interpolate between this and a other latlon
      * @param ll2 The other lat/lon object
      * @param proportion The proportion to interpolate
@@ -505,16 +392,4 @@ public class LatLon extends Coordinate implements ILatLon {
         return Double.compare(that.x, x) == 0 &&
                Double.compare(that.y, y) == 0;
     }
-
-    /**
-     * 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) {
-        return LatLonParser.parse(coord);
-    }
 }
diff --git a/src/org/openstreetmap/josm/data/gpx/GpxData.java b/src/org/openstreetmap/josm/data/gpx/GpxData.java
index d023169..616a362 100644
--- a/src/org/openstreetmap/josm/data/gpx/GpxData.java
+++ b/src/org/openstreetmap/josm/data/gpx/GpxData.java
@@ -4,15 +4,19 @@ package org.openstreetmap.josm.data.gpx;
 import java.io.File;
 import java.text.MessageFormat;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Date;
 import java.util.DoubleSummaryStatistics;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 import java.util.NoSuchElementException;
 import java.util.Set;
+import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 import org.openstreetmap.josm.Main;
@@ -21,6 +25,8 @@ import org.openstreetmap.josm.data.Data;
 import org.openstreetmap.josm.data.DataSource;
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.gpx.GpxTrack.GpxTrackChangeListener;
+import org.openstreetmap.josm.gui.MainApplication;
+import org.openstreetmap.josm.gui.layer.GpxLayer;
 import org.openstreetmap.josm.tools.ListenerList;
 import org.openstreetmap.josm.tools.ListeningCollection;
 
@@ -140,6 +146,23 @@ public class GpxData extends WithAttributes implements Data {
     }
 
     /**
+     * Get stream of track segments.
+     * @return {@code Stream<GPXTrack>}
+     */
+    private synchronized Stream<GpxTrackSegment> getTrackSegmentsStream() {
+        return getTracks().stream().flatMap(trk -> trk.getSegments().stream());
+    }
+
+    /**
+     * Clear all tracks, empties the current privateTracks container,
+     * helper method for some gpx manipulations.
+     */
+    private synchronized void clearTracks() {
+        privateTracks.forEach(t -> t.removeListener(proxy));
+        privateTracks.clear();
+    }
+
+    /**
      * Add a new track
      * @param track The new track
      * @since 12156
@@ -167,6 +190,104 @@ public class GpxData extends WithAttributes implements Data {
     }
 
     /**
+     * Combine tracks into a single, segmented track.
+     * The attributes of the first track are used, the rest discarded.
+     *
+     * @since 13210
+     */
+    public synchronized void combineTracksToSegmentedTrack() {
+        List<GpxTrackSegment> segs = getTrackSegmentsStream()
+                .collect(Collectors.toCollection(ArrayList<GpxTrackSegment>::new));
+        Map<String, Object> attrs = new HashMap<>(privateTracks.get(0).getAttributes());
+
+        // do not let the name grow if split / combine operations are called iteratively
+        attrs.put("name", attrs.get("name").toString().replaceFirst(" #\\d+$", ""));
+
+        clearTracks();
+        addTrack(new ImmutableGpxTrack(segs, attrs));
+    }
+
+    /**
+     * @param attrs attributes of/for an gpx track, written to if the name appeared previously in {@code counts}.
+     * @param counts a {@code HashMap} of previously seen names, associated with their count.
+     * @return the unique name for the gpx track.
+     *
+     * @since 13210
+     */
+    public static String ensureUniqueName(Map<String, Object> attrs, Map<String, Integer> counts) {
+        String name = attrs.getOrDefault("name", "GPX split result").toString();
+        Integer count = counts.getOrDefault(name, 0) + 1;
+        counts.put(name, count);
+
+        attrs.put("name", MessageFormat.format("{0}{1}", name, (count > 1) ? " #"+count : ""));
+        return attrs.get("name").toString();
+    }
+
+    /**
+     * Split tracks so that only single-segment tracks remain.
+     * Each segment will make up one individual track after this operation.
+     *
+     * @since 13210
+     */
+    public synchronized void splitTrackSegmentsToTracks() {
+        final HashMap<String, Integer> counts = new HashMap<>();
+
+        List<GpxTrack> trks = getTracks().stream()
+            .flatMap(trk -> {
+                return trk.getSegments().stream().map(seg -> {
+                    HashMap<String, Object> attrs = new HashMap<>(trk.getAttributes());
+                    ensureUniqueName(attrs, counts);
+                    return new ImmutableGpxTrack(Arrays.asList(seg), attrs);
+                });
+            })
+            .collect(Collectors.toCollection(ArrayList<GpxTrack>::new));
+
+        clearTracks();
+        trks.stream().forEachOrdered(this::addTrack);
+    }
+
+    /**
+     * Split tracks into layers, the result is one layer for each track.
+     * If this layer currently has only one GpxTrack this is a no-operation.
+     *
+     * The new GpxLayers are added to the LayerManager, the original GpxLayer
+     * is untouched as to preserve potential route or wpt parts.
+     *
+     * @since 13210
+     */
+    public synchronized void splitTracksToLayers() {
+        final HashMap<String, Integer> counts = new HashMap<>();
+
+        getTracks().stream()
+            .filter(trk -> privateTracks.size() > 1)
+            .map(trk -> {
+                HashMap<String, Object> attrs = new HashMap<>(trk.getAttributes());
+                GpxData d = new GpxData();
+                d.addTrack(trk);
+                return new GpxLayer(d, ensureUniqueName(attrs, counts)); })
+            .forEachOrdered(layer -> MainApplication.getLayerManager().addLayer(layer));
+    }
+
+    /**
+     * Replies the current number of tracks in this GpxData
+     * @return track count
+     * @since 13210
+     */
+    public synchronized int getTrackCount() {
+        return privateTracks.size();
+    }
+
+    /**
+     * Replies the accumulated total of all track segments,
+     * the sum of segment counts for each track present.
+     * @return track segments count
+     * @since 13210
+     */
+    public synchronized int getTrackSegsCount() {
+        return privateTracks.stream().collect(Collectors.summingInt(t -> t.getSegments().size()));
+    }
+
+    /**
      * Gets the list of all routes defined in this data set.
      * @return The routes
      * @since 12156
diff --git a/src/org/openstreetmap/josm/data/gpx/ImmutableGpxTrack.java b/src/org/openstreetmap/josm/data/gpx/ImmutableGpxTrack.java
index ba6f780..fd46627 100644
--- a/src/org/openstreetmap/josm/data/gpx/ImmutableGpxTrack.java
+++ b/src/org/openstreetmap/josm/data/gpx/ImmutableGpxTrack.java
@@ -38,6 +38,22 @@ public class ImmutableGpxTrack extends WithAttributes implements GpxTrack {
         this.bounds = calculateBounds();
     }
 
+    /**
+     * Constructs a new {@code ImmutableGpxTrack} from {@code GpxTrackSegment} objects.
+     * @param segments The segments to build the track from.  Input is not deep-copied,
+     *                 which means the caller may reuse the same segments to build
+     *                 multiple ImmutableGpxTrack instances from.  This should not be
+     *                 a problem, since this object cannot modify {@code this.segments}.
+     * @param attributes Attributes for the GpxTrack, the input map is copied.
+     * @since 13210
+     */
+    public ImmutableGpxTrack(List<GpxTrackSegment> segments, Map<String, Object> attributes) {
+        this.attr = Collections.unmodifiableMap(new HashMap<>(attributes));
+        this.segments = Collections.unmodifiableList(segments);
+        this.length = calculateLength();
+        this.bounds = calculateBounds();
+    }
+
     private double calculateLength() {
         double result = 0.0; // in meters
 
diff --git a/src/org/openstreetmap/josm/data/gpx/WayPoint.java b/src/org/openstreetmap/josm/data/gpx/WayPoint.java
index 4077fab..e929558 100644
--- a/src/org/openstreetmap/josm/data/gpx/WayPoint.java
+++ b/src/org/openstreetmap/josm/data/gpx/WayPoint.java
@@ -145,6 +145,15 @@ public class WayPoint extends WithAttributes implements Comparable<WayPoint>, Te
     }
 
     /**
+     * Set the the time stamp of the waypoint into seconds from the epoch,
+     * @param time millisecond from the epoch
+     * @since 13210
+     */
+    public void setTime(long time) {
+        this.time = time / 1000.;
+    }
+
+    /**
      * Convert the time stamp of the waypoint into seconds from the epoch
      * @return The parsed time if successful, or {@code null}
      * @since 9383
diff --git a/src/org/openstreetmap/josm/data/imagery/OffsetBookmark.java b/src/org/openstreetmap/josm/data/imagery/OffsetBookmark.java
index 96ac5a4..7ce4812 100644
--- a/src/org/openstreetmap/josm/data/imagery/OffsetBookmark.java
+++ b/src/org/openstreetmap/josm/data/imagery/OffsetBookmark.java
@@ -15,6 +15,7 @@ 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.ILatLon;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.projection.Projection;
 import org.openstreetmap.josm.data.projection.Projections;
@@ -39,6 +40,11 @@ public class OffsetBookmark {
     @StructEntry @WriteExplicitly private double dx, dy;
     @StructEntry private double center_lon, center_lat;
 
+    /**
+     * Test if an image is usable for the given imagery layer.
+     * @param layer The layer to use the image at
+     * @return <code>true</code> if it is usable on the projection of the layer and the imagery name matches.
+     */
     public boolean isUsable(ImageryLayer layer) {
         if (projection_code == null) return false;
         if (!Main.getProjection().toCode().equals(projection_code) && !hasCenter()) return false;
@@ -54,10 +60,45 @@ public class OffsetBookmark {
         // do nothing
     }
 
+    /**
+     * Create a new {@link OffsetBookmark} object using (0, 0) as center
+     * <p>
+     * The use of the {@link #OffsetBookmark(String, String, String, EastNorth, ILatLon)} constructor is preferred.
+     * @param projectionCode The projection for which this object was created
+     * @param imageryName The name of the imagery on the layer
+     * @param name The name of the new bookmark
+     * @param dx The x displacement
+     * @param dy The y displacement
+     */
     public OffsetBookmark(String projectionCode, String imageryName, String name, double dx, double dy) {
         this(projectionCode, imageryName, name, dx, dy, 0, 0);
     }
 
+    /**
+     * Create a new {@link OffsetBookmark} object
+     * @param projectionCode The projection for which this object was created
+     * @param imageryName The name of the imagery on the layer
+     * @param name The name of the new bookmark
+     * @param displacement The displacement in east/north space.
+     * @param center The point on earth that was used as reference to align the image.
+     * @since 13243
+     */
+    public OffsetBookmark(String projectionCode, String imageryName, String name, EastNorth displacement, ILatLon center) {
+        this(projectionCode, imageryName, name, displacement.east(), displacement.north(), center.lon(), center.lat());
+    }
+
+    /**
+     * Create a new {@link OffsetBookmark} by specifying all values.
+     * <p>
+     * The use of the {@link #OffsetBookmark(String, String, String, EastNorth, ILatLon)} constructor is preferred.
+     * @param projectionCode The projection for which this object was created
+     * @param imageryName The name of the imagery on the layer
+     * @param name The name of the new bookmark
+     * @param dx The x displacement
+     * @param dy The y displacement
+     * @param centerLon The point on earth that was used as reference to align the image.
+     * @param centerLat The point on earth that was used as reference to align the image.
+     */
     public OffsetBookmark(String projectionCode, String imageryName, String name, double dx, double dy, double centerLon, double centerLat) {
         this.projection_code = projectionCode;
         this.imagery_name = imageryName;
@@ -68,6 +109,10 @@ public class OffsetBookmark {
         this.center_lat = centerLat;
     }
 
+    /**
+     * Loads an old bookmark. For backward compatibility with settings. Do not use.
+     * @param list The settings that were read
+     */
     public OffsetBookmark(Collection<String> list) {
         List<String> array = new ArrayList<>(list);
         this.projection_code = array.get(0);
@@ -84,14 +129,26 @@ public class OffsetBookmark {
         }
     }
 
+    /**
+     * Get the projection code for which this bookmark was created.
+     * @return The projection.
+     */
     public String getProjectionCode() {
         return projection_code;
     }
 
+    /**
+     * Get the name of this bookmark. This name can e.g. be displayed in menus.
+     * @return The name
+     */
     public String getName() {
         return name;
     }
 
+    /**
+     * Get the name of the imagery for which this bookmark was created. It is used to match the bookmark to the right layers.
+     * @return The name
+     */
     public String getImageryName() {
         return imagery_name;
     }
@@ -148,23 +205,44 @@ public class OffsetBookmark {
         return center_lat != 0 || center_lon != 0;
     }
 
+    /**
+     * Set the projection code for which this bookmark was created
+     * @param projectionCode The projection
+     */
     public void setProjectionCode(String projectionCode) {
         this.projection_code = projectionCode;
     }
 
+    /**
+     * Set the name of the bookmark
+     * @param name The name
+     * @see #getName()
+     */
     public void setName(String name) {
         this.name = name;
     }
 
+    /**
+     * Sets the name of the imagery
+     * @param imageryName The name
+     * @see #getImageryName()
+     */
     public void setImageryName(String imageryName) {
         this.imagery_name = imageryName;
     }
 
+    /**
+     * Update the displacement of this imagery.
+     * @param displacement The displacement
+     */
     public void setDisplacement(EastNorth displacement) {
         this.dx = displacement.east();
         this.dy = displacement.north();
     }
 
+    /**
+     * Load the global list of bookmarks from preferences.
+     */
     public static void loadBookmarks() {
         List<OffsetBookmark> bookmarks = StructUtils.getListOfStructs(
                 Config.getPref(), "imagery.offsetbookmarks", null, OffsetBookmark.class);
@@ -183,6 +261,9 @@ public class OffsetBookmark {
         }
     }
 
+    /**
+     * Stores the bookmakrs in the settings.
+     */
     public static void saveBookmarks() {
         StructUtils.putListOfStructs(Config.getPref(), "imagery.offsetbookmarks", allBookmarks, OffsetBookmark.class);
     }
@@ -237,6 +318,12 @@ public class OffsetBookmark {
         return allBookmarks.get(index);
     }
 
+    /**
+     * Gets a bookmark that is usable on the given layer by it's name.
+     * @param layer The layer to use the bookmark at
+     * @param name The name of the bookmark
+     * @return The bookmark if found, <code>null</code> if not.
+     */
     public static OffsetBookmark getBookmarkByName(ImageryLayer layer, String name) {
         for (OffsetBookmark b : allBookmarks) {
             if (b.isUsable(layer) && name.equals(b.name))
@@ -245,7 +332,12 @@ public class OffsetBookmark {
         return null;
     }
 
-    public static void bookmarkOffset(String name, AbstractTileSourceLayer layer) {
+    /**
+     * Add a bookmark for the displacement of that layer
+     * @param name The bookmark name
+     * @param layer The layer to store the bookmark for
+     */
+    public static void bookmarkOffset(String name, AbstractTileSourceLayer<?> layer) {
         LatLon center;
         if (MainApplication.isDisplayingMapView()) {
             center = Main.getProjection().eastNorth2latlon(MainApplication.getMap().mapView.getCenter());
@@ -254,7 +346,7 @@ public class OffsetBookmark {
         }
         OffsetBookmark nb = new OffsetBookmark(
                 Main.getProjection().toCode(), layer.getInfo().getName(),
-                name, layer.getDisplaySettings().getDx(), layer.getDisplaySettings().getDy(), center.lon(), center.lat());
+                name, layer.getDisplaySettings().getDisplacement(), center);
         for (ListIterator<OffsetBookmark> it = allBookmarks.listIterator(); it.hasNext();) {
             OffsetBookmark b = it.next();
             if (b.isUsable(layer) && name.equals(b.name)) {
diff --git a/src/org/openstreetmap/josm/data/oauth/OAuthAccessTokenHolder.java b/src/org/openstreetmap/josm/data/oauth/OAuthAccessTokenHolder.java
index a6bf7d4..3e436b4 100644
--- a/src/org/openstreetmap/josm/data/oauth/OAuthAccessTokenHolder.java
+++ b/src/org/openstreetmap/josm/data/oauth/OAuthAccessTokenHolder.java
@@ -3,7 +3,6 @@ package org.openstreetmap.josm.data.oauth;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
 
-import org.openstreetmap.josm.data.Preferences;
 import org.openstreetmap.josm.io.auth.CredentialsAgent;
 import org.openstreetmap.josm.io.auth.CredentialsAgentException;
 import org.openstreetmap.josm.spi.preferences.Config;
@@ -164,34 +163,6 @@ public class OAuthAccessTokenHolder {
     }
 
     /**
-     * Initializes the content of this holder from the Access Token managed by the
-     * credential manager.
-     *
-     * @param pref the preferences. Must not be null.
-     * @param cm the credential manager. Must not be null.
-     * @throws IllegalArgumentException if cm is null
-     * @deprecated (since 12928) replaced by {@link #init(org.openstreetmap.josm.io.auth.CredentialsAgent)}
-     */
-    @Deprecated
-    public void init(Preferences pref, CredentialsAgent cm) {
-        CheckParameterUtil.ensureParameterNotNull(pref, "pref");
-        CheckParameterUtil.ensureParameterNotNull(cm, "cm");
-        OAuthToken token = null;
-        try {
-            token = cm.lookupOAuthAccessToken();
-        } catch (CredentialsAgentException e) {
-            Logging.error(e);
-            Logging.warn(tr("Failed to retrieve OAuth Access Token from credential manager"));
-            Logging.warn(tr("Current credential manager is of type ''{0}''", cm.getClass().getName()));
-        }
-        saveToPreferences = pref.getBoolean("oauth.access-token.save-to-preferences", true);
-        if (token != null) {
-            accessTokenKey = token.getKey();
-            accessTokenSecret = token.getSecret();
-        }
-    }
-
-    /**
      * Saves the content of this holder to the preferences and a credential store managed
      * by a credential manager.
      *
@@ -215,34 +186,6 @@ public class OAuthAccessTokenHolder {
     }
 
     /**
-     * Saves the content of this holder to the preferences and a credential store managed
-     * by a credential manager.
-     *
-     * @param preferences the preferences. Must not be null.
-     * @param cm the credentials manager. Must not be null.
-     * @throws IllegalArgumentException if preferences is null
-     * @throws IllegalArgumentException if cm is null
-     * @deprecated (since 12928) replaced by {@link #save(org.openstreetmap.josm.io.auth.CredentialsAgent)}
-     */
-    @Deprecated
-    public void save(Preferences preferences, CredentialsAgent cm) {
-        CheckParameterUtil.ensureParameterNotNull(preferences, "preferences");
-        CheckParameterUtil.ensureParameterNotNull(cm, "cm");
-        preferences.putBoolean("oauth.access-token.save-to-preferences", saveToPreferences);
-        try {
-            if (!saveToPreferences) {
-                cm.storeOAuthAccessToken(null);
-            } else {
-                cm.storeOAuthAccessToken(new OAuthToken(accessTokenKey, accessTokenSecret));
-            }
-        } catch (CredentialsAgentException e) {
-            Logging.error(e);
-            Logging.warn(tr("Failed to store OAuth Access Token to credentials manager"));
-            Logging.warn(tr("Current credential manager is of type ''{0}''", cm.getClass().getName()));
-        }
-    }
-
-    /**
      * Clears the content of this holder
      */
     public void clear() {
diff --git a/src/org/openstreetmap/josm/data/oauth/OAuthParameters.java b/src/org/openstreetmap/josm/data/oauth/OAuthParameters.java
index 0ea116c..a25d76c 100644
--- a/src/org/openstreetmap/josm/data/oauth/OAuthParameters.java
+++ b/src/org/openstreetmap/josm/data/oauth/OAuthParameters.java
@@ -4,7 +4,6 @@ package org.openstreetmap.josm.data.oauth;
 import java.util.Objects;
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.Preferences;
 import org.openstreetmap.josm.io.OsmApi;
 import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
@@ -95,26 +94,6 @@ public class OAuthParameters {
     }
 
     /**
-     * Replies a set of parameters as defined in the preferences.
-     *
-     * @param pref the preferences
-     * @return the parameters
-     * @deprecated (since 12928) replaced by {@link #createFromApiUrl(java.lang.String)}
-     */
-    @Deprecated
-    public static OAuthParameters createFromPreferences(Preferences pref) {
-        OAuthParameters parameters = createDefault(pref.get("osm-server.url"));
-        return new OAuthParameters(
-                pref.get("oauth.settings.consumer-key", parameters.getConsumerKey()),
-                pref.get("oauth.settings.consumer-secret", parameters.getConsumerSecret()),
-                pref.get("oauth.settings.request-token-url", parameters.getRequestTokenUrl()),
-                pref.get("oauth.settings.access-token-url", parameters.getAccessTokenUrl()),
-                pref.get("oauth.settings.authorise-url", parameters.getAuthoriseUrl()),
-                pref.get("oauth.settings.osm-login-url", parameters.getOsmLoginUrl()),
-                pref.get("oauth.settings.osm-logout-url", parameters.getOsmLogoutUrl()));
-    }
-
-    /**
      * Remembers the current values in the preferences.
      */
     public void rememberPreferences() {
@@ -127,25 +106,6 @@ public class OAuthParameters {
         Config.getPref().put("oauth.settings.osm-logout-url", getOsmLogoutUrl());
     }
 
-    /**
-     * Remembers the current values in the preferences <code>pref</code>.
-     *
-     * @param pref the preferences. Must not be null.
-     * @throws IllegalArgumentException if pref is null.
-     * @deprecated (since 12928) replaced by {@link #rememberPreferences()}
-     */
-    @Deprecated
-    public void rememberPreferences(Preferences pref) {
-        CheckParameterUtil.ensureParameterNotNull(pref, "pref");
-        pref.put("oauth.settings.consumer-key", getConsumerKey());
-        pref.put("oauth.settings.consumer-secret", getConsumerSecret());
-        pref.put("oauth.settings.request-token-url", getRequestTokenUrl());
-        pref.put("oauth.settings.access-token-url", getAccessTokenUrl());
-        pref.put("oauth.settings.authorise-url", getAuthoriseUrl());
-        pref.put("oauth.settings.osm-login-url", getOsmLoginUrl());
-        pref.put("oauth.settings.osm-logout-url", getOsmLogoutUrl());
-    }
-
     private final String consumerKey;
     private final String consumerSecret;
     private final String requestTokenUrl;
diff --git a/src/org/openstreetmap/josm/data/osm/Changeset.java b/src/org/openstreetmap/josm/data/osm/Changeset.java
index 0e83118..747973b 100644
--- a/src/org/openstreetmap/josm/data/osm/Changeset.java
+++ b/src/org/openstreetmap/josm/data/osm/Changeset.java
@@ -104,16 +104,6 @@ public final class Changeset implements Tagged, Comparable<Changeset> {
     }
 
     /**
-     * Visitor pattern.
-     * @param v visitor
-     * @deprecated no longer supported
-     */
-    @Deprecated
-    public void visit(org.openstreetmap.josm.data.osm.visitor.Visitor v) {
-        v.visit(this);
-    }
-
-    /**
      * Compares this changeset to another, based on their identifier.
      * @param other other changeset
      * @return the value {@code 0} if {@code getId() == other.getId()};
diff --git a/src/org/openstreetmap/josm/data/osm/DataSet.java b/src/org/openstreetmap/josm/data/osm/DataSet.java
index 6775c2c..de085df 100644
--- a/src/org/openstreetmap/josm/data/osm/DataSet.java
+++ b/src/org/openstreetmap/josm/data/osm/DataSet.java
@@ -54,7 +54,6 @@ import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
 import org.openstreetmap.josm.data.projection.Projection;
 import org.openstreetmap.josm.data.projection.ProjectionChangeListener;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
-import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionManager;
 import org.openstreetmap.josm.tools.ListenerList;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.SubclassFilteredCollection;
@@ -207,7 +206,7 @@ public final class DataSet extends QuadBucketPrimitiveStore implements Data, Pro
         // Transparently register as projection change listener. No need to explicitly remove
         // the listener, projection change listeners are managed as WeakReferences.
         Main.addProjectionChangeListener(this);
-        addSelectionListener((DataSelectionListener) e -> fireDeprecatedSelectionChange(e.getSelection()));
+        addSelectionListener((DataSelectionListener) e -> fireSelectionChange(e.getSelection()));
     }
 
     /**
@@ -334,16 +333,6 @@ public final class DataSet extends QuadBucketPrimitiveStore implements Data, Pro
     }
 
     /**
-     * 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() {
-        return AutoCompletionManager.of(this);
-    }
-
-    /**
      * The API version that created this data set, if any.
      */
     private String version;
@@ -367,31 +356,6 @@ public final class DataSet extends QuadBucketPrimitiveStore implements Data, Pro
     }
 
     /**
-     * Determines if upload is being discouraged.
-     * (i.e. this dataset contains private data which should not be uploaded)
-     * @return {@code true} if upload is being discouraged, {@code false} otherwise
-     * @see #setUploadDiscouraged
-     * @deprecated use {@link #getUploadPolicy()}
-     */
-    @Deprecated
-    public boolean isUploadDiscouraged() {
-        return uploadPolicy == UploadPolicy.DISCOURAGED || uploadPolicy == UploadPolicy.BLOCKED;
-    }
-
-    /**
-     * Sets the "upload discouraged" flag.
-     * @param uploadDiscouraged {@code true} if this dataset contains private data which should not be uploaded
-     * @see #isUploadDiscouraged
-     * @deprecated use {@link #setUploadPolicy(UploadPolicy)}
-     */
-    @Deprecated
-    public void setUploadDiscouraged(boolean uploadDiscouraged) {
-        if (uploadPolicy != UploadPolicy.BLOCKED) {
-            this.uploadPolicy = uploadDiscouraged ? UploadPolicy.DISCOURAGED : UploadPolicy.NORMAL;
-        }
-    }
-
-    /**
      * Get the upload policy.
      * @return the upload policy
      * @see #setUploadPolicy(UploadPolicy)
@@ -675,17 +639,7 @@ public final class DataSet extends QuadBucketPrimitiveStore implements Data, Pro
         selListeners.remove(listener);
     }
 
-    /**
-     * Notifies all registered {@link SelectionChangedListener} about the current selection in
-     * this dataset.
-     * @deprecated You should never need to do this from the outside.
-     */
-    @Deprecated
-    public void fireSelectionChanged() {
-        fireDeprecatedSelectionChange(getAllSelected());
-    }
-
-    private static void fireDeprecatedSelectionChange(Collection<? extends OsmPrimitive> currentSelection) {
+    private static void fireSelectionChange(Collection<? extends OsmPrimitive> currentSelection) {
         for (SelectionChangedListener l : selListeners) {
             l.selectionChanged(currentSelection);
         }
@@ -829,19 +783,6 @@ public final class DataSet extends QuadBucketPrimitiveStore implements Data, Pro
     }
 
     /**
-     * Sets the current selection to the primitives in <code>selection</code>.
-     * Notifies all {@link SelectionChangedListener} if <code>fireSelectionChangeEvent</code> is true.
-     *
-     * @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 be removed end of 2017. Does not seem to be used by plugins.
-     */
-    @Deprecated
-    public void setSelected(Collection<? extends PrimitiveId> selection, boolean fireSelectionChangeEvent) {
-        setSelected(selection);
-    }
-
-    /**
      * Sets the current selection to the primitives in <code>selection</code>
      * and notifies all {@link SelectionChangedListener}.
      *
@@ -1268,6 +1209,10 @@ public final class DataSet extends QuadBucketPrimitiveStore implements Data, Pro
         fireEvent(new PrimitiveFlagsChangedEvent(this, primitive));
     }
 
+    void fireFilterChanged() {
+        fireEvent(new DataChangedEvent(this));
+    }
+
     void fireHighlightingChanged() {
         HighlightUpdateListener.HighlightUpdateEvent e = new HighlightUpdateListener.HighlightUpdateEvent(this);
         highlightUpdateListeners.fireEvent(l -> l.highlightUpdated(e));
diff --git a/src/org/openstreetmap/josm/data/osm/Filter.java b/src/org/openstreetmap/josm/data/osm/Filter.java
index c67c6d3..5e179c8 100644
--- a/src/org/openstreetmap/josm/data/osm/Filter.java
+++ b/src/org/openstreetmap/josm/data/osm/Filter.java
@@ -148,7 +148,7 @@ public class Filter extends SearchSetting {
         FilterPreferenceEntry e = new FilterPreferenceEntry();
         e.version = version;
         e.text = text;
-        e.mode = mode.toString();
+        e.mode = mode.name();
         e.case_sensitive = caseSensitive;
         e.regex_search = regexSearch;
         e.mapCSS_search = mapCSSSearch;
diff --git a/src/org/openstreetmap/josm/data/osm/FilterModel.java b/src/org/openstreetmap/josm/data/osm/FilterModel.java
index a563488..c432ef3 100644
--- a/src/org/openstreetmap/josm/data/osm/FilterModel.java
+++ b/src/org/openstreetmap/josm/data/osm/FilterModel.java
@@ -129,6 +129,9 @@ public class FilterModel {
                 }
                 disabledCount -= disabledAndHiddenCount;
             } finally {
+                if (changed) {
+                    ds.fireFilterChanged();
+                }
                 ds.endUpdate();
             }
 
diff --git a/src/org/openstreetmap/josm/data/osm/Node.java b/src/org/openstreetmap/josm/data/osm/Node.java
index b9969e9..d59e4bf 100644
--- a/src/org/openstreetmap/josm/data/osm/Node.java
+++ b/src/org/openstreetmap/josm/data/osm/Node.java
@@ -92,13 +92,9 @@ public final class Node extends OsmPrimitive implements INode {
      * <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());
     }
@@ -222,15 +218,6 @@ 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(OsmPrimitiveVisitor visitor) {
         visitor.visit(this);
diff --git a/src/org/openstreetmap/josm/data/osm/NodeData.java b/src/org/openstreetmap/josm/data/osm/NodeData.java
index 9c27c00..b4242c2 100644
--- a/src/org/openstreetmap/josm/data/osm/NodeData.java
+++ b/src/org/openstreetmap/josm/data/osm/NodeData.java
@@ -74,17 +74,6 @@ 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 Main.getProjection().latlon2eastNorth(getCoor());
-    }
-
     @Override
     public void setEastNorth(EastNorth eastNorth) {
         setCoor(Main.getProjection().eastNorth2latlon(eastNorth));
diff --git a/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java b/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
index 1e6e24d..81c468c 100644
--- a/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
+++ b/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
@@ -1023,17 +1023,6 @@ 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.
@@ -1089,15 +1078,6 @@ 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(OsmPrimitiveVisitor visitor);
diff --git a/src/org/openstreetmap/josm/data/osm/OsmPrimitiveComparator.java b/src/org/openstreetmap/josm/data/osm/OsmPrimitiveComparator.java
index f331366..5a9b90d 100644
--- a/src/org/openstreetmap/josm/data/osm/OsmPrimitiveComparator.java
+++ b/src/org/openstreetmap/josm/data/osm/OsmPrimitiveComparator.java
@@ -24,7 +24,7 @@ public final class OsmPrimitiveComparator {
      * @return a comparator comparing primitives by their name using {@link DefaultNameFormatter}
      */
     public static Comparator<OsmPrimitive> comparingNames() {
-        final Comparator<String> digitsLast = comparing(str -> Character.isDigit(str.charAt(0)) ? 1 : 0);
+        final Comparator<String> digitsLast = comparing(str -> !str.isEmpty() && Character.isDigit(str.charAt(0)) ? 1 : 0);
         return comparing(memoize(DefaultNameFormatter.getInstance()::format),
                 digitsLast.thenComparing(AlphanumComparator.getInstance()));
     }
diff --git a/src/org/openstreetmap/josm/data/osm/Relation.java b/src/org/openstreetmap/josm/data/osm/Relation.java
index 5bf7297..fdece38 100644
--- a/src/org/openstreetmap/josm/data/osm/Relation.java
+++ b/src/org/openstreetmap/josm/data/osm/Relation.java
@@ -53,7 +53,7 @@ public final class Relation extends OsmPrimitive implements IRelation {
             }
 
             if (members != null) {
-                this.members = members.toArray(new RelationMember[members.size()]);
+                this.members = members.toArray(new RelationMember[0]);
             } else {
                 this.members = new RelationMember[0];
             }
@@ -175,15 +175,6 @@ 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(OsmPrimitiveVisitor visitor) {
         visitor.visit(this);
diff --git a/src/org/openstreetmap/josm/data/osm/Way.java b/src/org/openstreetmap/josm/data/osm/Way.java
index a1de0e7..f5da609 100644
--- a/src/org/openstreetmap/josm/data/osm/Way.java
+++ b/src/org/openstreetmap/josm/data/osm/Way.java
@@ -62,7 +62,7 @@ public final class Way extends OsmPrimitive implements IWay {
             if (nodes == null) {
                 this.nodes = new Node[0];
             } else {
-                this.nodes = nodes.toArray(new Node[nodes.size()]);
+                this.nodes = nodes.toArray(new Node[0]);
             }
             for (Node node: this.nodes) {
                 node.addReferrer(this);
@@ -206,14 +206,6 @@ public final class Way extends OsmPrimitive implements IWay {
         return chunkSet;
     }
 
-    /**
-     * @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);
     }
diff --git a/src/org/openstreetmap/josm/data/osm/event/SelectionEventManager.java b/src/org/openstreetmap/josm/data/osm/event/SelectionEventManager.java
index 76b556c..00eed8c 100644
--- a/src/org/openstreetmap/josm/data/osm/event/SelectionEventManager.java
+++ b/src/org/openstreetmap/josm/data/osm/event/SelectionEventManager.java
@@ -8,8 +8,6 @@ import java.util.Objects;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.stream.Stream;
 
-import javax.swing.SwingUtilities;
-
 import org.openstreetmap.josm.data.SelectionChangedListener;
 import org.openstreetmap.josm.data.osm.DataIntegrityProblemException;
 import org.openstreetmap.josm.data.osm.DataSelectionListener;
@@ -19,7 +17,9 @@ import org.openstreetmap.josm.gui.MainApplication;
 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.util.GuiHelper;
 import org.openstreetmap.josm.tools.bugreport.BugReport;
+import org.openstreetmap.josm.tools.bugreport.ReportedException;
 
 /**
  * Similar like {@link DatasetEventManager}, just for selection events.
@@ -71,6 +71,11 @@ public class SelectionEventManager implements DataSelectionListener, ActiveLayer
             OldListenerInfo that = (OldListenerInfo) o;
             return Objects.equals(listener, that.listener);
         }
+
+        @Override
+        public String toString() {
+            return "OldListenerInfo [listener=" + listener + ']';
+        }
     }
 
     private static class DataListenerInfo implements ListenerInfo {
@@ -97,6 +102,11 @@ public class SelectionEventManager implements DataSelectionListener, ActiveLayer
             DataListenerInfo that = (DataListenerInfo) o;
             return Objects.equals(listener, that.listener);
         }
+
+        @Override
+        public String toString() {
+            return "DataListenerInfo [listener=" + listener + ']';
+        }
     }
 
     private final CopyOnWriteArrayList<ListenerInfo> inEDTListeners = new CopyOnWriteArrayList<>();
@@ -195,7 +205,11 @@ public class SelectionEventManager implements DataSelectionListener, ActiveLayer
     @Override
     public void selectionChanged(SelectionChangeEvent event) {
         fireEvent(immedatelyListeners, event);
-        SwingUtilities.invokeLater(() -> fireEvent(inEDTListeners, event));
+        try {
+            GuiHelper.runInEDTAndWaitWithException(() -> fireEvent(inEDTListeners, event));
+        } catch (ReportedException e) {
+            throw BugReport.intercept(e).put("event", event).put("inEDTListeners", inEDTListeners);
+        }
     }
 
     private static void fireEvent(List<ListenerInfo> listeners, SelectionChangeEvent event) {
diff --git a/src/org/openstreetmap/josm/data/osm/visitor/AbstractVisitor.java b/src/org/openstreetmap/josm/data/osm/visitor/AbstractVisitor.java
deleted file mode 100644
index c2347c5..0000000
--- a/src/org/openstreetmap/josm/data/osm/visitor/AbstractVisitor.java
+++ /dev/null
@@ -1,21 +0,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.data.osm.visitor;
-
-import org.openstreetmap.josm.data.osm.Changeset;
-
-/**
- * This class serves as a base class for most simple visitors,
- * blocking out the "changeset" visit so as to avoid cluttering
- * the visitors which are not interested.
- *
- * @author fred
- * @deprecated use {@link OsmPrimitiveVisitor}
- */
- at Deprecated
-public abstract class AbstractVisitor implements Visitor {
-
-    @Override
-    public void visit(Changeset cs) {
-        // do nothing
-    }
-}
diff --git a/src/org/openstreetmap/josm/data/osm/visitor/Visitor.java b/src/org/openstreetmap/josm/data/osm/visitor/Visitor.java
deleted file mode 100644
index 3928339..0000000
--- a/src/org/openstreetmap/josm/data/osm/visitor/Visitor.java
+++ /dev/null
@@ -1,20 +0,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.data.osm.visitor;
-
-import org.openstreetmap.josm.data.osm.Changeset;
-
-/**
- * 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)
- */
- at Deprecated
-public interface Visitor extends OsmPrimitiveVisitor {
-    /**
-     * 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/paint/MapRendererFactory.java b/src/org/openstreetmap/josm/data/osm/visitor/paint/MapRendererFactory.java
index c882f3e..d2ae449 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/paint/MapRendererFactory.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/paint/MapRendererFactory.java
@@ -5,7 +5,6 @@ import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.awt.Graphics2D;
 import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
 import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -306,9 +305,6 @@ public final class MapRendererFactory {
         try {
             Constructor<?> c = activeRenderer.getConstructor(Graphics2D.class, NavigatableComponent.class, boolean.class);
             return AbstractMapRenderer.class.cast(c.newInstance(g, viewport, isInactiveMode));
-        } catch (InvocationTargetException e) {
-            Logging.debug(e);
-            throw new MapRendererFactoryException(e.getCause());
         } catch (ReflectiveOperationException | IllegalArgumentException e) {
             throw new MapRendererFactoryException(e);
         }
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 24cbf28..a363ef9 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java
@@ -471,25 +471,6 @@ public class StyledMapRenderer extends AbstractMapRenderer {
      * @param extentThreshold if not null, determines if the partial filled should
      * be replaced by plain fill, when it covers a certain fraction of the total area
      * @param disabled If this should be drawn with a special disabled style.
-     * @param text Ignored. Use {@link #drawText} instead.
-     * @deprecated use {@link #drawArea(Relation r, Color color, MapImage fillImage, Float extent, Float extentThreshold, boolean disabled)}
-     */
-    @Deprecated
-    public void drawArea(Relation r, Color color, MapImage fillImage, Float extent, Float extentThreshold, boolean disabled, TextLabel text) {
-        drawArea(r, color, fillImage, extent, extentThreshold, disabled);
-    }
-
-    /**
-     * Draws a multipolygon area.
-     * @param r The multipolygon relation
-     * @param color The color to fill the area with.
-     * @param fillImage The image to fill the area with. Overrides color.
-     * @param extent if not null, area will be filled partially; specifies, how
-     * far to fill from the boundary towards the center of the area;
-     * if null, area will be filled completely
-     * @param extentThreshold if not null, determines if the partial filled should
-     * be replaced by plain fill, when it covers a certain fraction of the total area
-     * @param disabled If this should be drawn with a special disabled style.
      * @since 12285
      */
     public void drawArea(Relation r, Color color, MapImage fillImage, Float extent, Float extentThreshold, boolean disabled) {
@@ -528,25 +509,6 @@ public class StyledMapRenderer extends AbstractMapRenderer {
      * @param extentThreshold if not null, determines if the partial filled should
      * be replaced by plain fill, when it covers a certain fraction of the total area
      * @param disabled If this should be drawn with a special disabled style.
-     * @param text Ignored. Use {@link #drawText} instead.
-     * @deprecated use {@link #drawArea(Way w, Color color, MapImage fillImage, Float extent, Float extentThreshold, boolean disabled)}
-     */
-    @Deprecated
-    public void drawArea(Way w, Color color, MapImage fillImage, Float extent, Float extentThreshold, boolean disabled, TextLabel text) {
-        drawArea(w, color, fillImage, extent, extentThreshold, disabled);
-    }
-
-    /**
-     * Draws an area defined by a way. They way does not need to be closed, but it should.
-     * @param w The way.
-     * @param color The color to fill the area with.
-     * @param fillImage The image to fill the area with. Overrides color.
-     * @param extent if not null, area will be filled partially; specifies, how
-     * far to fill from the boundary towards the center of the area;
-     * if null, area will be filled completely
-     * @param extentThreshold if not null, determines if the partial filled should
-     * be replaced by plain fill, when it covers a certain fraction of the total area
-     * @param disabled If this should be drawn with a special disabled style.
      * @since 12285
      */
     public void drawArea(Way w, Color color, MapImage fillImage, Float extent, Float extentThreshold, boolean disabled) {
@@ -1647,7 +1609,7 @@ public class StyledMapRenderer extends AbstractMapRenderer {
             }
 
             // We use parallel sort here. This is only available for arrays.
-            StyleRecord[] sorted = allStyleElems.toArray(new StyleRecord[allStyleElems.size()]);
+            StyleRecord[] sorted = allStyleElems.toArray(new StyleRecord[0]);
             Arrays.parallelSort(sorted, null);
 
             if (!benchmark.renderDraw(allStyleElems)) {
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 70d5771..dc347d0 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,6 @@ import java.util.Optional;
 import java.util.Set;
 
 import org.openstreetmap.josm.Main;
-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;
@@ -28,6 +26,8 @@ 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.spi.preferences.PreferenceChangeEvent;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.tools.Geometry;
 import org.openstreetmap.josm.tools.Geometry.AreaAndPerimeter;
 import org.openstreetmap.josm.tools.Logging;
@@ -579,7 +579,7 @@ public class Multipolygon {
      */
     public static Collection<JoinedWay> joinWays(Collection<Way> waysToJoin) {
         final Collection<JoinedWay> result = new ArrayList<>();
-        final Way[] joinArray = waysToJoin.toArray(new Way[waysToJoin.size()]);
+        final Way[] joinArray = waysToJoin.toArray(new Way[0]);
         int left = waysToJoin.size();
         while (left > 0) {
             Way w = null;
diff --git a/src/org/openstreetmap/josm/data/preferences/CollectionProperty.java b/src/org/openstreetmap/josm/data/preferences/CollectionProperty.java
deleted file mode 100644
index a0f7ad9..0000000
--- a/src/org/openstreetmap/josm/data/preferences/CollectionProperty.java
+++ /dev/null
@@ -1,35 +0,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.data.preferences;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-/**
- * A property containing a {@code Collection} of {@code String} as value.
- * @deprecated use {@link ListProperty}
- */
- at Deprecated
-public class CollectionProperty extends AbstractProperty<Collection<String>> {
-
-    /**
-     * Constructs a new {@code CollectionProperty}.
-     * @param key The property key
-     * @param defaultValue The default value
-     */
-    public CollectionProperty(String key, Collection<String> defaultValue) {
-        super(key, defaultValue);
-        if (getPreferences() != null) {
-            get();
-        }
-    }
-
-    @Override
-    public Collection<String> get() {
-        return getPreferences().getList(getKey(), new ArrayList<>(getDefaultValue()));
-    }
-
-    @Override
-    public boolean put(Collection<String> value) {
-        return getPreferences().putList(getKey(), new ArrayList<>(value));
-    }
-}
diff --git a/src/org/openstreetmap/josm/data/projection/CustomProjection.java b/src/org/openstreetmap/josm/data/projection/CustomProjection.java
index 91b865d..6e09db7 100644
--- a/src/org/openstreetmap/josm/data/projection/CustomProjection.java
+++ b/src/org/openstreetmap/josm/data/projection/CustomProjection.java
@@ -62,7 +62,6 @@ public class CustomProjection extends AbstractProjection {
     protected String pref;
     protected String name;
     protected String code;
-    protected String cacheDir;
     protected Bounds bounds;
     private double metersPerUnitWMTS;
     private String axis = "enu"; // default axis orientation is East, North, Up
@@ -209,20 +208,6 @@ public class CustomProjection extends AbstractProjection {
      * @param name describe projection in one or two words
      * @param code unique code for this projection - may be null
      * @param pref the string that defines the custom projection
-     * @param cacheDir cache directory name
-     * @deprecated unused - remove in 2017-09
-     */
-    @Deprecated
-    public CustomProjection(String name, String code, String pref, String cacheDir) {
-        this(name, code, pref);
-    }
-
-    /**
-     * Constructs a new {@code CustomProjection} with given name, code and parameters.
-     *
-     * @param name describe projection in one or two words
-     * @param code unique code for this projection - may be null
-     * @param pref the string that defines the custom projection
      */
     public CustomProjection(String name, String code, String pref) {
         this.name = name;
@@ -692,20 +677,6 @@ public class CustomProjection extends AbstractProjection {
         }
     }
 
-    /**
-     * {@inheritDoc}
-     * @deprecated unused - remove in 2017-09
-     */
-    @Override
-    @Deprecated
-    public String getCacheDirectoryName() {
-        if (cacheDir != null) {
-            return cacheDir;
-        } else {
-            return "proj-" + Utils.md5Hex(pref == null ? "" : pref).substring(0, 4);
-        }
-    }
-
     @Override
     public Bounds getWorldBoundsLatLon() {
         if (bounds == null) {
diff --git a/src/org/openstreetmap/josm/data/projection/Projection.java b/src/org/openstreetmap/josm/data/projection/Projection.java
index 9c2e952..eed283a 100644
--- a/src/org/openstreetmap/josm/data/projection/Projection.java
+++ b/src/org/openstreetmap/josm/data/projection/Projection.java
@@ -53,14 +53,6 @@ public interface Projection extends Projecting {
     String toCode();
 
     /**
-     * Get a filename compatible string (for the cache directory).
-     * @return the cache directory name (base name)
-     * @deprecated unused - remove in 2017-07
-     */
-    @Deprecated
-    String getCacheDirectoryName();
-
-    /**
      * Get the bounds of the world.
      * @return the supported lat/lon rectangle for this projection
      */
diff --git a/src/org/openstreetmap/josm/data/projection/ProjectionCLI.java b/src/org/openstreetmap/josm/data/projection/ProjectionCLI.java
index 4d476ed..e0bd9a4 100644
--- a/src/org/openstreetmap/josm/data/projection/ProjectionCLI.java
+++ b/src/org/openstreetmap/josm/data/projection/ProjectionCLI.java
@@ -195,7 +195,7 @@ public class ProjectionCLI implements CLIModule {
         try {
             return Double.parseDouble(s);
         } catch (NumberFormatException nfe) {
-            throw new IllegalArgumentException(tr("Unable to parse number ''{0}''", s));
+            throw new IllegalArgumentException(tr("Unable to parse number ''{0}''", s), nfe);
         }
     }
 
diff --git a/src/org/openstreetmap/josm/data/projection/Projections.java b/src/org/openstreetmap/josm/data/projection/Projections.java
index 0852974..7ba8717 100644
--- a/src/org/openstreetmap/josm/data/projection/Projections.java
+++ b/src/org/openstreetmap/josm/data/projection/Projections.java
@@ -17,10 +17,6 @@ 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;
 import org.openstreetmap.josm.data.projection.datum.NTV2GridShiftFileWrapper;
@@ -180,45 +176,6 @@ public final class Projections {
     }
 
     /**
-     * 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
-     * @since 12725
-     * @deprecated use <code>Main.getProjection().latlon2eastNorth(ll)</code>
-     */
-    @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);
-    }
-
-    /**
      * Plugins can register additional base projections.
      *
      * @param id The "official" PROJ.4 id. In case the projection is not supported
diff --git a/src/org/openstreetmap/josm/data/projection/datum/NTV2Proj4DirGridShiftFileSource.java b/src/org/openstreetmap/josm/data/projection/datum/NTV2Proj4DirGridShiftFileSource.java
index 2fd3899..810c6bd 100644
--- a/src/org/openstreetmap/josm/data/projection/datum/NTV2Proj4DirGridShiftFileSource.java
+++ b/src/org/openstreetmap/josm/data/projection/datum/NTV2Proj4DirGridShiftFileSource.java
@@ -2,9 +2,10 @@
 package org.openstreetmap.josm.data.projection.datum;
 
 import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
+import java.io.IOException;
 import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.InvalidPathException;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
@@ -62,10 +63,10 @@ public final class NTV2Proj4DirGridShiftFileSource implements NTV2GridShiftFileS
         }
         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 Files.newInputStream(grid.getAbsoluteFile().toPath());
+            } catch (IOException | InvalidPathException ex) {
+                Logging.warn("Unable to open NTV2 grid shift file: " + grid);
+                Logging.debug(ex);
             }
         }
         return null;
diff --git a/src/org/openstreetmap/josm/data/tagging/ac/AutoCompletionItem.java b/src/org/openstreetmap/josm/data/tagging/ac/AutoCompletionItem.java
index a7ed7cb..0430a6c 100644
--- a/src/org/openstreetmap/josm/data/tagging/ac/AutoCompletionItem.java
+++ b/src/org/openstreetmap/josm/data/tagging/ac/AutoCompletionItem.java
@@ -1,8 +1,6 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.tagging.ac;
 
-import org.openstreetmap.josm.tools.CheckParameterUtil;
-
 /**
  * Represents an entry in the set of auto completion values.
  *
@@ -74,18 +72,6 @@ public class AutoCompletionItem implements Comparable<AutoCompletionItem> {
         return value;
     }
 
-    /**
-     * sets the value
-     * @param value the value; must not be null
-     * @throws IllegalArgumentException if value if null
-     * @deprecated value is now final, set it when constructing the object
-     */
-    @Deprecated
-    public void setValue(String value) {
-        CheckParameterUtil.ensureParameterNotNull(value, "value");
-        throw new UnsupportedOperationException("setValue() is no longer supported");
-    }
-
     @Override
     public String toString() {
         StringBuilder sb = new StringBuilder();
diff --git a/src/org/openstreetmap/josm/data/validation/routines/InetAddressValidator.java b/src/org/openstreetmap/josm/data/validation/routines/InetAddressValidator.java
index 4ec22b0..d0e401f 100644
--- a/src/org/openstreetmap/josm/data/validation/routines/InetAddressValidator.java
+++ b/src/org/openstreetmap/josm/data/validation/routines/InetAddressValidator.java
@@ -145,7 +145,7 @@ public class InetAddressValidator extends AbstractValidator {
             } else if (inet6Address.startsWith("::") && !octetList.isEmpty()) {
                 octetList.remove(0);
             }
-            octets = octetList.toArray(new String[octetList.size()]);
+            octets = octetList.toArray(new String[0]);
         }
         if (octets.length > IPV6_MAX_HEX_GROUPS) {
             return false;
diff --git a/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java b/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java
index d336928..41a0d92 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java
@@ -23,6 +23,7 @@ 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.function.Predicate;
 import java.util.regex.Matcher;
@@ -310,7 +311,7 @@ public class MapCSSTagChecker extends Test.TagTest {
                     }
                     try {
                         final String val = ai.val instanceof Expression
-                                ? (String) ((Expression) ai.val).evaluate(new Environment())
+                                ? Optional.of(((Expression) ai.val).evaluate(new Environment())).map(Object::toString).orElse(null)
                                 : ai.val instanceof String
                                 ? (String) ai.val
                                 : ai.val instanceof Keyword
diff --git a/src/org/openstreetmap/josm/gui/JosmUserIdentityManager.java b/src/org/openstreetmap/josm/gui/JosmUserIdentityManager.java
deleted file mode 100644
index ad03dbb..0000000
--- a/src/org/openstreetmap/josm/gui/JosmUserIdentityManager.java
+++ /dev/null
@@ -1,197 +0,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui;
-
-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;
-
-/**
- * JosmUserIdentityManager 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
- * on the OSM server which required authentication. In this case JOSM neither knows
- * the user name of the OSM account of the current user nor its unique id. Perhaps the
- * user doesn't have one.
- *
- * If the current user supplies a user name and a password in the JOSM preferences JOSM
- * can partially identify the user.
- *
- * The current user is fully identified if JOSM knows both the user name and the unique
- * id of the users OSM account. The latter is retrieved from the OSM server with a
- * <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
- * 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
- * {@link #setFullyIdentified}.
- *
- * The information kept by the JosmUserIdentityManager 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 2689 (creation)
- * @deprecated to be removed end of 2017. Use {@link UserIdentityManager} instead
- */
- at Deprecated
-public final class JosmUserIdentityManager {
-
-    private static JosmUserIdentityManager 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() {
-        if (instance == null) {
-            instance = new JosmUserIdentityManager();
-            UserIdentityManager.getInstance();
-        }
-        return instance;
-    }
-
-    private JosmUserIdentityManager() {
-    }
-
-    /**
-     * Remembers the fact that the current JOSM user is anonymous.
-     */
-    public void setAnonymous() {
-        UserIdentityManager.getInstance().setAnonymous();
-    }
-
-    /**
-     * Remembers the fact that the current JOSM user is partially identified
-     * by the user name of its OSM account.
-     *
-     * @param userName the user name. Must not be null. Must not be empty (whitespace only).
-     * @throws IllegalArgumentException if userName is null
-     * @throws IllegalArgumentException if userName is empty
-     */
-    public void setPartiallyIdentified(String userName) {
-        UserIdentityManager.getInstance().setPartiallyIdentified(userName);
-    }
-
-    /**
-     * Remembers the fact that the current JOSM user is fully identified with a
-     * verified pair of user name and user id.
-     *
-     * @param userName the user name. Must not be null. Must not be empty.
-     * @param userInfo additional information about the user, retrieved from the OSM server and including the user id
-     * @throws IllegalArgumentException if userName is null
-     * @throws IllegalArgumentException if userName is empty
-     * @throws IllegalArgumentException if userInfo is null
-     */
-    public void setFullyIdentified(String userName, UserInfo userInfo) {
-        UserIdentityManager.getInstance().setFullyIdentified(userName, userInfo);
-    }
-
-    /**
-     * Replies true if the current JOSM user is anonymous.
-     *
-     * @return {@code true} if the current user is anonymous.
-     */
-    public boolean isAnonymous() {
-        return UserIdentityManager.getInstance().isAnonymous();
-    }
-
-    /**
-     * Replies true if the current JOSM user is partially identified.
-     *
-     * @return true if the current JOSM user is partially identified.
-     */
-    public boolean isPartiallyIdentified() {
-        return UserIdentityManager.getInstance().isPartiallyIdentified();
-    }
-
-    /**
-     * Replies true if the current JOSM user is fully identified.
-     *
-     * @return true if the current JOSM user is fully identified.
-     */
-    public boolean isFullyIdentified() {
-        return UserIdentityManager.getInstance().isFullyIdentified();
-    }
-
-    /**
-     * Replies the user name of the current JOSM user. null, if {@link #isAnonymous()} is true.
-     *
-     * @return  the user name of the current JOSM user
-     */
-    public String getUserName() {
-        return UserIdentityManager.getInstance().getUserName();
-    }
-
-    /**
-     * 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
-     */
-    public int getUserId() {
-        return UserIdentityManager.getInstance().getUserId();
-    }
-
-    /**
-     * Replies verified additional information about the current user if the user is
-     * {@link #isFullyIdentified()}.
-     *
-     * @return verified additional information about the current user
-     */
-    public UserInfo getUserInfo() {
-        return UserIdentityManager.getInstance().getUserInfo();
-    }
-
-    /**
-     * Returns the identity as a {@link User} object
-     *
-     * @return the identity as user, or {@link User#getAnonymous()} if {@link #isAnonymous()}
-     */
-    public User asUser() {
-        return UserIdentityManager.getInstance().asUser();
-    }
-
-    /**
-     * Initializes the user identity manager from Basic Authentication values in the {@link org.openstreetmap.josm.data.Preferences}
-     * This method should be called if {@code osm-server.auth-method} is set to {@code basic}.
-     * @see #initFromOAuth
-     */
-    public void initFromPreferences() {
-        UserIdentityManager.getInstance().initFromPreferences();
-    }
-
-    /**
-     * Initializes the user identity manager from OAuth request of user details.
-     * This method should be called if {@code osm-server.auth-method} is set to {@code oauth}.
-     * @see #initFromPreferences
-     * @since 5434
-     */
-    public void initFromOAuth() {
-        UserIdentityManager.getInstance().initFromOAuth();
-    }
-
-    /**
-     * Replies true if the user with name <code>username</code> is the current user
-     *
-     * @param username the user name
-     * @return true if the user with name <code>username</code> is the current user
-     */
-    public boolean isCurrentUser(String 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 #getUserName() user names} match.
-     *
-     * @param user the user to test
-     * @return true if given user is the current user
-     */
-    public boolean isCurrentUser(User user) {
-        return UserIdentityManager.getInstance().isCurrentUser(user);
-    }
-}
diff --git a/src/org/openstreetmap/josm/gui/MainApplication.java b/src/org/openstreetmap/josm/gui/MainApplication.java
index c2cbfdb..de9be56 100644
--- a/src/org/openstreetmap/josm/gui/MainApplication.java
+++ b/src/org/openstreetmap/josm/gui/MainApplication.java
@@ -180,7 +180,6 @@ import org.xml.sax.SAXException;
  *
  * @author imi
  */
- at SuppressWarnings("deprecation")
 public class MainApplication extends Main {
 
     /**
@@ -221,9 +220,6 @@ public class MainApplication extends Main {
      * @since 12634 (as a replacement to {@code Main.worker})
      */
     public static final ExecutorService worker = new ProgressMonitorExecutor("main-worker-%d", Thread.NORM_PRIORITY);
-    static {
-        Main.worker = worker;
-    }
 
     /**
      * Provides access to the layers displayed in the main view.
@@ -471,20 +467,15 @@ public class MainApplication extends Main {
      * Called once at startup to initialize the main window content.
      * Should set {@link #menu} and {@link #mainPanel}
      */
-    @SuppressWarnings("deprecation")
     protected void initializeMainWindow() {
         if (mainFrame != null) {
             mainPanel = mainFrame.getPanel();
-            panel = mainPanel;
             mainFrame.initialize();
             menu = mainFrame.getMenu();
-            super.menu = menu;
         } else {
             // required for running some tests.
             mainPanel = new MainPanel(layerManager);
-            panel = mainPanel;
             menu = new MainMenu();
-            super.menu = menu;
         }
         mainPanel.addMapFrameListener((o, n) -> redoUndoListener.commandChanged(0, 0));
         mainPanel.reAddListeners();
@@ -575,7 +566,6 @@ public class MainApplication extends Main {
      * @return The layer manager. The value returned will never change.
      * @since 12636 (as a replacement to {@code Main.getLayerManager()})
      */
-    @SuppressWarnings("deprecation")
     public static MainLayerManager getLayerManager() {
         return layerManager;
     }
@@ -628,7 +618,6 @@ public class MainApplication extends Main {
      * @return <code>true</code> if JOSM currently displays a map view
      * @since 12630 (as a replacement to {@code Main.isDisplayingMapView()})
      */
-    @SuppressWarnings("deprecation")
     public static boolean isDisplayingMapView() {
         return map != null && map.mapView != null;
     }
@@ -666,7 +655,6 @@ public class MainApplication extends Main {
      * @see #addMapFrameListener
      * @since 12639 (as a replacement to {@code Main.addAndFireMapFrameListener})
      */
-    @SuppressWarnings("deprecation")
     public static boolean addAndFireMapFrameListener(MapFrameListener listener) {
         return mainPanel != null && mainPanel.addAndFireMapFrameListener(listener);
     }
@@ -678,7 +666,6 @@ public class MainApplication extends Main {
      * @see #addAndFireMapFrameListener
      * @since 12639 (as a replacement to {@code Main.addMapFrameListener})
      */
-    @SuppressWarnings("deprecation")
     public static boolean addMapFrameListener(MapFrameListener listener) {
         return mainPanel != null && mainPanel.addMapFrameListener(listener);
     }
@@ -689,7 +676,6 @@ public class MainApplication extends Main {
      * @return {@code true} if the listeners collection changed as a result of the call
      * @since 12639 (as a replacement to {@code Main.removeMapFrameListener})
      */
-    @SuppressWarnings("deprecation")
     public static boolean removeMapFrameListener(MapFrameListener listener) {
         return mainPanel != null && mainPanel.removeMapFrameListener(listener);
     }
@@ -699,7 +685,6 @@ public class MainApplication extends Main {
      * @param action action defining its own shortcut
      * @since 12639 (as a replacement to {@code Main.registerActionShortcut})
      */
-    @SuppressWarnings("deprecation")
     public static void registerActionShortcut(JosmAction action) {
         registerActionShortcut(action, action.getShortcut());
     }
@@ -710,7 +695,6 @@ public class MainApplication extends Main {
      * @param shortcut shortcut to associate to {@code action}
      * @since 12639 (as a replacement to {@code Main.registerActionShortcut})
      */
-    @SuppressWarnings("deprecation")
     public static void registerActionShortcut(Action action, Shortcut shortcut) {
         KeyStroke keyStroke = shortcut.getKeyStroke();
         if (keyStroke == null)
@@ -731,7 +715,6 @@ public class MainApplication extends Main {
      * @param shortcut shortcut to unregister
      * @since 12639 (as a replacement to {@code Main.unregisterShortcut})
      */
-    @SuppressWarnings("deprecation")
     public static void unregisterShortcut(Shortcut shortcut) {
         contentPanePrivate.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).remove(shortcut.getKeyStroke());
     }
@@ -741,7 +724,6 @@ public class MainApplication extends Main {
      * @param action action to unregister
      * @since 12639 (as a replacement to {@code Main.unregisterActionShortcut})
      */
-    @SuppressWarnings("deprecation")
     public static void unregisterActionShortcut(JosmAction action) {
         unregisterActionShortcut(action, action.getShortcut());
     }
@@ -752,7 +734,6 @@ public class MainApplication extends Main {
      * @param shortcut shortcut to unregister
      * @since 12639 (as a replacement to {@code Main.unregisterActionShortcut})
      */
-    @SuppressWarnings("deprecation")
     public static void unregisterActionShortcut(Action action, Shortcut shortcut) {
         unregisterShortcut(shortcut);
         contentPanePrivate.getActionMap().remove(action);
@@ -764,7 +745,6 @@ public class MainApplication extends Main {
      * @return the registered action for the given shortcut
      * @since 12639 (as a replacement to {@code Main.getRegisteredActionShortcut})
      */
-    @SuppressWarnings("deprecation")
     public static Action getRegisteredActionShortcut(Shortcut shortcut) {
         KeyStroke keyStroke = shortcut.getKeyStroke();
         if (keyStroke == null)
@@ -848,7 +828,6 @@ public class MainApplication extends Main {
      * Main application Startup
      * @param argArray Command-line arguments
      */
-    @SuppressWarnings("deprecation")
     public static void main(final String[] argArray) {
         I18n.init();
         commandLineArgs = Arrays.asList(Arrays.copyOf(argArray, argArray.length));
@@ -1025,7 +1004,6 @@ public class MainApplication extends Main {
         monitor.indeterminateSubTask(tr("Setting defaults"));
         setupUIManager();
         toolbar = new ToolbarPreferences();
-        Main.toolbar = toolbar;
         ProjectionPreference.setProjection();
         setupNadGridSources();
         GuiHelper.translateJavaInternalMessages();
@@ -1050,8 +1028,8 @@ public class MainApplication extends Main {
         if ((!args.hasOption(Option.NO_MAXIMIZE) && maximized) || args.hasOption(Option.MAXIMIZE)) {
             mainFrame.setMaximized(true);
         }
-        if (main.menu.fullscreenToggleAction != null) {
-            main.menu.fullscreenToggleAction.initial();
+        if (menu.fullscreenToggleAction != null) {
+            menu.fullscreenToggleAction.initial();
         }
 
         SwingUtilities.invokeLater(new GuiFinalizationWorker(args, proxySelector));
diff --git a/src/org/openstreetmap/josm/gui/MainPanel.java b/src/org/openstreetmap/josm/gui/MainPanel.java
index e93a70b..74380f0 100644
--- a/src/org/openstreetmap/josm/gui/MainPanel.java
+++ b/src/org/openstreetmap/josm/gui/MainPanel.java
@@ -7,7 +7,6 @@ import java.util.concurrent.CopyOnWriteArrayList;
 
 import javax.swing.JPanel;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.mapmode.MapMode;
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.MainLayerManager;
@@ -44,7 +43,6 @@ public class MainPanel extends JPanel {
      * Update the content of this {@link MainFrame} to either display the map or display the welcome screen.
      * @param showMap If the map should be displayed.
      */
-    @SuppressWarnings("deprecation")
     protected synchronized void updateContent(boolean showMap) {
         GuiHelper.assertCallFromEdt();
         MapFrame old = map;
@@ -65,7 +63,6 @@ public class MainPanel extends JPanel {
             map = createNewMapFrame();
         } else {
             map = null;
-            Main.map = map;
             MainApplication.map = map;
             add(getGettingStarted(), BorderLayout.CENTER);
         }
@@ -85,11 +82,9 @@ public class MainPanel extends JPanel {
         }
     }
 
-    @SuppressWarnings("deprecation")
     private MapFrame createNewMapFrame() {
         MapFrame mapFrame = new MapFrame(null);
         // Required by many components.
-        Main.map = mapFrame;
         MainApplication.map = mapFrame;
 
         mapFrame.fillPanel(this);
diff --git a/src/org/openstreetmap/josm/gui/MapFrame.java b/src/org/openstreetmap/josm/gui/MapFrame.java
index a467a9c..ad666a8 100644
--- a/src/org/openstreetmap/josm/gui/MapFrame.java
+++ b/src/org/openstreetmap/josm/gui/MapFrame.java
@@ -347,15 +347,21 @@ public class MapFrame extends JPanel implements Destroyable, ActiveLayerChangeLi
                 ((Destroyable) toolBarActions.getComponent(i)).destroy();
             }
         }
+        toolBarActions.removeAll();
         for (int i = 0; i < toolBarToggle.getComponentCount(); ++i) {
             if (toolBarToggle.getComponent(i) instanceof Destroyable) {
                 ((Destroyable) toolBarToggle.getComponent(i)).destroy();
             }
         }
+        toolBarToggle.removeAll();
 
         statusLine.destroy();
         mapView.destroy();
         keyDetector.unregister();
+
+        allDialogs.clear();
+        allDialogButtons.clear();
+        allMapModeButtons.clear();
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/gui/MapSlider.java b/src/org/openstreetmap/josm/gui/MapSlider.java
index 009e8bb..2aebe47 100644
--- a/src/org/openstreetmap/josm/gui/MapSlider.java
+++ b/src/org/openstreetmap/josm/gui/MapSlider.java
@@ -4,8 +4,6 @@ package org.openstreetmap.josm.gui;
 import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
 
 import java.awt.Dimension;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
 
 import javax.swing.JSlider;
 import javax.swing.UIManager;
@@ -13,11 +11,12 @@ import javax.swing.event.ChangeEvent;
 import javax.swing.event.ChangeListener;
 
 import org.openstreetmap.josm.gui.help.Helpful;
+import org.openstreetmap.josm.gui.NavigatableComponent.ZoomChangeListener;
 
 /**
  * This is the slider used in the top left corner of the map view. It allows the user to select the scale
  */
-class MapSlider extends JSlider implements PropertyChangeListener, ChangeListener, Helpful {
+class MapSlider extends JSlider implements ZoomChangeListener, ChangeListener, Helpful {
 
     private static final double ZOOM_STEP = 1.1;
     private final MapView mv;
@@ -28,16 +27,16 @@ class MapSlider extends JSlider implements PropertyChangeListener, ChangeListene
         super(0, 160);
         setOpaque(false);
         this.mv = mv;
-        mv.addPropertyChangeListener("scale", this);
+        NavigatableComponent.addZoomChangeListener(this);
         addChangeListener(this);
         // Call this manually once so it gets setup correctly
-        propertyChange(null);
+        zoomChanged();
         int w = UIManager.getDefaults().getInt("Slider.thumbWidth") + 150;
         setPreferredSize(new Dimension(w, 27));
     }
 
     @Override
-    public void propertyChange(PropertyChangeEvent evt) {
+    public void zoomChanged() {
         double maxScale = this.mv.getMaxScale();
         int zoom = (int) Math.round(Math.log(maxScale/mv.getScale())/Math.log(ZOOM_STEP));
         preventChange = true;
@@ -62,7 +61,7 @@ class MapSlider extends JSlider implements PropertyChangeListener, ChangeListene
             double snapped = mv.scaleFloor(scale);
             mv.zoomTo(this.mv.getCenter(), snapped);
         }
-        propertyChange(null);
+        zoomChanged();
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/gui/MapStatus.java b/src/org/openstreetmap/josm/gui/MapStatus.java
index a6bce6c..c7989e2 100644
--- a/src/org/openstreetmap/josm/gui/MapStatus.java
+++ b/src/org/openstreetmap/josm/gui/MapStatus.java
@@ -72,8 +72,18 @@ 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.Way;
+import org.openstreetmap.josm.data.osm.event.AbstractDatasetChangedEvent;
+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.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.SelectionEventManager;
+import org.openstreetmap.josm.data.osm.event.TagsChangedEvent;
+import org.openstreetmap.josm.data.osm.event.WayNodesChangedEvent;
 import org.openstreetmap.josm.data.preferences.AbstractProperty;
 import org.openstreetmap.josm.data.preferences.BooleanProperty;
 import org.openstreetmap.josm.data.preferences.DoubleProperty;
@@ -110,7 +120,7 @@ import org.openstreetmap.josm.tools.Utils;
  * @author imi
  */
 public final class MapStatus extends JPanel implements
-    Helpful, Destroyable, PreferenceChangedListener, SoMChangeListener, SelectionChangedListener, ZoomChangeListener {
+    Helpful, Destroyable, PreferenceChangedListener, SoMChangeListener, SelectionChangedListener, DataSetListener, ZoomChangeListener {
 
     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();
@@ -940,6 +950,7 @@ public final class MapStatus extends JPanel implements
         progressBar.addMouseListener(new ShowMonitorDialogMouseAdapter());
 
         Config.getPref().addPreferenceChangeListener(this);
+        DatasetEventManager.getInstance().addDatasetListener(this, FireMode.IN_EDT);
         SelectionEventManager.getInstance().addSelectionListener(this, FireMode.IN_EDT_CONSOLIDATED);
 
         mvComponentAdapter = new ComponentAdapter() {
@@ -1125,6 +1136,7 @@ public final class MapStatus extends JPanel implements
         SystemOfMeasurement.removeSoMChangeListener(this);
         NavigatableComponent.removeZoomChangeListener(this);
         Config.getPref().removePreferenceChangeListener(this);
+        DatasetEventManager.getInstance().removeDatasetListener(this);
         SelectionEventManager.getInstance().removeSelectionListener(this);
         mv.removeComponentListener(mvComponentAdapter);
 
@@ -1172,8 +1184,7 @@ public final class MapStatus extends JPanel implements
         return Math.min(80, 20 + Math.max(0, w-1280) * 60 / (1920-1280));
     }
 
-    @Override
-    public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
+    private void refreshDistText(Collection<? extends OsmPrimitive> newSelection) {
         if (newSelection.size() == 2) {
             Iterator<? extends OsmPrimitive> it = newSelection.iterator();
             OsmPrimitive n1 = it.next();
@@ -1192,6 +1203,11 @@ public final class MapStatus extends JPanel implements
     }
 
     @Override
+    public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
+        refreshDistText(newSelection);
+    }
+
+    @Override
     public void zoomChanged() {
         if (!GraphicsEnvironment.isHeadless()) {
             PointerInfo pointerInfo = MouseInfo.getPointerInfo();
@@ -1201,4 +1217,50 @@ public final class MapStatus extends JPanel implements
             }
         }
     }
+
+    @Override
+    public void wayNodesChanged(WayNodesChangedEvent event) {
+        Collection<OsmPrimitive> sel = event.getDataset().getSelected();
+        if (sel.size() == 1 && sel.contains(event.getChangedWay())) {
+            refreshDistText(sel);
+        }
+    }
+
+    @Override
+    public void nodeMoved(NodeMovedEvent event) {
+        Collection<OsmPrimitive> sel = event.getDataset().getSelected();
+        if (sel.size() == 2 && sel.contains(event.getNode())) {
+            refreshDistText(sel);
+        }
+    }
+
+    @Override
+    public void primitivesAdded(PrimitivesAddedEvent event) {
+        // Do nothing
+    }
+
+    @Override
+    public void primitivesRemoved(PrimitivesRemovedEvent event) {
+        // Do nothing
+    }
+
+    @Override
+    public void tagsChanged(TagsChangedEvent event) {
+        // Do nothing
+    }
+
+    @Override
+    public void relationMembersChanged(RelationMembersChangedEvent event) {
+        // Do nothing
+    }
+
+    @Override
+    public void otherDatasetChange(AbstractDatasetChangedEvent event) {
+        // Do nothing
+    }
+
+    @Override
+    public void dataChanged(DataChangedEvent event) {
+        // Do nothing
+    }
 }
diff --git a/src/org/openstreetmap/josm/gui/MapView.java b/src/org/openstreetmap/josm/gui/MapView.java
index 8454eec..0d53372 100644
--- a/src/org/openstreetmap/josm/gui/MapView.java
+++ b/src/org/openstreetmap/josm/gui/MapView.java
@@ -34,7 +34,6 @@ import java.util.concurrent.atomic.AtomicBoolean;
 
 import javax.swing.AbstractButton;
 import javax.swing.JComponent;
-import javax.swing.JPanel;
 import javax.swing.SwingUtilities;
 
 import org.openstreetmap.josm.Main;
@@ -254,20 +253,6 @@ LayerManager.LayerChangeListener, MainLayerManager.ActiveLayerChangeListener {
     /**
      * Constructs a new {@code MapView}.
      * @param layerManager The layers to display.
-     * @param contentPane Ignored. Main content pane is used.
-     * @param viewportData the initial viewport of the map. Can be null, then
-     * the viewport is derived from the layer data.
-     * @since 10279
-     * @deprecated use {@link #MapView(MainLayerManager, ViewportData)} instead
-     */
-    @Deprecated
-    public MapView(MainLayerManager layerManager, final JPanel contentPane, final ViewportData viewportData) {
-        this(layerManager, viewportData);
-    }
-
-    /**
-     * Constructs a new {@code MapView}.
-     * @param layerManager The layers to display.
      * @param viewportData the initial viewport of the map. Can be null, then
      * the viewport is derived from the layer data.
      * @since 11713
diff --git a/src/org/openstreetmap/josm/gui/MapViewState.java b/src/org/openstreetmap/josm/gui/MapViewState.java
index 6fbe14d..0c80dad 100644
--- a/src/org/openstreetmap/josm/gui/MapViewState.java
+++ b/src/org/openstreetmap/josm/gui/MapViewState.java
@@ -2,6 +2,7 @@
 package org.openstreetmap.josm.gui;
 
 import java.awt.Container;
+import java.awt.GraphicsEnvironment;
 import java.awt.Point;
 import java.awt.geom.AffineTransform;
 import java.awt.geom.Area;
@@ -144,10 +145,16 @@ public final class MapViewState implements Serializable {
     }
 
     private static Point findTopLeftOnScreen(JComponent position) {
-        try {
-            return position.getLocationOnScreen();
-        } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException e) {
-            throw BugReport.intercept(e).put("position", position).put("parent", position::getParent);
+        if (GraphicsEnvironment.isHeadless()) {
+            // in our imaginary universe the window is always (10, 10) from the top left of the screen
+            Point topLeftInWindow = findTopLeftInWindow(position);
+            return new Point(topLeftInWindow.x + 10, topLeftInWindow.y + 10);
+        } else {
+            try {
+                return position.getLocationOnScreen();
+            } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException e) {
+                throw BugReport.intercept(e).put("position", position).put("parent", position::getParent);
+            }
         }
     }
 
@@ -377,7 +384,7 @@ public final class MapViewState implements Serializable {
 
     /**
      * Create the default {@link MapViewState} object for the given map view. The screen position won't be set so that this method can be used
-     * before the view was added to the hirarchy.
+     * before the view was added to the hierarchy.
      * @param width The view width
      * @param height The view height
      * @return The state
diff --git a/src/org/openstreetmap/josm/gui/NavigatableComponent.java b/src/org/openstreetmap/josm/gui/NavigatableComponent.java
index e8da39e..3f3e361 100644
--- a/src/org/openstreetmap/josm/gui/NavigatableComponent.java
+++ b/src/org/openstreetmap/josm/gui/NavigatableComponent.java
@@ -2,6 +2,7 @@
 package org.openstreetmap.josm.gui;
 
 import java.awt.Cursor;
+import java.awt.GraphicsEnvironment;
 import java.awt.Point;
 import java.awt.Rectangle;
 import java.awt.event.ComponentAdapter;
@@ -59,6 +60,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.gui.util.GuiHelper;
 import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
@@ -120,7 +122,7 @@ public class NavigatableComponent extends JComponent implements Helpful {
      *
      * @param listener the listener. Ignored if null or already absent
      */
-    public static void removeZoomChangeListener(NavigatableComponent.ZoomChangeListener listener) {
+    public static void removeZoomChangeListener(ZoomChangeListener listener) {
         zoomChangeListeners.remove(listener);
     }
 
@@ -129,16 +131,18 @@ public class NavigatableComponent extends JComponent implements Helpful {
      *
      * @param listener the listener. Ignored if null or already registered.
      */
-    public static void addZoomChangeListener(NavigatableComponent.ZoomChangeListener listener) {
+    public static void addZoomChangeListener(ZoomChangeListener listener) {
         if (listener != null) {
             zoomChangeListeners.addIfAbsent(listener);
         }
     }
 
     protected static void fireZoomChanged() {
-        for (ZoomChangeListener l : zoomChangeListeners) {
-            l.zoomChanged();
-        }
+        GuiHelper.runInEDTAndWait(() -> {
+            for (ZoomChangeListener l : zoomChangeListeners) {
+                l.zoomChanged();
+            }
+        });
     }
 
     // The only events that may move/resize this map view are window movements or changes to the map view size.
@@ -319,7 +323,9 @@ public class NavigatableComponent extends JComponent implements Helpful {
     }
 
     protected boolean isVisibleOnScreen() {
-        return SwingUtilities.getWindowAncestor(this) != null && isShowing();
+        return GraphicsEnvironment.isHeadless() || (
+            SwingUtilities.getWindowAncestor(this) != null && isShowing()
+        );
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/gui/SideButton.java b/src/org/openstreetmap/josm/gui/SideButton.java
index a699afa..24200ec 100644
--- a/src/org/openstreetmap/josm/gui/SideButton.java
+++ b/src/org/openstreetmap/josm/gui/SideButton.java
@@ -3,15 +3,13 @@ package org.openstreetmap.josm.gui;
 
 import java.awt.BorderLayout;
 import java.awt.Color;
-import java.awt.Image;
 import java.awt.Insets;
 import java.awt.event.ActionListener;
 import java.beans.PropertyChangeListener;
 
+import javax.swing.AbstractAction;
 import javax.swing.Action;
 import javax.swing.BorderFactory;
-import javax.swing.Icon;
-import javax.swing.ImageIcon;
 import javax.swing.JButton;
 import javax.swing.SwingConstants;
 import javax.swing.plaf.basic.BasicArrowButton;
@@ -19,7 +17,6 @@ import javax.swing.plaf.basic.BasicArrowButton;
 import org.openstreetmap.josm.tools.Destroyable;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.ImageResource;
-import org.openstreetmap.josm.tools.Logging;
 
 /**
  * Button that is usually used in toggle dialogs.
@@ -32,6 +29,8 @@ public class SideButton extends JButton implements Destroyable {
     /**
      * Constructs a new {@code SideButton}.
      * @param action action used to specify the new button
+     * an icon must be provided with {@link ImageResource#attachImageIcon(AbstractAction, boolean)}
+     * @throws IllegalArgumentException if no icon provided
      * @since 744
      */
     public SideButton(Action action) {
@@ -40,9 +39,8 @@ public class SideButton extends JButton implements Destroyable {
         if (icon != null) {
             setIcon(icon.getImageIconBounded(
                 ImageProvider.ImageSizes.SIDEBUTTON.getImageDimension()));
-        } else if (getIcon() != null) { /* TODO: remove when calling code is fixed, replace by exception */
-            Logging.warn("Old style SideButton usage for action " + action);
-            fixIcon(action);
+        } else {
+            throw new IllegalArgumentException("No icon provided");
         }
         doStyle();
     }
@@ -73,34 +71,6 @@ public class SideButton extends JButton implements Destroyable {
     }
 
     /**
-     * Fix icon size
-     * @param action the action
-     * @deprecated This method is old style and will be removed together with the removal
-     * of old constructor code
-     */
-    @Deprecated
-    private void fixIcon(Action action) {
-        // need to listen for changes, so that putValue() that are called after the
-        // SideButton is constructed get the proper icon size
-        if (action != null) {
-            propertyChangeListener = evt -> {
-                if (Action.SMALL_ICON.equals(evt.getPropertyName())) {
-                    fixIcon(null);
-                }
-            };
-            action.addPropertyChangeListener(propertyChangeListener);
-        }
-        int iconHeight = ImageProvider.ImageSizes.SIDEBUTTON.getImageDimension().height;
-        Icon i = getIcon();
-        if (i instanceof ImageIcon && i.getIconHeight() != iconHeight) {
-            Image im = ((ImageIcon) i).getImage();
-            int newWidth = im.getWidth(null) * iconHeight / im.getHeight(null);
-            ImageIcon icon = new ImageIcon(im.getScaledInstance(newWidth, iconHeight, Image.SCALE_SMOOTH));
-            setIcon(icon);
-        }
-    }
-
-    /**
      * Do the style settings for the side button layout
      */
     private void doStyle() {
diff --git a/src/org/openstreetmap/josm/gui/datatransfer/PrimitiveTransferable.java b/src/org/openstreetmap/josm/gui/datatransfer/PrimitiveTransferable.java
index a8f7ea3..669ea6e 100644
--- a/src/org/openstreetmap/josm/gui/datatransfer/PrimitiveTransferable.java
+++ b/src/org/openstreetmap/josm/gui/datatransfer/PrimitiveTransferable.java
@@ -55,7 +55,7 @@ public class PrimitiveTransferable implements Transferable {
         if (sourceLayer != null) {
             flavors.addAll(OsmLayerTransferData.FLAVORS);
         }
-        return flavors.toArray(new DataFlavor[flavors.size()]);
+        return flavors.toArray(new DataFlavor[0]);
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/gui/dialogs/DialogsPanel.java b/src/org/openstreetmap/josm/gui/dialogs/DialogsPanel.java
index 5d4d7a0..dc51d2c 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/DialogsPanel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/DialogsPanel.java
@@ -329,6 +329,9 @@ public class DialogsPanel extends JPanel implements Destroyable {
                 throw BugReport.intercept(e).put("dialog", t).put("dialog-class", t.getClass());
             }
         }
+        mSpltPane.removeAll();
+        allDialogs.clear();
+        panels.clear();
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDataText.java b/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDataText.java
index 7378022..c792849 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDataText.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDataText.java
@@ -220,7 +220,7 @@ public class InspectPrimitiveDataText {
                     Double.toString(en.north()));
             Pair<Integer, Hemisphere> utmZone = TransverseMercator.locateUtmZone(n.getCoor());
             String utmLabel = tr("UTM Zone");
-            add(utmLabel, utmLabel.endsWith(":") ? " " : ": ", Integer.toString(utmZone.a), utmZone.b.toString().substring(0, 1));
+            add(utmLabel, utmLabel.endsWith(":") ? " " : ": ", Integer.toString(utmZone.a), utmZone.b.name().substring(0, 1));
         }
     }
 
diff --git a/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java b/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
index 508155a..788a66e 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
@@ -12,6 +12,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.EnumSet;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -28,15 +29,20 @@ import javax.swing.JPopupMenu;
 import javax.swing.JScrollPane;
 import javax.swing.KeyStroke;
 import javax.swing.ListSelectionModel;
+import javax.swing.event.PopupMenuEvent;
+import javax.swing.event.PopupMenuListener;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.ExpertToggleAction;
+import org.openstreetmap.josm.actions.OsmPrimitiveAction;
 import org.openstreetmap.josm.actions.relation.AddSelectionToRelations;
 import org.openstreetmap.josm.actions.relation.DeleteRelationsAction;
 import org.openstreetmap.josm.actions.relation.DownloadMembersAction;
 import org.openstreetmap.josm.actions.relation.DownloadSelectedIncompleteMembersAction;
 import org.openstreetmap.josm.actions.relation.DuplicateRelationAction;
 import org.openstreetmap.josm.actions.relation.EditRelationAction;
+import org.openstreetmap.josm.actions.relation.ExportRelationToGpxAction;
+import org.openstreetmap.josm.actions.relation.ExportRelationToGpxAction.Mode;
 import org.openstreetmap.josm.actions.relation.RecentRelationsAction;
 import org.openstreetmap.josm.actions.relation.SelectMembersAction;
 import org.openstreetmap.josm.actions.relation.SelectRelationAction;
@@ -121,6 +127,16 @@ public class RelationListDialog extends ToggleDialog
     private final AddSelectionToRelations addSelectionToRelations = new AddSelectionToRelations();
     private transient JMenuItem addSelectionToRelationMenuItem;
 
+    /** export relation to GPX track action */
+    private final ExportRelationToGpxAction exportRelationFromFirstAction =
+            new ExportRelationToGpxAction(EnumSet.of(Mode.FROM_FIRST_MEMBER, Mode.TO_FILE));
+    private final ExportRelationToGpxAction exportRelationFromLastAction =
+            new ExportRelationToGpxAction(EnumSet.of(Mode.FROM_LAST_MEMBER, Mode.TO_FILE));
+    private final ExportRelationToGpxAction exportRelationFromFirstToLayerAction =
+            new ExportRelationToGpxAction(EnumSet.of(Mode.FROM_FIRST_MEMBER, Mode.TO_LAYER));
+    private final ExportRelationToGpxAction exportRelationFromLastToLayerAction =
+            new ExportRelationToGpxAction(EnumSet.of(Mode.FROM_LAST_MEMBER, Mode.TO_LAYER));
+
     private final transient HighlightHelper highlightHelper = new HighlightHelper();
     private final boolean highlightEnabled = Config.getPref().getBoolean("draw.target-highlight", true);
     private final transient RecentRelationsAction recentRelationsAction;
@@ -602,6 +618,7 @@ public class RelationListDialog extends ToggleDialog
     }
 
     private void setupPopupMenuHandler() {
+        List<JMenuItem> checkDisabled = new ArrayList<>();
 
         // -- select action
         popupMenuHandler.addAction(selectRelationAction);
@@ -611,19 +628,48 @@ public class RelationListDialog extends ToggleDialog
         popupMenuHandler.addAction(selectMembersAction);
         popupMenuHandler.addAction(addMembersToSelectionAction);
 
-        popupMenuHandler.addSeparator();
         // -- download members action
+        popupMenuHandler.addSeparator();
         popupMenuHandler.addAction(downloadMembersAction);
-
-        // -- download incomplete members action
         popupMenuHandler.addAction(downloadSelectedIncompleteMembersAction);
 
+        // -- export relation to gpx action
+        popupMenuHandler.addSeparator();
+        checkDisabled.add(popupMenuHandler.addAction(exportRelationFromFirstAction));
+        checkDisabled.add(popupMenuHandler.addAction(exportRelationFromLastAction));
+        popupMenuHandler.addSeparator();
+        checkDisabled.add(popupMenuHandler.addAction(exportRelationFromFirstToLayerAction));
+        checkDisabled.add(popupMenuHandler.addAction(exportRelationFromLastToLayerAction));
+
         popupMenuHandler.addSeparator();
         popupMenuHandler.addAction(editAction).setVisible(false);
         popupMenuHandler.addAction(duplicateAction).setVisible(false);
         popupMenuHandler.addAction(deleteRelationsAction).setVisible(false);
 
         addSelectionToRelationMenuItem = popupMenuHandler.addAction(addSelectionToRelations);
+
+        popupMenuHandler.addListener(new PopupMenuListener() {
+            @Override
+            public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
+                for (JMenuItem mi: checkDisabled) {
+                    mi.setVisible(((OsmPrimitiveAction) mi.getAction()).isEnabled());
+
+                    Component sep = popupMenu.getComponent(
+                            Math.max(0, popupMenu.getComponentIndex(mi)-1));
+                    if (!(sep instanceof JMenuItem)) {
+                        sep.setVisible(mi.isVisible());
+                    }
+                }
+            }
+
+            @Override
+            public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
+            }
+
+            @Override
+            public void popupMenuCanceled(PopupMenuEvent e) {
+            }
+        });
     }
 
     /* ---------------------------------------------------------------------------------- */
diff --git a/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java b/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java
index bff47e8..417149b 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java
@@ -49,8 +49,6 @@ import javax.swing.SwingUtilities;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.JosmAction;
-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;
@@ -69,6 +67,8 @@ 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.spi.preferences.PreferenceChangeEvent;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.tools.Destroyable;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
@@ -287,7 +287,7 @@ public class ToggleDialog extends JPanel implements ShowHideButtonListener, Help
     public final class ToggleDialogAction extends JosmAction {
 
         private ToggleDialogAction(String name, String iconName, String tooltip, Shortcut shortcut) {
-            super(name, iconName, tooltip, shortcut, false);
+            super(name, iconName, tooltip, shortcut, false, false);
         }
 
         @Override
diff --git a/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java b/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java
index 110407f..ac2877f 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java
@@ -42,6 +42,7 @@ import javax.swing.AbstractAction;
 import javax.swing.Action;
 import javax.swing.Box;
 import javax.swing.ButtonGroup;
+import javax.swing.ComboBoxModel;
 import javax.swing.DefaultListCellRenderer;
 import javax.swing.ImageIcon;
 import javax.swing.JCheckBoxMenuItem;
@@ -636,8 +637,17 @@ public class TagEditHelper {
                public void focusGained(FocusEvent e) {
                    Logging.trace("Focus gained by {0}, e={1}", values, e);
                    String key = keys.getEditor().getItem().toString();
+                   List<AutoCompletionItem> correctItems = autocomplete.getTagValues(getAutocompletionKeys(key), comparator);
+                   ComboBoxModel<AutoCompletionItem> currentModel = values.getModel();
+                   final int size = correctItems.size();
+                   boolean valuesOK = size == currentModel.getSize();
+                   for (int i = 0; valuesOK && i < size; i++) {
+                       valuesOK = Objects.equals(currentModel.getElementAt(i), correctItems.get(i));
+                   }
+                   if (!valuesOK) {
+                       values.setPossibleAcItems(correctItems);
+                   }
                    if (!Objects.equals(key, objKey)) {
-                       values.setPossibleAcItems(autocomplete.getTagValues(getAutocompletionKeys(key), comparator));
                        values.getEditor().selectAll();
                        objKey = key;
                    }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/ChildRelationBrowser.java b/src/org/openstreetmap/josm/gui/dialogs/relation/ChildRelationBrowser.java
index 25ec2d1..c51daa2 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/ChildRelationBrowser.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/ChildRelationBrowser.java
@@ -9,6 +9,8 @@ import java.awt.Component;
 import java.awt.Dialog;
 import java.awt.FlowLayout;
 import java.awt.event.ActionEvent;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
 import java.io.IOException;
 import java.net.HttpURLConnection;
 import java.util.HashSet;
@@ -65,6 +67,9 @@ public class ChildRelationBrowser extends JPanel {
     /** the osm data layer this browser is related to */
     private transient OsmDataLayer layer;
 
+    /** the editAction used in the bottom panel and for doubleClick */
+    private EditAction editAction;
+
     /**
      * Replies the {@link OsmDataLayer} this editor is related to
      *
@@ -84,6 +89,22 @@ public class ChildRelationBrowser extends JPanel {
         add(pane, BorderLayout.CENTER);
 
         add(buildButtonPanel(), BorderLayout.SOUTH);
+        childTree.setToggleClickCount(0);
+        childTree.addMouseListener(new MouseAdapter() {
+            @Override
+            public void mouseClicked(MouseEvent e) {
+                if (e.getClickCount() == 2
+                    && !e.isAltDown() && !e.isAltGraphDown() && !e.isControlDown() && !e.isMetaDown() && !e.isShiftDown()
+                    && childTree.getRowForLocation(e.getX(), e.getY()) == childTree.getMinSelectionRow()) {
+                    Relation r = (Relation) childTree.getLastSelectedPathComponent();
+                    if (r.isIncomplete()) {
+                        childTree.expandPath(childTree.getSelectionPath());
+                    } else {
+                        editAction.actionPerformed(new ActionEvent(e.getSource(), ActionEvent.ACTION_PERFORMED, null));
+                    }
+                }
+            }
+        });
     }
 
     /**
@@ -104,7 +125,7 @@ public class ChildRelationBrowser extends JPanel {
         pnl.add(new JButton(downloadSelectedAction));
 
         // ---
-        EditAction editAction = new EditAction();
+        editAction = new EditAction();
         childTree.addTreeSelectionListener(editAction);
         pnl.add(new JButton(editAction));
 
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTable.java b/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTable.java
index b0aeb81..79ed914 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTable.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTable.java
@@ -178,6 +178,7 @@ public class MemberTable extends OsmPrimitivesTable implements IMemberModelListe
             }
             if (i >= 0) {
                 getSelectionModel().setSelectionInterval(i, i);
+                getMemberTableModel().fireMakeMemberVisible(i);
             }
         }
     }
@@ -197,6 +198,7 @@ public class MemberTable extends OsmPrimitivesTable implements IMemberModelListe
             }
             if (i < getRowCount()) {
                 getSelectionModel().setSelectionInterval(i, i);
+                getMemberTableModel().fireMakeMemberVisible(i);
             }
         }
     }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/ReferringRelationsBrowser.java b/src/org/openstreetmap/josm/gui/dialogs/relation/ReferringRelationsBrowser.java
index e20d18c..5d3a59f 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/ReferringRelationsBrowser.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/ReferringRelationsBrowser.java
@@ -44,7 +44,7 @@ public class ReferringRelationsBrowser extends JPanel {
     /**
      * Constructs a new {@code ReferringRelationsBrowser}.
      * @param layer OSM data layer
-     * @param model referrinf relations browser model
+     * @param model referring relations browser model
      */
     public ReferringRelationsBrowser(OsmDataLayer layer, ReferringRelationsBrowserModel model) {
         this.model = model;
@@ -61,7 +61,16 @@ public class ReferringRelationsBrowser extends JPanel {
         referrers.setCellRenderer(new OsmPrimitivRenderer());
         add(new JScrollPane(referrers), BorderLayout.CENTER);
         referrers.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
-        referrers.addMouseListener(new DblClickMouseAdapter());
+        referrers.addMouseListener(new MouseAdapter() {
+            @Override
+            public void mouseClicked(MouseEvent e) {
+                if (e.getClickCount() == 2
+                    && !e.isAltDown() && !e.isAltGraphDown() && !e.isControlDown() && !e.isMetaDown() && !e.isShiftDown()
+                    && referrers.getCellBounds(referrers.getSelectedIndex(), referrers.getSelectedIndex()).contains(e.getPoint())) {
+                    editAction.actionPerformed(new ActionEvent(e.getSource(), ActionEvent.ACTION_PERFORMED, null));
+                }
+            }
+        });
 
         JPanel pnl = new JPanel(new FlowLayout(FlowLayout.LEFT));
 
@@ -170,13 +179,4 @@ public class ReferringRelationsBrowser extends JPanel {
             refreshEnabled();
         }
     }
-
-    class DblClickMouseAdapter extends MouseAdapter {
-        @Override
-        public void mouseClicked(MouseEvent e) {
-            if (e.getClickCount() == 2) {
-                editAction.run();
-            }
-        }
-    }
 }
diff --git a/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java b/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java
index 91d39ba..6db4453 100644
--- a/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java
+++ b/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java
@@ -151,13 +151,11 @@ public class HistoryBrowserModel extends ChangeNotifier implements ActiveLayerCh
 
         // if latest version from history is higher than a non existing primitive version,
         // that means this version has been redacted and the primitive cannot be used.
-        if (history.getLatest().getVersion() > primitive.getVersion())
-            return false;
+        return history.getLatest().getVersion() <= primitive.getVersion();
 
         // latest has a higher version than one of the primitives
         // in the history (probably because the history got out of sync
         // with uploaded data) -> show the primitive as latest
-        return true;
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/gui/io/CustomConfigurator.java b/src/org/openstreetmap/josm/gui/io/CustomConfigurator.java
index d95dcc8..e230d3b 100644
--- a/src/org/openstreetmap/josm/gui/io/CustomConfigurator.java
+++ b/src/org/openstreetmap/josm/gui/io/CustomConfigurator.java
@@ -3,15 +3,15 @@ package org.openstreetmap.josm.gui.io;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
 
-import java.io.BufferedInputStream;
 import java.io.ByteArrayInputStream;
 import java.io.CharArrayReader;
 import java.io.CharArrayWriter;
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.InvalidPathException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -44,12 +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.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.spi.preferences.Setting;
 import org.openstreetmap.josm.tools.LanguageInfo;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
@@ -71,59 +71,6 @@ public final class CustomConfigurator {
     }
 
     /**
-     * Log a formatted message.
-     * @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) {
-        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) {
-        PreferencesUtils.log(s);
-    }
-
-    /**
-     * Log an exception.
-     * @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) {
-        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 PreferencesUtils.getLog();
-    }
-
-    /**
-     * Resets the log.
-     * @deprecated to be removed end of 2017. Use {@link PreferencesUtils#resetLog()} instead
-     */
-    @Deprecated
-    public static void resetLog() {
-        PreferencesUtils.resetLog();
-    }
-
-    /**
      * Read configuration script from XML file, modifying main preferences
      * @param dir - directory
      * @param fileName - XML file name
@@ -449,10 +396,10 @@ public final class CustomConfigurator {
             try {
                 String fileDir = file.getParentFile().getAbsolutePath();
                 if (fileDir != null) engine.eval("scriptDir='"+normalizeDirName(fileDir) +"';");
-                try (InputStream is = new BufferedInputStream(new FileInputStream(file))) {
+                try (InputStream is = Files.newInputStream(file.toPath())) {
                     openAndReadXML(is);
                 }
-            } catch (ScriptException | IOException | SecurityException ex) {
+            } catch (ScriptException | IOException | SecurityException | InvalidPathException ex) {
                 PreferencesUtils.log(ex, "Error reading custom preferences:");
             }
         }
diff --git a/src/org/openstreetmap/josm/gui/io/DownloadFileTask.java b/src/org/openstreetmap/josm/gui/io/DownloadFileTask.java
index 25d89c4..ea8768c 100644
--- a/src/org/openstreetmap/josm/gui/io/DownloadFileTask.java
+++ b/src/org/openstreetmap/josm/gui/io/DownloadFileTask.java
@@ -5,7 +5,6 @@ import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.awt.Component;
 import java.io.File;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
@@ -13,6 +12,7 @@ import java.net.MalformedURLException;
 import java.net.URL;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
+import java.nio.file.InvalidPathException;
 import java.nio.file.StandardCopyOption;
 import java.util.Enumeration;
 import java.util.zip.ZipEntry;
@@ -114,7 +114,7 @@ public class DownloadFileTask extends PleaseWaitRunnable {
 
             try (
                 InputStream in = downloadConnection.getResponse().getContent();
-                OutputStream out = new FileOutputStream(file)
+                OutputStream out = Files.newOutputStream(file.toPath())
             ) {
                 byte[] buffer = new byte[32_768];
                 int count = 0;
@@ -144,7 +144,7 @@ public class DownloadFileTask extends PleaseWaitRunnable {
                     file.getName(), address);
             Logging.warn(msg);
             throw new DownloadException(msg, e);
-        } catch (IOException e) {
+        } catch (IOException | InvalidPathException e) {
             if (canceled)
                 return;
             throw new DownloadException(e.getMessage(), e);
diff --git a/src/org/openstreetmap/josm/gui/io/SaveLayersDialog.java b/src/org/openstreetmap/josm/gui/io/SaveLayersDialog.java
index 0877d9f..6a1efd0 100644
--- a/src/org/openstreetmap/josm/gui/io/SaveLayersDialog.java
+++ b/src/org/openstreetmap/josm/gui/io/SaveLayersDialog.java
@@ -250,7 +250,7 @@ public class SaveLayersDialog extends JDialog implements TableModelListener {
             super(new GridBagLayout());
             build();
             lblMessage.setText(msg);
-            lstLayers.setListData(infos.toArray(new SaveLayerInfo[infos.size()]));
+            lstLayers.setListData(infos.toArray(new SaveLayerInfo[0]));
         }
 
         protected void build() {
diff --git a/src/org/openstreetmap/josm/gui/io/TagSettingsPanel.java b/src/org/openstreetmap/josm/gui/io/TagSettingsPanel.java
index f1bbe7d..5c0c922 100644
--- a/src/org/openstreetmap/josm/gui/io/TagSettingsPanel.java
+++ b/src/org/openstreetmap/josm/gui/io/TagSettingsPanel.java
@@ -15,6 +15,7 @@ import org.openstreetmap.josm.data.osm.Changeset;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.tagging.TagEditorPanel;
 import org.openstreetmap.josm.gui.tagging.TagModel;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 
 /**
@@ -153,7 +154,7 @@ public class TagSettingsPanel extends JPanel implements TableModelListener {
                 String oldValue = Optional.ofNullable(getTagEditorValue(key)).orElse("");
                 if (!oldValue.equals(newValue)) {
                     setProperty(key, newValue);
-                    if (hashtagsKey != null) {
+                    if (hashtagsKey != null && Config.getPref().getBoolean("upload.changeset.hashtags", true)) {
                         String newHashTags = String.join(";", model.findHashTags());
                         String oldHashTags = Optional.ofNullable(getTagEditorValue(hashtagsKey)).orElse("");
                         if (!oldHashTags.equals(newHashTags)) {
diff --git a/src/org/openstreetmap/josm/gui/io/importexport/NoteExporter.java b/src/org/openstreetmap/josm/gui/io/importexport/NoteExporter.java
index e81de1b..8506142 100644
--- a/src/org/openstreetmap/josm/gui/io/importexport/NoteExporter.java
+++ b/src/org/openstreetmap/josm/gui/io/importexport/NoteExporter.java
@@ -4,9 +4,9 @@ package org.openstreetmap.josm.gui.io.importexport;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.io.File;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
+import java.nio.file.Files;
 
 import org.openstreetmap.josm.actions.ExtensionFileFilter;
 import org.openstreetmap.josm.gui.layer.Layer;
@@ -39,7 +39,7 @@ public class NoteExporter extends FileExporter {
     public void exportData(File file, Layer layer) throws IOException {
         Logging.info("exporting notes to file: " + file);
         if (layer instanceof NoteLayer) {
-            try (OutputStream os = new FileOutputStream(file);
+            try (OutputStream os = Files.newOutputStream(file.toPath());
                  NoteWriter writer = new NoteWriter(os)) {
                 writer.write(((NoteLayer) layer).getNoteData());
             }
diff --git a/src/org/openstreetmap/josm/gui/io/importexport/ValidatorErrorExporter.java b/src/org/openstreetmap/josm/gui/io/importexport/ValidatorErrorExporter.java
index c2cbd89..60fbcd6 100644
--- a/src/org/openstreetmap/josm/gui/io/importexport/ValidatorErrorExporter.java
+++ b/src/org/openstreetmap/josm/gui/io/importexport/ValidatorErrorExporter.java
@@ -4,9 +4,9 @@ package org.openstreetmap.josm.gui.io.importexport;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.io.File;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
+import java.nio.file.Files;
 
 import org.openstreetmap.josm.actions.ExtensionFileFilter;
 import org.openstreetmap.josm.gui.MainApplication;
@@ -43,7 +43,7 @@ public class ValidatorErrorExporter extends FileExporter {
         OsmDataLayer editLayer = MainApplication.getLayerManager().getEditLayer();
         if (layer instanceof ValidatorLayer && editLayer != null) {
             Logging.info("exporting validation errors to file: " + file);
-            try (OutputStream os = new FileOutputStream(file);
+            try (OutputStream os = Files.newOutputStream(file.toPath());
                  ValidatorErrorWriter writer = new ValidatorErrorWriter(os)) {
                 writer.write(editLayer.validationErrors);
             }
diff --git a/src/org/openstreetmap/josm/gui/io/importexport/WMSLayerExporter.java b/src/org/openstreetmap/josm/gui/io/importexport/WMSLayerExporter.java
index 88d9670..f2d2073 100644
--- a/src/org/openstreetmap/josm/gui/io/importexport/WMSLayerExporter.java
+++ b/src/org/openstreetmap/josm/gui/io/importexport/WMSLayerExporter.java
@@ -2,9 +2,9 @@
 package org.openstreetmap.josm.gui.io.importexport;
 
 import java.io.File;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.ObjectOutputStream;
+import java.nio.file.Files;
 
 import org.openstreetmap.josm.data.StructUtils;
 import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryPreferenceEntry;
@@ -37,10 +37,10 @@ public class WMSLayerExporter extends FileExporter {
         CheckParameterUtil.ensureParameterNotNull(layer, "layer");
 
         if (layer instanceof AbstractTileSourceLayer) {
-            try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file))) {
+            try (ObjectOutputStream oos = new ObjectOutputStream(Files.newOutputStream(file.toPath()))) {
                 oos.writeInt(CURRENT_FILE_VERSION); // file version
                 oos.writeObject(MainApplication.getMap().mapView.getCenter());
-                ImageryPreferenceEntry entry = new ImageryPreferenceEntry(((AbstractTileSourceLayer) layer).getInfo());
+                ImageryPreferenceEntry entry = new ImageryPreferenceEntry(((AbstractTileSourceLayer<?>) layer).getInfo());
                 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 08928f9..9fa7394 100644
--- a/src/org/openstreetmap/josm/gui/io/importexport/WMSLayerImporter.java
+++ b/src/org/openstreetmap/josm/gui/io/importexport/WMSLayerImporter.java
@@ -4,10 +4,10 @@ package org.openstreetmap.josm.gui.io.importexport;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InvalidClassException;
 import java.io.ObjectInputStream;
+import java.nio.file.Files;
 import java.util.Map;
 
 import org.openstreetmap.josm.actions.ExtensionFileFilter;
@@ -48,7 +48,7 @@ public class WMSLayerImporter extends FileImporter {
         ImageryInfo info = null;
         final ImageryLayer layer;
 
-        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file))) {
+        try (ObjectInputStream ois = new ObjectInputStream(Files.newInputStream(file.toPath()))) {
             int sfv = ois.readInt();
             if (sfv < 5) {
                 throw new InvalidClassException(tr("Unsupported WMS file version; found {0}, expected {1}", sfv, 5));
diff --git a/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java b/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java
index 2dc3eac..df776c2 100644
--- a/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java
@@ -72,6 +72,7 @@ import org.openstreetmap.gui.jmapviewer.interfaces.TileLoaderListener;
 import org.openstreetmap.gui.jmapviewer.interfaces.TileSource;
 import org.openstreetmap.gui.jmapviewer.tilesources.AbstractTMSTileSource;
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.actions.ExpertToggleAction;
 import org.openstreetmap.josm.actions.ImageryAdjustAction;
 import org.openstreetmap.josm.actions.RenameLayerAction;
 import org.openstreetmap.josm.actions.SaveActionBase;
@@ -92,6 +93,7 @@ import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.MapView;
 import org.openstreetmap.josm.gui.NavigatableComponent.ZoomChangeListener;
+import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.gui.dialogs.LayerListDialog;
 import org.openstreetmap.josm.gui.dialogs.LayerListPopup;
 import org.openstreetmap.josm.gui.io.importexport.WMSLayerImporter;
@@ -116,6 +118,7 @@ import org.openstreetmap.josm.gui.layer.imagery.ZoomToNativeLevelAction;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.tools.GBC;
+import org.openstreetmap.josm.tools.HttpClient;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.MemoryManager;
 import org.openstreetmap.josm.tools.MemoryManager.MemoryHandle;
@@ -498,6 +501,42 @@ implements ImageObserver, TileLoaderListener, ZoomChangeListener, FilterChangeLi
         }
     }
 
+    private void sendOsmTileRequest(String request) {
+        Tile clickedTile = clickedTileHolder.getTile();
+        if (clickedTile != null) {
+            try {
+                new Notification(HttpClient.create(new URL(clickedTile.getUrl() + '/' + request))
+                        .connect().fetchContent()).show();
+            } catch (IOException ex) {
+                Logging.error(ex);
+            }
+        }
+    }
+
+    private final class GetOsmTileStatusAction extends AbstractAction {
+        private GetOsmTileStatusAction() {
+            super(tr("Get tile status"));
+            setEnabled(clickedTileHolder.getTile() != null);
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            sendOsmTileRequest("status");
+        }
+    }
+
+    private final class MarkOsmTileDirtyAction extends AbstractAction {
+        private MarkOsmTileDirtyAction() {
+            super(tr("Force tile rendering"));
+            setEnabled(clickedTileHolder.getTile() != null);
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            sendOsmTileRequest("dirty");
+        }
+    }
+
     /**
      * Simple class to keep clickedTile within hookUpMapView
      */
@@ -576,6 +615,11 @@ implements ImageObserver, TileLoaderListener, ZoomChangeListener, FilterChangeLi
             add(new JSeparator());
             add(new JMenuItem(new LoadTileAction()));
             add(new JMenuItem(new ShowTileInfoAction()));
+            if (ExpertToggleAction.isExpert() && tileSource != null && tileSource.getBaseUrl() != null
+                    && tileSource.getBaseUrl().contains(".tile.openstreetmap.org/")) {
+                add(new JMenuItem(new GetOsmTileStatusAction()));
+                add(new JMenuItem(new MarkOsmTileDirtyAction()));
+            }
         }
     }
 
@@ -615,7 +659,8 @@ implements ImageObserver, TileLoaderListener, ZoomChangeListener, FilterChangeLi
             }
             break;
         default:
-            // trigger a redraw just to be sure.
+            // e.g. displacement
+            // trigger a redraw in every case
             invalidate();
         }
     }
@@ -1648,7 +1693,7 @@ implements ImageObserver, TileLoaderListener, ZoomChangeListener, FilterChangeLi
         actions.addAll(getMenuAdditions());
         actions.add(SeparatorLayerAction.INSTANCE);
         actions.add(new LayerListPopup.InfoAction(this));
-        return actions.toArray(new Action[actions.size()]);
+        return actions.toArray(new Action[0]);
     }
 
     /**
@@ -1877,4 +1922,43 @@ implements ImageObserver, TileLoaderListener, ZoomChangeListener, FilterChangeLi
             tileCache.clear();
         }
     }
+
+    @Override
+    protected List<OffsetMenuEntry> getOffsetMenuEntries() {
+        return OffsetBookmark.getBookmarks()
+            .stream()
+            .filter(b -> b.isUsable(this))
+            .map(OffsetMenuBookmarkEntry::new)
+            .collect(Collectors.toList());
+    }
+
+    /**
+     * An entry for a bookmark in the offset menu.
+     * @author Michael Zangl
+     */
+    private class OffsetMenuBookmarkEntry implements OffsetMenuEntry {
+        private final OffsetBookmark bookmark;
+
+        OffsetMenuBookmarkEntry(OffsetBookmark bookmark) {
+            this.bookmark = bookmark;
+
+        }
+
+        @Override
+        public String getLabel() {
+            return bookmark.getName();
+        }
+
+        @Override
+        public boolean isActive() {
+            EastNorth offset = bookmark.getDisplacement(Main.getProjection());
+            EastNorth active = getDisplaySettings().getDisplacement();
+            return Utils.equalsEpsilon(offset.east(), active.east()) && Utils.equalsEpsilon(offset.north(), active.north());
+        }
+
+        @Override
+        public void actionPerformed() {
+            getDisplaySettings().setOffsetBookmark(bookmark);
+        }
+    }
 }
diff --git a/src/org/openstreetmap/josm/gui/layer/GpxLayer.java b/src/org/openstreetmap/josm/gui/layer/GpxLayer.java
index 460b568..fe6e1a4 100644
--- a/src/org/openstreetmap/josm/gui/layer/GpxLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/GpxLayer.java
@@ -6,16 +6,22 @@ import static org.openstreetmap.josm.tools.I18n.trn;
 
 import java.awt.Dimension;
 import java.awt.Graphics2D;
+import java.awt.event.ActionEvent;
 import java.io.File;
 import java.text.DateFormat;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Date;
+import java.util.List;
 
+import javax.swing.AbstractAction;
 import javax.swing.Action;
 import javax.swing.Icon;
 import javax.swing.JScrollPane;
 import javax.swing.SwingUtilities;
 
+import org.openstreetmap.josm.actions.ExpertToggleAction;
+import org.openstreetmap.josm.actions.ExpertToggleAction.ExpertModeChangeListener;
 import org.openstreetmap.josm.actions.RenameLayerAction;
 import org.openstreetmap.josm.actions.SaveActionBase;
 import org.openstreetmap.josm.data.Bounds;
@@ -47,11 +53,12 @@ import org.openstreetmap.josm.tools.date.DateUtils;
 /**
  * A layer that displays data from a Gpx file / the OSM gpx downloads.
  */
-public class GpxLayer extends Layer {
+public class GpxLayer extends Layer implements ExpertModeChangeListener {
 
     /** GPX data */
     public GpxData data;
     private final boolean isLocalFile;
+    private boolean isExpertMode;
     /**
      * used by {@link ChooseTrackVisibilityAction} to determine which tracks to show/hide
      *
@@ -83,7 +90,7 @@ public class GpxLayer extends Layer {
     }
 
     /**
-     * Constructs a new {@code GpxLayer} with a given name, thah can be attached to a local file.
+     * Constructs a new {@code GpxLayer} with a given name, that can be attached to a local file.
      * @param d GPX data
      * @param name layer name
      * @param isLocal whether data is attached to a local file
@@ -96,6 +103,7 @@ public class GpxLayer extends Layer {
         Arrays.fill(trackVisibility, true);
         setName(name);
         isLocalFile = isLocal;
+        ExpertToggleAction.addExpertModeChangeListener(this, true);
     }
 
     @Override
@@ -138,7 +146,10 @@ public class GpxLayer extends Layer {
 
     @Override
     public Object getInfoComponent() {
-        StringBuilder info = new StringBuilder(48).append("<html>");
+        StringBuilder info = new StringBuilder(128)
+                .append("<html><head><style>")
+                .append("td { padding: 4px 16px; }")
+                .append("</style></head><body>");
 
         if (data.attr.containsKey("name")) {
             info.append(tr("Name: {0}", data.get(GpxConstants.META_NAME))).append("<br>");
@@ -150,10 +161,15 @@ public class GpxLayer extends Layer {
 
         if (!data.getTracks().isEmpty()) {
             info.append("<table><thead align='center'><tr><td colspan='5'>")
-                .append(trn("{0} track", "{0} tracks", data.tracks.size(), data.tracks.size()))
-                .append("</td></tr><tr align='center'><td>").append(tr("Name")).append("</td><td>")
-                .append(tr("Description")).append("</td><td>").append(tr("Timespan"))
-                .append("</td><td>").append(tr("Length")).append("</td><td>").append(tr("URL"))
+                .append(trn("{0} track, {1} track segments", "{0} tracks, {1} track segments",
+                        data.getTrackCount(), data.getTrackCount(),
+                        data.getTrackSegsCount(), data.getTrackSegsCount()))
+                .append("</td></tr><tr align='center'><td>").append(tr("Name"))
+                .append("</td><td>").append(tr("Description"))
+                .append("</td><td>").append(tr("Timespan"))
+                .append("</td><td>").append(tr("Length"))
+                .append("</td><td>").append(tr("Number of<br/>Segments"))
+                .append("</td><td>").append(tr("URL"))
                 .append("</td></tr></thead>");
 
             for (GpxTrack trk : data.getTracks()) {
@@ -170,6 +186,8 @@ public class GpxLayer extends Layer {
                 info.append("</td><td>");
                 info.append(SystemOfMeasurement.getSystemOfMeasurement().getDistText(trk.length()));
                 info.append("</td><td>");
+                info.append(trk.getSegments().size());
+                info.append("</td><td>");
                 if (trk.getAttributes().containsKey("url")) {
                     info.append(trk.get("url"));
                 }
@@ -180,7 +198,8 @@ public class GpxLayer extends Layer {
 
         info.append(tr("Length: {0}", SystemOfMeasurement.getSystemOfMeasurement().getDistText(data.length()))).append("<br>")
             .append(trn("{0} route, ", "{0} routes, ", data.getRoutes().size(), data.getRoutes().size()))
-            .append(trn("{0} waypoint", "{0} waypoints", data.getWaypoints().size(), data.getWaypoints().size())).append("<br></html>");
+            .append(trn("{0} waypoint", "{0} waypoints", data.getWaypoints().size(), data.getWaypoints().size()))
+            .append("<br></body></html>");
 
         final JScrollPane sp = new JScrollPane(new HtmlPanel(info.toString()));
         sp.setPreferredSize(new Dimension(sp.getPreferredSize().width+20, 370));
@@ -195,7 +214,7 @@ public class GpxLayer extends Layer {
 
     @Override
     public Action[] getMenuEntries() {
-        return new Action[] {
+        List<Action> entries = new ArrayList<>(Arrays.asList(
                 LayerListDialog.getInstance().createShowHideLayerAction(),
                 LayerListDialog.getInstance().createDeleteLayerAction(),
                 LayerListDialog.getInstance().createMergeLayerAction(this),
@@ -212,9 +231,21 @@ public class GpxLayer extends Layer {
                 new DownloadWmsAlongTrackAction(data),
                 SeparatorLayerAction.INSTANCE,
                 new ChooseTrackVisibilityAction(this),
-                new RenameLayerAction(getAssociatedFile(), this),
-                SeparatorLayerAction.INSTANCE,
-                new LayerListPopup.InfoAction(this) };
+                new RenameLayerAction(getAssociatedFile(), this)));
+
+        List<Action> expert = Arrays.asList(
+                new CombineTracksToSegmentedTrackAction(this),
+                new SplitTrackSegementsToTracksAction(this),
+                new SplitTracksToLayersAction(this));
+
+        if (isExpertMode && expert.stream().anyMatch(Action::isEnabled)) {
+            entries.add(SeparatorLayerAction.INSTANCE);
+            expert.stream().filter(Action::isEnabled).forEach(entries::add);
+        }
+
+        entries.add(SeparatorLayerAction.INSTANCE);
+        entries.add(new LayerListPopup.InfoAction(this));
+        return entries.toArray(new Action[0]);
     }
 
     /**
@@ -237,7 +268,9 @@ public class GpxLayer extends Layer {
             info.append(tr("Description: {0}", data.get(GpxConstants.META_DESC))).append("<br>");
         }
 
-        info.append(trn("{0} track, ", "{0} tracks, ", data.getTracks().size(), data.getTracks().size()))
+        info.append(trn("{0} track", "{0} tracks", data.getTrackCount(), data.getTrackCount()))
+            .append(trn(" ({0} segment)", " ({0} segments)", data.getTrackSegsCount(), data.getTrackSegsCount()))
+            .append(", ")
             .append(trn("{0} route, ", "{0} routes, ", data.getRoutes().size(), data.getRoutes().size()))
             .append(trn("{0} waypoint", "{0} waypoints", data.getWaypoints().size(), data.getWaypoints().size())).append("<br>")
             .append(tr("Length: {0}", SystemOfMeasurement.getSystemOfMeasurement().getDistText(data.length())))
@@ -329,4 +362,106 @@ public class GpxLayer extends Layer {
     protected LayerPainter createMapViewPainter(MapViewEvent event) {
         return new GpxDrawHelper(this);
     }
+
+    /**
+     * Action to merge tracks into a single segmented track
+     *
+     * @since 13210
+     */
+    public static class CombineTracksToSegmentedTrackAction extends AbstractAction {
+        private final transient GpxLayer layer;
+
+        /**
+         * Create a new CombineTracksToSegmentedTrackAction
+         * @param layer The layer with the data to work on.
+         */
+        public CombineTracksToSegmentedTrackAction(GpxLayer layer) {
+            // FIXME: icon missing, create a new icon for this action
+            //new ImageProvider("gpx_tracks_to_segmented_track").getResource().attachImageIcon(this, true);
+            putValue(SHORT_DESCRIPTION, tr("Collect segments of all tracks and combine in a single track."));
+            putValue(NAME, tr("Combine tracks of this layer"));
+            this.layer = layer;
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            layer.data.combineTracksToSegmentedTrack();
+            layer.invalidate();
+        }
+
+        @Override
+        public boolean isEnabled() {
+            return layer.data.getTrackCount() > 1;
+        }
+    }
+
+    /**
+     * Action to split track segments into a multiple tracks with one segment each
+     *
+     * @since 13210
+     */
+    public static class SplitTrackSegementsToTracksAction extends AbstractAction {
+        private final transient GpxLayer layer;
+
+        /**
+         * Create a new SplitTrackSegementsToTracksAction
+         * @param layer The layer with the data to work on.
+         */
+        public SplitTrackSegementsToTracksAction(GpxLayer layer) {
+            // FIXME: icon missing, create a new icon for this action
+            //new ImageProvider("gpx_segmented_track_to_tracks").getResource().attachImageIcon(this, true);
+            putValue(SHORT_DESCRIPTION, tr("Split multiple track segments of one track into multiple tracks."));
+            putValue(NAME, tr("Split track segments to tracks"));
+            this.layer = layer;
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            layer.data.splitTrackSegmentsToTracks();
+            layer.invalidate();
+        }
+
+        @Override
+        public boolean isEnabled() {
+            return layer.data.getTrackSegsCount() > layer.data.getTrackCount();
+        }
+    }
+
+    /**
+     * Action to split tracks of one gpx layer into multiple gpx layers,
+     * the result is one GPX track per gpx layer.
+     *
+     * @since 13210
+     */
+    public static class SplitTracksToLayersAction extends AbstractAction {
+        private final transient GpxLayer layer;
+
+        /**
+         * Create a new SplitTrackSegementsToTracksAction
+         * @param layer The layer with the data to work on.
+         */
+        public SplitTracksToLayersAction(GpxLayer layer) {
+            // FIXME: icon missing, create a new icon for this action
+            //new ImageProvider("gpx_split_tracks_to_layers").getResource().attachImageIcon(this, true);
+            putValue(SHORT_DESCRIPTION, tr("Split the tracks of this layer to one new layer each."));
+            putValue(NAME, tr("Split tracks to new layers"));
+            this.layer = layer;
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            layer.data.splitTracksToLayers();
+            // layer is not modified by this action
+        }
+
+        @Override
+        public boolean isEnabled() {
+            return layer.data.getTrackCount() > 1;
+        }
+    }
+
+    @Override
+    public void expertChanged(boolean isExpert) {
+        this.isExpertMode = isExpert;
+    }
 }
diff --git a/src/org/openstreetmap/josm/gui/layer/ImageryLayer.java b/src/org/openstreetmap/josm/gui/layer/ImageryLayer.java
index 9d8051e..be4d5e5 100644
--- a/src/org/openstreetmap/josm/gui/layer/ImageryLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/ImageryLayer.java
@@ -30,7 +30,6 @@ import javax.swing.JTextField;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.ProjectionBounds;
-import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.imagery.ImageryInfo;
 import org.openstreetmap.josm.data.imagery.OffsetBookmark;
 import org.openstreetmap.josm.data.preferences.IntegerProperty;
@@ -39,11 +38,11 @@ import org.openstreetmap.josm.gui.MapView;
 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.gui.widgets.UrlLabel;
 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;
 
 /**
  * Abstract base class for background imagery layers ({@link WMSLayer}, {@link TMSLayer}, {@link WMTSLayer}).
@@ -52,6 +51,9 @@ import org.openstreetmap.josm.tools.Utils;
  */
 public abstract class ImageryLayer extends Layer {
 
+    /**
+     * The default value for the sharpen filter for each imagery layer.
+     */
     public static final IntegerProperty PROP_SHARPEN_LEVEL = new IntegerProperty("imagery.sharpen_level", 0);
 
     private final List<ImageProcessor> imageProcessors = new ArrayList<>();
@@ -175,13 +177,21 @@ public abstract class ImageryLayer extends Layer {
         return panel;
     }
 
-    protected JTextField createTextField(String text) {
+    protected JComponent createTextField(String text) {
+        if (text != null && text.matches("https?://.*")) {
+            return new UrlLabel(text);
+        }
         JTextField ret = new JTextField(text);
         ret.setEditable(false);
         ret.setBorder(BorderFactory.createEmptyBorder());
         return ret;
     }
 
+    /**
+     * Create a new imagery layer
+     * @param info The imagery info to use as base
+     * @return The created layer
+     */
     public static ImageryLayer create(ImageryInfo info) {
         switch(info.getImageryType()) {
         case WMS:
@@ -197,19 +207,19 @@ public abstract class ImageryLayer extends Layer {
         }
     }
 
-    class ApplyOffsetAction extends AbstractAction {
-        private final transient OffsetBookmark b;
+    private static class ApplyOffsetAction extends AbstractAction {
+        private final transient OffsetMenuEntry menuEntry;
 
-        ApplyOffsetAction(OffsetBookmark b) {
-            super(b.getName());
-            this.b = b;
+        ApplyOffsetAction(OffsetMenuEntry menuEntry) {
+            super(menuEntry.getLabel());
+            this.menuEntry = menuEntry;
         }
 
         @Override
         public void actionPerformed(ActionEvent ev) {
-            setOffset(b);
+            menuEntry.actionPerformed();
+            //TODO: Use some form of listeners for this.
             MainApplication.getMenu().imageryMenu.refreshOffsetMenu();
-            MainApplication.getMap().repaint();
         }
     }
 
@@ -230,33 +240,41 @@ public abstract class ImageryLayer extends Layer {
         }
     }
 
+    /**
+     * Create the menu item that should be added to the offset menu.
+     * It may have a sub menu of e.g. bookmarks added to it.
+     * @return The menu item to add to the imagery menu.
+     */
     public JMenuItem getOffsetMenuItem() {
         JMenu subMenu = new JMenu(trc("layer", "Offset"));
         subMenu.setIcon(ImageProvider.get("mapmode", "adjustimg"));
         return (JMenuItem) getOffsetMenuItem(subMenu);
     }
 
+    /**
+     * Create the submenu or the menu item to set the offset of the layer.
+     *
+     * If only one menu item for this layer exists, it is returned by this method.
+     *
+     * If there are multiple, this method appends them to the subMenu and then returns the reference to the subMenu.
+     * @param subMenu The subMenu to use
+     * @return A single menu item to adjust the layer or the passed subMenu to which the menu items were appended.
+     */
     public JComponent getOffsetMenuItem(JComponent subMenu) {
         JMenuItem adjustMenuItem = new JMenuItem(getAdjustAction());
-        List<OffsetBookmark> allBookmarks = OffsetBookmark.getBookmarks();
-        if (allBookmarks.isEmpty()) return adjustMenuItem;
+        List<OffsetMenuEntry> usableBookmarks = getOffsetMenuEntries();
+        if (usableBookmarks.isEmpty()) {
+            return adjustMenuItem;
+        }
 
         subMenu.add(adjustMenuItem);
         subMenu.add(new JSeparator());
-        boolean hasBookmarks = false;
         int menuItemHeight = 0;
-        for (OffsetBookmark b : allBookmarks) {
-            if (!b.isUsable(this)) {
-                continue;
-            }
+        for (OffsetMenuEntry b : usableBookmarks) {
             JCheckBoxMenuItem item = new JCheckBoxMenuItem(new ApplyOffsetAction(b));
-            EastNorth offset = b.getDisplacement(Main.getProjection());
-            if (Utils.equalsEpsilon(offset.east(), getDx()) && Utils.equalsEpsilon(offset.north(), getDy())) {
-                item.setSelected(true);
-            }
+            item.setSelected(b.isActive());
             subMenu.add(item);
             menuItemHeight = item.getPreferredSize().height;
-            hasBookmarks = true;
         }
         if (menuItemHeight > 0) {
             if (subMenu instanceof JMenu) {
@@ -265,11 +283,13 @@ public abstract class ImageryLayer extends Layer {
                 MenuScroller.setScrollerFor((JPopupMenu) subMenu);
             }
         }
-        return hasBookmarks ? subMenu : adjustMenuItem;
+        return subMenu;
     }
 
     protected abstract Action getAdjustAction();
 
+    protected abstract List<OffsetMenuEntry> getOffsetMenuEntries();
+
     /**
      * Gets the settings for the filter that is applied to this layer.
      * @return The filter settings.
@@ -335,6 +355,31 @@ public abstract class ImageryLayer extends Layer {
         return img;
     }
 
+    /**
+     * An additional menu entry in the imagery offset menu.
+     * @author Michael Zangl
+     * @see ImageryLayer#getOffsetMenuEntries()
+     * @since 13243
+     */
+    public interface OffsetMenuEntry {
+        /**
+         * Get the label to use for this menu item
+         * @return The label to display in the menu.
+         */
+        String getLabel();
+
+        /**
+         * Test whether this bookmark is currently active
+         * @return <code>true</code> if it is active
+         */
+        boolean isActive();
+
+        /**
+         * Load this bookmark
+         */
+        void actionPerformed();
+    }
+
     @Override
     public String toString() {
         return getClass().getSimpleName() + " [info=" + info + ']';
diff --git a/src/org/openstreetmap/josm/gui/layer/Layer.java b/src/org/openstreetmap/josm/gui/layer/Layer.java
index 41d2af2..2a52ce7 100644
--- a/src/org/openstreetmap/josm/gui/layer/Layer.java
+++ b/src/org/openstreetmap/josm/gui/layer/Layer.java
@@ -501,18 +501,6 @@ public abstract class Layer extends AbstractMapViewPaintable implements Destroya
     }
 
     /**
-     * Check changed status of layer
-     *
-     * @return True if layer was changed since last paint
-     * @deprecated This is not supported by multiple map views.
-     * Fire an {@link #invalidate()} to trigger a repaint.
-     */
-    @Deprecated
-    public boolean isChanged() {
-        return false;
-    }
-
-    /**
      * allows to check whether a projection is supported or not
      * @param proj projection
      *
diff --git a/src/org/openstreetmap/josm/gui/layer/MainLayerManager.java b/src/org/openstreetmap/josm/gui/layer/MainLayerManager.java
index 8ecbe22..b7edc66 100644
--- a/src/org/openstreetmap/josm/gui/layer/MainLayerManager.java
+++ b/src/org/openstreetmap/josm/gui/layer/MainLayerManager.java
@@ -3,6 +3,7 @@ package org.openstreetmap.josm.gui.layer;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
 
+import java.awt.GraphicsEnvironment;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
@@ -13,7 +14,9 @@ import javax.swing.JOptionPane;
 
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.gui.MainApplication;
+import org.openstreetmap.josm.gui.io.AsynchronousUploadPrimitivesTask;
 import org.openstreetmap.josm.gui.util.GuiHelper;
+import org.openstreetmap.josm.tools.Logging;
 
 /**
  * This class extends the layer manager by adding an active and an edit layer.
@@ -273,6 +276,14 @@ public class MainLayerManager extends LayerManager {
 
     @Override
     protected Collection<Layer> realRemoveSingleLayer(Layer layer) {
+        if ((layer instanceof OsmDataLayer) && (((OsmDataLayer) layer).isReadOnly())) {
+            GuiHelper.runInEDT(() -> JOptionPane.showMessageDialog(MainApplication.parent,
+                    tr("Trying to delete the layer with background upload. Please wait until the upload is finished.")));
+
+            // Return an empty collection for allowing to delete other layers
+            return new ArrayList<>();
+        }
+
         if (layer == activeLayer || layer == editLayer) {
             Layer nextActive = suggestNextActiveLayer(layer);
             setActiveLayer(nextActive, true);
@@ -408,11 +419,20 @@ public class MainLayerManager extends LayerManager {
 
     @Override
     protected synchronized void realResetState() {
-        // active and edit layer are unset automatically
-        super.realResetState();
+        // Reset state if no asynchronous upload is under progress
+        if (!AsynchronousUploadPrimitivesTask.getCurrentAsynchronousUploadTask().isPresent()) {
+            // active and edit layer are unset automatically
+            super.realResetState();
 
-        activeLayerChangeListeners.clear();
-        layerAvailabilityListeners.clear();
+            activeLayerChangeListeners.clear();
+            layerAvailabilityListeners.clear();
+        } else {
+            String msg = tr("A background upload is already in progress. Cannot reset state until the upload is finished.");
+            Logging.warn(msg);
+            if (!GraphicsEnvironment.isHeadless()) {
+                GuiHelper.runInEDT(() -> JOptionPane.showMessageDialog(MainApplication.parent, msg));
+            }
+        }
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/gui/layer/NoteLayer.java b/src/org/openstreetmap/josm/gui/layer/NoteLayer.java
index 4e2a258..7920c50 100644
--- a/src/org/openstreetmap/josm/gui/layer/NoteLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/NoteLayer.java
@@ -391,7 +391,7 @@ public class NoteLayer extends AbstractModifiableLayer implements MouseListener,
         actions.add(new LayerListPopup.InfoAction(this));
         actions.add(new LayerSaveAction(this));
         actions.add(new LayerSaveAsAction(this));
-        return actions.toArray(new Action[actions.size()]);
+        return actions.toArray(new Action[0]);
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java b/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
index 5b394d6..05824ca 100644
--- a/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
@@ -680,7 +680,7 @@ public class OsmDataLayer extends AbstractModifiableLayer implements Listener, D
                 new ConsistencyTestAction(),
                 SeparatorLayerAction.INSTANCE,
                 new LayerListPopup.InfoAction(this)));
-        return actions.toArray(new Action[actions.size()]);
+        return actions.toArray(new Action[0]);
     }
 
     /**
@@ -739,14 +739,31 @@ public class OsmDataLayer extends AbstractModifiableLayer implements Listener, D
         });
     }
 
-    private static WayPoint nodeToWayPoint(Node n) {
+    /**
+     * @param n the {@code Node} to convert
+     * @return {@code WayPoint} object
+     * @since 13210
+     */
+    public static WayPoint nodeToWayPoint(Node n) {
+        return nodeToWayPoint(n, 0);
+    }
+
+    /**
+     * @param n the {@code Node} to convert
+     * @param time a time value in milliseconds from the epoch.
+     * @return {@code WayPoint} object
+     * @since 13210
+     */
+    public static WayPoint nodeToWayPoint(Node n, long time) {
         WayPoint wpt = new WayPoint(n.getCoor());
 
         // Position info
 
         addDoubleIfPresent(wpt, n, GpxConstants.PT_ELE);
 
-        if (!n.isTimestampEmpty()) {
+        if (time > 0) {
+            wpt.setTime(time);
+        } else if (!n.isTimestampEmpty()) {
             wpt.put("time", DateUtils.fromTimestamp(n.getRawTimestamp()));
             wpt.setTime();
         }
diff --git a/src/org/openstreetmap/josm/gui/layer/WMSLayer.java b/src/org/openstreetmap/josm/gui/layer/WMSLayer.java
index 0cc498f..59cb746 100644
--- a/src/org/openstreetmap/josm/gui/layer/WMSLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/WMSLayer.java
@@ -81,7 +81,7 @@ public class WMSLayer extends AbstractCachedTileSourceLayer<AbstractWMSTileSourc
         ret.add(new LayerSaveAction(this));
         ret.add(new LayerSaveAsAction(this));
         ret.add(new BookmarkWmsAction());
-        return ret.toArray(new Action[ret.size()]);
+        return ret.toArray(new Action[0]);
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java b/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java
index 7d7204d..9fc545b 100644
--- a/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java
+++ b/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java
@@ -20,9 +20,9 @@ import java.awt.event.ItemListener;
 import java.awt.event.WindowAdapter;
 import java.awt.event.WindowEvent;
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.nio.file.Files;
 import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
@@ -79,7 +79,6 @@ 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;
 import org.openstreetmap.josm.tools.JosmRuntimeException;
@@ -330,9 +329,9 @@ public class CorrelateGpxWithImages extends AbstractAction {
 
         private InputStream createInputStream(File sel) throws IOException {
             if (Utils.hasExtension(sel, "gpx.gz")) {
-                return new GZIPInputStream(new FileInputStream(sel));
+                return new GZIPInputStream(Files.newInputStream(sel.toPath()));
             } else {
-                return new FileInputStream(sel);
+                return Files.newInputStream(sel.toPath());
             }
         }
     }
@@ -420,7 +419,7 @@ public class CorrelateGpxWithImages extends AbstractAction {
 
             Collections.sort(vtTimezones);
 
-            JosmComboBox<String> cbTimezones = new JosmComboBox<>(vtTimezones.toArray(new String[vtTimezones.size()]));
+            JosmComboBox<String> cbTimezones = new JosmComboBox<>(vtTimezones.toArray(new String[0]));
 
             String tzId = Config.getPref().get("geoimage.timezoneid", "");
             TimeZone defaultTz;
@@ -458,8 +457,7 @@ public class CorrelateGpxWithImages extends AbstractAction {
             imgList.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
             imgList.getSelectionModel().addListSelectionListener(evt -> {
                 int index = imgList.getSelectedIndex();
-                Integer orientation = ExifReader.readOrientation(yLayer.data.get(index).getFile());
-                imgDisp.setImage(yLayer.data.get(index).getFile(), orientation);
+                imgDisp.setImage(yLayer.data.get(index));
                 Date date = yLayer.data.get(index).getExifTime();
                 if (date != null) {
                     DateFormat df = DateUtils.getDateTimeFormat(DateFormat.SHORT, DateFormat.MEDIUM);
@@ -482,12 +480,11 @@ public class CorrelateGpxWithImages extends AbstractAction {
                         JpgImporter.FILE_FILTER_WITH_FOLDERS, JFileChooser.FILES_ONLY, "geoimage.lastdirectory");
                 if (fc == null)
                     return;
-                File sel = fc.getSelectedFile();
+                ImageEntry entry = new ImageEntry(fc.getSelectedFile());
+                entry.extractExif();
+                imgDisp.setImage(entry);
 
-                Integer orientation = ExifReader.readOrientation(sel);
-                imgDisp.setImage(sel, orientation);
-
-                Date date = ExifReader.readTime(sel);
+                Date date = entry.getExifTime();
                 if (date != null) {
                     lbExifTime.setText(DateUtils.getDateTimeFormat(DateFormat.SHORT, DateFormat.MEDIUM).format(date));
                     tfGpsTime.setText(DateUtils.getDateFormat(DateFormat.SHORT).format(date)+' ');
@@ -572,7 +569,7 @@ public class CorrelateGpxWithImages extends AbstractAction {
 
         panelCb.add(new JLabel(tr("GPX track: ")));
 
-        cbGpx = new JosmComboBox<>(gpxLst.toArray(new GpxDataWrapper[gpxLst.size()]));
+        cbGpx = new JosmComboBox<>(gpxLst.toArray(new GpxDataWrapper[0]));
         if (defaultItem != null) {
             cbGpx.setSelectedItem(defaultItem);
         } else {
diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java b/src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java
index 520c15f..58f37d8 100644
--- a/src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java
@@ -62,10 +62,7 @@ import org.openstreetmap.josm.gui.layer.JumpToMarkerActions.JumpToMarkerLayer;
 import org.openstreetmap.josm.gui.layer.JumpToMarkerActions.JumpToNextMarker;
 import org.openstreetmap.josm.gui.layer.JumpToMarkerActions.JumpToPreviousMarker;
 import org.openstreetmap.josm.gui.layer.Layer;
-import org.openstreetmap.josm.gui.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.ActiveLayerChangeListener;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Logging;
@@ -101,6 +98,7 @@ public class GeoImageLayer extends AbstractModifiableLayer implements
     private MouseAdapter mouseAdapter;
     private MouseMotionAdapter mouseMotionAdapter;
     private MapModeChangeListener mapModeListener;
+    private ActiveLayerChangeListener activeLayerChangeListener;
 
     /** Mouse position where the last image was selected. */
     private Point lastSelPos;
@@ -348,7 +346,7 @@ public class GeoImageLayer extends AbstractModifiableLayer implements
         entries.add(SeparatorLayerAction.INSTANCE);
         entries.add(new LayerListPopup.InfoAction(this));
 
-        return entries.toArray(new Action[entries.size()]);
+        return entries.toArray(new Action[0]);
 
     }
 
@@ -991,54 +989,45 @@ public class GeoImageLayer extends AbstractModifiableLayer implements
         MapFrame.addMapModeChangeListener(mapModeListener);
         mapModeListener.mapModeChange(null, MainApplication.getMap().mapMode);
 
-        MainApplication.getLayerManager().addActiveLayerChangeListener(e -> {
+        activeLayerChangeListener = e -> {
             if (MainApplication.getLayerManager().getActiveLayer() == this) {
                 // only in select mode it is possible to click the images
                 MainApplication.getMap().selectSelectTool(false);
             }
-        });
-
-        MainApplication.getLayerManager().addLayerChangeListener(new LayerChangeListener() {
-            @Override
-            public void layerAdded(LayerAddEvent e) {
-                // Do nothing
-            }
-
-            @Override
-            public void layerRemoving(LayerRemoveEvent e) {
-                if (e.getRemovedLayer() == GeoImageLayer.this) {
-                    stopLoadThumbs();
-                    MapView mapView = MainApplication.getMap().mapView;
-                    mapView.removeMouseListener(mouseAdapter);
-                    mapView.removeMouseMotionListener(mouseMotionAdapter);
-                    MapFrame.removeMapModeChangeListener(mapModeListener);
-                    currentPhoto = -1;
-                    if (data != null) {
-                        data.clear();
-                    }
-                    data = null;
-                    // stop listening to layer change events
-                    MainApplication.getLayerManager().removeLayerChangeListener(this);
-                }
-            }
-
-            @Override
-            public void layerOrderChanged(LayerOrderChangeEvent e) {
-                // Do nothing
-            }
-        });
+        };
+        MainApplication.getLayerManager().addActiveLayerChangeListener(activeLayerChangeListener);
 
         MapFrame map = MainApplication.getMap();
         if (map.getToggleDialog(ImageViewerDialog.class) == null) {
-            ImageViewerDialog.newInstance();
             map.addToggleDialog(ImageViewerDialog.getInstance());
         }
     }
 
     @Override
+    public synchronized void destroy() {
+        super.destroy();
+        stopLoadThumbs();
+        MapView mapView = MainApplication.getMap().mapView;
+        mapView.removeMouseListener(mouseAdapter);
+        mapView.removeMouseMotionListener(mouseMotionAdapter);
+        MapFrame.removeMapModeChangeListener(mapModeListener);
+        MainApplication.getLayerManager().removeActiveLayerChangeListener(activeLayerChangeListener);
+        currentPhoto = -1;
+        if (data != null) {
+            data.clear();
+        }
+        data = null;
+    }
+
+    @Override
     public LayerPainter attachToMapView(MapViewEvent event) {
         MapView.addZoomChangeListener(this);
-        return super.attachToMapView(event);
+        return new CompatibilityModeLayerPainter() {
+            @Override
+            public void detachFromMapView(MapViewEvent event) {
+                MapView.removeZoomChangeListener(GeoImageLayer.this);
+            }
+        };
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplay.java b/src/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplay.java
index 3bc3820..02e80d1 100644
--- a/src/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplay.java
+++ b/src/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplay.java
@@ -22,6 +22,7 @@ import java.awt.event.MouseWheelListener;
 import java.awt.geom.AffineTransform;
 import java.awt.geom.Rectangle2D;
 import java.awt.image.BufferedImage;
+import java.awt.image.ImageObserver;
 import java.io.File;
 
 import javax.swing.JComponent;
@@ -32,6 +33,7 @@ import org.openstreetmap.josm.data.preferences.DoubleProperty;
 import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
 import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
+import org.openstreetmap.josm.tools.Destroyable;
 import org.openstreetmap.josm.tools.ExifReader;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Logging;
@@ -41,10 +43,10 @@ import org.openstreetmap.josm.tools.Logging;
  *
  * Offers basic mouse interaction (zoom, drag) and on-screen text.
  */
-public class ImageDisplay extends JComponent implements PreferenceChangedListener {
+public class ImageDisplay extends JComponent implements Destroyable, PreferenceChangedListener {
 
     /** The file that is currently displayed */
-    private File file;
+    private ImageEntry entry;
 
     /** The image currently displayed */
     private transient Image image;
@@ -62,6 +64,8 @@ public class ImageDisplay extends JComponent implements PreferenceChangedListene
     /** The tracker to load the images */
     private final MediaTracker tracker = new MediaTracker(this);
 
+    private final ImgDisplayMouseListener mouseListener = new ImgDisplayMouseListener();
+
     private String osdText;
 
     private static final BooleanProperty AGPIFO_STYLE =
@@ -112,6 +116,10 @@ public class ImageDisplay extends JComponent implements PreferenceChangedListene
     public static class VisRect extends Rectangle {
         private final Rectangle init;
 
+        /** set when this {@code VisRect} is updated by a mouse drag operation and
+         * unset on mouse release **/
+        public boolean isDragUpdate;
+
         /**
          * Constructs a new {@code VisRect}.
          * @param     x the specified X coordinate
@@ -124,6 +132,14 @@ public class ImageDisplay extends JComponent implements PreferenceChangedListene
             init = new Rectangle(this);
         }
 
+        /**
+         * Constructs a new {@code VisRect}.
+         * @param     x the specified X coordinate
+         * @param     y the specified Y coordinate
+         * @param     width  the width of the rectangle
+         * @param     height the height of the rectangle
+         * @param     peer share full bounds with this peer {@code VisRect}
+         */
         public VisRect(int x, int y, int width, int height, VisRect peer) {
             super(x, y, width, height);
             init = peer.init;
@@ -199,78 +215,140 @@ public class ImageDisplay extends JComponent implements PreferenceChangedListene
     }
 
     /** The thread that reads the images. */
-    private class LoadImageRunnable implements Runnable {
+    private class LoadImageRunnable implements Runnable, ImageObserver {
 
+        private final ImageEntry entry;
         private final File file;
-        private final int orientation;
 
-        LoadImageRunnable(File file, Integer orientation) {
-            this.file = file;
-            this.orientation = orientation == null ? -1 : orientation;
+        LoadImageRunnable(ImageEntry entry) {
+            this.entry = entry;
+            this.file = entry.getFile();
+        }
+
+        @Override
+        public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) {
+            if (((infoflags & ImageObserver.WIDTH) == ImageObserver.WIDTH) &&
+                ((infoflags & ImageObserver.HEIGHT) == ImageObserver.HEIGHT)) {
+                synchronized (entry) {
+                    entry.setWidth(width);
+                    entry.setHeight(height);
+                    entry.notifyAll();
+                    return false;
+                }
+            }
+            return true;
+        }
+
+        private boolean updateImageEntry(Image img) {
+            if (!(entry.getWidth() > 0 && entry.getHeight() > 0)) {
+                synchronized (entry) {
+                    img.getWidth(this);
+                    img.getHeight(this);
+
+                    long now = System.currentTimeMillis();
+                    while (!(entry.getWidth() > 0 && entry.getHeight() > 0)) {
+                        try {
+                            entry.wait(1000);
+                            if (this.entry != ImageDisplay.this.entry)
+                                return false;
+                            if (System.currentTimeMillis() - now > 10000)
+                                synchronized (ImageDisplay.this) {
+                                    errorLoading = true;
+                                    ImageDisplay.this.repaint();
+                                    return false;
+                                }
+                        } catch (InterruptedException e) {
+                            Logging.trace(e);
+                            Logging.warn("InterruptedException in {0} while getting properties of image {1}",
+                                    getClass().getSimpleName(), file.getPath());
+                            Thread.currentThread().interrupt();
+                        }
+                    }
+                }
+            }
+            return true;
+        }
+
+        private boolean mayFitMemory(long amountWanted) {
+            return amountWanted < (
+                   Runtime.getRuntime().maxMemory() -
+                   Runtime.getRuntime().totalMemory() +
+                   Runtime.getRuntime().freeMemory());
         }
 
         @Override
         public void run() {
             Image img = Toolkit.getDefaultToolkit().createImage(file.getPath());
-            tracker.addImage(img, 1);
+            if (!updateImageEntry(img))
+                return;
 
-            // Wait for the end of loading
-            while (!tracker.checkID(1, true)) {
-                if (this.file != ImageDisplay.this.file) {
-                    // The file has changed
-                    tracker.removeImage(img);
-                    return;
+            int width = entry.getWidth();
+            int height = entry.getHeight();
+
+            if (mayFitMemory(((long) width)*height*4*2)) {
+                Logging.info("Loading {0} using default toolkit", file.getPath());
+                tracker.addImage(img, 1);
+
+                // Wait for the end of loading
+                while (!tracker.checkID(1, true)) {
+                    if (this.entry != ImageDisplay.this.entry) {
+                        // The file has changed
+                        tracker.removeImage(img);
+                        return;
+                    }
+                    try {
+                        Thread.sleep(5);
+                    } catch (InterruptedException e) {
+                        Logging.trace(e);
+                        Logging.warn("InterruptedException in {0} while loading image {1}",
+                                getClass().getSimpleName(), file.getPath());
+                        Thread.currentThread().interrupt();
+                    }
                 }
-                try {
-                    Thread.sleep(5);
-                } catch (InterruptedException e) {
-                    Logging.warn("InterruptedException in "+getClass().getSimpleName()+" while loading image "+file.getPath());
-                    Thread.currentThread().interrupt();
+                if (tracker.isErrorID(1)) {
+                    // the tracker catches OutOfMemory conditions
+                    img = null;
                 }
-            }
-
-            boolean error = tracker.isErrorID(1);
-            if (img.getWidth(null) < 0 || img.getHeight(null) < 0) {
-                error = true;
+            } else {
+                img = null;
             }
 
             synchronized (ImageDisplay.this) {
-                if (this.file != ImageDisplay.this.file) {
+                if (this.entry != ImageDisplay.this.entry) {
                     // The file has changed
                     tracker.removeImage(img);
                     return;
                 }
 
-                if (!error) {
-                    ImageDisplay.this.image = img;
-                    visibleRect = new VisRect(0, 0, img.getWidth(null), img.getHeight(null));
-
-                    final int w = (int) visibleRect.getWidth();
-                    final int h = (int) visibleRect.getHeight();
-
-                    if (ExifReader.orientationNeedsCorrection(orientation)) {
-                        final int hh, ww;
-                        if (ExifReader.orientationSwitchesDimensions(orientation)) {
-                            ww = h;
-                            hh = w;
-                        } else {
-                            ww = w;
-                            hh = h;
+                if (img != null) {
+                    boolean switchedDim = false;
+                    if (ExifReader.orientationNeedsCorrection(entry.getExifOrientation())) {
+                        if (ExifReader.orientationSwitchesDimensions(entry.getExifOrientation())) {
+                            width = img.getHeight(null);
+                            height = img.getWidth(null);
+                            switchedDim = true;
                         }
-                        final BufferedImage rot = new BufferedImage(ww, hh, BufferedImage.TYPE_INT_RGB);
-                        final AffineTransform xform = ExifReader.getRestoreOrientationTransform(orientation, w, h);
+                        final BufferedImage rot = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
+                        final AffineTransform xform = ExifReader.getRestoreOrientationTransform(
+                                entry.getExifOrientation(),
+                                img.getWidth(null),
+                                img.getHeight(null));
                         final Graphics2D g = rot.createGraphics();
-                        g.drawImage(image, xform, null);
+                        g.drawImage(img, xform, null);
                         g.dispose();
-
-                        visibleRect.setSize(ww, hh);
-                        image.flush();
-                        ImageDisplay.this.image = rot;
+                        img.flush();
+                        img = rot;
                     }
+
+                    ImageDisplay.this.image = img;
+                    visibleRect = new VisRect(0, 0, width, height);
+
+                    Logging.info("Loaded {0} with dimensions {1}x{2} memoryTaken={3}m exifOrientationSwitchedDimension={4}",
+                            file.getPath(), width, height, width*height*4/1024/1024, switchedDim);
                 }
 
                 selectedRect = null;
-                errorLoading = error;
+                errorLoading = (img == null);
             }
             tracker.removeImage(img);
             ImageDisplay.this.repaint();
@@ -300,12 +378,12 @@ public class ImageDisplay extends JComponent implements PreferenceChangedListene
         }
 
         private void mouseWheelMovedImpl(int x, int y, int rotation, boolean refreshMousePointInImg) {
-            File file;
+            ImageEntry entry;
             Image image;
             VisRect visibleRect;
 
             synchronized (ImageDisplay.this) {
-                file = ImageDisplay.this.file;
+                entry = ImageDisplay.this.entry;
                 image = ImageDisplay.this.image;
                 visibleRect = ImageDisplay.this.visibleRect;
             }
@@ -357,7 +435,7 @@ public class ImageDisplay extends JComponent implements PreferenceChangedListene
             visibleRect.checkRectPos();
 
             synchronized (ImageDisplay.this) {
-                if (ImageDisplay.this.file == file) {
+                if (ImageDisplay.this.entry == entry) {
                     ImageDisplay.this.visibleRect = visibleRect;
                 }
             }
@@ -386,12 +464,12 @@ public class ImageDisplay extends JComponent implements PreferenceChangedListene
         @Override
         public void mouseClicked(MouseEvent e) {
             // Move the center to the clicked point.
-            File file;
+            ImageEntry entry;
             Image image;
             VisRect visibleRect;
 
             synchronized (ImageDisplay.this) {
-                file = ImageDisplay.this.file;
+                entry = ImageDisplay.this.entry;
                 image = ImageDisplay.this.image;
                 visibleRect = ImageDisplay.this.visibleRect;
             }
@@ -425,7 +503,7 @@ public class ImageDisplay extends JComponent implements PreferenceChangedListene
             visibleRect.checkRectPos();
 
             synchronized (ImageDisplay.this) {
-                if (ImageDisplay.this.file == file) {
+                if (ImageDisplay.this.entry == entry) {
                     ImageDisplay.this.visibleRect = visibleRect;
                 }
             }
@@ -458,12 +536,12 @@ public class ImageDisplay extends JComponent implements PreferenceChangedListene
             if (!mouseIsDragging(e) && !mouseIsZoomSelecting(e))
                 return;
 
-            File file;
+            ImageEntry entry;
             Image image;
             VisRect visibleRect;
 
             synchronized (ImageDisplay.this) {
-                file = ImageDisplay.this.file;
+                entry = ImageDisplay.this.entry;
                 image = ImageDisplay.this.image;
                 visibleRect = ImageDisplay.this.visibleRect;
             }
@@ -473,11 +551,12 @@ public class ImageDisplay extends JComponent implements PreferenceChangedListene
 
             if (mouseIsDragging(e)) {
                 Point p = comp2imgCoord(visibleRect, e.getX(), e.getY(), getSize());
+                visibleRect.isDragUpdate = true;
                 visibleRect.x += mousePointInImg.x - p.x;
                 visibleRect.y += mousePointInImg.y - p.y;
                 visibleRect.checkRectPos();
                 synchronized (ImageDisplay.this) {
-                    if (ImageDisplay.this.file == file) {
+                    if (ImageDisplay.this.entry == entry) {
                         ImageDisplay.this.visibleRect = visibleRect;
                     }
                 }
@@ -503,58 +582,66 @@ public class ImageDisplay extends JComponent implements PreferenceChangedListene
 
         @Override
         public void mouseReleased(MouseEvent e) {
-            if (!mouseIsZoomSelecting(e) || selectedRect == null)
-                return;
-
-            File file;
+            ImageEntry entry;
             Image image;
+            VisRect visibleRect;
 
             synchronized (ImageDisplay.this) {
-                file = ImageDisplay.this.file;
+                entry = ImageDisplay.this.entry;
                 image = ImageDisplay.this.image;
+                visibleRect = ImageDisplay.this.visibleRect;
             }
 
-            if (image == null) {
+            if (image == null)
                 return;
+
+            if (mouseIsDragging(e)) {
+                visibleRect.isDragUpdate = false;
             }
 
-            int oldWidth = selectedRect.width;
-            int oldHeight = selectedRect.height;
+            if (mouseIsZoomSelecting(e) && selectedRect != null) {
+                int oldWidth = selectedRect.width;
+                int oldHeight = selectedRect.height;
 
-            // Check that the zoom doesn't exceed MAX_ZOOM:1
-            if (selectedRect.width < getSize().width / MAX_ZOOM.get()) {
-                selectedRect.width = (int) (getSize().width / MAX_ZOOM.get());
-            }
-            if (selectedRect.height < getSize().height / MAX_ZOOM.get()) {
-                selectedRect.height = (int) (getSize().height / MAX_ZOOM.get());
-            }
+                // Check that the zoom doesn't exceed MAX_ZOOM:1
+                if (selectedRect.width < getSize().width / MAX_ZOOM.get()) {
+                    selectedRect.width = (int) (getSize().width / MAX_ZOOM.get());
+                }
+                if (selectedRect.height < getSize().height / MAX_ZOOM.get()) {
+                    selectedRect.height = (int) (getSize().height / MAX_ZOOM.get());
+                }
 
-            // Set the same ratio for the visible rectangle and the display area
-            int hFact = selectedRect.height * getSize().width;
-            int wFact = selectedRect.width * getSize().height;
-            if (hFact > wFact) {
-                selectedRect.width = hFact / getSize().height;
-            } else {
-                selectedRect.height = wFact / getSize().width;
-            }
+                // Set the same ratio for the visible rectangle and the display area
+                int hFact = selectedRect.height * getSize().width;
+                int wFact = selectedRect.width * getSize().height;
+                if (hFact > wFact) {
+                    selectedRect.width = hFact / getSize().height;
+                } else {
+                    selectedRect.height = wFact / getSize().width;
+                }
 
-            // Keep the center of the selection
-            if (selectedRect.width != oldWidth) {
-                selectedRect.x -= (selectedRect.width - oldWidth) / 2;
-            }
-            if (selectedRect.height != oldHeight) {
-                selectedRect.y -= (selectedRect.height - oldHeight) / 2;
-            }
+                // Keep the center of the selection
+                if (selectedRect.width != oldWidth) {
+                    selectedRect.x -= (selectedRect.width - oldWidth) / 2;
+                }
+                if (selectedRect.height != oldHeight) {
+                    selectedRect.y -= (selectedRect.height - oldHeight) / 2;
+                }
 
-            selectedRect.checkRectSize();
-            selectedRect.checkRectPos();
+                selectedRect.checkRectSize();
+                selectedRect.checkRectPos();
+            }
 
             synchronized (ImageDisplay.this) {
-                if (file == ImageDisplay.this.file) {
-                    ImageDisplay.this.visibleRect.setBounds(selectedRect);
+                if (entry == ImageDisplay.this.entry) {
+                    if (selectedRect == null) {
+                        ImageDisplay.this.visibleRect = visibleRect;
+                    } else {
+                        ImageDisplay.this.visibleRect.setBounds(selectedRect);
+                        selectedRect = null;
+                    }
                 }
             }
-            selectedRect = null;
             ImageDisplay.this.repaint();
         }
 
@@ -578,7 +665,6 @@ public class ImageDisplay extends JComponent implements PreferenceChangedListene
      * Constructs a new {@code ImageDisplay}.
      */
     public ImageDisplay() {
-        ImgDisplayMouseListener mouseListener = new ImgDisplayMouseListener();
         addMouseListener(mouseListener);
         addMouseWheelListener(mouseListener);
         addMouseMotionListener(mouseListener);
@@ -586,15 +672,28 @@ public class ImageDisplay extends JComponent implements PreferenceChangedListene
         preferenceChanged(null);
     }
 
-    public void setImage(File file, Integer orientation) {
+    @Override
+    public void destroy() {
+        removeMouseListener(mouseListener);
+        removeMouseWheelListener(mouseListener);
+        removeMouseMotionListener(mouseListener);
+        Config.getPref().removePreferenceChangeListener(this);
+    }
+
+    /**
+     * Sets a new source image to be displayed by this {@code ImageDisplay}.
+     * @param entry new source image
+     * @since 13220
+     */
+    public void setImage(ImageEntry entry) {
         synchronized (this) {
-            this.file = file;
+            this.entry = entry;
             image = null;
             errorLoading = false;
         }
         repaint();
-        if (file != null) {
-            new Thread(new LoadImageRunnable(file, orientation), LoadImageRunnable.class.getName()).start();
+        if (entry != null) {
+            new Thread(new LoadImageRunnable(entry), LoadImageRunnable.class.getName()).start();
         }
     }
 
@@ -609,14 +708,14 @@ public class ImageDisplay extends JComponent implements PreferenceChangedListene
 
     @Override
     public void paintComponent(Graphics g) {
+        ImageEntry entry;
         Image image;
-        File file;
         VisRect visibleRect;
         boolean errorLoading;
 
         synchronized (this) {
             image = this.image;
-            file = this.file;
+            entry = this.entry;
             visibleRect = this.visibleRect;
             errorLoading = this.errorLoading;
         }
@@ -626,7 +725,7 @@ public class ImageDisplay extends JComponent implements PreferenceChangedListene
         }
 
         Dimension size = getSize();
-        if (file == null) {
+        if (entry == null) {
             g.setColor(Color.black);
             String noImageStr = tr("No image");
             Rectangle2D noImageSize = g.getFontMetrics(g.getFont()).getStringBounds(noImageStr, g);
@@ -637,9 +736,9 @@ public class ImageDisplay extends JComponent implements PreferenceChangedListene
             g.setColor(Color.black);
             String loadingStr;
             if (!errorLoading) {
-                loadingStr = tr("Loading {0}", file.getName());
+                loadingStr = tr("Loading {0}", entry.getFile().getName());
             } else {
-                loadingStr = tr("Error on file {0}", file.getName());
+                loadingStr = tr("Error on file {0}", entry.getFile().getName());
             }
             Rectangle2D noImageSize = g.getFontMetrics(g.getFont()).getStringBounds(loadingStr, g);
             g.drawString(loadingStr,
@@ -650,16 +749,26 @@ public class ImageDisplay extends JComponent implements PreferenceChangedListene
             Rectangle target = calculateDrawImageRectangle(visibleRect, size);
             double scale = target.width / (double) r.width; // pixel ratio is 1:1
 
-            if (selectedRect == null && bilinLower < scale && scale < bilinUpper) {
-                BufferedImage bi = ImageProvider.toBufferedImage(image, r);
-                r.x = r.y = 0;
-
-                // See https://community.oracle.com/docs/DOC-983611 - The Perils of Image.getScaledInstance()
-                // Pre-scale image when downscaling by more than two times to avoid aliasing from default algorithm
-                image = ImageProvider.createScaledImage(bi, target.width, target.height,
-                            RenderingHints.VALUE_INTERPOLATION_BILINEAR);
-                r.width = target.width;
-                r.height = target.height;
+            if (selectedRect == null && !visibleRect.isDragUpdate &&
+                bilinLower < scale && scale < bilinUpper) {
+                try {
+                    BufferedImage bi = ImageProvider.toBufferedImage(image, r);
+                    if (bi != null) {
+                        r.x = r.y = 0;
+
+                        // See https://community.oracle.com/docs/DOC-983611 - The Perils of Image.getScaledInstance()
+                        // Pre-scale image when downscaling by more than two times to avoid aliasing from default algorithm
+                        bi = ImageProvider.createScaledImage(bi, target.width, target.height,
+                                RenderingHints.VALUE_INTERPOLATION_BILINEAR);
+                        r.width = target.width;
+                        r.height = target.height;
+                        image = bi;
+                    }
+                } catch (OutOfMemoryError oom) {
+                    // fall-back to the non-bilinear scaler
+                    r.x = visibleRect.x;
+                    r.y = visibleRect.y;
+                }
             } else {
                 // if target and r cause drawImage to scale image region to a tmp buffer exceeding
                 // its bounds, it will silently fail; crop with r first in such cases
@@ -688,7 +797,7 @@ public class ImageDisplay extends JComponent implements PreferenceChangedListene
                 g.drawRect(topLeft.x, topLeft.y, bottomRight.x - topLeft.x, bottomRight.y - topLeft.y);
             }
             if (errorLoading) {
-                String loadingStr = tr("Error on file {0}", file.getName());
+                String loadingStr = tr("Error on file {0}", entry.getFile().getName());
                 Rectangle2D noImageSize = g.getFontMetrics(g.getFont()).getStringBounds(loadingStr, g);
                 g.drawString(loadingStr,
                         (int) ((size.width - noImageSize.getWidth()) / 2),
@@ -778,32 +887,35 @@ public class ImageDisplay extends JComponent implements PreferenceChangedListene
         }
 
         // overscan to prevent empty edges when zooming in to zoom scales > 2:1
-        if (w > imgRect.width && h > imgRect.height && !imgRect.isFullView1D()) {
-            if (wFact != hFact) {
-                if (wFact > hFact) {
-                    w = compRect.width;
-                    x = 0;
-                    h = wFact / imgRect.width;
-                    y = (compRect.height - h) / 2;
-                } else {
-                    h = compRect.height;
-                    y = 0;
-                    w = hFact / imgRect.height;
-                    x = (compRect.width - w) / 2;
-                }
+        if (w > imgRect.width && h > imgRect.height && !imgRect.isFullView1D() && wFact != hFact) {
+            if (wFact > hFact) {
+                w = compRect.width;
+                x = 0;
+                h = wFact / imgRect.width;
+                y = (compRect.height - h) / 2;
+            } else {
+                h = compRect.height;
+                y = 0;
+                w = hFact / imgRect.height;
+                x = (compRect.width - w) / 2;
             }
         }
 
         return new VisRect(x + compRect.x, y + compRect.y, w, h, imgRect);
     }
 
+    /**
+     * Make the current image either scale to fit inside this component,
+     * or show a portion of image (1:1), if the image size is larger than
+     * the component size.
+     */
     public void zoomBestFitOrOne() {
-        File file;
+        ImageEntry entry;
         Image image;
         VisRect visibleRect;
 
         synchronized (this) {
-            file = this.file;
+            entry = this.entry;
             image = this.image;
             visibleRect = this.visibleRect;
         }
@@ -824,7 +936,7 @@ public class ImageDisplay extends JComponent implements PreferenceChangedListene
         }
 
         synchronized (this) {
-            if (file == this.file) {
+            if (this.entry == entry) {
                 this.visibleRect = visibleRect;
             }
         }
diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java b/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java
index 110c7de..df250ea 100644
--- a/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java
+++ b/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java
@@ -20,6 +20,7 @@ import com.drew.metadata.Metadata;
 import com.drew.metadata.MetadataException;
 import com.drew.metadata.exif.ExifIFD0Directory;
 import com.drew.metadata.exif.GpsDirectory;
+import com.drew.metadata.jpeg.JpegDirectory;
 
 /**
  * Stores info about each image
@@ -52,6 +53,9 @@ public final class ImageEntry implements Comparable<ImageEntry>, Cloneable {
     /** The time after correlation with a gpx track */
     private Date gpsTime;
 
+    private int width;
+    private int height;
+
     /**
      * When the correlation dialog is open, we like to show the image position
      * for the current time offset on the map in real time.
@@ -76,6 +80,24 @@ public final class ImageEntry implements Comparable<ImageEntry>, Cloneable {
     }
 
     /**
+     * Returns width of the image this ImageEntry represents.
+     * @return width of the image this ImageEntry represents
+     * @since 13220
+     */
+    public int getWidth() {
+        return width;
+    }
+
+    /**
+     * Returns height of the image this ImageEntry represents.
+     * @return height of the image this ImageEntry represents
+     * @since 13220
+     */
+    public int getHeight() {
+        return height;
+    }
+
+    /**
      * Returns the position value. The position value from the temporary copy
      * is returned if that copy exists.
      * @return the position value
@@ -141,7 +163,7 @@ public final class ImageEntry implements Comparable<ImageEntry>, Cloneable {
      * @return EXIF orientation
      */
     public Integer getExifOrientation() {
-        return exifOrientation;
+        return exifOrientation != null ? exifOrientation : 1;
     }
 
     /**
@@ -230,6 +252,24 @@ public final class ImageEntry implements Comparable<ImageEntry>, Cloneable {
     }
 
     /**
+     * Sets the width of this ImageEntry.
+     * @param width set the width of this ImageEntry
+     * @since 13220
+     */
+    public void setWidth(int width) {
+        this.width = width;
+    }
+
+    /**
+     * Sets the height of this ImageEntry.
+     * @param height set the height of this ImageEntry
+     * @since 13220
+     */
+    public void setHeight(int height) {
+        this.height = height;
+    }
+
+    /**
      * Sets the position.
      * @param pos cached position
      */
@@ -415,11 +455,14 @@ public final class ImageEntry implements Comparable<ImageEntry>, Cloneable {
     }
 
     /**
-     * Queries whether the GPS data changed.
+     * Queries whether the GPS data changed. The flag value from the temporary
+     * copy is returned if that copy exists.
      * @return {@code true} if GPS data changed, {@code false} otherwise
      * @since 6392
      */
     public boolean hasNewGpsData() {
+        if (tmp != null)
+            return tmp.isNewGpsData;
         return isNewGpsData;
     }
 
@@ -456,6 +499,7 @@ public final class ImageEntry implements Comparable<ImageEntry>, Cloneable {
             setExifTime(null);
         }
 
+        final Directory dir = metadata.getFirstDirectoryOfType(JpegDirectory.class);
         final Directory dirExif = metadata.getFirstDirectoryOfType(ExifIFD0Directory.class);
         final GpsDirectory dirGps = metadata.getFirstDirectoryOfType(GpsDirectory.class);
 
@@ -468,6 +512,18 @@ public final class ImageEntry implements Comparable<ImageEntry>, Cloneable {
             Logging.debug(ex);
         }
 
+        try {
+            if (dir != null) {
+                // there are cases where these do not match width and height stored in dirExif
+                int width = dir.getInt(JpegDirectory.TAG_IMAGE_WIDTH);
+                int height = dir.getInt(JpegDirectory.TAG_IMAGE_HEIGHT);
+                setWidth(width);
+                setHeight(height);
+            }
+        } catch (MetadataException ex) {
+            Logging.debug(ex);
+        }
+
         if (dirGps == null) {
             setExifCoor(null);
             setPos(null);
diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java b/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java
index cf376d6..630c9ca 100644
--- a/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java
+++ b/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java
@@ -14,13 +14,12 @@ import java.awt.event.WindowEvent;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 
-import javax.swing.AbstractAction;
 import javax.swing.Box;
 import javax.swing.JButton;
-import javax.swing.JComponent;
 import javax.swing.JPanel;
 import javax.swing.JToggleButton;
 
+import org.openstreetmap.josm.actions.JosmAction;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.dialogs.DialogsPanel.Action;
 import org.openstreetmap.josm.gui.dialogs.ToggleDialog;
@@ -40,16 +39,16 @@ import org.openstreetmap.josm.tools.date.DateUtils;
  */
 public final class ImageViewerDialog extends ToggleDialog implements LayerChangeListener, ActiveLayerChangeListener {
 
-    private static final String COMMAND_ZOOM = "zoom";
-    private static final String COMMAND_CENTERVIEW = "centre";
-    private static final String COMMAND_NEXT = "next";
-    private static final String COMMAND_REMOVE = "remove";
-    private static final String COMMAND_REMOVE_FROM_DISK = "removefromdisk";
-    private static final String COMMAND_PREVIOUS = "previous";
-    private static final String COMMAND_COLLAPSE = "collapse";
-    private static final String COMMAND_FIRST = "first";
-    private static final String COMMAND_LAST = "last";
-    private static final String COMMAND_COPY_PATH = "copypath";
+    private final ImageZoomAction imageZoomAction = new ImageZoomAction();
+    private final ImageCenterViewAction imageCenterViewAction = new ImageCenterViewAction();
+    private final ImageNextAction imageNextAction = new ImageNextAction();
+    private final ImageRemoveAction imageRemoveAction = new ImageRemoveAction();
+    private final ImageRemoveFromDiskAction imageRemoveFromDiskAction = new ImageRemoveFromDiskAction();
+    private final ImagePreviousAction imagePreviousAction = new ImagePreviousAction();
+    private final ImageCollapseAction imageCollapseAction = new ImageCollapseAction();
+    private final ImageFirstAction imageFirstAction = new ImageFirstAction();
+    private final ImageLastAction imageLastAction = new ImageLastAction();
+    private final ImageCopyPathAction imageCopyPathAction = new ImageCopyPathAction();
 
     private final ImageDisplay imgDisplay = new ImageDisplay();
     private boolean centerView;
@@ -59,17 +58,13 @@ public final class ImageViewerDialog extends ToggleDialog implements LayerChange
 
     private boolean collapseButtonClicked;
 
-    static void newInstance() {
-        dialog = new ImageViewerDialog();
-    }
-
     /**
      * Replies the unique instance of this dialog
      * @return the unique instance
      */
     public static ImageViewerDialog getInstance() {
         if (dialog == null)
-            throw new AssertionError("a new instance needs to be created first");
+            dialog = new ImageViewerDialog();
         return dialog;
     }
 
@@ -93,80 +88,30 @@ public final class ImageViewerDialog extends ToggleDialog implements LayerChange
 
         Dimension buttonDim = new Dimension(26, 26);
 
-        ImageAction prevAction = new ImageAction(COMMAND_PREVIOUS, new ImageProvider("dialogs", "previous"), tr("Previous"));
-        btnPrevious = new JButton(prevAction);
+        btnPrevious = new JButton(imagePreviousAction);
         btnPrevious.setPreferredSize(buttonDim);
-        Shortcut scPrev = Shortcut.registerShortcut(
-                "geoimage:previous", tr("Geoimage: {0}", tr("Show previous Image")), KeyEvent.VK_PAGE_UP, Shortcut.DIRECT);
-        final String previousImage = "Previous Image";
-        MainApplication.registerActionShortcut(prevAction, scPrev);
-        btnPrevious.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(scPrev.getKeyStroke(), previousImage);
-        btnPrevious.getActionMap().put(previousImage, prevAction);
         btnPrevious.setEnabled(false);
 
-        final String removePhoto = tr("Remove photo from layer");
-        ImageAction delAction = new ImageAction(COMMAND_REMOVE, new ImageProvider("dialogs", "delete"), removePhoto);
-        JButton btnDelete = new JButton(delAction);
+        JButton btnDelete = new JButton(imageRemoveAction);
         btnDelete.setPreferredSize(buttonDim);
-        Shortcut scDelete = Shortcut.registerShortcut(
-                "geoimage:deleteimagefromlayer", tr("Geoimage: {0}", tr("Remove photo from layer")), KeyEvent.VK_DELETE, Shortcut.SHIFT);
-        MainApplication.registerActionShortcut(delAction, scDelete);
-        btnDelete.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(scDelete.getKeyStroke(), removePhoto);
-        btnDelete.getActionMap().put(removePhoto, delAction);
-
-        ImageAction delFromDiskAction = new ImageAction(COMMAND_REMOVE_FROM_DISK,
-                new ImageProvider("dialogs", "geoimage/deletefromdisk"), tr("Delete image file from disk"));
-        JButton btnDeleteFromDisk = new JButton(delFromDiskAction);
+
+        JButton btnDeleteFromDisk = new JButton(imageRemoveFromDiskAction);
         btnDeleteFromDisk.setPreferredSize(buttonDim);
-        Shortcut scDeleteFromDisk = Shortcut.registerShortcut(
-                "geoimage:deletefilefromdisk", tr("Geoimage: {0}", tr("Delete File from disk")), KeyEvent.VK_DELETE, Shortcut.CTRL_SHIFT);
-        final String deleteImage = "Delete image file from disk";
-        MainApplication.registerActionShortcut(delFromDiskAction, scDeleteFromDisk);
-        btnDeleteFromDisk.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(scDeleteFromDisk.getKeyStroke(), deleteImage);
-        btnDeleteFromDisk.getActionMap().put(deleteImage, delFromDiskAction);
-
-        ImageAction copyPathAction = new ImageAction(COMMAND_COPY_PATH, new ImageProvider("copy"), tr("Copy image path"));
-        JButton btnCopyPath = new JButton(copyPathAction);
+
+        JButton btnCopyPath = new JButton(imageCopyPathAction);
         btnCopyPath.setPreferredSize(buttonDim);
-        Shortcut scCopyPath = Shortcut.registerShortcut(
-                "geoimage:copypath", tr("Geoimage: {0}", tr("Copy image path")), KeyEvent.VK_C, Shortcut.ALT_CTRL_SHIFT);
-        final String copyImage = "Copy image path";
-        MainApplication.registerActionShortcut(copyPathAction, scCopyPath);
-        btnCopyPath.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(scCopyPath.getKeyStroke(), copyImage);
-        btnCopyPath.getActionMap().put(copyImage, copyPathAction);
-
-        ImageAction nextAction = new ImageAction(COMMAND_NEXT, new ImageProvider("dialogs", "next"), tr("Next"));
-        btnNext = new JButton(nextAction);
+
+        btnNext = new JButton(imageNextAction);
         btnNext.setPreferredSize(buttonDim);
-        Shortcut scNext = Shortcut.registerShortcut(
-                "geoimage:next", tr("Geoimage: {0}", tr("Show next Image")), KeyEvent.VK_PAGE_DOWN, Shortcut.DIRECT);
-        final String nextImage = "Next Image";
-        MainApplication.registerActionShortcut(nextAction, scNext);
-        btnNext.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(scNext.getKeyStroke(), nextImage);
-        btnNext.getActionMap().put(nextImage, nextAction);
         btnNext.setEnabled(false);
 
-        MainApplication.registerActionShortcut(
-                new ImageAction(COMMAND_FIRST, null, null),
-                Shortcut.registerShortcut(
-                        "geoimage:first", tr("Geoimage: {0}", tr("Show first Image")), KeyEvent.VK_HOME, Shortcut.DIRECT)
-        );
-        MainApplication.registerActionShortcut(
-                new ImageAction(COMMAND_LAST, null, null),
-                Shortcut.registerShortcut(
-                        "geoimage:last", tr("Geoimage: {0}", tr("Show last Image")), KeyEvent.VK_END, Shortcut.DIRECT)
-        );
-
-        tbCentre = new JToggleButton(new ImageAction(COMMAND_CENTERVIEW,
-                new ImageProvider("dialogs", "centreview"), tr("Center view")));
+        tbCentre = new JToggleButton(imageCenterViewAction);
         tbCentre.setPreferredSize(buttonDim);
 
-        JButton btnZoomBestFit = new JButton(new ImageAction(COMMAND_ZOOM,
-                new ImageProvider("dialogs", "zoom-best-fit"), tr("Zoom best fit and 1:1")));
+        JButton btnZoomBestFit = new JButton(imageZoomAction);
         btnZoomBestFit.setPreferredSize(buttonDim);
 
-        btnCollapse = new JButton(new ImageAction(COMMAND_COLLAPSE,
-                new ImageProvider("dialogs", "collapse"), tr("Move dialog to the side pane")));
+        btnCollapse = new JButton(imageCollapseAction);
         btnCollapse.setPreferredSize(new Dimension(20, 20));
         btnCollapse.setAlignmentY(Component.TOP_ALIGNMENT);
 
@@ -205,61 +150,168 @@ public final class ImageViewerDialog extends ToggleDialog implements LayerChange
     public void destroy() {
         MainApplication.getLayerManager().removeActiveLayerChangeListener(this);
         MainApplication.getLayerManager().removeLayerChangeListener(this);
+        // Manually destroy actions until JButtons are replaced by standard SideButtons
+        imageFirstAction.destroy();
+        imageLastAction.destroy();
+        imagePreviousAction.destroy();
+        imageNextAction.destroy();
+        imageCenterViewAction.destroy();
+        imageCollapseAction.destroy();
+        imageCopyPathAction.destroy();
+        imageRemoveAction.destroy();
+        imageRemoveFromDiskAction.destroy();
+        imageZoomAction.destroy();
         super.destroy();
+        dialog = null;
     }
 
-    class ImageAction extends AbstractAction {
-        private final String action;
+    private class ImageNextAction extends JosmAction {
+        ImageNextAction() {
+            super(null, new ImageProvider("dialogs", "next"), tr("Next"), Shortcut.registerShortcut(
+                    "geoimage:next", tr("Geoimage: {0}", tr("Show next Image")), KeyEvent.VK_PAGE_DOWN, Shortcut.DIRECT),
+                  false, null, false);
+        }
 
-        ImageAction(String action, ImageProvider provider, String toolTipText) {
-            this.action = action;
-            putValue(SHORT_DESCRIPTION, toolTipText);
-            if (provider != null) {
-                provider.getResource().attachImageIcon(this, true);
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            if (currentLayer != null) {
+                currentLayer.showNextPhoto();
             }
         }
+    }
+
+    private class ImagePreviousAction extends JosmAction {
+        ImagePreviousAction() {
+            super(null, new ImageProvider("dialogs", "previous"), tr("Previous"), Shortcut.registerShortcut(
+                    "geoimage:previous", tr("Geoimage: {0}", tr("Show previous Image")), KeyEvent.VK_PAGE_UP, Shortcut.DIRECT),
+                  false, null, false);
+        }
 
         @Override
         public void actionPerformed(ActionEvent e) {
-            if (COMMAND_NEXT.equals(action)) {
-                if (currentLayer != null) {
-                    currentLayer.showNextPhoto();
-                }
-            } else if (COMMAND_PREVIOUS.equals(action)) {
-                if (currentLayer != null) {
-                    currentLayer.showPreviousPhoto();
-                }
-            } else if (COMMAND_FIRST.equals(action) && currentLayer != null) {
+            if (currentLayer != null) {
+                currentLayer.showPreviousPhoto();
+            }
+        }
+    }
+
+    private class ImageFirstAction extends JosmAction {
+        ImageFirstAction() {
+            super(null, (ImageProvider) null, null, Shortcut.registerShortcut(
+                    "geoimage:first", tr("Geoimage: {0}", tr("Show first Image")), KeyEvent.VK_HOME, Shortcut.DIRECT),
+                  false, null, false);
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            if (currentLayer != null) {
                 currentLayer.showFirstPhoto();
-            } else if (COMMAND_LAST.equals(action) && currentLayer != null) {
+            }
+        }
+    }
+
+    private class ImageLastAction extends JosmAction {
+        ImageLastAction() {
+            super(null, (ImageProvider) null, null, Shortcut.registerShortcut(
+                    "geoimage:last", tr("Geoimage: {0}", tr("Show last Image")), KeyEvent.VK_END, Shortcut.DIRECT),
+                  false, null, false);
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            if (currentLayer != null) {
                 currentLayer.showLastPhoto();
-            } else if (COMMAND_CENTERVIEW.equals(action)) {
-                final JToggleButton button = (JToggleButton) e.getSource();
-                centerView = button.isEnabled() && button.isSelected();
-                if (centerView && currentEntry != null && currentEntry.getPos() != null) {
-                    MainApplication.getMap().mapView.zoomTo(currentEntry.getPos());
-                }
-            } else if (COMMAND_ZOOM.equals(action)) {
-                imgDisplay.zoomBestFitOrOne();
-            } else if (COMMAND_REMOVE.equals(action)) {
-                if (currentLayer != null) {
-                    currentLayer.removeCurrentPhoto();
-                }
-            } else if (COMMAND_REMOVE_FROM_DISK.equals(action)) {
-                if (currentLayer != null) {
-                    currentLayer.removeCurrentPhotoFromDisk();
-                }
-            } else if (COMMAND_COPY_PATH.equals(action)) {
-                if (currentLayer != null) {
-                    currentLayer.copyCurrentPhotoPath();
-                }
-            } else if (COMMAND_COLLAPSE.equals(action)) {
-                collapseButtonClicked = true;
-                detachedDialog.getToolkit().getSystemEventQueue().postEvent(new WindowEvent(detachedDialog, WindowEvent.WINDOW_CLOSING));
             }
         }
     }
 
+    private class ImageCenterViewAction extends JosmAction {
+        ImageCenterViewAction() {
+            super(null, new ImageProvider("dialogs", "centreview"), tr("Center view"), null,
+                  false, null, false);
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            final JToggleButton button = (JToggleButton) e.getSource();
+            centerView = button.isEnabled() && button.isSelected();
+            if (centerView && currentEntry != null && currentEntry.getPos() != null) {
+                MainApplication.getMap().mapView.zoomTo(currentEntry.getPos());
+            }
+        }
+    }
+
+    private class ImageZoomAction extends JosmAction {
+        ImageZoomAction() {
+            super(null, new ImageProvider("dialogs", "zoom-best-fit"), tr("Zoom best fit and 1:1"), null,
+                  false, null, false);
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            imgDisplay.zoomBestFitOrOne();
+        }
+    }
+
+    private class ImageRemoveAction extends JosmAction {
+        ImageRemoveAction() {
+            super(null, new ImageProvider("dialogs", "delete"), tr("Remove photo from layer"), Shortcut.registerShortcut(
+                    "geoimage:deleteimagefromlayer", tr("Geoimage: {0}", tr("Remove photo from layer")), KeyEvent.VK_DELETE, Shortcut.SHIFT),
+                  false, null, false);
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            if (currentLayer != null) {
+                currentLayer.removeCurrentPhoto();
+            }
+        }
+    }
+
+    private class ImageRemoveFromDiskAction extends JosmAction {
+        ImageRemoveFromDiskAction() {
+            super(null, new ImageProvider("dialogs", "geoimage/deletefromdisk"), tr("Delete image file from disk"),
+                  Shortcut.registerShortcut(
+                    "geoimage:deletefilefromdisk", tr("Geoimage: {0}", tr("Delete File from disk")), KeyEvent.VK_DELETE, Shortcut.CTRL_SHIFT),
+                  false, null, false);
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            if (currentLayer != null) {
+                currentLayer.removeCurrentPhotoFromDisk();
+            }
+        }
+    }
+
+    private class ImageCopyPathAction extends JosmAction {
+        ImageCopyPathAction() {
+            super(null, new ImageProvider("copy"), tr("Copy image path"), Shortcut.registerShortcut(
+                    "geoimage:copypath", tr("Geoimage: {0}", tr("Copy image path")), KeyEvent.VK_C, Shortcut.ALT_CTRL_SHIFT),
+                  false, null, false);
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            if (currentLayer != null) {
+                currentLayer.copyCurrentPhotoPath();
+            }
+        }
+    }
+
+    private class ImageCollapseAction extends JosmAction {
+        ImageCollapseAction() {
+            super(null, new ImageProvider("dialogs", "collapse"), tr("Move dialog to the side pane"), null,
+                  false, null, false);
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            collapseButtonClicked = true;
+            detachedDialog.getToolkit().getSystemEventQueue().postEvent(new WindowEvent(detachedDialog, WindowEvent.WINDOW_CLOSING));
+        }
+    }
+
     public static void showImage(GeoImageLayer layer, ImageEntry entry) {
         getInstance().displayImage(layer, entry);
         if (layer != null) {
@@ -322,7 +374,7 @@ public final class ImageViewerDialog extends ToggleDialog implements LayerChange
             if (imageChanged) {
                 // Set only if the image is new to preserve zoom and position if the same image is redisplayed
                 // (e.g. to update the OSD).
-                imgDisplay.setImage(entry.getFile(), entry.getExifOrientation());
+                imgDisplay.setImage(entry);
             }
             setTitle(tr("Geotagged Images") + (entry.getFile() != null ? " - " + entry.getFile().getName() : ""));
             StringBuilder osd = new StringBuilder(entry.getFile() != null ? entry.getFile().getName() : "");
@@ -355,7 +407,7 @@ public final class ImageViewerDialog extends ToggleDialog implements LayerChange
             // if this method is called to reinitialize dialog content with a blank image,
             // do not actually show the dialog again with a blank image if currently hidden (fix #10672)
             setTitle(tr("Geotagged Images"));
-            imgDisplay.setImage(null, null);
+            imgDisplay.setImage(null);
             imgDisplay.setOsdText("");
             return;
         }
@@ -458,5 +510,4 @@ public final class ImageViewerDialog extends ToggleDialog implements LayerChange
             ((GeoImageLayer) newLayer).showFirstPhoto();
         }
     }
-
 }
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/DownloadWmsAlongTrackAction.java b/src/org/openstreetmap/josm/gui/layer/gpx/DownloadWmsAlongTrackAction.java
index 30cc8ba..6b6d015 100644
--- a/src/org/openstreetmap/josm/gui/layer/gpx/DownloadWmsAlongTrackAction.java
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/DownloadWmsAlongTrackAction.java
@@ -123,7 +123,7 @@ public class DownloadWmsAlongTrackAction extends AbstractAction {
             }
             return null;
         }
-        return AbstractMergeAction.askTargetLayer(targetLayers.toArray(new AbstractTileSourceLayer[targetLayers.size()]),
+        return AbstractMergeAction.askTargetLayer(targetLayers.toArray(new AbstractTileSourceLayer[0]),
                 tr("Please select the imagery layer."),
                 tr("Select imagery layer"),
                 tr("Download"), "dialogs/down");
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelper.java b/src/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelper.java
index db54a83..5646b71 100644
--- a/src/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelper.java
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelper.java
@@ -1032,7 +1032,7 @@ public class GpxDrawHelper implements SoMChangeListener, MapViewPaintable.LayerP
             colorList.add(darkerColor(lastColor, 0.950f));
         }
 
-        return createColorLut(0, colorList.toArray(new Color[ colorList.size() ]));
+        return createColorLut(0, colorList.toArray(new Color[0]));
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/gui/layer/imagery/TileSourceDisplaySettings.java b/src/org/openstreetmap/josm/gui/layer/imagery/TileSourceDisplaySettings.java
index fb449b0..94d8ddc 100644
--- a/src/org/openstreetmap/josm/gui/layer/imagery/TileSourceDisplaySettings.java
+++ b/src/org/openstreetmap/josm/gui/layer/imagery/TileSourceDisplaySettings.java
@@ -169,19 +169,21 @@ public class TileSourceDisplaySettings implements SessionAwareReadApply {
     /**
      * Gets the displacement in x (east) direction
      * @return The displacement.
+     * @see #getDisplacement()
      * @since 10571
      */
     public double getDx() {
-        return displacement.east();
+        return getDisplacement().east();
     }
 
     /**
      * Gets the displacement in y (north) direction
      * @return The displacement.
+     * @see #getDisplacement()
      * @since 10571
      */
     public double getDy() {
-        return displacement.north();
+        return getDisplacement().north();
     }
 
     /**
@@ -194,7 +196,7 @@ public class TileSourceDisplaySettings implements SessionAwareReadApply {
     }
 
     /**
-     * Sets an offset bookmark to use.
+     * Sets an offset bookmark to use. Loads the displacement from the bookmark.
      *
      * @param offsetBookmark the offset bookmark, may be null
      */
diff --git a/src/org/openstreetmap/josm/gui/layer/markerlayer/Marker.java b/src/org/openstreetmap/josm/gui/layer/markerlayer/Marker.java
index f118c79..6c6ba91 100644
--- a/src/org/openstreetmap/josm/gui/layer/markerlayer/Marker.java
+++ b/src/org/openstreetmap/josm/gui/layer/markerlayer/Marker.java
@@ -22,8 +22,6 @@ import java.util.TimeZone;
 
 import javax.swing.ImageIcon;
 
-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;
@@ -32,8 +30,8 @@ import org.openstreetmap.josm.data.gpx.GpxConstants;
 import org.openstreetmap.josm.data.gpx.WayPoint;
 import org.openstreetmap.josm.data.osm.search.SearchCompiler.Match;
 import org.openstreetmap.josm.data.preferences.CachedProperty;
-import org.openstreetmap.josm.data.preferences.IntegerProperty;
 import org.openstreetmap.josm.gui.MapView;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.template_engine.ParseError;
@@ -86,23 +84,6 @@ public class Marker implements TemplateEngineDataProvider, ILatLon {
 
         private static final Map<String, TemplateEntryProperty> CACHE = new HashMap<>();
 
-        // Legacy code - convert label from int to template engine expression
-        private static final IntegerProperty PROP_LABEL = new IntegerProperty("draw.rawgps.layer.wpt", 0);
-
-        private static String getDefaultLabelPattern() {
-            switch (PROP_LABEL.get()) {
-            case 1:
-                return LABEL_PATTERN_NAME;
-            case 2:
-                return LABEL_PATTERN_DESC;
-            case 0:
-            case 3:
-                return LABEL_PATTERN_AUTO;
-            default:
-                return "";
-            }
-        }
-
         public static TemplateEntryProperty forMarker(String layerName) {
             String key = "draw.rawgps.layer.wpt.pattern";
             if (layerName != null) {
@@ -110,7 +91,7 @@ public class Marker implements TemplateEngineDataProvider, ILatLon {
             }
             TemplateEntryProperty result = CACHE.get(key);
             if (result == null) {
-                String defaultValue = layerName == null ? getDefaultLabelPattern() : "";
+                String defaultValue = layerName == null ? LABEL_PATTERN_AUTO : "";
                 TemplateEntryProperty parent = layerName == null ? null : forMarker(null);
                 result = new TemplateEntryProperty(key, defaultValue, parent);
                 CACHE.put(key, result);
@@ -335,16 +316,6 @@ public class Marker implements TemplateEngineDataProvider, ILatLon {
     }
 
     /**
-     * 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(Main.getProjection());
-    }
-
-    /**
      * Checks whether the marker display area contains the given point.
      * Markers not interested in mouse clicks may always return false.
      *
diff --git a/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java b/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java
index fd555d8..54dec7e 100644
--- a/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java
@@ -239,7 +239,7 @@ public class MarkerLayer extends Layer implements JumpToMarkerLayer {
         components.add(new RenameLayerAction(getAssociatedFile(), this));
         components.add(SeparatorLayerAction.INSTANCE);
         components.add(new LayerListPopup.InfoAction(this));
-        return components.toArray(new Action[components.size()]);
+        return components.toArray(new Action[0]);
     }
 
     public boolean synchronizeAudioMarkers(final AudioMarker startMarker) {
diff --git a/src/org/openstreetmap/josm/gui/mappaint/RenderingCLI.java b/src/org/openstreetmap/josm/gui/mappaint/RenderingCLI.java
index 38454be..2987b1e 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/RenderingCLI.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/RenderingCLI.java
@@ -6,9 +6,10 @@ import static org.openstreetmap.josm.tools.I18n.tr;
 import java.awt.Dimension;
 import java.awt.image.BufferedImage;
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
@@ -229,7 +230,7 @@ public class RenderingCLI implements CLIModule {
                     argZoom = Integer.parseInt(getopt.getOptarg());
                 } catch (NumberFormatException nfe) {
                     throw new IllegalArgumentException(
-                            tr("Expected integer number for option {0}, but got ''{1}''", "--zoom", getopt.getOptarg()));
+                            tr("Expected integer number for option {0}, but got ''{1}''", "--zoom", getopt.getOptarg()), nfe);
                 }
                 if (argZoom < 0)
                     throw new IllegalArgumentException(
@@ -240,7 +241,7 @@ public class RenderingCLI implements CLIModule {
                     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()));
+                        throw new IllegalArgumentException(tr("Unable to parse {0} parameter: {1}", "--bounds", iae.getMessage()), iae);
                     }
                 }
                 break;
@@ -266,7 +267,7 @@ public class RenderingCLI implements CLIModule {
                         argScale = JosmDecimalFormatSymbolsProvider.parseDouble(getopt.getOptarg());
                     } catch (NumberFormatException nfe) {
                         throw new IllegalArgumentException(
-                                tr("Expected floating point number for option {0}, but got ''{1}''", "--scale", getopt.getOptarg()));
+                                tr("Expected floating point number for option {0}, but got ''{1}''", "--scale", getopt.getOptarg()), nfe);
                     }
                     break;
                 case ANCHOR:
@@ -280,7 +281,7 @@ public class RenderingCLI implements CLIModule {
                         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()));
+                        throw new IllegalArgumentException(tr("In option {0}: {1}", "--anchor", iae.getMessage()), iae);
                     }
                     break;
                 case WIDTH_M:
@@ -288,7 +289,7 @@ public class RenderingCLI implements CLIModule {
                         argWidthM = JosmDecimalFormatSymbolsProvider.parseDouble(getopt.getOptarg());
                     } catch (NumberFormatException nfe) {
                         throw new IllegalArgumentException(
-                                tr("Expected floating point number for option {0}, but got ''{1}''", "--width-m", getopt.getOptarg()));
+                                tr("Expected floating point number for option {0}, but got ''{1}''", "--width-m", getopt.getOptarg()), nfe);
                     }
                     if (argWidthM <= 0) throw new IllegalArgumentException(
                             tr("Expected floating point number > 0 for option {0}, but got ''{1}''", "--width-m", getopt.getOptarg()));
@@ -298,7 +299,7 @@ public class RenderingCLI implements CLIModule {
                         argHeightM = JosmDecimalFormatSymbolsProvider.parseDouble(getopt.getOptarg());
                     } catch (NumberFormatException nfe) {
                         throw new IllegalArgumentException(
-                                tr("Expected floating point number for option {0}, but got ''{1}''", "--height-m", getopt.getOptarg()));
+                                tr("Expected floating point number for option {0}, but got ''{1}''", "--height-m", getopt.getOptarg()), nfe);
                     }
                     if (argHeightM <= 0) throw new IllegalArgumentException(
                             tr("Expected floating point number > 0 for option {0}, but got ''{1}''", "--width-m", getopt.getOptarg()));
@@ -308,7 +309,7 @@ public class RenderingCLI implements CLIModule {
                         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()));
+                                tr("Expected integer number for option {0}, but got ''{1}''", "--width-px", getopt.getOptarg()), nfe);
                     }
                     if (argWidthPx <= 0) throw new IllegalArgumentException(
                             tr("Expected integer number > 0 for option {0}, but got ''{1}''", "--width-px", getopt.getOptarg()));
@@ -318,7 +319,7 @@ public class RenderingCLI implements CLIModule {
                         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()));
+                                tr("Expected integer number for option {0}, but got ''{1}''", "--height-px", getopt.getOptarg()), nfe);
                     }
                     if (argHeightPx <= 0) throw new IllegalArgumentException(
                             tr("Expected integer number > 0 for option {0}, but got ''{1}''", "--height-px", getopt.getOptarg()));
@@ -331,7 +332,7 @@ public class RenderingCLI implements CLIModule {
                         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()));
+                                tr("Expected integer number for option {0}, but got ''{1}''", "--max-image-size", getopt.getOptarg()), nfe);
                     }
                     if (argMaxImageSize < 0) throw new IllegalArgumentException(
                             tr("Expected integer number >= 0 for option {0}, but got ''{1}''", "--max-image-size", getopt.getOptarg()));
@@ -542,14 +543,14 @@ public class RenderingCLI implements CLIModule {
         return ra;
     }
 
-    private DataSet loadDataset() throws FileNotFoundException, IllegalDataException {
+    private DataSet loadDataset() throws IOException, IllegalDataException {
         if (argInput == null) {
             throw new IllegalArgumentException(tr("Missing argument - input data file ({0})", "--input|-i"));
         }
         try {
-            return OsmReader.parseDataSet(new FileInputStream(argInput), null);
+            return OsmReader.parseDataSet(Files.newInputStream(Paths.get(argInput)), null);
         } catch (IllegalDataException e) {
-            throw new IllegalDataException(tr("In .osm data file ''{0}'' - ", argInput) + e.getMessage());
+            throw new IllegalDataException(tr("In .osm data file ''{0}'' - ", argInput) + e.getMessage(), e);
         }
     }
 
diff --git a/src/org/openstreetmap/josm/gui/mappaint/styleelement/AreaElement.java b/src/org/openstreetmap/josm/gui/mappaint/styleelement/AreaElement.java
index fea54a9..60de160 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/styleelement/AreaElement.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/styleelement/AreaElement.java
@@ -47,7 +47,7 @@ public class AreaElement extends StyleElement {
      * Fill the area only partially from the borders
      * <p>
      * Public access is discouraged.
-     * @see StyledMapRenderer#drawArea(Way, Color, MapImage, Float, Float, boolean, TextLabel)
+     * @see StyledMapRenderer#drawArea
      */
     public Float extent;
 
@@ -55,7 +55,7 @@ public class AreaElement extends StyleElement {
      * Areas smaller than this are filled no matter what value {@link #extent} has.
      * <p>
      * Public access is discouraged.
-     * @see StyledMapRenderer#drawArea(Way, Color, MapImage, Float, Float, boolean, TextLabel)
+     * @see StyledMapRenderer#drawArea
      */
     public Float extentThreshold;
 
diff --git a/src/org/openstreetmap/josm/gui/mappaint/styleelement/MapImage.java b/src/org/openstreetmap/josm/gui/mappaint/styleelement/MapImage.java
index a667534..1da34bc 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/styleelement/MapImage.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/styleelement/MapImage.java
@@ -138,7 +138,7 @@ public class MapImage {
                 .setWidth(width)
                 .setHeight(height)
                 .setOptional(true)
-                .getAsync().thenAccept(result -> {
+                .getAsync(result -> {
                     synchronized (this) {
                         if (result == null) {
                             source.logWarning(tr("Failed to locate image ''{0}''", name));
diff --git a/src/org/openstreetmap/josm/gui/oauth/AbstractAuthorizationUI.java b/src/org/openstreetmap/josm/gui/oauth/AbstractAuthorizationUI.java
index 61aefa0..4c4567c 100644
--- a/src/org/openstreetmap/josm/gui/oauth/AbstractAuthorizationUI.java
+++ b/src/org/openstreetmap/josm/gui/oauth/AbstractAuthorizationUI.java
@@ -3,7 +3,6 @@ package org.openstreetmap.josm.gui.oauth;
 
 import java.util.Objects;
 
-import org.openstreetmap.josm.data.Preferences;
 import org.openstreetmap.josm.data.oauth.OAuthParameters;
 import org.openstreetmap.josm.data.oauth.OAuthToken;
 import org.openstreetmap.josm.gui.widgets.VerticallyScrollablePanel;
@@ -138,17 +137,4 @@ public abstract class AbstractAuthorizationUI extends VerticallyScrollablePanel
         CheckParameterUtil.ensureParameterNotNull(paramApiUrl, "paramApiUrl");
         pnlAdvancedProperties.initialize(paramApiUrl);
     }
-
-    /**
-     * Initializes the authorisation UI with preference values in <code>pref</code>.
-     *
-     * @param pref the preferences. Must not be null.
-     * @throws IllegalArgumentException if pref is null
-     * @deprecated (since 12928) replaced by {@link #initialize(java.lang.String)}
-     */
-    @Deprecated
-    public void initFromPreferences(Preferences pref) {
-        CheckParameterUtil.ensureParameterNotNull(pref, "pref");
-        pnlAdvancedProperties.initFromPreferences(pref);
-    }
 }
diff --git a/src/org/openstreetmap/josm/gui/oauth/AdvancedOAuthPropertiesPanel.java b/src/org/openstreetmap/josm/gui/oauth/AdvancedOAuthPropertiesPanel.java
index 723fd9a..8d2d35d 100644
--- a/src/org/openstreetmap/josm/gui/oauth/AdvancedOAuthPropertiesPanel.java
+++ b/src/org/openstreetmap/josm/gui/oauth/AdvancedOAuthPropertiesPanel.java
@@ -15,7 +15,6 @@ import javax.swing.JCheckBox;
 import javax.swing.JLabel;
 import javax.swing.JOptionPane;
 
-import org.openstreetmap.josm.data.Preferences;
 import org.openstreetmap.josm.data.oauth.OAuthParameters;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane.ButtonSpec;
@@ -274,27 +273,6 @@ public class AdvancedOAuthPropertiesPanel extends VerticallyScrollablePanel {
     }
 
     /**
-     * Initializes the panel from the values in the preferences <code>preferences</code>.
-     *
-     * @param pref the preferences. Must not be null.
-     * @throws IllegalArgumentException if pref is null
-     * @deprecated (since 12928) replaced by {@link #initialize(java.lang.String)}
-     */
-    @Deprecated
-    public void initFromPreferences(Preferences pref) {
-        CheckParameterUtil.ensureParameterNotNull(pref, "pref");
-        setApiUrl(pref.get("osm-server.url"));
-        boolean useDefault = pref.getBoolean("oauth.settings.use-default", true);
-        ilUseDefault.setEnabled(false);
-        if (useDefault) {
-            resetToDefaultSettings();
-        } else {
-            setAdvancedParameters(OAuthParameters.createFromPreferences(pref));
-        }
-        ilUseDefault.setEnabled(true);
-    }
-
-    /**
      * Remembers the current values in the preferences <code>pref</code>.
      */
     public void rememberPreferences() {
@@ -306,24 +284,6 @@ public class AdvancedOAuthPropertiesPanel extends VerticallyScrollablePanel {
         }
     }
 
-    /**
-     * Remembers the current values in the preferences <code>pref</code>.
-     *
-     * @param pref the preferences. Must not be null.
-     * @throws IllegalArgumentException if pref is null.
-     * @deprecated (since 12928) replaced by {@link #rememberPreferences()}
-     */
-    @Deprecated
-    public void rememberPreferences(Preferences pref) {
-        CheckParameterUtil.ensureParameterNotNull(pref, "pref");
-        pref.putBoolean("oauth.settings.use-default", cbUseDefaults.isSelected());
-        if (cbUseDefaults.isSelected()) {
-            new OAuthParameters(null, null, null, null, null, null, null).rememberPreferences(pref);
-        } else {
-            getAdvancedParameters().rememberPreferences(pref);
-        }
-    }
-
     class UseDefaultItemListener implements ItemListener {
         private boolean enabled;
 
diff --git a/src/org/openstreetmap/josm/gui/oauth/FullyAutomaticAuthorizationUI.java b/src/org/openstreetmap/josm/gui/oauth/FullyAutomaticAuthorizationUI.java
index de7fc7d..877b78c 100644
--- a/src/org/openstreetmap/josm/gui/oauth/FullyAutomaticAuthorizationUI.java
+++ b/src/org/openstreetmap/josm/gui/oauth/FullyAutomaticAuthorizationUI.java
@@ -28,7 +28,6 @@ import javax.swing.event.DocumentListener;
 import javax.swing.text.JTextComponent;
 import javax.swing.text.html.HTMLEditorKit;
 
-import org.openstreetmap.josm.data.Preferences;
 import org.openstreetmap.josm.data.oauth.OAuthToken;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane;
 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
@@ -191,32 +190,6 @@ public class FullyAutomaticAuthorizationUI extends AbstractAuthorizationUI {
     }
 
     /**
-     * Initializes the panel with values from the preferences
-     * @param pref Preferences structure
-     * @deprecated (since 12928) replaced by {@link #initialize(java.lang.String)}
-     */
-    @Deprecated
-    @Override
-    public void initFromPreferences(Preferences pref) {
-        super.initFromPreferences(pref);
-        CredentialsAgent cm = CredentialsManager.getInstance();
-        try {
-            PasswordAuthentication pa = cm.lookup(RequestorType.SERVER, OsmApi.getOsmApi().getHost());
-            if (pa == null) {
-                tfUserName.setText("");
-                tfPassword.setText("");
-            } else {
-                tfUserName.setText(pa.getUserName() == null ? "" : pa.getUserName());
-                tfPassword.setText(pa.getPassword() == null ? "" : String.valueOf(pa.getPassword()));
-            }
-        } catch (CredentialsAgentException e) {
-            Logging.error(e);
-            tfUserName.setText("");
-            tfPassword.setText("");
-        }
-    }
-
-    /**
      * Builds the panel with the action button  for starting the authorisation
      *
      * @return constructed button panel
diff --git a/src/org/openstreetmap/josm/gui/oauth/OsmOAuthAuthorizationClient.java b/src/org/openstreetmap/josm/gui/oauth/OsmOAuthAuthorizationClient.java
index e87887c..2fba5ce 100644
--- a/src/org/openstreetmap/josm/gui/oauth/OsmOAuthAuthorizationClient.java
+++ b/src/org/openstreetmap/josm/gui/oauth/OsmOAuthAuthorizationClient.java
@@ -327,10 +327,7 @@ public class OsmOAuthAuthorizationClient {
             if (retCode != HttpURLConnection.HTTP_MOVED_TEMP)
                 throw new OsmOAuthAuthorizationException(tr("Failed to authenticate user ''{0}'' with password ''***'' as OAuth user",
                         userName));
-        } catch (OsmOAuthAuthorizationException e) {
-            Logging.debug(e);
-            throw new OsmLoginFailedException(e.getCause());
-        } catch (IOException e) {
+        } catch (OsmOAuthAuthorizationException | IOException e) {
             throw new OsmLoginFailedException(e);
         } finally {
             synchronized (this) {
diff --git a/src/org/openstreetmap/josm/gui/preferences/imagery/AddWMSLayerPanel.java b/src/org/openstreetmap/josm/gui/preferences/imagery/AddWMSLayerPanel.java
index dd9cccd..24150df 100644
--- a/src/org/openstreetmap/josm/gui/preferences/imagery/AddWMSLayerPanel.java
+++ b/src/org/openstreetmap/josm/gui/preferences/imagery/AddWMSLayerPanel.java
@@ -75,7 +75,7 @@ public class AddWMSLayerPanel extends AddImageryPanel {
                 wms.attemptGetCapabilities(rawUrl.getText());
                 tree.updateTree(wms);
                 List<String> wmsFormats = wms.getFormats();
-                formats.setModel(new DefaultComboBoxModel<>(wmsFormats.toArray(new String[wmsFormats.size()])));
+                formats.setModel(new DefaultComboBoxModel<>(wmsFormats.toArray(new String[0])));
                 formats.setSelectedItem(wms.getPreferredFormats());
             } catch (MalformedURLException ex1) {
                 Logging.log(Logging.LEVEL_ERROR, ex1);
diff --git a/src/org/openstreetmap/josm/gui/preferences/projection/AbstractProjectionChoice.java b/src/org/openstreetmap/josm/gui/preferences/projection/AbstractProjectionChoice.java
index a640651..6d4ead3 100644
--- a/src/org/openstreetmap/josm/gui/preferences/projection/AbstractProjectionChoice.java
+++ b/src/org/openstreetmap/josm/gui/preferences/projection/AbstractProjectionChoice.java
@@ -10,39 +10,35 @@ import org.openstreetmap.josm.data.projection.Projections;
 /**
  * Super class for ProjectionChoice implementations.
  * <p>
- * Handles common parameters <code>name</code>, <code>id</code> and <code>cacheDir</code>.
+ * Handles common parameters <code>name</code> and <code>id</code>.
  */
 public abstract class AbstractProjectionChoice implements ProjectionChoice {
 
     protected String name;
     protected String id;
-    protected String cacheDir;
 
     /**
      * Constructs a new {@code AbstractProjectionChoice}.
      *
      * @param name short name of the projection choice as shown in the GUI
      * @param id unique identifier for the projection choice
-     * @param cacheDir a cache directory name
+     * @param cacheDir unused
+     * @deprecated use {@link #AbstractProjectionChoice(String, String)} instead
      */
+    @Deprecated
     public AbstractProjectionChoice(String name, String id, String cacheDir) {
-        this.name = name;
-        this.id = id;
-        this.cacheDir = cacheDir;
+        this(name, id);
     }
 
     /**
      * Constructs a new {@code AbstractProjectionChoice}.
      *
-     * Only for core projection choices, where chacheDir is the same as
-     * the second part of the id.
      * @param name short name of the projection choice as shown in the GUI
      * @param id unique identifier for the projection choice
      */
     public AbstractProjectionChoice(String name, String id) {
-        this(name, id, null);
-        if (!id.startsWith("core:")) throw new IllegalArgumentException(id+" does not start with core:");
-        this.cacheDir = id.substring(5);
+        this.name = name;
+        this.id = id;
     }
 
     @Override
@@ -50,23 +46,21 @@ public abstract class AbstractProjectionChoice implements ProjectionChoice {
         return id;
     }
 
-    /**
-    * Get the cache directory name.
-    * @return the cache directory name (base name)
-    * @deprecated unused - remove in 2017-09
-    */
-    @Deprecated
-    public String getCacheDir() {
-        return cacheDir;
-    }
-
     @Override
     public String toString() {
         return name;
     }
 
+    /**
+     * Returns current projection code.
+     * @return current projection code
+     */
     public abstract String getCurrentCode();
 
+    /**
+     * Returns projection name.
+     * @return projection name
+     */
     public abstract String getProjectionName();
 
     @Override
diff --git a/src/org/openstreetmap/josm/gui/preferences/projection/CodeProjectionChoice.java b/src/org/openstreetmap/josm/gui/preferences/projection/CodeProjectionChoice.java
index 80f1769..02d5423 100644
--- a/src/org/openstreetmap/josm/gui/preferences/projection/CodeProjectionChoice.java
+++ b/src/org/openstreetmap/josm/gui/preferences/projection/CodeProjectionChoice.java
@@ -91,7 +91,7 @@ public class CodeProjectionChoice extends AbstractProjectionChoice implements Su
             filter.setColumns(10);
             filter.getDocument().addDocumentListener(this);
 
-            selectionList = new JList<>(data.toArray(new String[data.size()]));
+            selectionList = new JList<>(data.toArray(new String[0]));
             selectionList.setModel(model);
             JScrollPane scroll = new JScrollPane(selectionList);
             scroll.setPreferredSize(new Dimension(200, 214));
diff --git a/src/org/openstreetmap/josm/gui/preferences/projection/ProjectionPreference.java b/src/org/openstreetmap/josm/gui/preferences/projection/ProjectionPreference.java
index 0d31be6..2a56922 100644
--- a/src/org/openstreetmap/josm/gui/preferences/projection/ProjectionPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/projection/ProjectionPreference.java
@@ -79,7 +79,7 @@ public class ProjectionPreference implements SubPreferenceSetting {
     /**
      * WGS84: Directly use latitude / longitude values as x/y.
      */
-    public static final ProjectionChoice wgs84 = registerProjectionChoice(tr("WGS84 Geographic"), "core:wgs84", 4326, "epsg4326");
+    public static final ProjectionChoice wgs84 = registerProjectionChoice(tr("WGS84 Geographic"), "core:wgs84", 4326);
 
     /**
      * Mercator Projection.
@@ -271,12 +271,27 @@ public class ProjectionPreference implements SubPreferenceSetting {
         }
     }
 
+    /**
+     * Registers a new projection choice.
+     * @param name short name of the projection choice as shown in the GUI
+     * @param id short name of the projection choice as shown in the GUI
+     * @param epsg the unique numeric EPSG identifier for the projection
+     * @param cacheDir unused
+     * @return the registered {@link ProjectionChoice}
+     * @deprecated use {@link #registerProjectionChoice(String, String, Integer)} instead
+     */
+    @Deprecated
     public static ProjectionChoice registerProjectionChoice(String name, String id, Integer epsg, String cacheDir) {
-        ProjectionChoice pc = new SingleProjectionChoice(name, id, "EPSG:"+epsg, cacheDir);
-        registerProjectionChoice(pc);
-        return pc;
+        return registerProjectionChoice(name, id, epsg);
     }
 
+    /**
+     * Registers a new projection choice.
+     * @param name short name of the projection choice as shown in the GUI
+     * @param id short name of the projection choice as shown in the GUI
+     * @param epsg the unique numeric EPSG identifier for the projection
+     * @return the registered {@link ProjectionChoice}
+     */
     private static ProjectionChoice registerProjectionChoice(String name, String id, Integer epsg) {
         ProjectionChoice pc = new SingleProjectionChoice(name, id, "EPSG:"+epsg);
         registerProjectionChoice(pc);
@@ -342,7 +357,7 @@ public class ProjectionPreference implements SubPreferenceSetting {
 
     public ProjectionPreference() {
         this.projectionCombo = new JosmComboBox<>(
-            projectionChoices.toArray(new ProjectionChoice[projectionChoices.size()]));
+            projectionChoices.toArray(new ProjectionChoice[0]));
         this.coordinatesCombo = new JosmComboBox<>(
                 CoordinateFormatManager.getCoordinateFormats().toArray(new ICoordinateFormat[0]));
     }
diff --git a/src/org/openstreetmap/josm/gui/preferences/projection/SingleProjectionChoice.java b/src/org/openstreetmap/josm/gui/preferences/projection/SingleProjectionChoice.java
index fb82165..af47c5c 100644
--- a/src/org/openstreetmap/josm/gui/preferences/projection/SingleProjectionChoice.java
+++ b/src/org/openstreetmap/josm/gui/preferences/projection/SingleProjectionChoice.java
@@ -22,11 +22,12 @@ public class SingleProjectionChoice extends AbstractProjectionChoice {
      * @param name short name of the projection choice as shown in the GUI
      * @param id unique identifier for the projection choice, e.g. "core:thisproj"
      * @param code the unique identifier for the projection, e.g. "EPSG:1234"
-     * @param cacheDir a cache directory name
+     * @param cacheDir unused
+     * @deprecated use {@link #SingleProjectionChoice(String, String, String)} instead
      */
+    @Deprecated
     public SingleProjectionChoice(String name, String id, String code, String cacheDir) {
-        super(name, id, cacheDir);
-        this.code = code;
+        this(name, id, code);
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/gui/preferences/projection/UTMProjectionChoice.java b/src/org/openstreetmap/josm/gui/preferences/projection/UTMProjectionChoice.java
index 2b21f1a..4d59529 100644
--- a/src/org/openstreetmap/josm/gui/preferences/projection/UTMProjectionChoice.java
+++ b/src/org/openstreetmap/josm/gui/preferences/projection/UTMProjectionChoice.java
@@ -41,7 +41,7 @@ public class UTMProjectionChoice extends ListProjectionChoice {
      * Constructs a new {@code UTMProjectionChoice}.
      */
     public UTMProjectionChoice() {
-        super(tr("UTM"), /* NO-ICON */ "core:utm", cbEntries.toArray(new String[cbEntries.size()]), tr("UTM Zone"));
+        super(tr("UTM"), /* NO-ICON */ "core:utm", cbEntries.toArray(new String[0]), tr("UTM Zone"));
     }
 
     private class UTMPanel extends CBPanel {
@@ -117,7 +117,7 @@ public class UTMProjectionChoice extends ListProjectionChoice {
                 projections.add("EPSG:" + (32600 + zone + (hem == Hemisphere.South ? 100 : 0)));
             }
         }
-        return projections.toArray(new String[projections.size()]);
+        return projections.toArray(new String[0]);
     }
 
     @Override
@@ -143,7 +143,7 @@ public class UTMProjectionChoice extends ListProjectionChoice {
         Hemisphere hem = DEFAULT_HEMISPHERE;
 
         if (args != null) {
-            String[] array = args.toArray(new String[args.size()]);
+            String[] array = args.toArray(new String[0]);
 
             if (array.length > 1) {
                 hem = Hemisphere.valueOf(array[1]);
diff --git a/src/org/openstreetmap/josm/gui/preferences/server/OverpassServerPreference.java b/src/org/openstreetmap/josm/gui/preferences/server/OverpassServerPreference.java
index 72e3c33..2f76198 100644
--- a/src/org/openstreetmap/josm/gui/preferences/server/OverpassServerPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/server/OverpassServerPreference.java
@@ -75,24 +75,4 @@ public class OverpassServerPreference implements SubPreferenceSetting {
     public boolean isExpert() {
         return true;
     }
-
-    /**
-     * 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 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 OverpassDownloadReader.FOR_MULTI_FETCH.get();
-    }
 }
diff --git a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingComboBox.java b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingComboBox.java
index 986e636..3e0bc3a 100644
--- a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingComboBox.java
+++ b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingComboBox.java
@@ -9,7 +9,6 @@ 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;
@@ -245,7 +244,6 @@ public class AutoCompletingComboBox extends JosmComboBox<AutoCompletionItem> {
      * @param item      excepts AutoCompletionListItem, String and null
      */
     @Override
-    @SuppressWarnings("deprecation")
     public void configureEditor(ComboBoxEditor cbEditor, Object item) {
         if (item == null) {
             cbEditor.setItem(null);
@@ -253,8 +251,6 @@ public class AutoCompletingComboBox extends JosmComboBox<AutoCompletionItem> {
             cbEditor.setItem(item);
         } else if (item instanceof AutoCompletionItem) {
             cbEditor.setItem(((AutoCompletionItem) item).getValue());
-        } else if (item instanceof AutoCompletionListItem) {
-            cbEditor.setItem(((AutoCompletionListItem) item).getItem().getValue());
         } else
             throw new IllegalArgumentException("Unsupported item: "+item);
     }
@@ -264,14 +260,11 @@ public class AutoCompletingComboBox extends JosmComboBox<AutoCompletionItem> {
      * @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 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
@@ -306,16 +299,6 @@ public class AutoCompletingComboBox extends JosmComboBox<AutoCompletionItem> {
     }
 
     /**
-     * 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) {
-        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
diff --git a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingTextField.java b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingTextField.java
index 653acab..43da39d 100644
--- a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingTextField.java
+++ b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingTextField.java
@@ -19,6 +19,7 @@ import javax.swing.text.Document;
 import javax.swing.text.PlainDocument;
 import javax.swing.text.StyleConstants;
 
+import org.openstreetmap.josm.data.tagging.ac.AutoCompletionItem;
 import org.openstreetmap.josm.gui.util.CellEditorSupport;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
 import org.openstreetmap.josm.spi.preferences.Config;
@@ -28,7 +29,7 @@ import org.openstreetmap.josm.tools.Logging;
  * AutoCompletingTextField is a text field with autocompletion behaviour. It
  * can be used as table cell editor in {@link JTable}s.
  *
- * Autocompletion is controlled by a list of {@link AutoCompletionListItem}s
+ * Autocompletion is controlled by a list of {@link AutoCompletionItem}s
  * managed in a {@link AutoCompletionList}.
  *
  * @since 1762
diff --git a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionItemPriority.java b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionItemPriority.java
deleted file mode 100644
index 425ccdd..0000000
--- a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionItemPriority.java
+++ /dev/null
@@ -1,149 +0,0 @@
-// 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> {
-
-    /**
-     * 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(
-            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(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(AutoCompletionPriority.IS_IN_STANDARD);
-
-    /**
-     * Indicates that this is a value from a selected object.
-     */
-    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(AutoCompletionPriority.UNKNOWN);
-
-    private static final int NO_USER_INPUT = Integer.MAX_VALUE;
-
-    private final AutoCompletionPriority priority;
-
-    /**
-     * Constructs a new {@code AutoCompletionItemPriority}.
-     *
-     * @param inDataSet true, if the item is found in the currently active data layer
-     * @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
-     * @param userInput null, if the user hasn't entered this tag so far. A number when
-     * 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) {
-        this(new AutoCompletionPriority(inDataSet, inStandard, selected, userInput));
-    }
-
-    /**
-     * Constructs a new {@code AutoCompletionItemPriority}.
-     *
-     * @param inDataSet true, if the item is found in the currently active data layer
-     * @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) {
-        this(inDataSet, inStandard, selected, NO_USER_INPUT);
-    }
-
-    /**
-     * 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 priority.isInDataSet();
-    }
-
-    /**
-     * Determines if the item is a standard tag, e.g. from the presets.
-     * @return {@code true} if the item is a standard tag, e.g. from the presets
-     */
-    public boolean isInStandard() {
-        return priority.isInStandard();
-    }
-
-    /**
-     * Determines if it is found on an object that is currently selected.
-     * @return {@code true} if it is found on an object that is currently selected
-     */
-    public boolean isSelected() {
-        return priority.isSelected();
-    }
-
-    /**
-     * Returns a number when 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.
-     * @return a number when the tag key / value has been entered by the user before.
-     *         {@code null}, if the user hasn't entered this tag so far.
-     */
-    public Integer getUserInput() {
-        return priority.getUserInput();
-    }
-
-    /**
-     * Imposes an ordering on the priorities.
-     * Currently, being in the current DataSet is worth more than being in the Presets.
-     */
-    @Override
-    public int compareTo(AutoCompletionItemPriority other) {
-        return priority.compareTo(other.priority);
-    }
-
-    /**
-     * Merges two priorities.
-     * The resulting priority is always >= the original ones.
-     * @param other other priority
-     * @return the merged priority
-     */
-    public AutoCompletionItemPriority mergeWith(AutoCompletionItemPriority other) {
-        return new AutoCompletionItemPriority(priority.mergeWith(other.priority));
-    }
-
-    @Override
-    public String toString() {
-        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 7121c26..c7c979c 100644
--- a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionList.java
+++ b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionList.java
@@ -4,9 +4,7 @@ package org.openstreetmap.josm.gui.tagging.ac;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.List;
 import java.util.Set;
-import java.util.stream.Collectors;
 
 import javax.swing.JTable;
 import javax.swing.table.AbstractTableModel;
@@ -50,7 +48,7 @@ public class AutoCompletionList extends AbstractTableModel {
     }
 
     /**
-     * applies a filter expression to the list of {@link AutoCompletionListItem}s.
+     * applies a filter expression to the list of {@link AutoCompletionItem}s.
      *
      * The matching criterion is a case insensitive substring match.
      *
@@ -80,20 +78,6 @@ public class AutoCompletionList extends AbstractTableModel {
     }
 
     /**
-     * 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;
-        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.
      *
@@ -134,33 +118,6 @@ public class AutoCompletionList extends AbstractTableModel {
     }
 
     /**
-     * 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");
-        add(other.stream().map(AutoCompletionListItem::getItem).collect(Collectors.toList()));
-    }
-
-    /**
-     * 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
-     * @deprecated to be removed end of 2017. Use {@link #add(Collection, AutoCompletionPriority)} instead
-     */
-    @Deprecated
-    public void add(Collection<String> values, AutoCompletionItemPriority priority) {
-        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.
      *
@@ -190,21 +147,6 @@ 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) {
@@ -263,19 +205,6 @@ 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) {
-        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) {
diff --git a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionListItem.java b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionListItem.java
deleted file mode 100644
index d6e20f5..0000000
--- a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionListItem.java
+++ /dev/null
@@ -1,128 +0,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui.tagging.ac;
-
-import org.openstreetmap.josm.data.tagging.ac.AutoCompletionItem;
-
-/**
- * Represents an entry in the list of auto completion values.
- *
- *  An AutoCompletionListItem 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
- *  priority than arbitrary tag names present in the current data set. There are three priority levels,
- *  {@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 item */
-    private final AutoCompletionItem item;
-
-    /**
-     * Constructs a new {@code AutoCompletionListItem} with the given value and priority.
-     * @param value The value
-     * @param priority The priority
-     */
-    public AutoCompletionListItem(String value, AutoCompletionItemPriority priority) {
-        this.item = new AutoCompletionItem(value, priority.getPriority());
-    }
-
-    /**
-     * Constructs a new {@code AutoCompletionListItem} with the given value and unknown priority.
-     * @param value The value
-     */
-    public AutoCompletionListItem(String value) {
-        this.item = new AutoCompletionItem(value);
-    }
-
-    /**
-     * Constructs a new {@code AutoCompletionListItem}.
-     */
-    public AutoCompletionListItem() {
-        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;
-    }
-
-    /**
-     * Returns the priority.
-     * @return the priority
-     */
-    public AutoCompletionItemPriority getPriority() {
-        return new AutoCompletionItemPriority(item.getPriority());
-    }
-
-    /**
-     * Sets the priority.
-     * @param priority  the priority
-     */
-    public void setPriority(AutoCompletionItemPriority priority) {
-        item.setPriority(priority.getPriority());
-    }
-
-    /**
-     * Returns the value.
-     * @return the value
-     */
-    public String getValue() {
-        return item.getValue();
-    }
-
-    /**
-     * sets the value
-     * @param value the value; must not be null
-     * @throws IllegalArgumentException if value if null
-     */
-    public void setValue(String value) {
-        throw new UnsupportedOperationException("setValue() is no longer supported");
-    }
-
-    @Override
-    public String toString() {
-        return item.toString();
-    }
-
-    @Override
-    public int hashCode() {
-        return item.hashCode();
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj)
-            return true;
-        if (obj == null)
-            return false;
-        if (obj instanceof String)
-            return obj.equals(item.getValue());
-        if (getClass() != obj.getClass())
-            return false;
-        final AutoCompletionListItem other = (AutoCompletionListItem) obj;
-        return item.equals(other.item);
-    }
-
-    @Override
-    public int compareTo(AutoCompletionListItem other) {
-        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 d4bc092..7b14d21 100644
--- a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionManager.java
+++ b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionManager.java
@@ -244,7 +244,7 @@ public class AutoCompletionManager implements DataSetListener {
 
     /**
      * replies the auto completion values allowed for a specific key. Replies
-     * an empty list if key is null or if key is not in {@link #getKeys()}.
+     * an empty list if key is null or if key is not in {@link #getTagKeys()}.
      *
      * @param key OSM key
      * @return the list of auto completion values
@@ -344,38 +344,6 @@ 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() {
-        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 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);
diff --git a/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java b/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java
index 225a62b..b945be8 100644
--- a/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java
+++ b/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java
@@ -216,7 +216,7 @@ public class TaggingPreset extends AbstractAction implements ActiveLayerChangeLi
         imgProv.setId("presets");
         imgProv.setArchive(arch);
         imgProv.setOptional(true);
-        imgProv.getResourceAsync().thenAccept(result -> {
+        imgProv.getResourceAsync(result -> {
             if (result != null) {
                 GuiHelper.runInEDT(() -> result.attachImageIcon(this));
             } else {
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 b755b8e..bf8f231 100644
--- a/src/org/openstreetmap/josm/gui/tagging/presets/items/Check.java
+++ b/src/org/openstreetmap/josm/gui/tagging/presets/items/Check.java
@@ -80,7 +80,7 @@ public class Check extends KeyedItem {
             allowedStates.add(QuadStateCheckBox.State.NOT_SELECTED);
         allowedStates.add(QuadStateCheckBox.State.UNSET);
         check = new QuadStateCheckBox(locale_text, initialState,
-                allowedStates.toArray(new QuadStateCheckBox.State[allowedStates.size()]));
+                allowedStates.toArray(new QuadStateCheckBox.State[0]));
         check.setPropertyText(key);
         check.setState(check.getState()); // to update the tooltip text
 
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 70af65c..9e5b697 100644
--- a/src/org/openstreetmap/josm/gui/tagging/presets/items/ComboMultiSelect.java
+++ b/src/org/openstreetmap/josm/gui/tagging/presets/items/ComboMultiSelect.java
@@ -343,7 +343,7 @@ public abstract class ComboMultiSelect extends KeyedItem {
         if (item.length() > 0) {
             result.add(item.toString());
         }
-        return result.toArray(new String[result.size()]);
+        return result.toArray(new String[0]);
     }
 
     protected abstract Object getSelectedItem();
diff --git a/src/org/openstreetmap/josm/gui/tagging/presets/items/KeyedItem.java b/src/org/openstreetmap/josm/gui/tagging/presets/items/KeyedItem.java
index b7d749d..698d564 100644
--- a/src/org/openstreetmap/josm/gui/tagging/presets/items/KeyedItem.java
+++ b/src/org/openstreetmap/josm/gui/tagging/presets/items/KeyedItem.java
@@ -99,7 +99,7 @@ public abstract class KeyedItem extends TaggingPresetItem {
         /**
          * A set of values that were used for this key.
          */
-        public final SortedSet<String> values = new TreeSet<>();; // NOSONAR
+        public final SortedSet<String> values = new TreeSet<>(); // NOSONAR
         private boolean hadKeys;
         private boolean hadEmpty;
 
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 962cc9e..6a35c44 100644
--- a/src/org/openstreetmap/josm/gui/tagging/presets/items/Text.java
+++ b/src/org/openstreetmap/josm/gui/tagging/presets/items/Text.java
@@ -106,7 +106,7 @@ public class Text extends KeyedItem {
             originalValue = usage.getFirst();
         } else {
             // the objects have different values
-            JosmComboBox<String> comboBox = new JosmComboBox<>(usage.values.toArray(new String[usage.values.size()]));
+            JosmComboBox<String> comboBox = new JosmComboBox<>(usage.values.toArray(new String[0]));
             comboBox.setEditable(true);
             comboBox.setEditor(textField);
             comboBox.getEditor().setItem(DIFFERENT);
diff --git a/src/org/openstreetmap/josm/gui/util/AdvancedKeyPressDetector.java b/src/org/openstreetmap/josm/gui/util/AdvancedKeyPressDetector.java
index aaf570c..f164409 100644
--- a/src/org/openstreetmap/josm/gui/util/AdvancedKeyPressDetector.java
+++ b/src/org/openstreetmap/josm/gui/util/AdvancedKeyPressDetector.java
@@ -35,13 +35,7 @@ public class AdvancedKeyPressDetector implements AWTEventListener {
     private Timer timer;
 
     private final List<KeyPressReleaseListener> keyListeners = new CopyOnWriteArrayList<>();
-    /** @deprecated replaced by {@link #modifierExListeners} */
-    @Deprecated
-    private final List<ModifierListener> modifierListeners = new CopyOnWriteArrayList<>();
     private final ListenerList<ModifierExListener> modifierExListeners = ListenerList.create();
-    /** @deprecated replaced by {@link #previousModifiersEx} */
-    @Deprecated
-    private int previousModifiers;
     private int previousModifiersEx;
 
     private boolean enabled = true;
@@ -55,16 +49,6 @@ public class AdvancedKeyPressDetector implements AWTEventListener {
     }
 
     /**
-     * Adds an object that wants to receive key modifier changed events.
-     * @param l listener to add
-     * @deprecated use {@link #addModifierExListener} instead
-     */
-    @Deprecated
-    public void addModifierListener(ModifierListener l) {
-        modifierListeners.add(l);
-    }
-
-    /**
      * Adds an object that wants to receive extended key modifier changed events.
      * @param l listener to add
      * @since 12517
@@ -82,16 +66,6 @@ public class AdvancedKeyPressDetector implements AWTEventListener {
     }
 
     /**
-     * Removes the key modifier listener.
-     * @param l listener to remove
-     * @deprecated use {@link #removeModifierExListener} instead
-     */
-    @Deprecated
-    public void removeModifierListener(ModifierListener l) {
-        modifierListeners.remove(l);
-    }
-
-    /**
      * Removes the extended key modifier listener.
      * @param l listener to remove
      * @since 12517
@@ -131,9 +105,6 @@ public class AdvancedKeyPressDetector implements AWTEventListener {
         if (!keyListeners.isEmpty()) {
             Logging.warn(tr("Some of the key listeners forgot to remove themselves: {0}"), keyListeners.toString());
         }
-        if (!modifierListeners.isEmpty()) {
-            Logging.warn(tr("Some of the key modifier listeners forgot to remove themselves: {0}"), modifierListeners.toString());
-        }
         if (modifierExListeners.hasListeners()) {
             Logging.warn(tr("Some of the key modifier listeners forgot to remove themselves: {0}"), modifierExListeners.toString());
         }
@@ -175,22 +146,12 @@ public class AdvancedKeyPressDetector implements AWTEventListener {
     }
 
     @Override
-    @SuppressWarnings("deprecation")
     public void eventDispatched(AWTEvent e) {
         if (!(e instanceof KeyEvent)) {
             return;
         }
         KeyEvent ke = (KeyEvent) e;
 
-        // check if ctrl, alt, shift modifiers are changed
-        int modif = ke.getModifiers();
-        if (previousModifiers != modif) {
-            previousModifiers = modif;
-            for (ModifierListener m: modifierListeners) {
-                m.modifiersChanged(modif);
-            }
-        }
-
         // check if ctrl, alt, shift extended modifiers are changed
         int modifEx = ke.getModifiersEx();
         if (previousModifiersEx != modifEx) {
diff --git a/src/org/openstreetmap/josm/gui/util/GuiHelper.java b/src/org/openstreetmap/josm/gui/util/GuiHelper.java
index 038df7a..abe7843 100644
--- a/src/org/openstreetmap/josm/gui/util/GuiHelper.java
+++ b/src/org/openstreetmap/josm/gui/util/GuiHelper.java
@@ -20,7 +20,6 @@ import java.awt.Stroke;
 import java.awt.Toolkit;
 import java.awt.Window;
 import java.awt.event.ActionListener;
-import java.awt.event.KeyEvent;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
 import java.awt.image.FilteredImageSource;
@@ -65,7 +64,6 @@ 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;
 
@@ -461,23 +459,6 @@ public final class GuiHelper {
     }
 
     /**
-     * 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 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;
-    }
-
-    /**
      * Sets a global font for all UI, replacing default font of current look and feel.
      * @param name Font name. It is up to the caller to make sure the font exists
      * @throws IllegalArgumentException if name is null
diff --git a/src/org/openstreetmap/josm/gui/util/ModifierListener.java b/src/org/openstreetmap/josm/gui/util/ModifierListener.java
deleted file mode 100644
index 0f5bfa6..0000000
--- a/src/org/openstreetmap/josm/gui/util/ModifierListener.java
+++ /dev/null
@@ -1,18 +0,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui.util;
-
-/**
- * Listener called when pressed modifier keys change is detected
- * @since 7217
- * @since 10600 (functional interface)
- * @deprecated use ModifierExListener instead
- */
- at Deprecated
- at FunctionalInterface
-public interface ModifierListener {
-    /**
-     * Called when the modifiers are changed
-     * @param modifiers The new modifiers
-     */
-    void modifiersChanged(int modifiers);
-}
diff --git a/src/org/openstreetmap/josm/gui/widgets/MultiSplitLayout.java b/src/org/openstreetmap/josm/gui/widgets/MultiSplitLayout.java
index 6c451c4..3042957 100644
--- a/src/org/openstreetmap/josm/gui/widgets/MultiSplitLayout.java
+++ b/src/org/openstreetmap/josm/gui/widgets/MultiSplitLayout.java
@@ -244,6 +244,8 @@ public class MultiSplitLayout implements LayoutManager {
         String name = child.getName();
         if (name != null) {
             childMap.remove(name);
+        } else {
+            childMap.values().removeIf(child::equals);
         }
     }
 
diff --git a/src/org/openstreetmap/josm/gui/widgets/NativeFileChooser.java b/src/org/openstreetmap/josm/gui/widgets/NativeFileChooser.java
index e483a86..a76400b 100644
--- a/src/org/openstreetmap/josm/gui/widgets/NativeFileChooser.java
+++ b/src/org/openstreetmap/josm/gui/widgets/NativeFileChooser.java
@@ -55,7 +55,7 @@ public class NativeFileChooser extends AbstractFileChooser {
         // TODO implement this after Oracle fixes JDK-4811090 / JDK-6192906
         // https://bugs.openjdk.java.net/browse/JDK-4811090 : Extend awt filedialog
         // https://bugs.openjdk.java.net/browse/JDK-6192906 : Add more features to java.awt.FileDialog
-        return fileFilters.toArray(new FileFilter[fileFilters.size()]);
+        return fileFilters.toArray(new FileFilter[0]);
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/io/AbstractReader.java b/src/org/openstreetmap/josm/io/AbstractReader.java
index ab48c37..10d7a32 100644
--- a/src/org/openstreetmap/josm/io/AbstractReader.java
+++ b/src/org/openstreetmap/josm/io/AbstractReader.java
@@ -94,8 +94,8 @@ public abstract class AbstractReader {
                     if (id <= 0)
                         throw new IllegalDataException(
                                 tr("Way with external ID ''{0}'' includes missing node with external ID ''{1}''.",
-                                        externalWayId,
-                                        id));
+                                        Long.toString(externalWayId),
+                                        Long.toString(id)));
                     // create an incomplete node if necessary
                     n = (Node) ds.getPrimitiveById(id, OsmPrimitiveType.NODE);
                     if (n == null) {
@@ -104,15 +104,15 @@ public abstract class AbstractReader {
                     }
                 }
                 if (n.isDeleted()) {
-                    Logging.info(tr("Deleted node {0} is part of way {1}", id, w.getId()));
+                    Logging.info(tr("Deleted node {0} is part of way {1}", Long.toString(id), Long.toString(w.getId())));
                 } else {
                     wayNodes.add(n);
                 }
             }
             w.setNodes(wayNodes);
             if (w.hasIncompleteNodes()) {
-                Logging.info(tr("Way {0} with {1} nodes has incomplete nodes because at least one node was missing in the loaded data.",
-                          externalWayId, w.getNodesCount()));
+                Logging.info(tr("Way {0} with {1} nodes is incomplete because at least one node was missing in the loaded data.",
+                        Long.toString(externalWayId), w.getNodesCount()));
             }
             ds.addPrimitive(w);
         }
@@ -152,8 +152,8 @@ public abstract class AbstractReader {
                         //
                         throw new IllegalDataException(
                                 tr("Relation with external id ''{0}'' refers to a missing primitive with external id ''{1}''.",
-                                        externalRelationId,
-                                        rm.getMemberId()));
+                                        Long.toString(externalRelationId),
+                                        Long.toString(rm.getMemberId())));
 
                     // member refers to OSM primitive which was not present in the parsed data
                     // -> create a new incomplete primitive and add it to the dataset
@@ -175,7 +175,8 @@ public abstract class AbstractReader {
                     }
                 }
                 if (primitive.isDeleted()) {
-                    Logging.info(tr("Deleted member {0} is used by relation {1}", primitive.getId(), relation.getId()));
+                    Logging.info(tr("Deleted member {0} is used by relation {1}",
+                            Long.toString(primitive.getId()), Long.toString(relation.getId())));
                 } else {
                     relationMembers.add(new RelationMember(rm.getRole(), primitive));
                 }
diff --git a/src/org/openstreetmap/josm/io/CacheCustomContent.java b/src/org/openstreetmap/josm/io/CacheCustomContent.java
index 507e981..1415ef5 100644
--- a/src/org/openstreetmap/josm/io/CacheCustomContent.java
+++ b/src/org/openstreetmap/josm/io/CacheCustomContent.java
@@ -4,10 +4,10 @@ package org.openstreetmap.josm.io;
 import java.io.BufferedInputStream;
 import java.io.BufferedOutputStream;
 import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.InvalidPathException;
 import java.util.concurrent.TimeUnit;
 
 import org.openstreetmap.josm.spi.preferences.Config;
@@ -184,12 +184,12 @@ public abstract class CacheCustomContent<T extends Throwable> {
      * @throws T a {@link Throwable}
      */
     private void loadFromDisk() throws T {
-        try (BufferedInputStream input = new BufferedInputStream(new FileInputStream(path))) {
+        try (BufferedInputStream input = new BufferedInputStream(Files.newInputStream(path.toPath()))) {
             this.data = new byte[input.available()];
             if (input.read(this.data) < this.data.length) {
                 Logging.error("Failed to read expected contents from "+path);
             }
-        } catch (IOException e) {
+        } catch (IOException | InvalidPathException e) {
             Logging.trace(e);
             if (!isOffline()) {
                 this.data = updateForce();
@@ -201,10 +201,10 @@ public abstract class CacheCustomContent<T extends Throwable> {
      * Stores the data to disk
      */
     private void saveToDisk() {
-        try (BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream(path))) {
+        try (BufferedOutputStream output = new BufferedOutputStream(Files.newOutputStream(path.toPath()))) {
             output.write(this.data);
             output.flush();
-        } catch (IOException e) {
+        } catch (IOException | InvalidPathException e) {
             Logging.error(e);
         }
     }
diff --git a/src/org/openstreetmap/josm/io/CachedFile.java b/src/org/openstreetmap/josm/io/CachedFile.java
index 2f20322..3848129 100644
--- a/src/org/openstreetmap/josm/io/CachedFile.java
+++ b/src/org/openstreetmap/josm/io/CachedFile.java
@@ -7,7 +7,6 @@ import java.io.BufferedReader;
 import java.io.ByteArrayOutputStream;
 import java.io.Closeable;
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.HttpURLConnection;
@@ -217,7 +216,7 @@ public class CachedFile implements Closeable {
                 throw new IOException("No file found for: "+name);
             }
         }
-        return new FileInputStream(file);
+        return Files.newInputStream(file.toPath());
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/io/ChangesetClosedException.java b/src/org/openstreetmap/josm/io/ChangesetClosedException.java
index 40ed7fb..9b22ff8 100644
--- a/src/org/openstreetmap/josm/io/ChangesetClosedException.java
+++ b/src/org/openstreetmap/josm/io/ChangesetClosedException.java
@@ -97,14 +97,26 @@ public class ChangesetClosedException extends OsmTransferException {
     }
 
     /**
-     * Creates the exception with the given error header and the given
-     * source.
+     * Creates the exception with the given error header and source.
      *
      * @param errorHeader the error header
      * @param source the source for the exception
      */
     public ChangesetClosedException(String errorHeader, Source source) {
-        super(errorHeader);
+        this(errorHeader, source, null);
+    }
+
+    /**
+     * Creates the exception with the given error header, source and cause.
+     *
+     * @param errorHeader the error header
+     * @param source the source for the exception
+     * @param cause  The cause (which is saved for later retrieval by the {@link #getCause} method).
+     *               A null value is permitted, and indicates that the cause is nonexistent or unknown.
+     * @since 13207
+     */
+    public ChangesetClosedException(String errorHeader, Source source, Throwable cause) {
+        super(errorHeader, cause);
         parseErrorHeader(errorHeader);
         this.source = source == null ? Source.UNSPECIFIED : source;
     }
diff --git a/src/org/openstreetmap/josm/io/Compression.java b/src/org/openstreetmap/josm/io/Compression.java
index 5d10bdd..3f79422 100644
--- a/src/org/openstreetmap/josm/io/Compression.java
+++ b/src/org/openstreetmap/josm/io/Compression.java
@@ -2,12 +2,11 @@
 package org.openstreetmap.josm.io;
 
 import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
 import java.util.zip.GZIPInputStream;
 import java.util.zip.GZIPOutputStream;
 import java.util.zip.ZipEntry;
@@ -149,7 +148,7 @@ public enum Compression {
      * @throws IOException if any I/O error occurs
      */
     public static InputStream getUncompressedFileInputStream(File file) throws IOException {
-        FileInputStream in = new FileInputStream(file);
+        InputStream in = Files.newInputStream(file.toPath());
         try {
             return byExtension(file.getName()).getUncompressedInputStream(in);
         } catch (IOException e) {
@@ -187,7 +186,7 @@ public enum Compression {
      * @throws IOException if any I/O error occurs
      */
     public static OutputStream getCompressedFileOutputStream(File file) throws IOException {
-        FileOutputStream out = new FileOutputStream(file);
+        OutputStream out = Files.newOutputStream(file.toPath());
         try {
             return byExtension(file.getName()).getCompressedOutputStream(out);
         } catch (IOException e) {
diff --git a/src/org/openstreetmap/josm/io/FileWatcher.java b/src/org/openstreetmap/josm/io/FileWatcher.java
index 432bb41..2dde643 100644
--- a/src/org/openstreetmap/josm/io/FileWatcher.java
+++ b/src/org/openstreetmap/josm/io/FileWatcher.java
@@ -19,7 +19,6 @@ import java.util.function.Consumer;
 
 import org.openstreetmap.josm.data.preferences.sources.SourceEntry;
 import org.openstreetmap.josm.data.preferences.sources.SourceType;
-import org.openstreetmap.josm.gui.mappaint.StyleSource;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.Logging;
 
@@ -57,33 +56,6 @@ public class FileWatcher {
     }
 
     /**
-     * Registers a map paint style for local file changes, allowing dynamic reloading.
-     * @param style The style to watch
-     * @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 {
-        registerSource(style);
-    }
-
-    /**
-     * Registers a validator rule for local file changes, allowing dynamic reloading.
-     * @param rule The rule 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 7276
-     * @deprecated To be removed end of 2017. Use {@link #registerSource} instead
-     */
-    @Deprecated
-    public void registerValidatorRule(SourceEntry rule) throws IOException {
-        registerSource(rule);
-    }
-
-    /**
      * 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
diff --git a/src/org/openstreetmap/josm/io/GeoJSONWriter.java b/src/org/openstreetmap/josm/io/GeoJSONWriter.java
index 67f57df..f436f66 100644
--- a/src/org/openstreetmap/josm/io/GeoJSONWriter.java
+++ b/src/org/openstreetmap/josm/io/GeoJSONWriter.java
@@ -30,7 +30,6 @@ import org.openstreetmap.josm.data.osm.Way;
 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.tools.Logging;
 import org.openstreetmap.josm.tools.Pair;
@@ -48,17 +47,6 @@ 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.data);
-    }
-
-    /**
-     * Constructs a new {@code GeoJSONWriter}.
      * @param ds The OSM data set to save
      * @since 12806
      */
diff --git a/src/org/openstreetmap/josm/io/GpxReader.java b/src/org/openstreetmap/josm/io/GpxReader.java
index 3fb659b..e9fe8a1 100644
--- a/src/org/openstreetmap/josm/io/GpxReader.java
+++ b/src/org/openstreetmap/josm/io/GpxReader.java
@@ -89,18 +89,31 @@ public class GpxReader implements GpxConstants {
             data = new GpxData();
         }
 
+        private double parseCoord(Attributes atts, String key) {
+            String val = atts.getValue(key);
+            if (val != null) {
+                return parseCoord(val);
+            } else {
+                // Some software do not respect GPX schema and use "minLat" / "minLon" instead of "minlat" / "minlon"
+                return parseCoord(atts.getValue(key.replaceFirst("l", "L")));
+            }
+        }
+
         private double parseCoord(String s) {
-            try {
-                return Double.parseDouble(s);
-            } catch (NumberFormatException ex) {
-                return Double.NaN;
+            if (s != null) {
+                try {
+                    return Double.parseDouble(s);
+                } catch (NumberFormatException ex) {
+                    Logging.trace(ex);
+                }
             }
+            return Double.NaN;
         }
 
         private LatLon parseLatLon(Attributes atts) {
             return new LatLon(
-                    parseCoord(atts.getValue("lat")),
-                    parseCoord(atts.getValue("lon")));
+                    parseCoord(atts, "lat"),
+                    parseCoord(atts, "lon"));
         }
 
         @Override
@@ -177,10 +190,10 @@ public class GpxReader implements GpxConstants {
                     break;
                 case "bounds":
                     data.put(META_BOUNDS, new Bounds(
-                                parseCoord(atts.getValue("minlat")),
-                                parseCoord(atts.getValue("minlon")),
-                                parseCoord(atts.getValue("maxlat")),
-                                parseCoord(atts.getValue("maxlon"))));
+                                parseCoord(atts, "minlat"),
+                                parseCoord(atts, "minlon"),
+                                parseCoord(atts, "maxlat"),
+                                parseCoord(atts, "maxlon")));
                     break;
                 default: // Do nothing
                 }
diff --git a/src/org/openstreetmap/josm/io/OsmApi.java b/src/org/openstreetmap/josm/io/OsmApi.java
index 43ed43b..1cd9cee 100644
--- a/src/org/openstreetmap/josm/io/OsmApi.java
+++ b/src/org/openstreetmap/josm/io/OsmApi.java
@@ -486,7 +486,7 @@ public class OsmApi extends OsmConnection {
         } catch (OsmApiException e) {
             String errorHeader = e.getErrorHeader();
             if (e.getResponseCode() == HttpURLConnection.HTTP_CONFLICT && ChangesetClosedException.errorHeaderMatchesPattern(errorHeader))
-                throw new ChangesetClosedException(errorHeader, ChangesetClosedException.Source.UPDATE_CHANGESET);
+                throw new ChangesetClosedException(errorHeader, ChangesetClosedException.Source.UPDATE_CHANGESET, e);
             throw e;
         } finally {
             monitor.finishTask();
diff --git a/src/org/openstreetmap/josm/io/OsmReader.java b/src/org/openstreetmap/josm/io/OsmReader.java
index d2fb224..a9e4f4e 100644
--- a/src/org/openstreetmap/josm/io/OsmReader.java
+++ b/src/org/openstreetmap/josm/io/OsmReader.java
@@ -276,7 +276,7 @@ public class OsmReader extends AbstractReader {
             }
         }
         if (w.isDeleted() && !nodeIds.isEmpty()) {
-            Logging.info(tr("Deleted way {0} contains nodes", w.getUniqueId()));
+            Logging.info(tr("Deleted way {0} contains nodes", Long.toString(w.getUniqueId())));
             nodeIds = new ArrayList<>();
         }
         ways.put(wd.getUniqueId(), nodeIds);
@@ -286,13 +286,13 @@ public class OsmReader extends AbstractReader {
     private long parseWayNode(Way w) throws XMLStreamException {
         if (parser.getAttributeValue(null, "ref") == null) {
             throwException(
-                    tr("Missing mandatory attribute ''{0}'' on <nd> of way {1}.", "ref", w.getUniqueId())
+                    tr("Missing mandatory attribute ''{0}'' on <nd> of way {1}.", "ref", Long.toString(w.getUniqueId()))
             );
         }
         long id = getLong("ref");
         if (id == 0) {
             throwException(
-                    tr("Illegal value of attribute ''ref'' of element <nd>. Got {0}.", id)
+                    tr("Illegal value of attribute ''ref'' of element <nd>. Got {0}.", Long.toString(id))
             );
         }
         jumpToEnd();
@@ -326,7 +326,7 @@ public class OsmReader extends AbstractReader {
             }
         }
         if (r.isDeleted() && !members.isEmpty()) {
-            Logging.info(tr("Deleted relation {0} contains members", r.getUniqueId()));
+            Logging.info(tr("Deleted relation {0} contains members", Long.toString(r.getUniqueId())));
             members = new ArrayList<>();
         }
         relations.put(rd.getUniqueId(), members);
@@ -338,7 +338,7 @@ public class OsmReader extends AbstractReader {
         long id = 0;
         String value = parser.getAttributeValue(null, "ref");
         if (value == null) {
-            throwException(tr("Missing attribute ''ref'' on member in relation {0}.", r.getUniqueId()));
+            throwException(tr("Missing attribute ''ref'' on member in relation {0}.", Long.toString(r.getUniqueId())));
         }
         try {
             id = Long.parseLong(value);
diff --git a/src/org/openstreetmap/josm/io/OsmWriter.java b/src/org/openstreetmap/josm/io/OsmWriter.java
index c633bee..423c27d 100644
--- a/src/org/openstreetmap/josm/io/OsmWriter.java
+++ b/src/org/openstreetmap/josm/io/OsmWriter.java
@@ -28,7 +28,6 @@ import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.Tagged;
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.osm.visitor.PrimitiveVisitor;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.tools.date.DateUtils;
 
 /**
@@ -130,16 +129,6 @@ public class OsmWriter extends XmlWriter implements PrimitiveVisitor {
     }
 
     /**
-     * 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) {
-        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
diff --git a/src/org/openstreetmap/josm/io/ProgressInputStream.java b/src/org/openstreetmap/josm/io/ProgressInputStream.java
index e0c1f2b..c557640 100644
--- a/src/org/openstreetmap/josm/io/ProgressInputStream.java
+++ b/src/org/openstreetmap/josm/io/ProgressInputStream.java
@@ -5,7 +5,6 @@ import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.io.IOException;
 import java.io.InputStream;
-import java.net.URLConnection;
 import java.util.Optional;
 
 import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
@@ -36,35 +35,6 @@ public class ProgressInputStream extends InputStream {
         this.in = in;
     }
 
-    /**
-     * Constructs a new {@code ProgressInputStream}.
-     *
-     * Will call {@link URLConnection#getInputStream()} to obtain the stream to monitor.
-     *
-     * @param con the connection to monitor
-     * @param progressMonitor the monitor to report to
-     * @throws OsmTransferException if any I/O error occurs
-     * @deprecated use {@link org.openstreetmap.josm.tools.HttpClient.Response#getContent}
-     */
-    @Deprecated
-    public ProgressInputStream(URLConnection con, ProgressMonitor progressMonitor) throws OsmTransferException {
-        if (progressMonitor == null) {
-            progressMonitor = NullProgressMonitor.INSTANCE;
-        }
-        progressMonitor.beginTask(tr("Contacting OSM Server..."), 1);
-        progressMonitor.indeterminateSubTask(null);
-
-        try {
-            this.in = con.getInputStream();
-            this.updater = new StreamProgressUpdater(con.getContentLength(), progressMonitor, tr("Downloading data..."));
-        } catch (IOException e) {
-            progressMonitor.finishTask();
-            if (con.getHeaderField("Error") != null)
-                throw new OsmTransferException(tr(con.getHeaderField("Error")), e);
-            throw new OsmTransferException(e);
-        }
-    }
-
     @Override
     public void close() throws IOException {
         try {
diff --git a/src/org/openstreetmap/josm/io/imagery/WMSImagery.java b/src/org/openstreetmap/josm/io/imagery/WMSImagery.java
index 20b345d..ba15042 100644
--- a/src/org/openstreetmap/josm/io/imagery/WMSImagery.java
+++ b/src/org/openstreetmap/josm/io/imagery/WMSImagery.java
@@ -4,6 +4,7 @@ package org.openstreetmap.josm.io.imagery;
 import java.awt.HeadlessException;
 import java.io.IOException;
 import java.io.StringReader;
+import java.io.StringWriter;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.ArrayList;
@@ -23,6 +24,11 @@ import java.util.stream.StreamSupport;
 import javax.imageio.ImageIO;
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.TransformerFactoryConfigurationError;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
 
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.imagery.ImageryInfo;
@@ -220,19 +226,18 @@ public class WMSImagery {
                 // handling systems deal with problems
                 getCapabilitiesUrl = new URL(serviceUrlStr);
             }
-            serviceUrl = new URL(serviceUrlStr);
+            // Make sure we don't keep GetCapabilities request in service URL
+            serviceUrl = new URL(serviceUrlStr.replace("REQUEST=GetCapabilities", "").replace("&&", "&"));
         } catch (HeadlessException e) {
             Logging.warn(e);
             return;
         }
 
         final Response response = HttpClient.create(getCapabilitiesUrl).connect();
-        final String incomingData = response.fetchContent();
-        Logging.debug("Server response to Capabilities request:");
-        Logging.debug(incomingData);
+        String incomingData = null;
 
         if (response.getResponseCode() >= 400) {
-            throw new WMSGetCapabilitiesException(response.getResponseMessage(), incomingData);
+            throw new WMSGetCapabilitiesException(response.getResponseMessage(), response.fetchContent());
         }
 
         try {
@@ -241,9 +246,19 @@ public class WMSImagery {
                 Logging.info("Ignoring DTD " + publicId + ", " + systemId);
                 return new InputSource(new StringReader(""));
             });
-            Document document = builder.parse(new InputSource(new StringReader(incomingData)));
+            Document document = builder.parse(response.getContent());
             Element root = document.getDocumentElement();
 
+            try {
+                StringWriter writer = new StringWriter();
+                TransformerFactory.newInstance().newTransformer().transform(new DOMSource(document), new StreamResult(writer));
+                incomingData = writer.getBuffer().toString();
+                Logging.debug("Server response to Capabilities request:");
+                Logging.debug(incomingData);
+            } catch (TransformerFactoryConfigurationError | TransformerException e) {
+                Logging.warn(e);
+            }
+
             // Check if the request resulted in ServiceException
             if ("ServiceException".equals(root.getTagName())) {
                 throw new WMSGetCapabilitiesException(root.getTextContent(), incomingData);
@@ -266,8 +281,11 @@ public class WMSImagery {
             if (child != null) {
                 String baseURL = child.getAttribute("xlink:href");
                 if (!baseURL.equals(serviceUrlStr)) {
-                    Logging.info("GetCapabilities specifies a different service URL: " + baseURL);
-                    serviceUrl = new URL(baseURL);
+                    URL newURL = new URL(baseURL);
+                    if (newURL.getAuthority() != null) {
+                        Logging.info("GetCapabilities specifies a different service URL: " + baseURL);
+                        serviceUrl = newURL;
+                    }
                 }
             }
 
@@ -339,6 +357,7 @@ public class WMSImagery {
     private LayerDetails parseLayer(Element element, Set<String> parentCrs) {
         String name = getChildContent(element, "Title", null, null);
         String ident = getChildContent(element, "Name", null, null);
+        String abstr = getChildContent(element, "Abstract", null, null);
 
         // The set of supported CRS/SRS for this layer
         Set<String> crsList = new HashSet<>();
@@ -384,7 +403,7 @@ public class WMSImagery {
         List<Element> layerChildren = getChildren(element, "Layer");
         List<LayerDetails> childLayers = parseLayers(layerChildren, crsList);
 
-        return new LayerDetails(name, ident, crsList, josmSupportsThisLayer, bounds, childLayers);
+        return new LayerDetails(name, ident, abstr, crsList, josmSupportsThisLayer, bounds, childLayers);
     }
 
     private static double getDecimalDegree(Element elem, String attr) {
@@ -447,16 +466,24 @@ public class WMSImagery {
     }
 
     /**
-     * The details of a layer of this wms server.
+     * The details of a layer of this WMS server.
      */
     public static class LayerDetails {
 
         /**
-         * The layer name
+         * The layer name (WMS {@code Title})
          */
         public final String name;
+        /**
+         * The layer ident (WMS {@code Name})
+         */
         public final String ident;
         /**
+         * The layer abstract (WMS {@code Abstract})
+         * @since 13199
+         */
+        public final String abstr;
+        /**
          * The child layers of this layer
          */
         public final List<LayerDetails> children;
@@ -464,33 +491,57 @@ public class WMSImagery {
          * The bounds this layer can be used for
          */
         public final Bounds bounds;
+        /**
+         * the CRS/SRS pulled out of this layer's XML element
+         */
         public final Set<String> crsList;
+        /**
+         * {@code true} if any of the specified projections are supported by JOSM
+         */
         public final boolean supported;
 
-        public LayerDetails(String name, String ident, Set<String> crsList, boolean supportedLayer, Bounds bounds,
+        /**
+         * Constructs a new {@code LayerDetails}.
+         * @param name The layer name (WMS {@code Title})
+         * @param ident The layer ident (WMS {@code Name})
+         * @param abstr The layer abstract (WMS {@code Abstract})
+         * @param crsList The CRS/SRS pulled out of this layer's XML element
+         * @param supportedLayer {@code true} if any of the specified projections are supported by JOSM
+         * @param bounds The bounds this layer can be used for
+         * @param childLayers The child layers of this layer
+         * @since 13199
+         */
+        public LayerDetails(String name, String ident, String abstr, Set<String> crsList, boolean supportedLayer, Bounds bounds,
                 List<LayerDetails> childLayers) {
             this.name = name;
             this.ident = ident;
+            this.abstr = abstr;
             this.supported = supportedLayer;
             this.children = childLayers;
             this.bounds = bounds;
             this.crsList = crsList;
         }
 
+        /**
+         * Determines if any of the specified projections are supported by JOSM.
+         * @return {@code true} if any of the specified projections are supported by JOSM
+         */
         public boolean isSupported() {
             return this.supported;
         }
 
+        /**
+         * Returns the CRS/SRS pulled out of this layer's XML element.
+         * @return the CRS/SRS pulled out of this layer's XML element
+         */
         public Set<String> getProjections() {
             return crsList;
         }
 
         @Override
         public String toString() {
-            if (this.name == null || this.name.isEmpty())
-                return this.ident;
-            else
-                return this.name;
+            String baseName = (name == null || name.isEmpty()) ? ident : name;
+            return abstr == null || abstr.equalsIgnoreCase(baseName) ? baseName : baseName + " (" + abstr + ')';
         }
     }
 }
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/AddTagsDialog.java b/src/org/openstreetmap/josm/io/remotecontrol/AddTagsDialog.java
index e08a2d1..d66a391 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/AddTagsDialog.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/AddTagsDialog.java
@@ -13,6 +13,7 @@ import java.awt.event.MouseEvent;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.LinkedHashSet;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
@@ -35,7 +36,6 @@ import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.util.TableHelper;
 import org.openstreetmap.josm.tools.GBC;
-import org.openstreetmap.josm.tools.Utils;
 
 /**
  * Dialog to add tags as part of the remotecontrol.
@@ -208,6 +208,7 @@ public class AddTagsDialog extends ExtendedDialog {
             }
         };
 
+        propertyTable.setAutoCreateRowSorter(true);
         propertyTable.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);
         // a checkbox has a size of 15 px
         propertyTable.getColumnModel().getColumn(0).setMaxWidth(15);
@@ -271,15 +272,15 @@ public class AddTagsDialog extends ExtendedDialog {
     /**
      * parse addtags parameters Example URL (part):
      * addtags=wikipedia:de%3DResidenzschloss Dresden|name:en%3DDresden Castle
-     * @param args request arguments
+     * @param args request arguments (URL encoding already removed)
      * @param sender is a string for skipping confirmations. Use empty string for always confirmed adding.
      * @param primitives OSM objects that will be modified
      */
     public static void addTags(final Map<String, String> args, final String sender, final Collection<? extends OsmPrimitive> primitives) {
         if (args.containsKey("addtags")) {
             GuiHelper.executeByMainWorkerInEDT(() -> {
-                Set<String> tagSet = new HashSet<>();
-                for (String tag1 : Utils.decodeUrl(args.get("addtags")).split("\\|")) {
+                Set<String> tagSet = new LinkedHashSet<>(); // preserve order, see #15704
+                for (String tag1 : args.get("addtags").split("\\|")) {
                     if (!tag1.trim().isEmpty() && tag1.contains("=")) {
                         tagSet.add(tag1.trim());
                     }
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java b/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java
index cde5644..3e816d3 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java
@@ -9,6 +9,7 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
+import java.util.Locale;
 import java.util.Set;
 import java.util.concurrent.Future;
 
@@ -60,6 +61,8 @@ public class LoadAndZoomHandler extends RequestHandler {
     // Optional argument 'select'
     private final Set<SimplePrimitiveId> toSelect = new HashSet<>();
 
+    private boolean isKeepingCurrentSelection;
+
     @Override
     public String getPermissionMessage() {
         String msg = tr("Remote Control has been asked to load data from the API.") +
@@ -159,7 +162,7 @@ public class LoadAndZoomHandler extends RequestHandler {
         /**
          * deselect objects if parameter addtags given
          */
-        if (args.containsKey("addtags")) {
+        if (args.containsKey("addtags") && !isKeepingCurrentSelection) {
             GuiHelper.executeByMainWorkerInEDT(() -> {
                 DataSet ds = MainApplication.getLayerManager().getEditDataSet();
                 if (ds == null) // e.g. download failed
@@ -184,7 +187,13 @@ public class LoadAndZoomHandler extends RequestHandler {
                         forTagAdd.add(p);
                     }
                 }
+                if (isKeepingCurrentSelection) {
+                    Collection<OsmPrimitive> sel = ds.getSelected();
+                    newSel.addAll(sel);
+                    forTagAdd.addAll(sel);
+                }
                 toSelect.clear();
+                isKeepingCurrentSelection = false;
                 ds.setSelected(newSel);
                 zoom(newSel, bbox);
                 MapFrame map = MainApplication.getMap();
@@ -286,6 +295,10 @@ public class LoadAndZoomHandler extends RequestHandler {
             toSelect.clear();
             for (String item : args.get("select").split(",")) {
                 if (!item.isEmpty()) {
+                    if ("currentselection".equals(item.toLowerCase(Locale.ENGLISH))) {
+                        isKeepingCurrentSelection = true;
+                        continue;
+                    }
                     try {
                         toSelect.add(SimplePrimitiveId.fromString(item));
                     } catch (IllegalArgumentException ex) {
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/handler/RequestHandler.java b/src/org/openstreetmap/josm/io/remotecontrol/handler/RequestHandler.java
index 6849dd2..d11d0c2 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/handler/RequestHandler.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/handler/RequestHandler.java
@@ -21,6 +21,7 @@ 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.Pair;
 import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -35,6 +36,9 @@ public abstract class RequestHandler {
     public static final String loadInNewLayerKey = "remotecontrol.new-layer";
     public static final boolean loadInNewLayerDefault = false;
 
+    /** past confirmations */
+    protected static final PermissionCache PERMISSIONS = new PermissionCache();
+
     /** The GET request arguments */
     protected Map<String, String> args;
 
@@ -154,6 +158,14 @@ public abstract class RequestHandler {
             throw new RequestHandlerForbiddenException(err);
         }
 
+        /*
+         * Did the user confirm this action previously?
+         * If yes, skip the global confirmation dialog.
+         */
+        if (PERMISSIONS.isAllowed(myCommand, sender)) {
+            return;
+        }
+
         /* Does the user want to confirm everything?
          * If yes, display specific confirmation message.
          */
@@ -166,11 +178,14 @@ public abstract class RequestHandler {
             if (label.getPreferredSize().width > maxWidth) {
                 label.setText(message.replaceFirst("<div>", "<div style=\"width:" + maxWidth + "px;\">"));
             }
-            if (JOptionPane.showConfirmDialog(Main.parent, label,
-                tr("Confirm Remote Control action"),
-                JOptionPane.YES_NO_OPTION) != JOptionPane.YES_OPTION) {
-                    String err = MessageFormat.format("RemoteControl: ''{0}'' forbidden by user''s choice", myCommand);
-                    throw new RequestHandlerForbiddenException(err);
+            Object[] choices = new Object[] {tr("Yes, always"), tr("Yes, once"), tr("No")};
+            int choice = JOptionPane.showOptionDialog(Main.parent, label, tr("Confirm Remote Control action"),
+                    JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, choices, choices[1]);
+            if (choice != JOptionPane.YES_OPTION && choice != JOptionPane.NO_OPTION) { // Yes/no refer to always/once
+                String err = MessageFormat.format("RemoteControl: ''{0}'' forbidden by user''s choice", myCommand);
+                throw new RequestHandlerForbiddenException(err);
+            } else if (choice == JOptionPane.YES_OPTION) {
+                PERMISSIONS.allow(myCommand, sender);
             }
         }
     }
@@ -390,4 +405,20 @@ public abstract class RequestHandler {
             this.args = args;
         }
     }
+
+    static class PermissionCache {
+        private final Set<Pair<String, String>> allowed = new HashSet<>();
+
+        public void allow(String command, String sender) {
+            allowed.add(Pair.create(command, sender));
+        }
+
+        public boolean isAllowed(String command, String sender) {
+            return allowed.contains(Pair.create(command, sender));
+        }
+
+        public void clear() {
+            allowed.clear();
+        }
+    }
 }
diff --git a/src/org/openstreetmap/josm/io/session/SessionReader.java b/src/org/openstreetmap/josm/io/session/SessionReader.java
index da76474..24cd96f 100644
--- a/src/org/openstreetmap/josm/io/session/SessionReader.java
+++ b/src/org/openstreetmap/josm/io/session/SessionReader.java
@@ -6,7 +6,6 @@ import static org.openstreetmap.josm.tools.I18n.tr;
 import java.awt.GraphicsEnvironment;
 import java.io.BufferedInputStream;
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
@@ -14,6 +13,7 @@ import java.lang.reflect.InvocationTargetException;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -714,11 +714,7 @@ public class SessionReader {
                 throw new IOException(ex);
             }
         } else {
-            try {
-                return new FileInputStream(sessionFile);
-            } catch (FileNotFoundException ex) {
-                throw new IOException(ex);
-            }
+            return Files.newInputStream(sessionFile.toPath());
         }
     }
 
diff --git a/src/org/openstreetmap/josm/io/session/SessionWriter.java b/src/org/openstreetmap/josm/io/session/SessionWriter.java
index afb4c30..247c576 100644
--- a/src/org/openstreetmap/josm/io/session/SessionWriter.java
+++ b/src/org/openstreetmap/josm/io/session/SessionWriter.java
@@ -3,12 +3,11 @@ package org.openstreetmap.josm.io.session;
 
 import java.io.BufferedOutputStream;
 import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.io.OutputStreamWriter;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
@@ -330,10 +329,8 @@ public class SessionWriter {
      * @throws IOException if any I/O error occurs
      */
     public void write(File f) throws IOException {
-        try (OutputStream out = new FileOutputStream(f)) {
+        try (OutputStream out = Files.newOutputStream(f.toPath())) {
             write(out);
-        } catch (FileNotFoundException e) {
-            throw new IOException(e);
         }
     }
 
diff --git a/src/org/openstreetmap/josm/plugins/Plugin.java b/src/org/openstreetmap/josm/plugins/Plugin.java
index b6d0e53..6f7e4ae 100644
--- a/src/org/openstreetmap/josm/plugins/Plugin.java
+++ b/src/org/openstreetmap/josm/plugins/Plugin.java
@@ -174,7 +174,9 @@ public abstract class Plugin implements MapFrameListener {
      * @throws FileNotFoundException if the file exists but is a directory rather than a regular file,
      * does not exist but cannot be created, or cannot be opened for any other reason
      * @throws IOException if any other I/O error occurs
+     * @deprecated without replacement
      */
+    @Deprecated
     public void copy(String from, String to) throws IOException {
         String pluginDirName = getPluginDir();
         File pluginDir = new File(pluginDirName);
diff --git a/src/org/openstreetmap/josm/plugins/PluginHandler.java b/src/org/openstreetmap/josm/plugins/PluginHandler.java
index 30b7805..c36a3a6 100644
--- a/src/org/openstreetmap/josm/plugins/PluginHandler.java
+++ b/src/org/openstreetmap/josm/plugins/PluginHandler.java
@@ -716,19 +716,6 @@ public final class PluginHandler {
     }
 
     /**
-     * Method to get the (now obsolete) class loader for loading plugin code.
-     *
-     * @return the class loader
-     * @deprecated There is no longer a unified plugin class loader. Use {@link PluginProxy#classLoader}
-     * to get the class loader for each plugin. Or <code>PluginClass.class.getClassLoader()</code>
-     * to access the class loader from within the plugin.
-     */
-    @Deprecated
-    public static synchronized DynamicURLClassLoader getPluginClassLoader() {
-        return getJoinedPluginResourceCL();
-    }
-
-    /**
      * Get class loader to locate resources from plugins.
      *
      * It joins URLs of all plugins, to find images, etc.
diff --git a/src/org/openstreetmap/josm/plugins/PluginInformation.java b/src/org/openstreetmap/josm/plugins/PluginInformation.java
index 815a12c..36ee4cd 100644
--- a/src/org/openstreetmap/josm/plugins/PluginInformation.java
+++ b/src/org/openstreetmap/josm/plugins/PluginInformation.java
@@ -4,11 +4,12 @@ package org.openstreetmap.josm.plugins;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.lang.reflect.Constructor;
 import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.InvalidPathException;
 import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -113,7 +114,7 @@ public class PluginInformation {
         this.name = name;
         this.file = file;
         try (
-            FileInputStream fis = new FileInputStream(file);
+            InputStream fis = Files.newInputStream(file.toPath());
             JarInputStream jar = new JarInputStream(fis)
         ) {
             Manifest manifest = jar.getManifest();
@@ -121,7 +122,7 @@ public class PluginInformation {
                 throw new PluginException(tr("The plugin file ''{0}'' does not include a Manifest.", file.toString()));
             scanManifest(manifest, false);
             libraries.add(0, Utils.fileToURL(file));
-        } catch (IOException e) {
+        } catch (IOException | InvalidPathException e) {
             throw new PluginException(name, e);
         }
     }
diff --git a/src/org/openstreetmap/josm/plugins/ReadLocalPluginInformationTask.java b/src/org/openstreetmap/josm/plugins/ReadLocalPluginInformationTask.java
index 361d655..9410f8e 100644
--- a/src/org/openstreetmap/josm/plugins/ReadLocalPluginInformationTask.java
+++ b/src/org/openstreetmap/josm/plugins/ReadLocalPluginInformationTask.java
@@ -4,9 +4,11 @@ package org.openstreetmap.josm.plugins;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.FilenameFilter;
 import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.InvalidPathException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
@@ -144,7 +146,7 @@ public class ReadLocalPluginInformationTask extends PleaseWaitRunnable {
     }
 
     protected void processLocalPluginInformationFile(File file) throws PluginListParseException {
-        try (FileInputStream fin = new FileInputStream(file)) {
+        try (InputStream fin = Files.newInputStream(file.toPath())) {
             List<PluginInformation> pis = new PluginListParser().parse(fin);
             for (PluginInformation pi : pis) {
                 // we always keep plugin information from a plugin site because it
@@ -153,7 +155,7 @@ public class ReadLocalPluginInformationTask extends PleaseWaitRunnable {
                 //
                 availablePlugins.put(pi.name, pi);
             }
-        } catch (IOException e) {
+        } catch (IOException | InvalidPathException e) {
             throw new PluginListParseException(e);
         }
     }
diff --git a/src/org/openstreetmap/josm/tools/CheckParameterUtil.java b/src/org/openstreetmap/josm/tools/CheckParameterUtil.java
index 8e3fe5e..d9de235 100644
--- a/src/org/openstreetmap/josm/tools/CheckParameterUtil.java
+++ b/src/org/openstreetmap/josm/tools/CheckParameterUtil.java
@@ -5,11 +5,6 @@ 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;
-import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
-import org.openstreetmap.josm.data.osm.PrimitiveId;
-
 /**
  * This utility class provides a collection of static helper methods for checking
  * parameters at run-time.
@@ -64,67 +59,6 @@ public final class CheckParameterUtil {
     }
 
     /**
-     * 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)
-            throw new IllegalArgumentException(
-                    MessageFormat.format("Expected unique id > 0 for primitive ''{1}'', got {0}", id.getUniqueId(), parameterName));
-    }
-
-    /**
-     * Ensures lat/lon coordinates are valid
-     * @param latlon The lat/lon to check
-     * @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())
-            throw new IllegalArgumentException(
-                    MessageFormat.format("Expected valid lat/lon for parameter ''{0}'', got {1}", parameterName, latlon));
-    }
-
-    /**
-     * Ensures east/north coordinates are valid
-     * @param eastnorth The east/north to check
-     * @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())
-            throw new IllegalArgumentException(
-                    MessageFormat.format("Expected valid east/north for parameter ''{0}'', got {1}", parameterName, eastnorth));
-    }
-
-    /**
-     * Ensures a version number is valid
-     * @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(
-                    MessageFormat.format("Expected value of type long > 0 for parameter ''{0}'', got {1}", parameterName, version));
-    }
-
-    /**
      * Ensures a parameter is not {@code null}
      * @param value The parameter to check
      * @param parameterName The parameter name
@@ -173,21 +107,4 @@ public final class CheckParameterUtil {
         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))
-            throw new IllegalArgumentException(
-                    MessageFormat.format("Parameter ''{0}'' of type node expected, got ''{1}''", parameterName, id.getType().getAPIName()));
-    }
 }
diff --git a/src/org/openstreetmap/josm/tools/HiDPISupport.java b/src/org/openstreetmap/josm/tools/HiDPISupport.java
index 53567dd..5d29385 100644
--- a/src/org/openstreetmap/josm/tools/HiDPISupport.java
+++ b/src/org/openstreetmap/josm/tools/HiDPISupport.java
@@ -186,7 +186,7 @@ public final class HiDPISupport {
      * 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");
+        CheckParameterUtil.ensureThat(!imgs.isEmpty(), "at least one element expected");
         if (!getBaseMultiResolutionImageClass().isPresent()) {
             return processor.apply(imgs);
         }
diff --git a/src/org/openstreetmap/josm/tools/HttpClient.java b/src/org/openstreetmap/josm/tools/HttpClient.java
index 4d4f1fa..91c434d 100644
--- a/src/org/openstreetmap/josm/tools/HttpClient.java
+++ b/src/org/openstreetmap/josm/tools/HttpClient.java
@@ -19,6 +19,7 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.NoSuchElementException;
 import java.util.Optional;
 import java.util.Scanner;
 import java.util.TreeMap;
@@ -144,7 +145,7 @@ public final class HttpClient {
                 if (DefaultAuthenticator.getInstance().isEnabled() && connection.getResponseCode() == HttpURLConnection.HTTP_UNAUTHORIZED) {
                     DefaultAuthenticator.getInstance().addFailedCredentialHost(url.getHost());
                 }
-            } catch (IOException | IllegalArgumentException e) {
+            } catch (IOException | IllegalArgumentException | NoSuchElementException e) {
                 Logging.info("{0} {1} -> !!!", requestMethod, url);
                 Logging.warn(e);
                 //noinspection ThrowableResultOfMethodCallIgnored
diff --git a/src/org/openstreetmap/josm/tools/I18n.java b/src/org/openstreetmap/josm/tools/I18n.java
index 167bb38..47ea748 100644
--- a/src/org/openstreetmap/josm/tools/I18n.java
+++ b/src/org/openstreetmap/josm/tools/I18n.java
@@ -3,13 +3,14 @@ package org.openstreetmap.josm.tools;
 
 import java.io.BufferedInputStream;
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.net.URL;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.InvalidPathException;
 import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -371,7 +372,7 @@ public final class I18n {
         final String enfile = "data/en.lang";
         final String langfile = "data/"+loadedCode+".lang";
         try (
-            FileInputStream fis = new FileInputStream(source);
+            InputStream fis = Files.newInputStream(source.toPath());
             JarInputStream jar = new JarInputStream(fis)
         ) {
             ZipEntry e;
@@ -383,7 +384,7 @@ public final class I18n {
             }
             if (found) {
                 try (
-                    FileInputStream fisTrans = new FileInputStream(source);
+                    InputStream fisTrans = Files.newInputStream(source.toPath());
                     JarInputStream jarTrans = new JarInputStream(fisTrans)
                 ) {
                     found = false;
@@ -396,8 +397,7 @@ public final class I18n {
                         load(jar, jarTrans, true);
                 }
             }
-        } catch (IOException e) {
-            // Ignore
+        } catch (IOException | InvalidPathException e) {
             Logging.trace(e);
         }
     }
diff --git a/src/org/openstreetmap/josm/tools/ImageProvider.java b/src/org/openstreetmap/josm/tools/ImageProvider.java
index 925dd41..9b6b913 100644
--- a/src/org/openstreetmap/josm/tools/ImageProvider.java
+++ b/src/org/openstreetmap/josm/tools/ImageProvider.java
@@ -45,6 +45,7 @@ import java.util.TreeSet;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
+import java.util.function.Consumer;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.zip.ZipEntry;
@@ -630,6 +631,15 @@ public class ImageProvider {
     }
 
     /**
+     * Determines if this icon is located on a remote location (http, https, wiki).
+     * @return {@code true} if this icon is located on a remote location (http, https, wiki)
+     * @since 13250
+     */
+    public boolean isRemote() {
+        return name.startsWith(HTTP_PROTOCOL) || name.startsWith(HTTPS_PROTOCOL) || name.startsWith(WIKI_PROTOCOL);
+    }
+
+    /**
      * Execute the image request and scale result.
      * @return the requested image or null if the request failed
      */
@@ -649,14 +659,15 @@ public class ImageProvider {
      * Load the image in a background thread.
      *
      * This method returns immediately and runs the image request asynchronously.
+     * @param action the action that will deal with the image
      *
      * @return the future of the requested image
-     * @since 10714
+     * @since 13252
      */
-    public CompletableFuture<ImageIcon> getAsync() {
-        return name.startsWith(HTTP_PROTOCOL) || name.startsWith(WIKI_PROTOCOL)
-                ? CompletableFuture.supplyAsync(this::get, IMAGE_FETCHER)
-                : CompletableFuture.completedFuture(get());
+    public CompletableFuture<Void> getAsync(Consumer<? super ImageIcon> action) {
+        return isRemote()
+                ? CompletableFuture.supplyAsync(this::get, IMAGE_FETCHER).thenAcceptAsync(action)
+                : CompletableFuture.completedFuture(get()).thenAccept(action);
     }
 
     /**
@@ -693,14 +704,15 @@ public class ImageProvider {
      * Load the image in a background thread.
      *
      * This method returns immediately and runs the image request asynchronously.
+     * @param action the action that will deal with the image
      *
      * @return the future of the requested image
-     * @since 10714
+     * @since 13252
      */
-    public CompletableFuture<ImageResource> getResourceAsync() {
-        return name.startsWith(HTTP_PROTOCOL) || name.startsWith(WIKI_PROTOCOL)
-                ? CompletableFuture.supplyAsync(this::getResource, IMAGE_FETCHER)
-                : CompletableFuture.completedFuture(getResource());
+    public CompletableFuture<Void> getResourceAsync(Consumer<? super ImageResource> action) {
+        return isRemote()
+                ? CompletableFuture.supplyAsync(this::getResource, IMAGE_FETCHER).thenAcceptAsync(action)
+                : CompletableFuture.completedFuture(getResource()).thenAccept(action);
     }
 
     /**
@@ -1972,18 +1984,18 @@ public class ImageProvider {
     /**
      * Converts an {@link Rectangle} area of {@link Image} to a {@link BufferedImage} instance.
      * @param image image to convert
-     * @param crop_area rectangle to crop image with
+     * @param cropArea rectangle to crop image with
      * @return a {@code BufferedImage} instance for the cropped area of {@code Image}.
      * @since 13127
      */
-    public static BufferedImage toBufferedImage(Image image, Rectangle crop_area) {
+    public static BufferedImage toBufferedImage(Image image, Rectangle cropArea) {
         BufferedImage buffImage = null;
         Rectangle r = new Rectangle(image.getWidth(null), image.getHeight(null));
-        if (r.intersection(crop_area).equals(crop_area)) {
-            buffImage = new BufferedImage(crop_area.width, crop_area.height, BufferedImage.TYPE_INT_ARGB);
+        if (r.intersection(cropArea).equals(cropArea)) {
+            buffImage = new BufferedImage(cropArea.width, cropArea.height, BufferedImage.TYPE_INT_ARGB);
             Graphics2D g2 = buffImage.createGraphics();
-            g2.drawImage(image, 0, 0, crop_area.width, crop_area.height,
-                crop_area.x, crop_area.y, crop_area.x + crop_area.width, crop_area.y + crop_area.height, null);
+            g2.drawImage(image, 0, 0, cropArea.width, cropArea.height,
+                cropArea.x, cropArea.y, cropArea.x + cropArea.width, cropArea.y + cropArea.height, null);
             g2.dispose();
         }
         return buffImage;
diff --git a/src/org/openstreetmap/josm/tools/ListenerList.java b/src/org/openstreetmap/josm/tools/ListenerList.java
index bb309d9..ce23f9e 100644
--- a/src/org/openstreetmap/josm/tools/ListenerList.java
+++ b/src/org/openstreetmap/josm/tools/ListenerList.java
@@ -247,7 +247,7 @@ public class ListenerList<T> {
     }
 
     /**
-     * Creates a new listener list that does not fail if listeners are added ore removed twice.
+     * Creates a new listener list that does not fail if listeners are added or removed twice.
      * <p>
      * Use of this list is discouraged. You should always use {@link #create()} in new implementations and check your listeners.
      * @param <T> The listener type
diff --git a/src/org/openstreetmap/josm/tools/Logging.java b/src/org/openstreetmap/josm/tools/Logging.java
index 1018d74..778fe68 100644
--- a/src/org/openstreetmap/josm/tools/Logging.java
+++ b/src/org/openstreetmap/josm/tools/Logging.java
@@ -83,6 +83,8 @@ public final class Logging {
         stdout.setLevel(Level.ALL);
 
         LOGGER.addHandler(WARNINGS);
+        // Set log level to info, otherwise the first ListenerList created will be for debugging purposes and create memory leaks
+        Logging.setLogLevel(Logging.LEVEL_INFO);
     }
 
     private Logging() {
diff --git a/src/org/openstreetmap/josm/tools/PlatformHookUnixoid.java b/src/org/openstreetmap/josm/tools/PlatformHookUnixoid.java
index 966c58d..52339e4 100644
--- a/src/org/openstreetmap/josm/tools/PlatformHookUnixoid.java
+++ b/src/org/openstreetmap/josm/tools/PlatformHookUnixoid.java
@@ -7,8 +7,8 @@ import java.awt.Desktop;
 import java.awt.event.KeyEvent;
 import java.io.BufferedReader;
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.nio.charset.StandardCharsets;
@@ -402,7 +402,7 @@ public class PlatformHookUnixoid implements PlatformHook {
         File f = new File("/usr/share/ca-certificates/mozilla", certAmend.getFilename());
         if (f.exists()) {
             CertificateFactory fact = CertificateFactory.getInstance("X.509");
-            try (FileInputStream is = new FileInputStream(f)) {
+            try (InputStream is = Files.newInputStream(f.toPath())) {
                 return (X509Certificate) fact.generateCertificate(is);
             }
         }
diff --git a/src/org/openstreetmap/josm/tools/PlatformHookWindows.java b/src/org/openstreetmap/josm/tools/PlatformHookWindows.java
index c9b7163..40ff6de 100644
--- a/src/org/openstreetmap/josm/tools/PlatformHookWindows.java
+++ b/src/org/openstreetmap/josm/tools/PlatformHookWindows.java
@@ -31,8 +31,8 @@ import static org.openstreetmap.josm.tools.WinRegistry.HKEY_LOCAL_MACHINE;
 import java.awt.GraphicsEnvironment;
 import java.io.BufferedWriter;
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.OutputStreamWriter;
 import java.io.Writer;
@@ -41,6 +41,7 @@ import java.nio.charset.StandardCharsets;
 import java.nio.file.DirectoryStream;
 import java.nio.file.FileSystems;
 import java.nio.file.Files;
+import java.nio.file.InvalidPathException;
 import java.nio.file.Path;
 import java.security.InvalidKeyException;
 import java.security.KeyFactory;
@@ -517,7 +518,7 @@ public class PlatformHookWindows implements PlatformHook {
             Logging.warn("extended font config - unable to find font config template file {0}", templateFile.toString());
             return;
         }
-        try (FileInputStream fis = new FileInputStream(templateFile.toFile())) {
+        try (InputStream fis = Files.newInputStream(templateFile)) {
             Properties props = new Properties();
             props.load(fis);
             byte[] content = Files.readAllBytes(templateFile);
@@ -580,7 +581,7 @@ public class PlatformHookWindows implements PlatformHook {
                 }
             }
             Utils.updateSystemProperty("sun.awt.fontconfig", fontconfigFile.toString());
-        } catch (IOException ex) {
+        } catch (IOException | InvalidPathException ex) {
             Logging.error(ex);
         }
     }
diff --git a/src/org/openstreetmap/josm/tools/RightAndLefthandTraffic.java b/src/org/openstreetmap/josm/tools/RightAndLefthandTraffic.java
index e017860..b4b0464 100644
--- a/src/org/openstreetmap/josm/tools/RightAndLefthandTraffic.java
+++ b/src/org/openstreetmap/josm/tools/RightAndLefthandTraffic.java
@@ -2,14 +2,15 @@
 package org.openstreetmap.josm.tools;
 
 import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
 import java.io.Writer;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.InvalidPathException;
+import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -153,7 +154,7 @@ public final class RightAndLefthandTraffic {
     private static void saveOptimizedBoundaries(Collection<Way> optimizedWays) {
         DataSet ds = optimizedWays.iterator().next().getDataSet();
         File file = new File(Config.getDirs().getCacheDirectory(true), "left-right-hand-traffic.osm");
-        try (Writer writer = new OutputStreamWriter(new FileOutputStream(file), StandardCharsets.UTF_8);
+        try (Writer writer = new OutputStreamWriter(Files.newOutputStream(file.toPath()), StandardCharsets.UTF_8);
              OsmWriter w = OsmWriterFactory.createOsmWriter(new PrintWriter(writer), false, ds.getVersion())
             ) {
             w.header(DataSet.UploadPolicy.DISCOURAGED);
@@ -165,10 +166,10 @@ public final class RightAndLefthandTraffic {
     }
 
     private static Collection<Way> loadOptimizedBoundaries() {
-        try (InputStream is = new FileInputStream(new File(
-                Config.getDirs().getCacheDirectory(false), "left-right-hand-traffic.osm"))) {
+        try (InputStream is = Files.newInputStream(Paths.get(
+                Config.getDirs().getCacheDirectory(false).getPath(), "left-right-hand-traffic.osm"))) {
            return OsmReader.parseDataSet(is, null).getWays();
-        } catch (IllegalDataException | IOException ex) {
+        } catch (IllegalDataException | IOException | InvalidPathException ex) {
             Logging.trace(ex);
             return Collections.emptyList();
         }
diff --git a/src/org/openstreetmap/josm/tools/Utils.java b/src/org/openstreetmap/josm/tools/Utils.java
index cf0c7f0..fee90d8 100644
--- a/src/org/openstreetmap/josm/tools/Utils.java
+++ b/src/org/openstreetmap/josm/tools/Utils.java
@@ -58,9 +58,7 @@ import java.util.function.Predicate;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Stream;
-import java.util.zip.GZIPInputStream;
 import java.util.zip.ZipFile;
-import java.util.zip.ZipInputStream;
 
 import javax.xml.XMLConstants;
 import javax.xml.parsers.DocumentBuilder;
@@ -69,8 +67,6 @@ import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.parsers.SAXParser;
 import javax.xml.parsers.SAXParserFactory;
 
-import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream;
-import org.openstreetmap.josm.io.Compression;
 import org.openstreetmap.josm.spi.preferences.Config;
 import org.w3c.dom.Document;
 import org.xml.sax.InputSource;
@@ -723,45 +719,6 @@ public final class Utils {
     }
 
     /**
-     * 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 7867
-     * @deprecated use {@link Compression#getBZip2InputStream(java.io.InputStream)}
-     */
-    @Deprecated
-    public static BZip2CompressorInputStream getBZip2InputStream(InputStream in) throws IOException {
-        return Compression.getBZip2InputStream(in);
-    }
-
-    /**
-     * 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 7119
-     * @deprecated use {@link Compression#getGZipInputStream(java.io.InputStream)}
-     */
-    @Deprecated
-    public static GZIPInputStream getGZipInputStream(InputStream in) throws IOException {
-        return Compression.getGZipInputStream(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 7119
-     * @deprecated use {@link Compression#getZipInputStream(java.io.InputStream)}
-     */
-    @Deprecated
-    public static ZipInputStream getZipInputStream(InputStream in) throws IOException {
-        return Compression.getZipInputStream(in);
-    }
-
-    /**
      * Determines if the given String would be empty if stripped.
      * This is an efficient alternative to {@code strip(s).isEmpty()} that avoids to create useless String object.
      * @param str The string to test
diff --git a/src/org/openstreetmap/josm/tools/template_engine/Condition.java b/src/org/openstreetmap/josm/tools/template_engine/Condition.java
index 415ffd5..702998b 100644
--- a/src/org/openstreetmap/josm/tools/template_engine/Condition.java
+++ b/src/org/openstreetmap/josm/tools/template_engine/Condition.java
@@ -29,16 +29,6 @@ public class Condition implements TemplateEntry {
         this.entries = new ArrayList<>();
     }
 
-    /**
-     * Returns template entries.
-     * @return template entries
-     * @deprecated (since 13003) use constructor {@link #Condition(java.util.Collection)} to set the entries
-     */
-    @Deprecated
-    public List<TemplateEntry> getEntries() {
-        return entries;
-    }
-
     @Override
     public void appendText(StringBuilder result, TemplateEngineDataProvider dataProvider) {
         for (TemplateEntry entry: entries) {
diff --git a/src/org/openstreetmap/josm/tools/template_engine/TemplateParser.java b/src/org/openstreetmap/josm/tools/template_engine/TemplateParser.java
index 11ad34d..7efc603 100644
--- a/src/org/openstreetmap/josm/tools/template_engine/TemplateParser.java
+++ b/src/org/openstreetmap/josm/tools/template_engine/TemplateParser.java
@@ -60,7 +60,7 @@ public class TemplateParser {
             } else if (token.getType() == TokenType.VARIABLE_START) {
                 templateEntry = parseVariable();
             } else if (endTokens.contains(token.getType()))
-                return CompoundTemplateEntry.fromArray(entries.toArray(new TemplateEntry[entries.size()]));
+                return CompoundTemplateEntry.fromArray(entries.toArray(new TemplateEntry[0]));
             else if (token.getType() == TokenType.TEXT) {
                 tokenizer.nextToken();
                 templateEntry = new StaticText(token.getText());
diff --git a/styles/standard/elemstyles.mapcss b/styles/standard/elemstyles.mapcss
index 13f2434..2329d3f 100644
--- a/styles/standard/elemstyles.mapcss
+++ b/styles/standard/elemstyles.mapcss
@@ -296,7 +296,7 @@ way["addr:interpolation"=alphabetic] {
     color: address#1C86EE;
     dashes: 2,2;
 }
-area[building][!building?!] {
+area[building][!building?!][building!=y][building!=1] {
     fill-color: building#cb9999;
 }
 area[building=roof],
@@ -1039,13 +1039,13 @@ way[prop("trackLeft","core_cycleway")]::core_cycleway2 {
     modifier: true;
 }
     /* render opposite */
-way[cycleway=opposite]::core_cycleway {
-    object-z-index: 1;
+way[cycleway=opposite][oneway][oneway!=no]::core_cycleway {
+    z-index: 1;
     width: +0;
     color: bicycle#b100ff;
     dashes: 4,10;
 }
-node[cycleway=lane], node[cycleway=opposite_lane],
+node[cycleway=lane ], node[cycleway=opposite_lane ],
 node[cycleway=track], node[cycleway=opposite_track],
 node[cycleway=opposite] {
     icon-image: "presets/misc/deprecated.svg";
diff --git a/test/data/regress/15634/drumlish.gpx b/test/data/regress/15634/drumlish.gpx
new file mode 100644
index 0000000..54d80b2
--- /dev/null
+++ b/test/data/regress/15634/drumlish.gpx
@@ -0,0 +1,882 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<gpx
+ xmlns="http://www.topografix.com/GPX/1/1" 
+ creator= "A-GPS Tracker1.7"
+ version= "1.1"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+ xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
+<metadata>
+	<bounds minLat="53.7229357" minLon="-7.9135019" maxLat="53.9301103" maxLon="-7.59656"/>
+</metadata>
+<trk>
+	<name>drumlish</name>
+	<desc></desc>
+<trkseg>
+	<trkpt lat="53.72455210" lon="-7.78697900"><ele>46.0</ele><time>2017-12-01T10:16:39Z</time></trkpt>
+	<trkpt lat="53.72479900" lon="-7.78682060"><ele>46.8</ele><time>2017-12-01T10:17:51Z</time></trkpt>
+	<trkpt lat="53.72496170" lon="-7.78676210"><ele>46.1</ele><time>2017-12-01T10:17:55Z</time></trkpt>
+	<trkpt lat="53.72496980" lon="-7.78693840"><ele>44.8</ele><time>2017-12-01T10:18:00Z</time></trkpt>
+	<trkpt lat="53.72501970" lon="-7.78745880"><ele>44.3</ele><time>2017-12-01T10:18:06Z</time></trkpt>
+	<trkpt lat="53.72510750" lon="-7.78798410"><ele>44.7</ele><time>2017-12-01T10:18:11Z</time></trkpt>
+	<trkpt lat="53.72524220" lon="-7.78855600"><ele>45.4</ele><time>2017-12-01T10:18:16Z</time></trkpt>
+	<trkpt lat="53.72530830" lon="-7.78905160"><ele>46.4</ele><time>2017-12-01T10:18:20Z</time></trkpt>
+	<trkpt lat="53.72538280" lon="-7.78999550"><ele>47.4</ele><time>2017-12-01T10:18:26Z</time></trkpt>
+	<trkpt lat="53.72561480" lon="-7.79112640"><ele>48.2</ele><time>2017-12-01T10:18:31Z</time></trkpt>
+	<trkpt lat="53.72586990" lon="-7.79230240"><ele>48.4</ele><time>2017-12-01T10:18:36Z</time></trkpt>
+	<trkpt lat="53.72645870" lon="-7.79574030"><ele>48.3</ele><time>2017-12-01T10:18:59Z</time></trkpt>
+	<trkpt lat="53.72651760" lon="-7.79604400"><ele>48.7</ele><time>2017-12-01T10:19:10Z</time></trkpt>
+	<trkpt lat="53.72639570" lon="-7.79760730"><ele>49.8</ele><time>2017-12-01T10:19:22Z</time></trkpt>
+	<trkpt lat="53.72601390" lon="-7.79833900"><ele>50.8</ele><time>2017-12-01T10:19:30Z</time></trkpt>
+	<trkpt lat="53.72595320" lon="-7.79899820"><ele>51.9</ele><time>2017-12-01T10:19:40Z</time></trkpt>
+	<trkpt lat="53.72669320" lon="-7.79997000"><ele>52.2</ele><time>2017-12-01T10:20:09Z</time></trkpt>
+	<trkpt lat="53.72704960" lon="-7.80029100"><ele>52.0</ele><time>2017-12-01T10:20:30Z</time></trkpt>
+	<trkpt lat="53.72720210" lon="-7.80044080"><ele>52.1</ele><time>2017-12-01T10:20:50Z</time></trkpt>
+	<trkpt lat="53.72762260" lon="-7.80065430"><ele>51.6</ele><time>2017-12-01T10:21:00Z</time></trkpt>
+	<trkpt lat="53.72819280" lon="-7.80099070"><ele>50.6</ele><time>2017-12-01T10:21:11Z</time></trkpt>
+	<trkpt lat="53.72855610" lon="-7.80119830"><ele>50.9</ele><time>2017-12-01T10:21:20Z</time></trkpt>
+	<trkpt lat="53.72896740" lon="-7.80140170"><ele>50.7</ele><time>2017-12-01T10:22:10Z</time></trkpt>
+	<trkpt lat="53.72957770" lon="-7.80168810"><ele>49.3</ele><time>2017-12-01T10:22:20Z</time></trkpt>
+	<trkpt lat="53.73041690" lon="-7.80210110"><ele>48.2</ele><time>2017-12-01T10:22:31Z</time></trkpt>
+	<trkpt lat="53.73088860" lon="-7.80157790"><ele>48.3</ele><time>2017-12-01T10:22:40Z</time></trkpt>
+	<trkpt lat="53.73158390" lon="-7.80071930"><ele>48.2</ele><time>2017-12-01T10:22:50Z</time></trkpt>
+	<trkpt lat="53.73292680" lon="-7.80073150"><ele>49.2</ele><time>2017-12-01T10:23:00Z</time></trkpt>
+	<trkpt lat="53.73431490" lon="-7.80072310"><ele>51.3</ele><time>2017-12-01T10:23:10Z</time></trkpt>
+	<trkpt lat="53.73551100" lon="-7.80064080"><ele>53.3</ele><time>2017-12-01T10:23:19Z</time></trkpt>
+	<trkpt lat="53.73704210" lon="-7.80061950"><ele>54.0</ele><time>2017-12-01T10:23:30Z</time></trkpt>
+	<trkpt lat="53.73812490" lon="-7.80111840"><ele>53.4</ele><time>2017-12-01T10:23:40Z</time></trkpt>
+	<trkpt lat="53.73808610" lon="-7.80277260"><ele>51.9</ele><time>2017-12-01T10:23:50Z</time></trkpt>
+	<trkpt lat="53.73768710" lon="-7.80505190"><ele>49.0</ele><time>2017-12-01T10:24:00Z</time></trkpt>
+	<trkpt lat="53.73741180" lon="-7.80706950"><ele>46.1</ele><time>2017-12-01T10:24:09Z</time></trkpt>
+	<trkpt lat="53.73700700" lon="-7.80997500"><ele>44.3</ele><time>2017-12-01T10:24:20Z</time></trkpt>
+	<trkpt lat="53.73661860" lon="-7.81267360"><ele>43.0</ele><time>2017-12-01T10:24:30Z</time></trkpt>
+	<trkpt lat="53.73625330" lon="-7.81539120"><ele>42.1</ele><time>2017-12-01T10:24:40Z</time></trkpt>
+	<trkpt lat="53.73586120" lon="-7.81811550"><ele>42.5</ele><time>2017-12-01T10:24:50Z</time></trkpt>
+	<trkpt lat="53.73551800" lon="-7.82041350"><ele>43.2</ele><time>2017-12-01T10:25:00Z</time></trkpt>
+	<trkpt lat="53.73595730" lon="-7.82085820"><ele>43.5</ele><time>2017-12-01T10:25:10Z</time></trkpt>
+	<trkpt lat="53.73716670" lon="-7.82191820"><ele>44.0</ele><time>2017-12-01T10:25:20Z</time></trkpt>
+	<trkpt lat="53.73856970" lon="-7.82361510"><ele>44.9</ele><time>2017-12-01T10:25:30Z</time></trkpt>
+	<trkpt lat="53.73993210" lon="-7.82529810"><ele>45.0</ele><time>2017-12-01T10:25:40Z</time></trkpt>
+	<trkpt lat="53.74108200" lon="-7.82680640"><ele>45.3</ele><time>2017-12-01T10:25:50Z</time></trkpt>
+	<trkpt lat="53.74142790" lon="-7.82725460"><ele>44.8</ele><time>2017-12-01T10:26:01Z</time></trkpt>
+	<trkpt lat="53.74186250" lon="-7.82767240"><ele>44.3</ele><time>2017-12-01T10:29:10Z</time></trkpt>
+	<trkpt lat="53.74284890" lon="-7.82902040"><ele>44.3</ele><time>2017-12-01T10:29:20Z</time></trkpt>
+	<trkpt lat="53.74337740" lon="-7.83028680"><ele>44.2</ele><time>2017-12-01T10:29:30Z</time></trkpt>
+	<trkpt lat="53.74380680" lon="-7.83072280"><ele>44.3</ele><time>2017-12-01T10:30:20Z</time></trkpt>
+	<trkpt lat="53.74507700" lon="-7.83115170"><ele>45.6</ele><time>2017-12-01T10:30:30Z</time></trkpt>
+	<trkpt lat="53.74671290" lon="-7.83157500"><ele>47.1</ele><time>2017-12-01T10:30:40Z</time></trkpt>
+	<trkpt lat="53.74816980" lon="-7.83139180"><ele>47.1</ele><time>2017-12-01T10:30:50Z</time></trkpt>
+	<trkpt lat="53.74858370" lon="-7.83067710"><ele>47.8</ele><time>2017-12-01T10:31:00Z</time></trkpt>
+	<trkpt lat="53.74893880" lon="-7.82860670"><ele>49.2</ele><time>2017-12-01T10:31:10Z</time></trkpt>
+	<trkpt lat="53.74956680" lon="-7.82642820"><ele>50.2</ele><time>2017-12-01T10:31:20Z</time></trkpt>
+	<trkpt lat="53.74947510" lon="-7.82559350"><ele>51.9</ele><time>2017-12-01T10:31:30Z</time></trkpt>
+	<trkpt lat="53.74939010" lon="-7.82550450"><ele>54.1</ele><time>2017-12-01T10:31:40Z</time></trkpt>
+	<trkpt lat="53.74903630" lon="-7.82488670"><ele>55.9</ele><time>2017-12-01T10:32:00Z</time></trkpt>
+	<trkpt lat="53.74870310" lon="-7.82422010"><ele>56.3</ele><time>2017-12-01T10:32:10Z</time></trkpt>
+	<trkpt lat="53.74801800" lon="-7.82302840"><ele>55.9</ele><time>2017-12-01T10:32:20Z</time></trkpt>
+	<trkpt lat="53.74690710" lon="-7.82202250"><ele>54.5</ele><time>2017-12-01T10:32:30Z</time></trkpt>
+	<trkpt lat="53.74625460" lon="-7.82104930"><ele>53.2</ele><time>2017-12-01T10:32:40Z</time></trkpt>
+	<trkpt lat="53.74678310" lon="-7.82012070"><ele>51.7</ele><time>2017-12-01T10:32:50Z</time></trkpt>
+	<trkpt lat="53.74737950" lon="-7.81817400"><ele>50.2</ele><time>2017-12-01T10:33:00Z</time></trkpt>
+	<trkpt lat="53.74797500" lon="-7.81595710"><ele>49.3</ele><time>2017-12-01T10:33:10Z</time></trkpt>
+	<trkpt lat="53.74867500" lon="-7.81444300"><ele>48.5</ele><time>2017-12-01T10:33:20Z</time></trkpt>
+	<trkpt lat="53.74925540" lon="-7.81327580"><ele>48.2</ele><time>2017-12-01T10:33:30Z</time></trkpt>
+	<trkpt lat="53.74997540" lon="-7.81433680"><ele>53.3</ele><time>2017-12-01T10:33:50Z</time></trkpt>
+	<trkpt lat="53.75092720" lon="-7.81581580"><ele>58.2</ele><time>2017-12-01T10:34:00Z</time></trkpt>
+	<trkpt lat="53.75099900" lon="-7.81634370"><ele>60.4</ele><time>2017-12-01T10:34:10Z</time></trkpt>
+	<trkpt lat="53.75108620" lon="-7.81645270"><ele>61.7</ele><time>2017-12-01T10:34:20Z</time></trkpt>
+	<trkpt lat="53.75110160" lon="-7.81660270"><ele>62.8</ele><time>2017-12-01T10:35:50Z</time></trkpt>
+	<trkpt lat="53.75109000" lon="-7.81642210"><ele>58.7</ele><time>2017-12-01T10:37:31Z</time></trkpt>
+	<trkpt lat="53.75088610" lon="-7.81590880"><ele>55.3</ele><time>2017-12-01T10:40:30Z</time></trkpt>
+	<trkpt lat="53.75118700" lon="-7.81614500"><ele>54.9</ele><time>2017-12-01T10:40:40Z</time></trkpt>
+	<trkpt lat="53.75221660" lon="-7.81774070"><ele>54.4</ele><time>2017-12-01T10:40:50Z</time></trkpt>
+	<trkpt lat="53.75362730" lon="-7.81986130"><ele>53.8</ele><time>2017-12-01T10:41:00Z</time></trkpt>
+	<trkpt lat="53.75527930" lon="-7.82245620"><ele>53.0</ele><time>2017-12-01T10:41:10Z</time></trkpt>
+	<trkpt lat="53.75716190" lon="-7.82456040"><ele>52.2</ele><time>2017-12-01T10:41:20Z</time></trkpt>
+	<trkpt lat="53.75888010" lon="-7.82714210"><ele>51.7</ele><time>2017-12-01T10:41:30Z</time></trkpt>
+	<trkpt lat="53.76017900" lon="-7.82915900"><ele>52.3</ele><time>2017-12-01T10:41:40Z</time></trkpt>
+	<trkpt lat="53.76139800" lon="-7.83075400"><ele>53.1</ele><time>2017-12-01T10:41:50Z</time></trkpt>
+	<trkpt lat="53.76263690" lon="-7.83239100"><ele>53.2</ele><time>2017-12-01T10:42:01Z</time></trkpt>
+	<trkpt lat="53.76308500" lon="-7.83350280"><ele>54.8</ele><time>2017-12-01T10:42:10Z</time></trkpt>
+	<trkpt lat="53.76018640" lon="-7.83436020"><ele>56.4</ele><time>2017-12-01T10:42:32Z</time></trkpt>
+	<trkpt lat="53.75674340" lon="-7.83552740"><ele>57.4</ele><time>2017-12-01T10:43:02Z</time></trkpt>
+	<trkpt lat="53.75681220" lon="-7.83493560"><ele>58.0</ele><time>2017-12-01T10:43:12Z</time></trkpt>
+	<trkpt lat="53.75690710" lon="-7.83492010"><ele>58.9</ele><time>2017-12-01T10:43:52Z</time></trkpt>
+	<trkpt lat="53.75680310" lon="-7.83511920"><ele>57.8</ele><time>2017-12-01T10:47:22Z</time></trkpt>
+	<trkpt lat="53.75674360" lon="-7.83535610"><ele>56.1</ele><time>2017-12-01T10:47:32Z</time></trkpt>
+	<trkpt lat="53.75695630" lon="-7.83563910"><ele>54.8</ele><time>2017-12-01T10:47:42Z</time></trkpt>
+	<trkpt lat="53.75819760" lon="-7.83479510"><ele>54.1</ele><time>2017-12-01T10:47:52Z</time></trkpt>
+	<trkpt lat="53.75960010" lon="-7.83434720"><ele>54.0</ele><time>2017-12-01T10:48:02Z</time></trkpt>
+	<trkpt lat="53.76140450" lon="-7.83445330"><ele>53.8</ele><time>2017-12-01T10:48:12Z</time></trkpt>
+	<trkpt lat="53.76277480" lon="-7.83381440"><ele>53.2</ele><time>2017-12-01T10:48:21Z</time></trkpt>
+	<trkpt lat="53.76477130" lon="-7.83759240"><ele>50.7</ele><time>2017-12-01T10:48:53Z</time></trkpt>
+	<trkpt lat="53.76463760" lon="-7.83934130"><ele>48.1</ele><time>2017-12-01T10:49:03Z</time></trkpt>
+	<trkpt lat="53.76392830" lon="-7.83973330"><ele>46.0</ele><time>2017-12-01T10:49:14Z</time></trkpt>
+	<trkpt lat="53.76390120" lon="-7.84020630"><ele>44.0</ele><time>2017-12-01T10:49:23Z</time></trkpt>
+	<trkpt lat="53.76394970" lon="-7.84036970"><ele>43.5</ele><time>2017-12-01T10:51:03Z</time></trkpt>
+	<trkpt lat="53.76391180" lon="-7.84021870"><ele>45.0</ele><time>2017-12-01T10:51:53Z</time></trkpt>
+	<trkpt lat="53.76374930" lon="-7.84001150"><ele>47.0</ele><time>2017-12-01T10:52:03Z</time></trkpt>
+	<trkpt lat="53.76424720" lon="-7.83991230"><ele>49.4</ele><time>2017-12-01T10:52:13Z</time></trkpt>
+	<trkpt lat="53.76487140" lon="-7.83852240"><ele>52.9</ele><time>2017-12-01T10:52:33Z</time></trkpt>
+	<trkpt lat="53.76459840" lon="-7.83698850"><ele>55.5</ele><time>2017-12-01T10:52:44Z</time></trkpt>
+	<trkpt lat="53.76443840" lon="-7.83631360"><ele>58.0</ele><time>2017-12-01T10:52:53Z</time></trkpt>
+	<trkpt lat="53.76534350" lon="-7.83579670"><ele>59.9</ele><time>2017-12-01T10:53:03Z</time></trkpt>
+	<trkpt lat="53.76645340" lon="-7.83507640"><ele>61.3</ele><time>2017-12-01T10:53:15Z</time></trkpt>
+	<trkpt lat="53.76676120" lon="-7.83452240"><ele>61.6</ele><time>2017-12-01T10:53:34Z</time></trkpt>
+	<trkpt lat="53.76627580" lon="-7.83283510"><ele>61.5</ele><time>2017-12-01T10:53:45Z</time></trkpt>
+	<trkpt lat="53.76511680" lon="-7.82961600"><ele>60.8</ele><time>2017-12-01T10:54:05Z</time></trkpt>
+	<trkpt lat="53.76506680" lon="-7.82828060"><ele>60.4</ele><time>2017-12-01T10:54:15Z</time></trkpt>
+	<trkpt lat="53.76452050" lon="-7.82421850"><ele>59.9</ele><time>2017-12-01T10:54:35Z</time></trkpt>
+	<trkpt lat="53.76483450" lon="-7.82206660"><ele>59.3</ele><time>2017-12-01T10:54:44Z</time></trkpt>
+	<trkpt lat="53.76478980" lon="-7.81943300"><ele>59.5</ele><time>2017-12-01T10:54:55Z</time></trkpt>
+	<trkpt lat="53.76455020" lon="-7.81658000"><ele>60.7</ele><time>2017-12-01T10:55:05Z</time></trkpt>
+	<trkpt lat="53.76442140" lon="-7.81396600"><ele>61.4</ele><time>2017-12-01T10:55:14Z</time></trkpt>
+	<trkpt lat="53.76483020" lon="-7.81173130"><ele>62.4</ele><time>2017-12-01T10:55:24Z</time></trkpt>
+	<trkpt lat="53.76493120" lon="-7.80930500"><ele>63.2</ele><time>2017-12-01T10:55:35Z</time></trkpt>
+	<trkpt lat="53.76477580" lon="-7.80636190"><ele>63.1</ele><time>2017-12-01T10:55:45Z</time></trkpt>
+	<trkpt lat="53.76468820" lon="-7.80393840"><ele>63.1</ele><time>2017-12-01T10:55:54Z</time></trkpt>
+	<trkpt lat="53.76470570" lon="-7.80184130"><ele>62.9</ele><time>2017-12-01T10:56:05Z</time></trkpt>
+	<trkpt lat="53.76466410" lon="-7.80313040"><ele>62.1</ele><time>2017-12-01T10:56:25Z</time></trkpt>
+	<trkpt lat="53.76470480" lon="-7.80596810"><ele>62.1</ele><time>2017-12-01T10:56:35Z</time></trkpt>
+	<trkpt lat="53.76477850" lon="-7.80683740"><ele>62.9</ele><time>2017-12-01T10:56:45Z</time></trkpt>
+	<trkpt lat="53.76491550" lon="-7.80674730"><ele>62.9</ele><time>2017-12-01T10:56:55Z</time></trkpt>
+	<trkpt lat="53.76543840" lon="-7.80636880"><ele>63.3</ele><time>2017-12-01T10:57:05Z</time></trkpt>
+	<trkpt lat="53.76594340" lon="-7.80706780"><ele>63.8</ele><time>2017-12-01T10:57:15Z</time></trkpt>
+	<trkpt lat="53.76600090" lon="-7.80744050"><ele>64.3</ele><time>2017-12-01T10:57:25Z</time></trkpt>
+	<trkpt lat="53.76603840" lon="-7.80717450"><ele>64.4</ele><time>2017-12-01T11:00:55Z</time></trkpt>
+	<trkpt lat="53.76560730" lon="-7.80657730"><ele>64.8</ele><time>2017-12-01T11:01:05Z</time></trkpt>
+	<trkpt lat="53.76496230" lon="-7.80659090"><ele>64.5</ele><time>2017-12-01T11:01:15Z</time></trkpt>
+	<trkpt lat="53.76480230" lon="-7.80658060"><ele>64.0</ele><time>2017-12-01T11:01:25Z</time></trkpt>
+	<trkpt lat="53.76472580" lon="-7.80476840"><ele>64.2</ele><time>2017-12-01T11:01:35Z</time></trkpt>
+	<trkpt lat="53.76470450" lon="-7.80211460"><ele>64.6</ele><time>2017-12-01T11:01:45Z</time></trkpt>
+	<trkpt lat="53.76470420" lon="-7.79907710"><ele>65.6</ele><time>2017-12-01T11:01:55Z</time></trkpt>
+	<trkpt lat="53.76468700" lon="-7.79634250"><ele>66.1</ele><time>2017-12-01T11:02:05Z</time></trkpt>
+	<trkpt lat="53.76464790" lon="-7.79421660"><ele>66.6</ele><time>2017-12-01T11:02:15Z</time></trkpt>
+	<trkpt lat="53.76470880" lon="-7.79399310"><ele>65.4</ele><time>2017-12-01T11:02:24Z</time></trkpt>
+	<trkpt lat="53.76564550" lon="-7.79410240"><ele>64.5</ele><time>2017-12-01T11:02:35Z</time></trkpt>
+	<trkpt lat="53.76692520" lon="-7.79444360"><ele>64.2</ele><time>2017-12-01T11:02:45Z</time></trkpt>
+	<trkpt lat="53.76836640" lon="-7.79485900"><ele>65.5</ele><time>2017-12-01T11:02:54Z</time></trkpt>
+	<trkpt lat="53.77020850" lon="-7.79523860"><ele>68.3</ele><time>2017-12-01T11:03:04Z</time></trkpt>
+	<trkpt lat="53.77202550" lon="-7.79568020"><ele>73.1</ele><time>2017-12-01T11:03:15Z</time></trkpt>
+	<trkpt lat="53.77366720" lon="-7.79592040"><ele>77.7</ele><time>2017-12-01T11:03:25Z</time></trkpt>
+	<trkpt lat="53.77456490" lon="-7.79735970"><ele>82.3</ele><time>2017-12-01T11:03:36Z</time></trkpt>
+	<trkpt lat="53.77901950" lon="-7.80380230"><ele>86.8</ele><time>2017-12-01T11:04:15Z</time></trkpt>
+	<trkpt lat="53.78084420" lon="-7.80586960"><ele>90.5</ele><time>2017-12-01T11:04:35Z</time></trkpt>
+	<trkpt lat="53.78151840" lon="-7.80684290"><ele>93.9</ele><time>2017-12-01T11:04:45Z</time></trkpt>
+	<trkpt lat="53.78244680" lon="-7.80881960"><ele>96.9</ele><time>2017-12-01T11:04:55Z</time></trkpt>
+	<trkpt lat="53.78318490" lon="-7.81054790"><ele>99.4</ele><time>2017-12-01T11:05:05Z</time></trkpt>
+	<trkpt lat="53.78325490" lon="-7.81129280"><ele>100.7</ele><time>2017-12-01T11:05:15Z</time></trkpt>
+	<trkpt lat="53.78321550" lon="-7.81143520"><ele>100.8</ele><time>2017-12-01T11:05:35Z</time></trkpt>
+	<trkpt lat="53.78321650" lon="-7.81122400"><ele>99.3</ele><time>2017-12-01T11:08:45Z</time></trkpt>
+	<trkpt lat="53.78315060" lon="-7.81098850"><ele>97.9</ele><time>2017-12-01T11:08:55Z</time></trkpt>
+	<trkpt lat="53.78294270" lon="-7.80998350"><ele>96.1</ele><time>2017-12-01T11:09:05Z</time></trkpt>
+	<trkpt lat="53.78237000" lon="-7.80864790"><ele>93.9</ele><time>2017-12-01T11:09:15Z</time></trkpt>
+	<trkpt lat="53.78150170" lon="-7.80693850"><ele>91.6</ele><time>2017-12-01T11:09:25Z</time></trkpt>
+	<trkpt lat="53.78084970" lon="-7.80576810"><ele>89.3</ele><time>2017-12-01T11:09:35Z</time></trkpt>
+	<trkpt lat="53.78035630" lon="-7.80670390"><ele>86.1</ele><time>2017-12-01T11:09:45Z</time></trkpt>
+	<trkpt lat="53.77920200" lon="-7.80870060"><ele>82.9</ele><time>2017-12-01T11:09:55Z</time></trkpt>
+	<trkpt lat="53.77806520" lon="-7.80968590"><ele>79.6</ele><time>2017-12-01T11:10:05Z</time></trkpt>
+	<trkpt lat="53.77696100" lon="-7.81096840"><ele>76.7</ele><time>2017-12-01T11:10:15Z</time></trkpt>
+	<trkpt lat="53.77597740" lon="-7.81304670"><ele>73.9</ele><time>2017-12-01T11:10:25Z</time></trkpt>
+	<trkpt lat="53.77508950" lon="-7.81480020"><ele>71.9</ele><time>2017-12-01T11:10:35Z</time></trkpt>
+	<trkpt lat="53.77563700" lon="-7.81568640"><ele>69.7</ele><time>2017-12-01T11:10:45Z</time></trkpt>
+	<trkpt lat="53.77683070" lon="-7.81719750"><ele>68.2</ele><time>2017-12-01T11:10:55Z</time></trkpt>
+	<trkpt lat="53.77766370" lon="-7.81919520"><ele>66.6</ele><time>2017-12-01T11:11:05Z</time></trkpt>
+	<trkpt lat="53.77813350" lon="-7.82159520"><ele>65.1</ele><time>2017-12-01T11:11:15Z</time></trkpt>
+	<trkpt lat="53.77863480" lon="-7.82357210"><ele>63.3</ele><time>2017-12-01T11:11:25Z</time></trkpt>
+	<trkpt lat="53.77910580" lon="-7.82564150"><ele>62.6</ele><time>2017-12-01T11:11:35Z</time></trkpt>
+	<trkpt lat="53.77982560" lon="-7.82749970"><ele>61.9</ele><time>2017-12-01T11:11:45Z</time></trkpt>
+	<trkpt lat="53.78030630" lon="-7.82912840"><ele>61.2</ele><time>2017-12-01T11:11:56Z</time></trkpt>
+	<trkpt lat="53.78086230" lon="-7.83045480"><ele>61.4</ele><time>2017-12-01T11:12:05Z</time></trkpt>
+	<trkpt lat="53.78177790" lon="-7.83217920"><ele>61.4</ele><time>2017-12-01T11:12:15Z</time></trkpt>
+	<trkpt lat="53.78250020" lon="-7.83409890"><ele>60.9</ele><time>2017-12-01T11:12:25Z</time></trkpt>
+	<trkpt lat="53.78285460" lon="-7.83548790"><ele>60.7</ele><time>2017-12-01T11:12:35Z</time></trkpt>
+	<trkpt lat="53.78259870" lon="-7.83608560"><ele>60.8</ele><time>2017-12-01T11:12:45Z</time></trkpt>
+	<trkpt lat="53.78238790" lon="-7.83615340"><ele>59.9</ele><time>2017-12-01T11:12:55Z</time></trkpt>
+	<trkpt lat="53.78233140" lon="-7.83633010"><ele>59.0</ele><time>2017-12-01T11:13:15Z</time></trkpt>
+	<trkpt lat="53.78252110" lon="-7.83694870"><ele>57.6</ele><time>2017-12-01T11:13:25Z</time></trkpt>
+	<trkpt lat="53.78342280" lon="-7.83812270"><ele>55.2</ele><time>2017-12-01T11:13:35Z</time></trkpt>
+	<trkpt lat="53.78446300" lon="-7.83983310"><ele>52.1</ele><time>2017-12-01T11:13:45Z</time></trkpt>
+	<trkpt lat="53.78569950" lon="-7.84192190"><ele>49.3</ele><time>2017-12-01T11:13:55Z</time></trkpt>
+	<trkpt lat="53.78702110" lon="-7.84423990"><ele>47.1</ele><time>2017-12-01T11:14:05Z</time></trkpt>
+	<trkpt lat="53.78788280" lon="-7.84737770"><ele>44.9</ele><time>2017-12-01T11:14:15Z</time></trkpt>
+	<trkpt lat="53.78836780" lon="-7.85069480"><ele>43.1</ele><time>2017-12-01T11:14:25Z</time></trkpt>
+	<trkpt lat="53.78873020" lon="-7.85419210"><ele>41.8</ele><time>2017-12-01T11:14:35Z</time></trkpt>
+	<trkpt lat="53.78955000" lon="-7.85729070"><ele>41.3</ele><time>2017-12-01T11:14:45Z</time></trkpt>
+	<trkpt lat="53.79078400" lon="-7.85977380"><ele>40.5</ele><time>2017-12-01T11:14:55Z</time></trkpt>
+	<trkpt lat="53.79210330" lon="-7.86228060"><ele>40.9</ele><time>2017-12-01T11:15:05Z</time></trkpt>
+	<trkpt lat="53.79342410" lon="-7.86557350"><ele>41.2</ele><time>2017-12-01T11:15:15Z</time></trkpt>
+	<trkpt lat="53.79487830" lon="-7.86924930"><ele>41.8</ele><time>2017-12-01T11:15:25Z</time></trkpt>
+	<trkpt lat="53.79642170" lon="-7.87259080"><ele>42.4</ele><time>2017-12-01T11:15:35Z</time></trkpt>
+	<trkpt lat="53.79840190" lon="-7.87460930"><ele>43.8</ele><time>2017-12-01T11:15:45Z</time></trkpt>
+	<trkpt lat="53.80055140" lon="-7.87626620"><ele>44.8</ele><time>2017-12-01T11:15:55Z</time></trkpt>
+	<trkpt lat="53.80256990" lon="-7.87809810"><ele>46.4</ele><time>2017-12-01T11:16:05Z</time></trkpt>
+	<trkpt lat="53.80427380" lon="-7.87959760"><ele>47.1</ele><time>2017-12-01T11:16:14Z</time></trkpt>
+	<trkpt lat="53.80608680" lon="-7.88222620"><ele>47.6</ele><time>2017-12-01T11:16:25Z</time></trkpt>
+	<trkpt lat="53.80734970" lon="-7.88509470"><ele>47.6</ele><time>2017-12-01T11:16:35Z</time></trkpt>
+	<trkpt lat="53.80854660" lon="-7.88764530"><ele>47.2</ele><time>2017-12-01T11:16:44Z</time></trkpt>
+	<trkpt lat="53.81031960" lon="-7.89015290"><ele>46.9</ele><time>2017-12-01T11:16:55Z</time></trkpt>
+	<trkpt lat="53.81199020" lon="-7.89246220"><ele>47.2</ele><time>2017-12-01T11:17:05Z</time></trkpt>
+	<trkpt lat="53.81388800" lon="-7.89524730"><ele>46.8</ele><time>2017-12-01T11:17:15Z</time></trkpt>
+	<trkpt lat="53.81581440" lon="-7.89877260"><ele>46.9</ele><time>2017-12-01T11:17:25Z</time></trkpt>
+	<trkpt lat="53.81751710" lon="-7.90230350"><ele>46.9</ele><time>2017-12-01T11:17:35Z</time></trkpt>
+	<trkpt lat="53.81907470" lon="-7.90513580"><ele>47.0</ele><time>2017-12-01T11:17:45Z</time></trkpt>
+	<trkpt lat="53.82019170" lon="-7.90670870"><ele>47.6</ele><time>2017-12-01T11:17:55Z</time></trkpt>
+	<trkpt lat="53.82053260" lon="-7.90873410"><ele>49.3</ele><time>2017-12-01T11:18:05Z</time></trkpt>
+	<trkpt lat="53.82116680" lon="-7.91133650"><ele>50.9</ele><time>2017-12-01T11:18:15Z</time></trkpt>
+	<trkpt lat="53.82163630" lon="-7.91332070"><ele>52.3</ele><time>2017-12-01T11:18:25Z</time></trkpt>
+	<trkpt lat="53.82122700" lon="-7.91332010"><ele>53.6</ele><time>2017-12-01T11:18:35Z</time></trkpt>
+	<trkpt lat="53.82113970" lon="-7.91323120"><ele>54.2</ele><time>2017-12-01T11:18:55Z</time></trkpt>
+	<trkpt lat="53.82144000" lon="-7.91337790"><ele>54.1</ele><time>2017-12-01T11:22:45Z</time></trkpt>
+	<trkpt lat="53.82161350" lon="-7.91350190"><ele>52.4</ele><time>2017-12-01T11:22:55Z</time></trkpt>
+	<trkpt lat="53.82151880" lon="-7.91256100"><ele>51.0</ele><time>2017-12-01T11:23:13Z</time></trkpt>
+	<trkpt lat="53.82113380" lon="-7.91096610"><ele>49.6</ele><time>2017-12-01T11:23:22Z</time></trkpt>
+	<trkpt lat="53.82060500" lon="-7.90877710"><ele>47.8</ele><time>2017-12-01T11:23:32Z</time></trkpt>
+	<trkpt lat="53.82085150" lon="-7.90668310"><ele>45.5</ele><time>2017-12-01T11:23:53Z</time></trkpt>
+	<trkpt lat="53.82013110" lon="-7.90630690"><ele>44.9</ele><time>2017-12-01T11:24:02Z</time></trkpt>
+	<trkpt lat="53.81896180" lon="-7.90477070"><ele>44.6</ele><time>2017-12-01T11:24:12Z</time></trkpt>
+	<trkpt lat="53.81590100" lon="-7.89876160"><ele>44.3</ele><time>2017-12-01T11:24:32Z</time></trkpt>
+	<trkpt lat="53.81376080" lon="-7.89496240"><ele>45.5</ele><time>2017-12-01T11:24:42Z</time></trkpt>
+	<trkpt lat="53.81169760" lon="-7.89199040"><ele>46.8</ele><time>2017-12-01T11:24:52Z</time></trkpt>
+	<trkpt lat="53.80758380" lon="-7.88554540"><ele>47.2</ele><time>2017-12-01T11:25:13Z</time></trkpt>
+	<trkpt lat="53.80626700" lon="-7.88240170"><ele>46.9</ele><time>2017-12-01T11:25:22Z</time></trkpt>
+	<trkpt lat="53.80441520" lon="-7.87960660"><ele>46.7</ele><time>2017-12-01T11:25:32Z</time></trkpt>
+	<trkpt lat="53.80218810" lon="-7.87760090"><ele>45.4</ele><time>2017-12-01T11:25:42Z</time></trkpt>
+	<trkpt lat="53.79980060" lon="-7.87553460"><ele>44.7</ele><time>2017-12-01T11:25:52Z</time></trkpt>
+	<trkpt lat="53.79737580" lon="-7.87373110"><ele>44.0</ele><time>2017-12-01T11:26:02Z</time></trkpt>
+	<trkpt lat="53.79558140" lon="-7.87078700"><ele>43.8</ele><time>2017-12-01T11:26:12Z</time></trkpt>
+	<trkpt lat="53.79418760" lon="-7.86722790"><ele>43.0</ele><time>2017-12-01T11:26:22Z</time></trkpt>
+	<trkpt lat="53.78836960" lon="-7.85023950"><ele>41.7</ele><time>2017-12-01T11:27:13Z</time></trkpt>
+	<trkpt lat="53.78752280" lon="-7.84443350"><ele>41.3</ele><time>2017-12-01T11:27:33Z</time></trkpt>
+	<trkpt lat="53.78732260" lon="-7.84227560"><ele>41.1</ele><time>2017-12-01T11:27:42Z</time></trkpt>
+	<trkpt lat="53.78701140" lon="-7.83894230"><ele>41.7</ele><time>2017-12-01T11:28:03Z</time></trkpt>
+	<trkpt lat="53.78620790" lon="-7.83704050"><ele>43.4</ele><time>2017-12-01T11:28:13Z</time></trkpt>
+	<trkpt lat="53.78597600" lon="-7.83605440"><ele>45.5</ele><time>2017-12-01T11:28:23Z</time></trkpt>
+	<trkpt lat="53.78678320" lon="-7.83529610"><ele>47.0</ele><time>2017-12-01T11:28:32Z</time></trkpt>
+	<trkpt lat="53.78841900" lon="-7.83403700"><ele>48.0</ele><time>2017-12-01T11:28:43Z</time></trkpt>
+	<trkpt lat="53.78941360" lon="-7.83414860"><ele>47.2</ele><time>2017-12-01T11:28:52Z</time></trkpt>
+	<trkpt lat="53.79083790" lon="-7.83536950"><ele>44.9</ele><time>2017-12-01T11:29:02Z</time></trkpt>
+	<trkpt lat="53.79228570" lon="-7.83670700"><ele>45.5</ele><time>2017-12-01T11:29:12Z</time></trkpt>
+	<trkpt lat="53.79342280" lon="-7.83773720"><ele>46.2</ele><time>2017-12-01T11:29:22Z</time></trkpt>
+	<trkpt lat="53.79403110" lon="-7.83829970"><ele>46.4</ele><time>2017-12-01T11:29:32Z</time></trkpt>
+	<trkpt lat="53.79357870" lon="-7.83780460"><ele>47.3</ele><time>2017-12-01T11:29:52Z</time></trkpt>
+	<trkpt lat="53.79458780" lon="-7.83872930"><ele>49.0</ele><time>2017-12-01T11:33:12Z</time></trkpt>
+	<trkpt lat="53.79616410" lon="-7.84011790"><ele>48.0</ele><time>2017-12-01T11:33:22Z</time></trkpt>
+	<trkpt lat="53.79788050" lon="-7.84150810"><ele>47.5</ele><time>2017-12-01T11:33:32Z</time></trkpt>
+	<trkpt lat="53.79943370" lon="-7.84265030"><ele>47.3</ele><time>2017-12-01T11:33:42Z</time></trkpt>
+	<trkpt lat="53.80074230" lon="-7.84366960"><ele>47.0</ele><time>2017-12-01T11:33:52Z</time></trkpt>
+	<trkpt lat="53.80156240" lon="-7.84431200"><ele>46.6</ele><time>2017-12-01T11:34:02Z</time></trkpt>
+	<trkpt lat="53.80206140" lon="-7.84320410"><ele>46.4</ele><time>2017-12-01T11:34:12Z</time></trkpt>
+	<trkpt lat="53.80259250" lon="-7.84126820"><ele>45.5</ele><time>2017-12-01T11:34:22Z</time></trkpt>
+	<trkpt lat="53.80275930" lon="-7.83897350"><ele>45.5</ele><time>2017-12-01T11:34:32Z</time></trkpt>
+	<trkpt lat="53.80319970" lon="-7.83693580"><ele>46.3</ele><time>2017-12-01T11:34:42Z</time></trkpt>
+	<trkpt lat="53.80345550" lon="-7.83474310"><ele>47.5</ele><time>2017-12-01T11:34:52Z</time></trkpt>
+	<trkpt lat="53.80365120" lon="-7.83326560"><ele>47.8</ele><time>2017-12-01T11:35:02Z</time></trkpt>
+	<trkpt lat="53.80299510" lon="-7.83275370"><ele>51.1</ele><time>2017-12-01T11:35:12Z</time></trkpt>
+	<trkpt lat="53.80262860" lon="-7.83267010"><ele>54.0</ele><time>2017-12-01T11:35:22Z</time></trkpt>
+	<trkpt lat="53.80277150" lon="-7.83264440"><ele>55.5</ele><time>2017-12-01T11:35:32Z</time></trkpt>
+	<trkpt lat="53.80314740" lon="-7.83289130"><ele>56.0</ele><time>2017-12-01T11:35:42Z</time></trkpt>
+	<trkpt lat="53.80320950" lon="-7.83301350"><ele>56.5</ele><time>2017-12-01T11:38:22Z</time></trkpt>
+	<trkpt lat="53.80330190" lon="-7.83302100"><ele>53.9</ele><time>2017-12-01T11:38:42Z</time></trkpt>
+	<trkpt lat="53.80369170" lon="-7.83329920"><ele>51.6</ele><time>2017-12-01T11:38:52Z</time></trkpt>
+	<trkpt lat="53.80443810" lon="-7.83384090"><ele>49.8</ele><time>2017-12-01T11:39:02Z</time></trkpt>
+	<trkpt lat="53.80484850" lon="-7.83419550"><ele>48.7</ele><time>2017-12-01T11:39:13Z</time></trkpt>
+	<trkpt lat="53.80466690" lon="-7.83399510"><ele>49.2</ele><time>2017-12-01T11:42:12Z</time></trkpt>
+	<trkpt lat="53.80417390" lon="-7.83365400"><ele>48.5</ele><time>2017-12-01T11:42:22Z</time></trkpt>
+	<trkpt lat="53.80374430" lon="-7.83283000"><ele>47.1</ele><time>2017-12-01T11:42:42Z</time></trkpt>
+	<trkpt lat="53.80395150" lon="-7.82929710"><ele>46.1</ele><time>2017-12-01T11:43:03Z</time></trkpt>
+	<trkpt lat="53.80387390" lon="-7.82808840"><ele>46.0</ele><time>2017-12-01T11:43:22Z</time></trkpt>
+	<trkpt lat="53.80374810" lon="-7.83204180"><ele>46.1</ele><time>2017-12-01T11:44:03Z</time></trkpt>
+	<trkpt lat="53.80366970" lon="-7.83295470"><ele>47.5</ele><time>2017-12-01T11:44:13Z</time></trkpt>
+	<trkpt lat="53.80365950" lon="-7.83331000"><ele>48.8</ele><time>2017-12-01T11:44:23Z</time></trkpt>
+	<trkpt lat="53.80359730" lon="-7.83342550"><ele>50.2</ele><time>2017-12-01T11:45:12Z</time></trkpt>
+	<trkpt lat="53.80337890" lon="-7.83477670"><ele>50.6</ele><time>2017-12-01T11:45:22Z</time></trkpt>
+	<trkpt lat="53.80321460" lon="-7.83664260"><ele>50.2</ele><time>2017-12-01T11:45:32Z</time></trkpt>
+	<trkpt lat="53.80297700" lon="-7.83799030"><ele>50.3</ele><time>2017-12-01T11:45:42Z</time></trkpt>
+	<trkpt lat="53.80287030" lon="-7.83845520"><ele>50.7</ele><time>2017-12-01T11:45:52Z</time></trkpt>
+	<trkpt lat="53.80296770" lon="-7.83820840"><ele>49.8</ele><time>2017-12-01T11:46:02Z</time></trkpt>
+	<trkpt lat="53.80307710" lon="-7.83748140"><ele>48.1</ele><time>2017-12-01T11:46:12Z</time></trkpt>
+	<trkpt lat="53.80297000" lon="-7.83737750"><ele>46.3</ele><time>2017-12-01T11:46:22Z</time></trkpt>
+	<trkpt lat="53.80305890" lon="-7.83748360"><ele>44.1</ele><time>2017-12-01T11:46:42Z</time></trkpt>
+	<trkpt lat="53.80325270" lon="-7.83677990"><ele>41.8</ele><time>2017-12-01T11:50:02Z</time></trkpt>
+	<trkpt lat="53.80336640" lon="-7.83469090"><ele>41.3</ele><time>2017-12-01T11:50:12Z</time></trkpt>
+	<trkpt lat="53.80371380" lon="-7.83260510"><ele>42.2</ele><time>2017-12-01T11:50:22Z</time></trkpt>
+	<trkpt lat="53.80383420" lon="-7.82987650"><ele>43.8</ele><time>2017-12-01T11:50:32Z</time></trkpt>
+	<trkpt lat="53.80391950" lon="-7.82726600"><ele>45.8</ele><time>2017-12-01T11:50:42Z</time></trkpt>
+	<trkpt lat="53.80379230" lon="-7.82672210"><ele>48.1</ele><time>2017-12-01T11:50:52Z</time></trkpt>
+	<trkpt lat="53.80267090" lon="-7.82600060"><ele>50.2</ele><time>2017-12-01T11:51:02Z</time></trkpt>
+	<trkpt lat="53.80114910" lon="-7.82455790"><ele>51.7</ele><time>2017-12-01T11:51:12Z</time></trkpt>
+	<trkpt lat="53.79985260" lon="-7.82343850"><ele>53.0</ele><time>2017-12-01T11:51:22Z</time></trkpt>
+	<trkpt lat="53.79844660" lon="-7.82253600"><ele>52.2</ele><time>2017-12-01T11:51:32Z</time></trkpt>
+	<trkpt lat="53.79782310" lon="-7.82238370"><ele>52.4</ele><time>2017-12-01T11:51:43Z</time></trkpt>
+	<trkpt lat="53.79753890" lon="-7.82223000"><ele>52.2</ele><time>2017-12-01T11:51:53Z</time></trkpt>
+	<trkpt lat="53.79747340" lon="-7.82197330"><ele>52.4</ele><time>2017-12-01T11:52:03Z</time></trkpt>
+	<trkpt lat="53.79757320" lon="-7.82207110"><ele>52.9</ele><time>2017-12-01T11:52:53Z</time></trkpt>
+	<trkpt lat="53.79756490" lon="-7.82236160"><ele>56.0</ele><time>2017-12-01T11:55:12Z</time></trkpt>
+	<trkpt lat="53.79817810" lon="-7.82232800"><ele>58.1</ele><time>2017-12-01T11:55:22Z</time></trkpt>
+	<trkpt lat="53.79919260" lon="-7.82057830"><ele>60.5</ele><time>2017-12-01T11:55:32Z</time></trkpt>
+	<trkpt lat="53.79996570" lon="-7.81807170"><ele>61.7</ele><time>2017-12-01T11:55:42Z</time></trkpt>
+	<trkpt lat="53.80132120" lon="-7.81606430"><ele>61.7</ele><time>2017-12-01T11:55:52Z</time></trkpt>
+	<trkpt lat="53.80296040" lon="-7.81407740"><ele>61.8</ele><time>2017-12-01T11:56:02Z</time></trkpt>
+	<trkpt lat="53.80453940" lon="-7.81148840"><ele>62.2</ele><time>2017-12-01T11:56:12Z</time></trkpt>
+	<trkpt lat="53.80574920" lon="-7.80932010"><ele>63.4</ele><time>2017-12-01T11:56:22Z</time></trkpt>
+	<trkpt lat="53.80624950" lon="-7.80624240"><ele>66.2</ele><time>2017-12-01T11:56:32Z</time></trkpt>
+	<trkpt lat="53.80668980" lon="-7.80329400"><ele>69.5</ele><time>2017-12-01T11:56:42Z</time></trkpt>
+	<trkpt lat="53.80692720" lon="-7.80064570"><ele>71.0</ele><time>2017-12-01T11:56:52Z</time></trkpt>
+	<trkpt lat="53.80730080" lon="-7.79515590"><ele>71.4</ele><time>2017-12-01T11:57:13Z</time></trkpt>
+	<trkpt lat="53.80767380" lon="-7.79244820"><ele>71.5</ele><time>2017-12-01T11:57:22Z</time></trkpt>
+	<trkpt lat="53.80828620" lon="-7.79003920"><ele>70.8</ele><time>2017-12-01T11:57:32Z</time></trkpt>
+	<trkpt lat="53.81301690" lon="-7.78098100"><ele>70.2</ele><time>2017-12-01T11:58:12Z</time></trkpt>
+	<trkpt lat="53.81431630" lon="-7.77876010"><ele>71.0</ele><time>2017-12-01T11:58:22Z</time></trkpt>
+	<trkpt lat="53.81549260" lon="-7.77676480"><ele>72.1</ele><time>2017-12-01T11:58:32Z</time></trkpt>
+	<trkpt lat="53.81649380" lon="-7.77502570"><ele>72.6</ele><time>2017-12-01T11:58:42Z</time></trkpt>
+	<trkpt lat="53.81700690" lon="-7.77393670"><ele>73.0</ele><time>2017-12-01T11:58:52Z</time></trkpt>
+	<trkpt lat="53.81778430" lon="-7.77282610"><ele>72.6</ele><time>2017-12-01T11:59:02Z</time></trkpt>
+	<trkpt lat="53.81810410" lon="-7.77222890"><ele>72.3</ele><time>2017-12-01T11:59:14Z</time></trkpt>
+	<trkpt lat="53.81910010" lon="-7.77060890"><ele>71.2</ele><time>2017-12-01T11:59:25Z</time></trkpt>
+	<trkpt lat="53.81987150" lon="-7.76965830"><ele>69.9</ele><time>2017-12-01T11:59:34Z</time></trkpt>
+	<trkpt lat="53.82063480" lon="-7.76848050"><ele>68.7</ele><time>2017-12-01T11:59:44Z</time></trkpt>
+	<trkpt lat="53.82138040" lon="-7.76698500"><ele>68.3</ele><time>2017-12-01T11:59:54Z</time></trkpt>
+	<trkpt lat="53.82380030" lon="-7.76264540"><ele>67.4</ele><time>2017-12-01T12:00:20Z</time></trkpt>
+	<trkpt lat="53.82512080" lon="-7.76004760"><ele>66.9</ele><time>2017-12-01T12:00:32Z</time></trkpt>
+	<trkpt lat="53.82648600" lon="-7.75761200"><ele>66.6</ele><time>2017-12-01T12:00:42Z</time></trkpt>
+	<trkpt lat="53.82780010" lon="-7.75531570"><ele>66.3</ele><time>2017-12-01T12:00:52Z</time></trkpt>
+	<trkpt lat="53.82943580" lon="-7.75307050"><ele>65.4</ele><time>2017-12-01T12:01:02Z</time></trkpt>
+	<trkpt lat="53.83131500" lon="-7.75102400"><ele>65.0</ele><time>2017-12-01T12:01:12Z</time></trkpt>
+	<trkpt lat="53.83310330" lon="-7.74864960"><ele>64.8</ele><time>2017-12-01T12:01:22Z</time></trkpt>
+	<trkpt lat="53.83478540" lon="-7.74598280"><ele>65.7</ele><time>2017-12-01T12:01:32Z</time></trkpt>
+	<trkpt lat="53.83647820" lon="-7.74322290"><ele>66.7</ele><time>2017-12-01T12:01:42Z</time></trkpt>
+	<trkpt lat="53.83802670" lon="-7.74075530"><ele>68.5</ele><time>2017-12-01T12:01:52Z</time></trkpt>
+	<trkpt lat="53.83936690" lon="-7.73840350"><ele>72.5</ele><time>2017-12-01T12:02:02Z</time></trkpt>
+	<trkpt lat="53.84021600" lon="-7.73663670"><ele>75.8</ele><time>2017-12-01T12:02:12Z</time></trkpt>
+	<trkpt lat="53.84063250" lon="-7.73644230"><ele>77.3</ele><time>2017-12-01T12:02:22Z</time></trkpt>
+	<trkpt lat="53.84060270" lon="-7.73662970"><ele>78.5</ele><time>2017-12-01T12:02:32Z</time></trkpt>
+	<trkpt lat="53.84070130" lon="-7.73660490"><ele>78.8</ele><time>2017-12-01T12:05:12Z</time></trkpt>
+	<trkpt lat="53.84060580" lon="-7.73662960"><ele>75.6</ele><time>2017-12-01T12:07:52Z</time></trkpt>
+	<trkpt lat="53.84052690" lon="-7.73622140"><ele>72.8</ele><time>2017-12-01T12:08:12Z</time></trkpt>
+	<trkpt lat="53.84029040" lon="-7.73643400"><ele>70.5</ele><time>2017-12-01T12:08:22Z</time></trkpt>
+	<trkpt lat="53.83938260" lon="-7.73808180"><ele>67.9</ele><time>2017-12-01T12:08:32Z</time></trkpt>
+	<trkpt lat="53.83819360" lon="-7.74040200"><ele>66.4</ele><time>2017-12-01T12:08:42Z</time></trkpt>
+	<trkpt lat="53.83672210" lon="-7.74277460"><ele>65.5</ele><time>2017-12-01T12:08:52Z</time></trkpt>
+	<trkpt lat="53.83511230" lon="-7.74519780"><ele>65.2</ele><time>2017-12-01T12:09:02Z</time></trkpt>
+	<trkpt lat="53.83342060" lon="-7.74813360"><ele>65.2</ele><time>2017-12-01T12:09:12Z</time></trkpt>
+	<trkpt lat="53.83149480" lon="-7.75088500"><ele>65.5</ele><time>2017-12-01T12:09:22Z</time></trkpt>
+	<trkpt lat="53.82956360" lon="-7.75284140"><ele>65.3</ele><time>2017-12-01T12:09:32Z</time></trkpt>
+	<trkpt lat="53.82761650" lon="-7.75538210"><ele>66.0</ele><time>2017-12-01T12:09:42Z</time></trkpt>
+	<trkpt lat="53.82608720" lon="-7.75826970"><ele>66.4</ele><time>2017-12-01T12:09:52Z</time></trkpt>
+	<trkpt lat="53.82461310" lon="-7.76094840"><ele>68.2</ele><time>2017-12-01T12:10:02Z</time></trkpt>
+	<trkpt lat="53.82392120" lon="-7.76215120"><ele>69.6</ele><time>2017-12-01T12:10:12Z</time></trkpt>
+	<trkpt lat="53.82370460" lon="-7.76230480"><ele>71.1</ele><time>2017-12-01T12:10:22Z</time></trkpt>
+	<trkpt lat="53.82389020" lon="-7.76211660"><ele>72.3</ele><time>2017-12-01T12:10:31Z</time></trkpt>
+	<trkpt lat="53.82398150" lon="-7.76211580"><ele>74.0</ele><time>2017-12-01T12:12:12Z</time></trkpt>
+	<trkpt lat="53.82383000" lon="-7.76239220"><ele>75.5</ele><time>2017-12-01T12:12:52Z</time></trkpt>
+	<trkpt lat="53.82292210" lon="-7.76389020"><ele>78.1</ele><time>2017-12-01T12:13:02Z</time></trkpt>
+	<trkpt lat="53.82182650" lon="-7.76597420"><ele>80.9</ele><time>2017-12-01T12:13:13Z</time></trkpt>
+	<trkpt lat="53.82148650" lon="-7.76570150"><ele>83.8</ele><time>2017-12-01T12:13:22Z</time></trkpt>
+	<trkpt lat="53.81888360" lon="-7.76063960"><ele>87.1</ele><time>2017-12-01T12:13:51Z</time></trkpt>
+	<trkpt lat="53.81364800" lon="-7.75734150"><ele>90.2</ele><time>2017-12-01T12:14:19Z</time></trkpt>
+	<trkpt lat="53.81151750" lon="-7.75438110"><ele>93.3</ele><time>2017-12-01T12:14:32Z</time></trkpt>
+	<trkpt lat="53.80989370" lon="-7.75172920"><ele>97.1</ele><time>2017-12-01T12:14:41Z</time></trkpt>
+	<trkpt lat="53.80798760" lon="-7.74873820"><ele>101.1</ele><time>2017-12-01T12:14:51Z</time></trkpt>
+	<trkpt lat="53.80605120" lon="-7.74580700"><ele>105.1</ele><time>2017-12-01T12:15:01Z</time></trkpt>
+	<trkpt lat="53.80439630" lon="-7.74327990"><ele>109.1</ele><time>2017-12-01T12:15:11Z</time></trkpt>
+	<trkpt lat="53.80382060" lon="-7.74209920"><ele>113.1</ele><time>2017-12-01T12:15:21Z</time></trkpt>
+	<trkpt lat="53.80454730" lon="-7.74072870"><ele>117.9</ele><time>2017-12-01T12:15:31Z</time></trkpt>
+	<trkpt lat="53.80544300" lon="-7.73901830"><ele>122.3</ele><time>2017-12-01T12:15:41Z</time></trkpt>
+	<trkpt lat="53.80632690" lon="-7.73743340"><ele>126.7</ele><time>2017-12-01T12:15:51Z</time></trkpt>
+	<trkpt lat="53.80747640" lon="-7.73557580"><ele>130.0</ele><time>2017-12-01T12:16:01Z</time></trkpt>
+	<trkpt lat="53.80975550" lon="-7.73205110"><ele>131.9</ele><time>2017-12-01T12:16:21Z</time></trkpt>
+	<trkpt lat="53.81120280" lon="-7.73048760"><ele>131.4</ele><time>2017-12-01T12:16:31Z</time></trkpt>
+	<trkpt lat="53.81235540" lon="-7.72884750"><ele>129.9</ele><time>2017-12-01T12:16:41Z</time></trkpt>
+	<trkpt lat="53.81566820" lon="-7.72170370"><ele>128.3</ele><time>2017-12-01T12:17:11Z</time></trkpt>
+	<trkpt lat="53.81657430" lon="-7.71977830"><ele>127.0</ele><time>2017-12-01T12:17:21Z</time></trkpt>
+	<trkpt lat="53.81687510" lon="-7.71946630"><ele>126.4</ele><time>2017-12-01T12:17:31Z</time></trkpt>
+	<trkpt lat="53.81779060" lon="-7.71897350"><ele>125.8</ele><time>2017-12-01T12:21:21Z</time></trkpt>
+	<trkpt lat="53.81901540" lon="-7.71948010"><ele>125.1</ele><time>2017-12-01T12:21:31Z</time></trkpt>
+	<trkpt lat="53.82023520" lon="-7.72096470"><ele>122.7</ele><time>2017-12-01T12:21:41Z</time></trkpt>
+	<trkpt lat="53.82162930" lon="-7.72210580"><ele>119.5</ele><time>2017-12-01T12:21:51Z</time></trkpt>
+	<trkpt lat="53.82319720" lon="-7.72312730"><ele>113.6</ele><time>2017-12-01T12:22:01Z</time></trkpt>
+	<trkpt lat="53.82477830" lon="-7.72451660"><ele>107.8</ele><time>2017-12-01T12:22:11Z</time></trkpt>
+	<trkpt lat="53.82633050" lon="-7.72607440"><ele>102.0</ele><time>2017-12-01T12:22:22Z</time></trkpt>
+	<trkpt lat="53.82755260" lon="-7.72756460"><ele>97.3</ele><time>2017-12-01T12:22:31Z</time></trkpt>
+	<trkpt lat="53.83121800" lon="-7.73324770"><ele>94.0</ele><time>2017-12-01T12:23:13Z</time></trkpt>
+	<trkpt lat="53.83066050" lon="-7.73480750"><ele>93.3</ele><time>2017-12-01T12:23:22Z</time></trkpt>
+	<trkpt lat="53.83067250" lon="-7.73683990"><ele>92.3</ele><time>2017-12-01T12:23:31Z</time></trkpt>
+	<trkpt lat="53.83019300" lon="-7.73938440"><ele>92.5</ele><time>2017-12-01T12:23:42Z</time></trkpt>
+	<trkpt lat="53.82963690" lon="-7.74005730"><ele>92.5</ele><time>2017-12-01T12:23:52Z</time></trkpt>
+	<trkpt lat="53.82979830" lon="-7.73982010"><ele>92.4</ele><time>2017-12-01T12:24:51Z</time></trkpt>
+	<trkpt lat="53.82971850" lon="-7.73971270"><ele>90.9</ele><time>2017-12-01T12:26:51Z</time></trkpt>
+	<trkpt lat="53.82965700" lon="-7.74003190"><ele>92.6</ele><time>2017-12-01T12:27:21Z</time></trkpt>
+	<trkpt lat="53.82984040" lon="-7.74004610"><ele>95.0</ele><time>2017-12-01T12:27:31Z</time></trkpt>
+	<trkpt lat="53.83011570" lon="-7.73972050"><ele>98.2</ele><time>2017-12-01T12:27:41Z</time></trkpt>
+	<trkpt lat="53.83082780" lon="-7.73580410"><ele>101.6</ele><time>2017-12-01T12:28:23Z</time></trkpt>
+	<trkpt lat="53.83848210" lon="-7.71244640"><ele>107.9</ele><time>2017-12-01T12:29:52Z</time></trkpt>
+	<trkpt lat="53.84062890" lon="-7.70445920"><ele>112.4</ele><time>2017-12-01T12:30:32Z</time></trkpt>
+	<trkpt lat="53.83993020" lon="-7.70320360"><ele>114.7</ele><time>2017-12-01T12:30:43Z</time></trkpt>
+	<trkpt lat="53.83976520" lon="-7.70283900"><ele>116.0</ele><time>2017-12-01T12:30:51Z</time></trkpt>
+	<trkpt lat="53.83970210" lon="-7.70312860"><ele>116.5</ele><time>2017-12-01T12:31:12Z</time></trkpt>
+	<trkpt lat="53.84201620" lon="-7.70475390"><ele>114.0</ele><time>2017-12-01T12:34:11Z</time></trkpt>
+	<trkpt lat="53.84385540" lon="-7.70114560"><ele>110.4</ele><time>2017-12-01T12:34:30Z</time></trkpt>
+	<trkpt lat="53.84449560" lon="-7.70121440"><ele>108.1</ele><time>2017-12-01T12:34:41Z</time></trkpt>
+	<trkpt lat="53.84506760" lon="-7.69975460"><ele>106.5</ele><time>2017-12-01T12:34:50Z</time></trkpt>
+	<trkpt lat="53.84803550" lon="-7.69725610"><ele>105.7</ele><time>2017-12-01T12:35:21Z</time></trkpt>
+	<trkpt lat="53.84852280" lon="-7.69577640"><ele>106.8</ele><time>2017-12-01T12:35:31Z</time></trkpt>
+	<trkpt lat="53.84847740" lon="-7.69380270"><ele>108.6</ele><time>2017-12-01T12:35:41Z</time></trkpt>
+	<trkpt lat="53.84710340" lon="-7.69220400"><ele>110.2</ele><time>2017-12-01T12:35:51Z</time></trkpt>
+	<trkpt lat="53.84531800" lon="-7.69053340"><ele>112.0</ele><time>2017-12-01T12:36:01Z</time></trkpt>
+	<trkpt lat="53.84411100" lon="-7.68892900"><ele>113.4</ele><time>2017-12-01T12:36:11Z</time></trkpt>
+	<trkpt lat="53.84383660" lon="-7.68615420"><ele>115.4</ele><time>2017-12-01T12:36:21Z</time></trkpt>
+	<trkpt lat="53.84341240" lon="-7.68376940"><ele>118.1</ele><time>2017-12-01T12:36:31Z</time></trkpt>
+	<trkpt lat="53.84208970" lon="-7.68153530"><ele>121.5</ele><time>2017-12-01T12:36:41Z</time></trkpt>
+	<trkpt lat="53.84064160" lon="-7.67986670"><ele>125.1</ele><time>2017-12-01T12:36:51Z</time></trkpt>
+	<trkpt lat="53.83885460" lon="-7.67755570"><ele>129.1</ele><time>2017-12-01T12:37:02Z</time></trkpt>
+	<trkpt lat="53.83754500" lon="-7.67573320"><ele>133.0</ele><time>2017-12-01T12:37:11Z</time></trkpt>
+	<trkpt lat="53.83641410" lon="-7.67360400"><ele>137.1</ele><time>2017-12-01T12:37:21Z</time></trkpt>
+	<trkpt lat="53.83525120" lon="-7.67091630"><ele>141.2</ele><time>2017-12-01T12:37:33Z</time></trkpt>
+	<trkpt lat="53.83414560" lon="-7.66951860"><ele>145.0</ele><time>2017-12-01T12:37:41Z</time></trkpt>
+	<trkpt lat="53.83347990" lon="-7.66901900"><ele>149.2</ele><time>2017-12-01T12:37:51Z</time></trkpt>
+	<trkpt lat="53.83266290" lon="-7.66869510"><ele>156.3</ele><time>2017-12-01T12:38:02Z</time></trkpt>
+	<trkpt lat="53.83180130" lon="-7.66837730"><ele>161.6</ele><time>2017-12-01T12:38:12Z</time></trkpt>
+	<trkpt lat="53.83184430" lon="-7.66869590"><ele>166.5</ele><time>2017-12-01T12:38:21Z</time></trkpt>
+	<trkpt lat="53.83190140" lon="-7.66854610"><ele>170.9</ele><time>2017-12-01T12:38:33Z</time></trkpt>
+	<trkpt lat="53.83178170" lon="-7.66851310"><ele>174.2</ele><time>2017-12-01T12:41:02Z</time></trkpt>
+	<trkpt lat="53.83192640" lon="-7.66854300"><ele>174.1</ele><time>2017-12-01T12:42:41Z</time></trkpt>
+	<trkpt lat="53.83233950" lon="-7.66860150"><ele>174.3</ele><time>2017-12-01T12:43:12Z</time></trkpt>
+	<trkpt lat="53.83325650" lon="-7.66931130"><ele>173.2</ele><time>2017-12-01T12:43:22Z</time></trkpt>
+	<trkpt lat="53.83353320" lon="-7.66918730"><ele>171.2</ele><time>2017-12-01T12:43:31Z</time></trkpt>
+	<trkpt lat="53.83447530" lon="-7.67003060"><ele>168.5</ele><time>2017-12-01T12:43:41Z</time></trkpt>
+	<trkpt lat="53.83566800" lon="-7.67196160"><ele>164.5</ele><time>2017-12-01T12:43:51Z</time></trkpt>
+	<trkpt lat="53.83662340" lon="-7.67429040"><ele>160.5</ele><time>2017-12-01T12:44:01Z</time></trkpt>
+	<trkpt lat="53.83783300" lon="-7.67647300"><ele>156.5</ele><time>2017-12-01T12:44:11Z</time></trkpt>
+	<trkpt lat="53.83929420" lon="-7.67826260"><ele>152.5</ele><time>2017-12-01T12:44:21Z</time></trkpt>
+	<trkpt lat="53.84075730" lon="-7.68018690"><ele>148.5</ele><time>2017-12-01T12:44:31Z</time></trkpt>
+	<trkpt lat="53.84209200" lon="-7.68183350"><ele>144.5</ele><time>2017-12-01T12:44:41Z</time></trkpt>
+	<trkpt lat="53.84334520" lon="-7.68369750"><ele>140.5</ele><time>2017-12-01T12:44:51Z</time></trkpt>
+	<trkpt lat="53.84381350" lon="-7.68613770"><ele>136.5</ele><time>2017-12-01T12:45:01Z</time></trkpt>
+	<trkpt lat="53.84404270" lon="-7.68889180"><ele>132.5</ele><time>2017-12-01T12:45:11Z</time></trkpt>
+	<trkpt lat="53.84495870" lon="-7.69047150"><ele>128.4</ele><time>2017-12-01T12:45:21Z</time></trkpt>
+	<trkpt lat="53.84683570" lon="-7.69213310"><ele>124.4</ele><time>2017-12-01T12:45:31Z</time></trkpt>
+	<trkpt lat="53.84844580" lon="-7.69386910"><ele>120.4</ele><time>2017-12-01T12:45:41Z</time></trkpt>
+	<trkpt lat="53.84840650" lon="-7.69585170"><ele>116.4</ele><time>2017-12-01T12:45:51Z</time></trkpt>
+	<trkpt lat="53.84866630" lon="-7.69832500"><ele>112.4</ele><time>2017-12-01T12:46:02Z</time></trkpt>
+	<trkpt lat="53.84982060" lon="-7.70067600"><ele>108.5</ele><time>2017-12-01T12:46:11Z</time></trkpt>
+	<trkpt lat="53.85103860" lon="-7.70344040"><ele>105.2</ele><time>2017-12-01T12:46:21Z</time></trkpt>
+	<trkpt lat="53.85232380" lon="-7.70612390"><ele>102.3</ele><time>2017-12-01T12:46:31Z</time></trkpt>
+	<trkpt lat="53.85406950" lon="-7.70826030"><ele>100.0</ele><time>2017-12-01T12:46:41Z</time></trkpt>
+	<trkpt lat="53.85469420" lon="-7.70899940"><ele>97.6</ele><time>2017-12-01T12:46:51Z</time></trkpt>
+	<trkpt lat="53.85570850" lon="-7.71013320"><ele>95.2</ele><time>2017-12-01T12:47:01Z</time></trkpt>
+	<trkpt lat="53.85748970" lon="-7.71187620"><ele>92.1</ele><time>2017-12-01T12:47:11Z</time></trkpt>
+	<trkpt lat="53.85960260" lon="-7.71357740"><ele>88.6</ele><time>2017-12-01T12:47:21Z</time></trkpt>
+	<trkpt lat="53.86155200" lon="-7.71499700"><ele>84.6</ele><time>2017-12-01T12:47:31Z</time></trkpt>
+	<trkpt lat="53.86345100" lon="-7.71640080"><ele>80.6</ele><time>2017-12-01T12:47:41Z</time></trkpt>
+	<trkpt lat="53.86509410" lon="-7.71731560"><ele>76.6</ele><time>2017-12-01T12:47:51Z</time></trkpt>
+	<trkpt lat="53.86618660" lon="-7.71750090"><ele>72.6</ele><time>2017-12-01T12:48:01Z</time></trkpt>
+	<trkpt lat="53.86779860" lon="-7.71815160"><ele>68.6</ele><time>2017-12-01T12:48:11Z</time></trkpt>
+	<trkpt lat="53.86868600" lon="-7.72002520"><ele>65.9</ele><time>2017-12-01T12:48:21Z</time></trkpt>
+	<trkpt lat="53.86932530" lon="-7.72242540"><ele>64.5</ele><time>2017-12-01T12:48:31Z</time></trkpt>
+	<trkpt lat="53.86936870" lon="-7.72438590"><ele>63.8</ele><time>2017-12-01T12:48:41Z</time></trkpt>
+	<trkpt lat="53.86991410" lon="-7.72414340"><ele>63.7</ele><time>2017-12-01T12:48:51Z</time></trkpt>
+	<trkpt lat="53.87137300" lon="-7.72249900"><ele>63.6</ele><time>2017-12-01T12:49:01Z</time></trkpt>
+	<trkpt lat="53.87302720" lon="-7.72072950"><ele>62.2</ele><time>2017-12-01T12:49:11Z</time></trkpt>
+	<trkpt lat="53.87412510" lon="-7.71952820"><ele>62.6</ele><time>2017-12-01T12:49:21Z</time></trkpt>
+	<trkpt lat="53.87516540" lon="-7.71817140"><ele>63.2</ele><time>2017-12-01T12:49:30Z</time></trkpt>
+	<trkpt lat="53.87535850" lon="-7.71779750"><ele>63.9</ele><time>2017-12-01T12:49:40Z</time></trkpt>
+	<trkpt lat="53.87525340" lon="-7.71778790"><ele>65.7</ele><time>2017-12-01T12:49:51Z</time></trkpt>
+	<trkpt lat="53.87536970" lon="-7.71788990"><ele>67.5</ele><time>2017-12-01T12:51:21Z</time></trkpt>
+	<trkpt lat="53.87599270" lon="-7.71635280"><ele>67.8</ele><time>2017-12-01T12:52:01Z</time></trkpt>
+	<trkpt lat="53.87710270" lon="-7.71378890"><ele>68.8</ele><time>2017-12-01T12:52:11Z</time></trkpt>
+	<trkpt lat="53.87830850" lon="-7.71108570"><ele>70.7</ele><time>2017-12-01T12:52:21Z</time></trkpt>
+	<trkpt lat="53.87985840" lon="-7.70556490"><ele>73.0</ele><time>2017-12-01T12:52:41Z</time></trkpt>
+	<trkpt lat="53.88103210" lon="-7.70248540"><ele>77.9</ele><time>2017-12-01T12:52:52Z</time></trkpt>
+	<trkpt lat="53.88200520" lon="-7.70003400"><ele>82.6</ele><time>2017-12-01T12:53:01Z</time></trkpt>
+	<trkpt lat="53.88302160" lon="-7.69717770"><ele>88.2</ele><time>2017-12-01T12:53:11Z</time></trkpt>
+	<trkpt lat="53.88409070" lon="-7.69407590"><ele>93.7</ele><time>2017-12-01T12:53:21Z</time></trkpt>
+	<trkpt lat="53.88382520" lon="-7.68437310"><ele>99.3</ele><time>2017-12-01T12:54:31Z</time></trkpt>
+	<trkpt lat="53.88303620" lon="-7.68403000"><ele>103.9</ele><time>2017-12-01T12:54:41Z</time></trkpt>
+	<trkpt lat="53.88088630" lon="-7.68376390"><ele>108.2</ele><time>2017-12-01T12:55:01Z</time></trkpt>
+	<trkpt lat="53.87989680" lon="-7.68260550"><ele>111.8</ele><time>2017-12-01T12:55:11Z</time></trkpt>
+	<trkpt lat="53.87900070" lon="-7.68101240"><ele>114.8</ele><time>2017-12-01T12:55:21Z</time></trkpt>
+	<trkpt lat="53.87802330" lon="-7.67969880"><ele>116.1</ele><time>2017-12-01T12:55:31Z</time></trkpt>
+	<trkpt lat="53.87734090" lon="-7.67915040"><ele>115.9</ele><time>2017-12-01T12:55:41Z</time></trkpt>
+	<trkpt lat="53.87703810" lon="-7.68040190"><ele>114.8</ele><time>2017-12-01T12:55:51Z</time></trkpt>
+	<trkpt lat="53.87741380" lon="-7.68109760"><ele>112.8</ele><time>2017-12-01T12:56:01Z</time></trkpt>
+	<trkpt lat="53.87699980" lon="-7.68212850"><ele>111.0</ele><time>2017-12-01T12:56:11Z</time></trkpt>
+	<trkpt lat="53.87723170" lon="-7.68261900"><ele>110.1</ele><time>2017-12-01T12:56:21Z</time></trkpt>
+	<trkpt lat="53.87743710" lon="-7.68287130"><ele>109.9</ele><time>2017-12-01T12:56:31Z</time></trkpt>
+	<trkpt lat="53.87736830" lon="-7.68270740"><ele>110.9</ele><time>2017-12-01T12:56:40Z</time></trkpt>
+	<trkpt lat="53.87717000" lon="-7.68245200"><ele>112.0</ele><time>2017-12-01T13:03:31Z</time></trkpt>
+	<trkpt lat="53.87705030" lon="-7.68209870"><ele>112.8</ele><time>2017-12-01T13:03:41Z</time></trkpt>
+	<trkpt lat="53.87737400" lon="-7.68133050"><ele>113.9</ele><time>2017-12-01T13:03:51Z</time></trkpt>
+	<trkpt lat="53.87710800" lon="-7.68063680"><ele>114.1</ele><time>2017-12-01T13:04:01Z</time></trkpt>
+	<trkpt lat="53.87716170" lon="-7.67977580"><ele>112.9</ele><time>2017-12-01T13:04:11Z</time></trkpt>
+	<trkpt lat="53.87688180" lon="-7.67736510"><ele>110.9</ele><time>2017-12-01T13:04:32Z</time></trkpt>
+	<trkpt lat="53.87634220" lon="-7.67591980"><ele>109.5</ele><time>2017-12-01T13:04:41Z</time></trkpt>
+	<trkpt lat="53.87547600" lon="-7.67431650"><ele>107.3</ele><time>2017-12-01T13:04:52Z</time></trkpt>
+	<trkpt lat="53.87472660" lon="-7.67296190"><ele>106.6</ele><time>2017-12-01T13:05:01Z</time></trkpt>
+	<trkpt lat="53.87380340" lon="-7.67152850"><ele>106.2</ele><time>2017-12-01T13:05:12Z</time></trkpt>
+	<trkpt lat="53.87336810" lon="-7.67067860"><ele>106.9</ele><time>2017-12-01T13:05:21Z</time></trkpt>
+	<trkpt lat="53.87384990" lon="-7.66978020"><ele>106.8</ele><time>2017-12-01T13:05:31Z</time></trkpt>
+	<trkpt lat="53.87525490" lon="-7.66771280"><ele>106.6</ele><time>2017-12-01T13:05:41Z</time></trkpt>
+	<trkpt lat="53.87682200" lon="-7.66583780"><ele>105.0</ele><time>2017-12-01T13:05:51Z</time></trkpt>
+	<trkpt lat="53.87895120" lon="-7.66515470"><ele>103.0</ele><time>2017-12-01T13:06:01Z</time></trkpt>
+	<trkpt lat="53.88115850" lon="-7.66497270"><ele>99.8</ele><time>2017-12-01T13:06:11Z</time></trkpt>
+	<trkpt lat="53.88352580" lon="-7.66453200"><ele>96.4</ele><time>2017-12-01T13:06:21Z</time></trkpt>
+	<trkpt lat="53.88567580" lon="-7.66298560"><ele>93.2</ele><time>2017-12-01T13:06:31Z</time></trkpt>
+	<trkpt lat="53.88784320" lon="-7.66134320"><ele>90.8</ele><time>2017-12-01T13:06:41Z</time></trkpt>
+	<trkpt lat="53.89011640" lon="-7.65969780"><ele>89.7</ele><time>2017-12-01T13:06:51Z</time></trkpt>
+	<trkpt lat="53.89217320" lon="-7.65845140"><ele>90.1</ele><time>2017-12-01T13:07:01Z</time></trkpt>
+	<trkpt lat="53.89427800" lon="-7.65719210"><ele>91.6</ele><time>2017-12-01T13:07:11Z</time></trkpt>
+	<trkpt lat="53.89639780" lon="-7.65579210"><ele>94.5</ele><time>2017-12-01T13:07:21Z</time></trkpt>
+	<trkpt lat="53.89859840" lon="-7.65394450"><ele>98.1</ele><time>2017-12-01T13:07:32Z</time></trkpt>
+	<trkpt lat="53.89984230" lon="-7.65142490"><ele>102.0</ele><time>2017-12-01T13:07:41Z</time></trkpt>
+	<trkpt lat="53.90149340" lon="-7.64900940"><ele>106.0</ele><time>2017-12-01T13:07:51Z</time></trkpt>
+	<trkpt lat="53.90360290" lon="-7.64786760"><ele>109.9</ele><time>2017-12-01T13:08:01Z</time></trkpt>
+	<trkpt lat="53.90553920" lon="-7.64654390"><ele>113.6</ele><time>2017-12-01T13:08:11Z</time></trkpt>
+	<trkpt lat="53.90639420" lon="-7.64356140"><ele>116.5</ele><time>2017-12-01T13:08:21Z</time></trkpt>
+	<trkpt lat="53.90676980" lon="-7.63991560"><ele>118.0</ele><time>2017-12-01T13:08:30Z</time></trkpt>
+	<trkpt lat="53.90725320" lon="-7.63640540"><ele>119.7</ele><time>2017-12-01T13:08:40Z</time></trkpt>
+	<trkpt lat="53.90931350" lon="-7.63470040"><ele>120.6</ele><time>2017-12-01T13:08:51Z</time></trkpt>
+	<trkpt lat="53.91109720" lon="-7.63202190"><ele>120.5</ele><time>2017-12-01T13:09:02Z</time></trkpt>
+	<trkpt lat="53.91207400" lon="-7.62982040"><ele>119.6</ele><time>2017-12-01T13:09:11Z</time></trkpt>
+	<trkpt lat="53.91378200" lon="-7.62901870"><ele>118.5</ele><time>2017-12-01T13:09:21Z</time></trkpt>
+	<trkpt lat="53.91580620" lon="-7.62823920"><ele>115.7</ele><time>2017-12-01T13:09:31Z</time></trkpt>
+	<trkpt lat="53.91710520" lon="-7.62606420"><ele>112.2</ele><time>2017-12-01T13:09:40Z</time></trkpt>
+	<trkpt lat="53.91752120" lon="-7.62192020"><ele>107.5</ele><time>2017-12-01T13:09:50Z</time></trkpt>
+	<trkpt lat="53.91819790" lon="-7.61840570"><ele>102.6</ele><time>2017-12-01T13:10:01Z</time></trkpt>
+	<trkpt lat="53.91987410" lon="-7.61551130"><ele>96.9</ele><time>2017-12-01T13:10:12Z</time></trkpt>
+	<trkpt lat="53.92133160" lon="-7.61388380"><ele>91.9</ele><time>2017-12-01T13:10:20Z</time></trkpt>
+	<trkpt lat="53.92388490" lon="-7.61608420"><ele>88.1</ele><time>2017-12-01T13:10:40Z</time></trkpt>
+	<trkpt lat="53.92588230" lon="-7.61816710"><ele>86.6</ele><time>2017-12-01T13:10:53Z</time></trkpt>
+	<trkpt lat="53.92902080" lon="-7.62052700"><ele>85.8</ele><time>2017-12-01T13:11:13Z</time></trkpt>
+	<trkpt lat="53.92947700" lon="-7.61975380"><ele>86.8</ele><time>2017-12-01T13:11:23Z</time></trkpt>
+	<trkpt lat="53.92970300" lon="-7.61833340"><ele>88.6</ele><time>2017-12-01T13:11:32Z</time></trkpt>
+	<trkpt lat="53.92998530" lon="-7.61752580"><ele>89.3</ele><time>2017-12-01T13:11:43Z</time></trkpt>
+	<trkpt lat="53.93011030" lon="-7.61759640"><ele>88.8</ele><time>2017-12-01T13:11:53Z</time></trkpt>
+	<trkpt lat="53.93010870" lon="-7.61744390"><ele>88.2</ele><time>2017-12-01T13:12:44Z</time></trkpt>
+	<trkpt lat="53.92976210" lon="-7.61818540"><ele>86.5</ele><time>2017-12-01T13:15:33Z</time></trkpt>
+	<trkpt lat="53.92942030" lon="-7.61978890"><ele>84.3</ele><time>2017-12-01T13:15:43Z</time></trkpt>
+	<trkpt lat="53.92921000" lon="-7.62058710"><ele>81.0</ele><time>2017-12-01T13:15:53Z</time></trkpt>
+	<trkpt lat="53.92844950" lon="-7.62012650"><ele>78.6</ele><time>2017-12-01T13:16:02Z</time></trkpt>
+	<trkpt lat="53.92695010" lon="-7.61922540"><ele>79.0</ele><time>2017-12-01T13:16:12Z</time></trkpt>
+	<trkpt lat="53.92607030" lon="-7.61822580"><ele>81.1</ele><time>2017-12-01T13:16:22Z</time></trkpt>
+	<trkpt lat="53.92546670" lon="-7.61757370"><ele>83.9</ele><time>2017-12-01T13:21:44Z</time></trkpt>
+	<trkpt lat="53.92457000" lon="-7.61671430"><ele>91.5</ele><time>2017-12-01T13:21:51Z</time></trkpt>
+	<trkpt lat="53.92068380" lon="-7.61439370"><ele>100.3</ele><time>2017-12-01T13:22:25Z</time></trkpt>
+	<trkpt lat="53.91910620" lon="-7.61665860"><ele>108.2</ele><time>2017-12-01T13:22:36Z</time></trkpt>
+	<trkpt lat="53.91774790" lon="-7.61969650"><ele>116.1</ele><time>2017-12-01T13:22:46Z</time></trkpt>
+	<trkpt lat="53.91335380" lon="-7.62833650"><ele>123.3</ele><time>2017-12-01T13:23:26Z</time></trkpt>
+	<trkpt lat="53.91058980" lon="-7.62492050"><ele>128.1</ele><time>2017-12-01T13:23:46Z</time></trkpt>
+	<trkpt lat="53.90771410" lon="-7.62224980"><ele>132.0</ele><time>2017-12-01T13:24:06Z</time></trkpt>
+	<trkpt lat="53.90631810" lon="-7.62114440"><ele>134.7</ele><time>2017-12-01T13:24:16Z</time></trkpt>
+	<trkpt lat="53.90474830" lon="-7.62006000"><ele>137.3</ele><time>2017-12-01T13:24:27Z</time></trkpt>
+	<trkpt lat="53.90341930" lon="-7.61942900"><ele>140.7</ele><time>2017-12-01T13:24:36Z</time></trkpt>
+	<trkpt lat="53.90190160" lon="-7.61860230"><ele>143.6</ele><time>2017-12-01T13:24:46Z</time></trkpt>
+	<trkpt lat="53.90019450" lon="-7.61758350"><ele>145.7</ele><time>2017-12-01T13:24:56Z</time></trkpt>
+	<trkpt lat="53.89862800" lon="-7.61668560"><ele>147.1</ele><time>2017-12-01T13:25:06Z</time></trkpt>
+	<trkpt lat="53.89727620" lon="-7.61561570"><ele>146.9</ele><time>2017-12-01T13:25:16Z</time></trkpt>
+	<trkpt lat="53.89584860" lon="-7.61451250"><ele>145.0</ele><time>2017-12-01T13:25:26Z</time></trkpt>
+	<trkpt lat="53.89481280" lon="-7.61375450"><ele>142.1</ele><time>2017-12-01T13:25:36Z</time></trkpt>
+	<trkpt lat="53.89345600" lon="-7.61288330"><ele>138.5</ele><time>2017-12-01T13:25:46Z</time></trkpt>
+	<trkpt lat="53.89181360" lon="-7.61168880"><ele>134.5</ele><time>2017-12-01T13:25:56Z</time></trkpt>
+	<trkpt lat="53.89010270" lon="-7.61079160"><ele>130.5</ele><time>2017-12-01T13:26:06Z</time></trkpt>
+	<trkpt lat="53.88844010" lon="-7.60980890"><ele>126.5</ele><time>2017-12-01T13:26:16Z</time></trkpt>
+	<trkpt lat="53.88680750" lon="-7.60889970"><ele>122.5</ele><time>2017-12-01T13:26:26Z</time></trkpt>
+	<trkpt lat="53.88536350" lon="-7.60810960"><ele>118.8</ele><time>2017-12-01T13:26:36Z</time></trkpt>
+	<trkpt lat="53.88379320" lon="-7.60729400"><ele>116.1</ele><time>2017-12-01T13:26:46Z</time></trkpt>
+	<trkpt lat="53.88229910" lon="-7.60607500"><ele>114.2</ele><time>2017-12-01T13:26:56Z</time></trkpt>
+	<trkpt lat="53.88080760" lon="-7.60494510"><ele>112.2</ele><time>2017-12-01T13:27:06Z</time></trkpt>
+	<trkpt lat="53.87921140" lon="-7.60384240"><ele>110.2</ele><time>2017-12-01T13:27:16Z</time></trkpt>
+	<trkpt lat="53.87771430" lon="-7.60284280"><ele>107.8</ele><time>2017-12-01T13:27:26Z</time></trkpt>
+	<trkpt lat="53.87643120" lon="-7.60190060"><ele>104.5</ele><time>2017-12-01T13:27:36Z</time></trkpt>
+	<trkpt lat="53.87505520" lon="-7.60139180"><ele>100.6</ele><time>2017-12-01T13:27:46Z</time></trkpt>
+	<trkpt lat="53.87349940" lon="-7.60076340"><ele>96.8</ele><time>2017-12-01T13:27:56Z</time></trkpt>
+	<trkpt lat="53.87189460" lon="-7.60015530"><ele>93.4</ele><time>2017-12-01T13:28:07Z</time></trkpt>
+	<trkpt lat="53.87105590" lon="-7.59993240"><ele>90.9</ele><time>2017-12-01T13:28:16Z</time></trkpt>
+	<trkpt lat="53.87101780" lon="-7.59966340"><ele>89.4</ele><time>2017-12-01T13:28:26Z</time></trkpt>
+	<trkpt lat="53.87193320" lon="-7.59924980"><ele>87.7</ele><time>2017-12-01T13:28:36Z</time></trkpt>
+	<trkpt lat="53.87370930" lon="-7.59840620"><ele>86.1</ele><time>2017-12-01T13:28:46Z</time></trkpt>
+	<trkpt lat="53.87550270" lon="-7.59705930"><ele>85.1</ele><time>2017-12-01T13:28:57Z</time></trkpt>
+	<trkpt lat="53.87685280" lon="-7.59689330"><ele>84.6</ele><time>2017-12-01T13:29:06Z</time></trkpt>
+	<trkpt lat="53.87843360" lon="-7.59673530"><ele>84.7</ele><time>2017-12-01T13:29:16Z</time></trkpt>
+	<trkpt lat="53.87895930" lon="-7.59670060"><ele>86.3</ele><time>2017-12-01T13:29:26Z</time></trkpt>
+	<trkpt lat="53.87910090" lon="-7.59789080"><ele>88.9</ele><time>2017-12-01T13:29:36Z</time></trkpt>
+	<trkpt lat="53.87945850" lon="-7.59943470"><ele>91.1</ele><time>2017-12-01T13:29:47Z</time></trkpt>
+	<trkpt lat="53.88000680" lon="-7.59970680"><ele>91.8</ele><time>2017-12-01T13:29:56Z</time></trkpt>
+	<trkpt lat="53.88006060" lon="-7.60004620"><ele>91.0</ele><time>2017-12-01T13:30:06Z</time></trkpt>
+	<trkpt lat="53.88007200" lon="-7.59965960"><ele>88.6</ele><time>2017-12-01T13:34:46Z</time></trkpt>
+	<trkpt lat="53.87952860" lon="-7.59934860"><ele>85.2</ele><time>2017-12-01T13:34:56Z</time></trkpt>
+	<trkpt lat="53.87917010" lon="-7.59808390"><ele>82.6</ele><time>2017-12-01T13:35:06Z</time></trkpt>
+	<trkpt lat="53.87897410" lon="-7.59656720"><ele>80.9</ele><time>2017-12-01T13:35:16Z</time></trkpt>
+	<trkpt lat="53.87854440" lon="-7.59656000"><ele>80.3</ele><time>2017-12-01T13:35:26Z</time></trkpt>
+	<trkpt lat="53.87690460" lon="-7.59688220"><ele>80.1</ele><time>2017-12-01T13:35:37Z</time></trkpt>
+	<trkpt lat="53.87521790" lon="-7.59725790"><ele>80.0</ele><time>2017-12-01T13:35:46Z</time></trkpt>
+	<trkpt lat="53.87348340" lon="-7.59835990"><ele>78.6</ele><time>2017-12-01T13:35:56Z</time></trkpt>
+	<trkpt lat="53.87161050" lon="-7.59936650"><ele>77.7</ele><time>2017-12-01T13:36:06Z</time></trkpt>
+	<trkpt lat="53.86995100" lon="-7.60024520"><ele>77.4</ele><time>2017-12-01T13:36:16Z</time></trkpt>
+	<trkpt lat="53.86807640" lon="-7.60120330"><ele>78.3</ele><time>2017-12-01T13:36:26Z</time></trkpt>
+	<trkpt lat="53.86615180" lon="-7.60197480"><ele>81.5</ele><time>2017-12-01T13:36:36Z</time></trkpt>
+	<trkpt lat="53.86419790" lon="-7.60219240"><ele>84.7</ele><time>2017-12-01T13:36:46Z</time></trkpt>
+	<trkpt lat="53.86241980" lon="-7.60194120"><ele>87.8</ele><time>2017-12-01T13:36:55Z</time></trkpt>
+	<trkpt lat="53.86004100" lon="-7.60200110"><ele>90.3</ele><time>2017-12-01T13:37:06Z</time></trkpt>
+	<trkpt lat="53.85556400" lon="-7.60293370"><ele>92.3</ele><time>2017-12-01T13:37:26Z</time></trkpt>
+	<trkpt lat="53.85311930" lon="-7.60343340"><ele>91.9</ele><time>2017-12-01T13:37:36Z</time></trkpt>
+	<trkpt lat="53.85117440" lon="-7.60384590"><ele>90.6</ele><time>2017-12-01T13:37:47Z</time></trkpt>
+	<trkpt lat="53.85001810" lon="-7.60406250"><ele>86.0</ele><time>2017-12-01T13:37:56Z</time></trkpt>
+	<trkpt lat="53.84963570" lon="-7.60420380"><ele>82.1</ele><time>2017-12-01T13:38:06Z</time></trkpt>
+	<trkpt lat="53.84978810" lon="-7.60408230"><ele>78.5</ele><time>2017-12-01T13:38:16Z</time></trkpt>
+	<trkpt lat="53.84970640" lon="-7.60415290"><ele>76.5</ele><time>2017-12-01T13:38:46Z</time></trkpt>
+	<trkpt lat="53.84956670" lon="-7.60420980"><ele>77.2</ele><time>2017-12-01T13:42:06Z</time></trkpt>
+	<trkpt lat="53.84968770" lon="-7.60420820"><ele>81.2</ele><time>2017-12-01T13:42:16Z</time></trkpt>
+	<trkpt lat="53.85057330" lon="-7.60404060"><ele>85.2</ele><time>2017-12-01T13:42:26Z</time></trkpt>
+	<trkpt lat="53.85113530" lon="-7.60451660"><ele>89.2</ele><time>2017-12-01T13:42:36Z</time></trkpt>
+	<trkpt lat="53.85100130" lon="-7.60699470"><ele>93.2</ele><time>2017-12-01T13:42:47Z</time></trkpt>
+	<trkpt lat="53.85023770" lon="-7.60923810"><ele>97.0</ele><time>2017-12-01T13:42:56Z</time></trkpt>
+	<trkpt lat="53.84926930" lon="-7.61188410"><ele>100.9</ele><time>2017-12-01T13:43:06Z</time></trkpt>
+	<trkpt lat="53.84828510" lon="-7.61503610"><ele>104.8</ele><time>2017-12-01T13:43:16Z</time></trkpt>
+	<trkpt lat="53.84783080" lon="-7.61828700"><ele>108.8</ele><time>2017-12-01T13:43:26Z</time></trkpt>
+	<trkpt lat="53.84784550" lon="-7.62180170"><ele>112.7</ele><time>2017-12-01T13:43:35Z</time></trkpt>
+	<trkpt lat="53.84778210" lon="-7.62581110"><ele>116.7</ele><time>2017-12-01T13:43:45Z</time></trkpt>
+	<trkpt lat="53.84745300" lon="-7.62976870"><ele>120.7</ele><time>2017-12-01T13:43:56Z</time></trkpt>
+	<trkpt lat="53.84729640" lon="-7.63370040"><ele>124.7</ele><time>2017-12-01T13:44:06Z</time></trkpt>
+	<trkpt lat="53.84660410" lon="-7.63703040"><ele>128.7</ele><time>2017-12-01T13:44:16Z</time></trkpt>
+	<trkpt lat="53.84589100" lon="-7.64080130"><ele>132.0</ele><time>2017-12-01T13:44:26Z</time></trkpt>
+	<trkpt lat="53.84543970" lon="-7.64293850"><ele>134.2</ele><time>2017-12-01T13:44:36Z</time></trkpt>
+	<trkpt lat="53.84461890" lon="-7.64200080"><ele>134.8</ele><time>2017-12-01T13:44:46Z</time></trkpt>
+	<trkpt lat="53.84321790" lon="-7.64054810"><ele>133.9</ele><time>2017-12-01T13:44:56Z</time></trkpt>
+	<trkpt lat="53.84121280" lon="-7.63941560"><ele>132.5</ele><time>2017-12-01T13:45:07Z</time></trkpt>
+	<trkpt lat="53.84012460" lon="-7.63897280"><ele>131.5</ele><time>2017-12-01T13:45:16Z</time></trkpt>
+	<trkpt lat="53.84028070" lon="-7.63791400"><ele>130.4</ele><time>2017-12-01T13:45:26Z</time></trkpt>
+	<trkpt lat="53.84047580" lon="-7.63756330"><ele>131.6</ele><time>2017-12-01T13:45:36Z</time></trkpt>
+	<trkpt lat="53.84045430" lon="-7.63779810"><ele>134.0</ele><time>2017-12-01T13:45:47Z</time></trkpt>
+	<trkpt lat="53.84040350" lon="-7.63802680"><ele>135.5</ele><time>2017-12-01T13:45:56Z</time></trkpt>
+	<trkpt lat="53.84037010" lon="-7.63786980"><ele>135.7</ele><time>2017-12-01T13:47:07Z</time></trkpt>
+	<trkpt lat="53.84007940" lon="-7.63874820"><ele>135.7</ele><time>2017-12-01T13:50:26Z</time></trkpt>
+	<trkpt lat="53.83982480" lon="-7.63884890"><ele>133.2</ele><time>2017-12-01T13:50:37Z</time></trkpt>
+	<trkpt lat="53.83867310" lon="-7.63836330"><ele>130.8</ele><time>2017-12-01T13:50:46Z</time></trkpt>
+	<trkpt lat="53.83673220" lon="-7.63817880"><ele>129.7</ele><time>2017-12-01T13:50:56Z</time></trkpt>
+	<trkpt lat="53.83493580" lon="-7.63859610"><ele>130.3</ele><time>2017-12-01T13:51:06Z</time></trkpt>
+	<trkpt lat="53.83303630" lon="-7.63822550"><ele>132.3</ele><time>2017-12-01T13:51:16Z</time></trkpt>
+	<trkpt lat="53.83082580" lon="-7.63758350"><ele>136.0</ele><time>2017-12-01T13:51:27Z</time></trkpt>
+	<trkpt lat="53.82896000" lon="-7.63671430"><ele>139.9</ele><time>2017-12-01T13:51:36Z</time></trkpt>
+	<trkpt lat="53.82751230" lon="-7.63565310"><ele>143.9</ele><time>2017-12-01T13:51:47Z</time></trkpt>
+	<trkpt lat="53.82693060" lon="-7.63643380"><ele>147.8</ele><time>2017-12-01T13:51:56Z</time></trkpt>
+	<trkpt lat="53.82644610" lon="-7.63735190"><ele>152.8</ele><time>2017-12-01T13:52:06Z</time></trkpt>
+	<trkpt lat="53.82643240" lon="-7.63926460"><ele>157.1</ele><time>2017-12-01T13:52:16Z</time></trkpt>
+	<trkpt lat="53.82640020" lon="-7.64102540"><ele>160.6</ele><time>2017-12-01T13:52:26Z</time></trkpt>
+	<trkpt lat="53.82629510" lon="-7.64195800"><ele>163.9</ele><time>2017-12-01T13:52:36Z</time></trkpt>
+	<trkpt lat="53.82622370" lon="-7.64180770"><ele>166.8</ele><time>2017-12-01T13:53:06Z</time></trkpt>
+	<trkpt lat="53.82645800" lon="-7.64084670"><ele>167.7</ele><time>2017-12-01T13:58:56Z</time></trkpt>
+	<trkpt lat="53.82648670" lon="-7.63879640"><ele>168.4</ele><time>2017-12-01T13:59:06Z</time></trkpt>
+	<trkpt lat="53.82648030" lon="-7.63705120"><ele>168.2</ele><time>2017-12-01T13:59:16Z</time></trkpt>
+	<trkpt lat="53.82706620" lon="-7.63630390"><ele>168.1</ele><time>2017-12-01T13:59:26Z</time></trkpt>
+	<trkpt lat="53.82750880" lon="-7.63571500"><ele>167.9</ele><time>2017-12-01T13:59:36Z</time></trkpt>
+	<trkpt lat="53.82696290" lon="-7.63510840"><ele>168.0</ele><time>2017-12-01T13:59:46Z</time></trkpt>
+	<trkpt lat="53.82525550" lon="-7.63384950"><ele>168.1</ele><time>2017-12-01T13:59:57Z</time></trkpt>
+	<trkpt lat="53.82365600" lon="-7.63205790"><ele>169.8</ele><time>2017-12-01T14:00:06Z</time></trkpt>
+	<trkpt lat="53.82205340" lon="-7.62920560"><ele>171.5</ele><time>2017-12-01T14:00:16Z</time></trkpt>
+	<trkpt lat="53.82056320" lon="-7.62641920"><ele>172.4</ele><time>2017-12-01T14:00:26Z</time></trkpt>
+	<trkpt lat="53.81975900" lon="-7.62491480"><ele>172.5</ele><time>2017-12-01T14:00:36Z</time></trkpt>
+	<trkpt lat="53.81914470" lon="-7.62592510"><ele>171.8</ele><time>2017-12-01T14:00:46Z</time></trkpt>
+	<trkpt lat="53.81799330" lon="-7.62778750"><ele>169.5</ele><time>2017-12-01T14:00:56Z</time></trkpt>
+	<trkpt lat="53.81676680" lon="-7.62961790"><ele>165.7</ele><time>2017-12-01T14:01:06Z</time></trkpt>
+	<trkpt lat="53.81581780" lon="-7.63079980"><ele>161.9</ele><time>2017-12-01T14:01:16Z</time></trkpt>
+	<trkpt lat="53.81484360" lon="-7.63259590"><ele>159.4</ele><time>2017-12-01T14:01:26Z</time></trkpt>
+	<trkpt lat="53.81363150" lon="-7.63486680"><ele>157.3</ele><time>2017-12-01T14:01:37Z</time></trkpt>
+	<trkpt lat="53.81286810" lon="-7.63629970"><ele>155.5</ele><time>2017-12-01T14:01:46Z</time></trkpt>
+	<trkpt lat="53.81224420" lon="-7.63726210"><ele>153.6</ele><time>2017-12-01T14:01:56Z</time></trkpt>
+	<trkpt lat="53.81101740" lon="-7.63867380"><ele>151.9</ele><time>2017-12-01T14:02:06Z</time></trkpt>
+	<trkpt lat="53.81046120" lon="-7.63896720"><ele>150.6</ele><time>2017-12-01T14:02:16Z</time></trkpt>
+	<trkpt lat="53.80996470" lon="-7.63708260"><ele>150.4</ele><time>2017-12-01T14:02:26Z</time></trkpt>
+	<trkpt lat="53.80920650" lon="-7.63438080"><ele>151.6</ele><time>2017-12-01T14:02:37Z</time></trkpt>
+	<trkpt lat="53.80860100" lon="-7.63265790"><ele>154.1</ele><time>2017-12-01T14:02:46Z</time></trkpt>
+	<trkpt lat="53.80775630" lon="-7.63023790"><ele>157.9</ele><time>2017-12-01T14:02:56Z</time></trkpt>
+	<trkpt lat="53.80693230" lon="-7.62799460"><ele>160.3</ele><time>2017-12-01T14:03:06Z</time></trkpt>
+	<trkpt lat="53.80585750" lon="-7.62576940"><ele>162.2</ele><time>2017-12-01T14:03:16Z</time></trkpt>
+	<trkpt lat="53.80504520" lon="-7.62324660"><ele>162.5</ele><time>2017-12-01T14:03:26Z</time></trkpt>
+	<trkpt lat="53.80459950" lon="-7.62023940"><ele>161.3</ele><time>2017-12-01T14:03:37Z</time></trkpt>
+	<trkpt lat="53.80425070" lon="-7.61840580"><ele>158.6</ele><time>2017-12-01T14:03:46Z</time></trkpt>
+	<trkpt lat="53.80385120" lon="-7.61856210"><ele>155.6</ele><time>2017-12-01T14:03:56Z</time></trkpt>
+	<trkpt lat="53.80222910" lon="-7.61968910"><ele>151.6</ele><time>2017-12-01T14:04:06Z</time></trkpt>
+	<trkpt lat="53.79998430" lon="-7.62113310"><ele>147.6</ele><time>2017-12-01T14:04:16Z</time></trkpt>
+	<trkpt lat="53.79785300" lon="-7.62244530"><ele>136.6</ele><time>2017-12-01T14:04:26Z</time></trkpt>
+	<trkpt lat="53.79571900" lon="-7.62354030"><ele>126.7</ele><time>2017-12-01T14:04:37Z</time></trkpt>
+	<trkpt lat="53.79450960" lon="-7.62418970"><ele>116.9</ele><time>2017-12-01T14:04:46Z</time></trkpt>
+	<trkpt lat="53.79419140" lon="-7.62444880"><ele>107.0</ele><time>2017-12-01T14:04:56Z</time></trkpt>
+	<trkpt lat="53.79345180" lon="-7.62584230"><ele>97.1</ele><time>2017-12-01T14:11:21Z</time></trkpt>
+	<trkpt lat="53.79289980" lon="-7.62853330"><ele>94.0</ele><time>2017-12-01T14:11:31Z</time></trkpt>
+	<trkpt lat="53.79213470" lon="-7.63131040"><ele>89.2</ele><time>2017-12-01T14:11:41Z</time></trkpt>
+	<trkpt lat="53.79137930" lon="-7.63438770"><ele>84.9</ele><time>2017-12-01T14:11:51Z</time></trkpt>
+	<trkpt lat="53.79104890" lon="-7.63731200"><ele>81.5</ele><time>2017-12-01T14:12:01Z</time></trkpt>
+	<trkpt lat="53.79106150" lon="-7.63793360"><ele>78.5</ele><time>2017-12-01T14:12:11Z</time></trkpt>
+	<trkpt lat="53.79137040" lon="-7.63758060"><ele>75.5</ele><time>2017-12-01T14:12:31Z</time></trkpt>
+	<trkpt lat="53.79116440" lon="-7.63783300"><ele>74.4</ele><time>2017-12-01T14:15:01Z</time></trkpt>
+	<trkpt lat="53.79102390" lon="-7.63871270"><ele>74.6</ele><time>2017-12-01T14:15:11Z</time></trkpt>
+	<trkpt lat="53.78873880" lon="-7.65247030"><ele>73.3</ele><time>2017-12-01T14:16:02Z</time></trkpt>
+	<trkpt lat="53.78695980" lon="-7.65382750"><ele>72.7</ele><time>2017-12-01T14:16:11Z</time></trkpt>
+	<trkpt lat="53.78519750" lon="-7.65561110"><ele>72.6</ele><time>2017-12-01T14:16:21Z</time></trkpt>
+	<trkpt lat="53.78438400" lon="-7.65618340"><ele>72.1</ele><time>2017-12-01T14:16:32Z</time></trkpt>
+	<trkpt lat="53.78426980" lon="-7.65619440"><ele>70.1</ele><time>2017-12-01T14:21:21Z</time></trkpt>
+	<trkpt lat="53.78382780" lon="-7.65632210"><ele>68.7</ele><time>2017-12-01T14:21:31Z</time></trkpt>
+	<trkpt lat="53.78372940" lon="-7.65634870"><ele>67.8</ele><time>2017-12-01T14:21:41Z</time></trkpt>
+	<trkpt lat="53.78347420" lon="-7.65655120"><ele>66.2</ele><time>2017-12-01T14:22:01Z</time></trkpt>
+	<trkpt lat="53.78237350" lon="-7.65737280"><ele>65.0</ele><time>2017-12-01T14:22:11Z</time></trkpt>
+	<trkpt lat="53.78178120" lon="-7.65819230"><ele>65.0</ele><time>2017-12-01T14:22:22Z</time></trkpt>
+	<trkpt lat="53.78224550" lon="-7.65998130"><ele>65.6</ele><time>2017-12-01T14:22:31Z</time></trkpt>
+	<trkpt lat="53.78335270" lon="-7.66178410"><ele>66.7</ele><time>2017-12-01T14:22:41Z</time></trkpt>
+	<trkpt lat="53.78489670" lon="-7.66283600"><ele>69.4</ele><time>2017-12-01T14:22:52Z</time></trkpt>
+	<trkpt lat="53.78608920" lon="-7.66418700"><ele>72.6</ele><time>2017-12-01T14:23:01Z</time></trkpt>
+	<trkpt lat="53.78696740" lon="-7.66672380"><ele>76.1</ele><time>2017-12-01T14:23:11Z</time></trkpt>
+	<trkpt lat="53.78953040" lon="-7.67417630"><ele>80.4</ele><time>2017-12-01T14:23:51Z</time></trkpt>
+	<trkpt lat="53.79015630" lon="-7.67608600"><ele>84.4</ele><time>2017-12-01T14:24:01Z</time></trkpt>
+	<trkpt lat="53.79089220" lon="-7.67787950"><ele>88.5</ele><time>2017-12-01T14:24:11Z</time></trkpt>
+	<trkpt lat="53.79207440" lon="-7.67898740"><ele>92.5</ele><time>2017-12-01T14:24:21Z</time></trkpt>
+	<trkpt lat="53.79316480" lon="-7.67984780"><ele>96.5</ele><time>2017-12-01T14:24:31Z</time></trkpt>
+	<trkpt lat="53.79414460" lon="-7.68102620"><ele>100.0</ele><time>2017-12-01T14:24:41Z</time></trkpt>
+	<trkpt lat="53.79507330" lon="-7.68225140"><ele>102.6</ele><time>2017-12-01T14:24:52Z</time></trkpt>
+	<trkpt lat="53.79495420" lon="-7.68327120"><ele>103.5</ele><time>2017-12-01T14:25:01Z</time></trkpt>
+	<trkpt lat="53.79446850" lon="-7.68455170"><ele>102.9</ele><time>2017-12-01T14:25:11Z</time></trkpt>
+	<trkpt lat="53.79368200" lon="-7.68510220"><ele>101.6</ele><time>2017-12-01T14:25:21Z</time></trkpt>
+	<trkpt lat="53.79328730" lon="-7.68585450"><ele>100.6</ele><time>2017-12-01T14:25:31Z</time></trkpt>
+	<trkpt lat="53.79351140" lon="-7.68729750"><ele>100.0</ele><time>2017-12-01T14:25:41Z</time></trkpt>
+	<trkpt lat="53.79324630" lon="-7.68878820"><ele>99.6</ele><time>2017-12-01T14:25:51Z</time></trkpt>
+	<trkpt lat="53.79265690" lon="-7.69063670"><ele>99.1</ele><time>2017-12-01T14:26:01Z</time></trkpt>
+	<trkpt lat="53.79195420" lon="-7.69202920"><ele>98.0</ele><time>2017-12-01T14:26:12Z</time></trkpt>
+	<trkpt lat="53.79124560" lon="-7.69320130"><ele>95.9</ele><time>2017-12-01T14:26:21Z</time></trkpt>
+	<trkpt lat="53.79044830" lon="-7.69428280"><ele>94.1</ele><time>2017-12-01T14:26:31Z</time></trkpt>
+	<trkpt lat="53.78980790" lon="-7.69558220"><ele>92.9</ele><time>2017-12-01T14:26:41Z</time></trkpt>
+	<trkpt lat="53.78985890" lon="-7.69603260"><ele>92.2</ele><time>2017-12-01T14:26:51Z</time></trkpt>
+	<trkpt lat="53.78979910" lon="-7.69622980"><ele>91.3</ele><time>2017-12-01T14:27:01Z</time></trkpt>
+	<trkpt lat="53.78989970" lon="-7.69596350"><ele>90.7</ele><time>2017-12-01T14:30:31Z</time></trkpt>
+	<trkpt lat="53.78964230" lon="-7.69590500"><ele>91.7</ele><time>2017-12-01T14:30:51Z</time></trkpt>
+	<trkpt lat="53.78920360" lon="-7.69698990"><ele>92.1</ele><time>2017-12-01T14:31:01Z</time></trkpt>
+	<trkpt lat="53.78901290" lon="-7.69743300"><ele>92.4</ele><time>2017-12-01T14:31:11Z</time></trkpt>
+	<trkpt lat="53.78927790" lon="-7.69730450"><ele>92.8</ele><time>2017-12-01T14:31:32Z</time></trkpt>
+	<trkpt lat="53.78936700" lon="-7.69726180"><ele>93.4</ele><time>2017-12-01T14:33:31Z</time></trkpt>
+	<trkpt lat="53.78927180" lon="-7.69716250"><ele>93.1</ele><time>2017-12-01T14:35:41Z</time></trkpt>
+	<trkpt lat="53.78950940" lon="-7.69636370"><ele>92.9</ele><time>2017-12-01T14:36:01Z</time></trkpt>
+	<trkpt lat="53.78978130" lon="-7.69561260"><ele>93.2</ele><time>2017-12-01T14:36:11Z</time></trkpt>
+	<trkpt lat="53.78979100" lon="-7.69581140"><ele>94.2</ele><time>2017-12-01T14:36:21Z</time></trkpt>
+	<trkpt lat="53.78961430" lon="-7.69618840"><ele>95.8</ele><time>2017-12-01T14:37:21Z</time></trkpt>
+	<trkpt lat="53.78894800" lon="-7.69756140"><ele>95.4</ele><time>2017-12-01T14:37:31Z</time></trkpt>
+	<trkpt lat="53.78815470" lon="-7.69909280"><ele>95.3</ele><time>2017-12-01T14:37:41Z</time></trkpt>
+	<trkpt lat="53.78832240" lon="-7.70006500"><ele>94.3</ele><time>2017-12-01T14:37:51Z</time></trkpt>
+	<trkpt lat="53.78551090" lon="-7.70440010"><ele>92.6</ele><time>2017-12-01T14:38:41Z</time></trkpt>
+	<trkpt lat="53.78318030" lon="-7.70472100"><ele>90.1</ele><time>2017-12-01T14:38:51Z</time></trkpt>
+	<trkpt lat="53.78146840" lon="-7.70507090"><ele>87.4</ele><time>2017-12-01T14:39:01Z</time></trkpt>
+	<trkpt lat="53.78149440" lon="-7.70556680"><ele>84.0</ele><time>2017-12-01T14:39:11Z</time></trkpt>
+	<trkpt lat="53.78066770" lon="-7.70700860"><ele>82.2</ele><time>2017-12-01T14:39:22Z</time></trkpt>
+	<trkpt lat="53.77996020" lon="-7.71000110"><ele>81.3</ele><time>2017-12-01T14:39:32Z</time></trkpt>
+	<trkpt lat="53.77898530" lon="-7.71392040"><ele>81.0</ele><time>2017-12-01T14:39:44Z</time></trkpt>
+	<trkpt lat="53.77810980" lon="-7.71746930"><ele>81.8</ele><time>2017-12-01T14:39:54Z</time></trkpt>
+	<trkpt lat="53.77791700" lon="-7.71915930"><ele>83.6</ele><time>2017-12-01T14:40:04Z</time></trkpt>
+	<trkpt lat="53.77866320" lon="-7.72031480"><ele>84.0</ele><time>2017-12-01T14:40:13Z</time></trkpt>
+	<trkpt lat="53.77979450" lon="-7.72218470"><ele>85.2</ele><time>2017-12-01T14:40:23Z</time></trkpt>
+	<trkpt lat="53.78101420" lon="-7.72423530"><ele>86.6</ele><time>2017-12-01T14:40:34Z</time></trkpt>
+	<trkpt lat="53.78156580" lon="-7.72520380"><ele>90.2</ele><time>2017-12-01T14:40:43Z</time></trkpt>
+	<trkpt lat="53.78217160" lon="-7.72389440"><ele>92.8</ele><time>2017-12-01T14:40:53Z</time></trkpt>
+	<trkpt lat="53.78304870" lon="-7.72330420"><ele>93.6</ele><time>2017-12-01T14:41:04Z</time></trkpt>
+	<trkpt lat="53.78327860" lon="-7.72372030"><ele>92.7</ele><time>2017-12-01T14:41:14Z</time></trkpt>
+	<trkpt lat="53.78291710" lon="-7.72314430"><ele>90.8</ele><time>2017-12-01T14:43:35Z</time></trkpt>
+	<trkpt lat="53.78218080" lon="-7.72391290"><ele>85.8</ele><time>2017-12-01T14:43:44Z</time></trkpt>
+	<trkpt lat="53.77816320" lon="-7.71943000"><ele>80.8</ele><time>2017-12-01T14:44:24Z</time></trkpt>
+	<trkpt lat="53.77764810" lon="-7.71927640"><ele>77.5</ele><time>2017-12-01T14:44:35Z</time></trkpt>
+	<trkpt lat="53.77730860" lon="-7.72121280"><ele>74.6</ele><time>2017-12-01T14:44:44Z</time></trkpt>
+	<trkpt lat="53.77658940" lon="-7.72460220"><ele>71.5</ele><time>2017-12-01T14:44:54Z</time></trkpt>
+	<trkpt lat="53.77573440" lon="-7.72824060"><ele>69.2</ele><time>2017-12-01T14:45:04Z</time></trkpt>
+	<trkpt lat="53.77464170" lon="-7.73207550"><ele>67.3</ele><time>2017-12-01T14:45:14Z</time></trkpt>
+	<trkpt lat="53.77236970" lon="-7.73999350"><ele>66.8</ele><time>2017-12-01T14:45:34Z</time></trkpt>
+	<trkpt lat="53.77127670" lon="-7.74378850"><ele>67.0</ele><time>2017-12-01T14:45:44Z</time></trkpt>
+	<trkpt lat="53.77047810" lon="-7.74619600"><ele>67.7</ele><time>2017-12-01T14:45:54Z</time></trkpt>
+	<trkpt lat="53.76934880" lon="-7.74519880"><ele>67.8</ele><time>2017-12-01T14:46:03Z</time></trkpt>
+	<trkpt lat="53.76747940" lon="-7.74395590"><ele>67.7</ele><time>2017-12-01T14:46:13Z</time></trkpt>
+	<trkpt lat="53.76545910" lon="-7.74517180"><ele>66.2</ele><time>2017-12-01T14:46:24Z</time></trkpt>
+	<trkpt lat="53.76349870" lon="-7.74583310"><ele>64.3</ele><time>2017-12-01T14:46:34Z</time></trkpt>
+	<trkpt lat="53.76170750" lon="-7.74557990"><ele>62.3</ele><time>2017-12-01T14:46:44Z</time></trkpt>
+	<trkpt lat="53.76057470" lon="-7.74528640"><ele>61.7</ele><time>2017-12-01T14:46:54Z</time></trkpt>
+	<trkpt lat="53.75881280" lon="-7.74562020"><ele>61.0</ele><time>2017-12-01T14:47:04Z</time></trkpt>
+	<trkpt lat="53.75725880" lon="-7.74637650"><ele>60.4</ele><time>2017-12-01T14:47:14Z</time></trkpt>
+	<trkpt lat="53.75600620" lon="-7.74732240"><ele>59.0</ele><time>2017-12-01T14:47:24Z</time></trkpt>
+	<trkpt lat="53.75474890" lon="-7.74752200"><ele>57.8</ele><time>2017-12-01T14:47:34Z</time></trkpt>
+	<trkpt lat="53.75343700" lon="-7.74852010"><ele>56.6</ele><time>2017-12-01T14:47:44Z</time></trkpt>
+	<trkpt lat="53.75202220" lon="-7.74958110"><ele>56.6</ele><time>2017-12-01T14:47:54Z</time></trkpt>
+	<trkpt lat="53.75054600" lon="-7.75011460"><ele>57.8</ele><time>2017-12-01T14:48:04Z</time></trkpt>
+	<trkpt lat="53.74884380" lon="-7.75088210"><ele>60.4</ele><time>2017-12-01T14:48:14Z</time></trkpt>
+	<trkpt lat="53.74722470" lon="-7.75171430"><ele>62.4</ele><time>2017-12-01T14:48:24Z</time></trkpt>
+	<trkpt lat="53.74491490" lon="-7.75350240"><ele>62.7</ele><time>2017-12-01T14:48:44Z</time></trkpt>
+	<trkpt lat="53.74465060" lon="-7.75454100"><ele>61.8</ele><time>2017-12-01T14:48:54Z</time></trkpt>
+	<trkpt lat="53.74408090" lon="-7.75688630"><ele>59.8</ele><time>2017-12-01T14:49:04Z</time></trkpt>
+	<trkpt lat="53.74305630" lon="-7.76041950"><ele>56.7</ele><time>2017-12-01T14:49:14Z</time></trkpt>
+	<trkpt lat="53.74195000" lon="-7.76421730"><ele>54.9</ele><time>2017-12-01T14:49:24Z</time></trkpt>
+	<trkpt lat="53.74134130" lon="-7.76727660"><ele>54.7</ele><time>2017-12-01T14:49:34Z</time></trkpt>
+	<trkpt lat="53.74084110" lon="-7.77086460"><ele>55.1</ele><time>2017-12-01T14:49:44Z</time></trkpt>
+	<trkpt lat="53.74018830" lon="-7.77467700"><ele>56.5</ele><time>2017-12-01T14:49:54Z</time></trkpt>
+	<trkpt lat="53.73889720" lon="-7.77702870"><ele>57.5</ele><time>2017-12-01T14:50:04Z</time></trkpt>
+	<trkpt lat="53.73808780" lon="-7.77805730"><ele>57.6</ele><time>2017-12-01T14:50:14Z</time></trkpt>
+	<trkpt lat="53.73700400" lon="-7.77934170"><ele>57.1</ele><time>2017-12-01T14:50:24Z</time></trkpt>
+	<trkpt lat="53.73538720" lon="-7.78001290"><ele>56.0</ele><time>2017-12-01T14:50:34Z</time></trkpt>
+	<trkpt lat="53.73376680" lon="-7.78013310"><ele>53.9</ele><time>2017-12-01T14:50:44Z</time></trkpt>
+	<trkpt lat="53.73250400" lon="-7.78060280"><ele>52.7</ele><time>2017-12-01T14:50:54Z</time></trkpt>
+	<trkpt lat="53.73149380" lon="-7.78210840"><ele>52.1</ele><time>2017-12-01T14:51:04Z</time></trkpt>
+	<trkpt lat="53.73067590" lon="-7.78428700"><ele>51.5</ele><time>2017-12-01T14:51:14Z</time></trkpt>
+	<trkpt lat="53.73178340" lon="-7.79236040"><ele>50.5</ele><time>2017-12-01T14:51:54Z</time></trkpt>
+	<trkpt lat="53.73111890" lon="-7.79394990"><ele>51.1</ele><time>2017-12-01T14:52:04Z</time></trkpt>
+	<trkpt lat="53.73058530" lon="-7.79524830"><ele>51.3</ele><time>2017-12-01T14:52:14Z</time></trkpt>
+	<trkpt lat="53.73035240" lon="-7.79650020"><ele>51.1</ele><time>2017-12-01T14:52:24Z</time></trkpt>
+	<trkpt lat="53.73017950" lon="-7.79828180"><ele>50.5</ele><time>2017-12-01T14:52:34Z</time></trkpt>
+	<trkpt lat="53.73003660" lon="-7.79973130"><ele>49.9</ele><time>2017-12-01T14:52:43Z</time></trkpt>
+	<trkpt lat="53.73006490" lon="-7.80013730"><ele>49.4</ele><time>2017-12-01T14:53:44Z</time></trkpt>
+	<trkpt lat="53.72995800" lon="-7.80035240"><ele>49.7</ele><time>2017-12-01T14:54:03Z</time></trkpt>
+	<trkpt lat="53.73004940" lon="-7.80055100"><ele>49.8</ele><time>2017-12-01T14:54:23Z</time></trkpt>
+	<trkpt lat="53.72997710" lon="-7.80066890"><ele>48.8</ele><time>2017-12-01T14:54:44Z</time></trkpt>
+	<trkpt lat="53.72989330" lon="-7.80076600"><ele>49.7</ele><time>2017-12-01T14:54:54Z</time></trkpt>
+	<trkpt lat="53.72985970" lon="-7.80100960"><ele>51.0</ele><time>2017-12-01T14:55:20Z</time></trkpt>
+	<trkpt lat="53.72980440" lon="-7.80113160"><ele>53.4</ele><time>2017-12-01T14:56:14Z</time></trkpt>
+	<trkpt lat="53.72983150" lon="-7.80146890"><ele>55.9</ele><time>2017-12-01T14:56:34Z</time></trkpt>
+	<trkpt lat="53.72955040" lon="-7.80176580"><ele>58.9</ele><time>2017-12-01T14:56:49Z</time></trkpt>
+	<trkpt lat="53.72934960" lon="-7.80171160"><ele>60.3</ele><time>2017-12-01T14:57:04Z</time></trkpt>
+	<trkpt lat="53.72906240" lon="-7.80150460"><ele>59.8</ele><time>2017-12-01T14:57:24Z</time></trkpt>
+	<trkpt lat="53.72882870" lon="-7.80178850"><ele>57.6</ele><time>2017-12-01T14:57:34Z</time></trkpt>
+	<trkpt lat="53.72866800" lon="-7.80335500"><ele>54.4</ele><time>2017-12-01T14:57:49Z</time></trkpt>
+	<trkpt lat="53.72870950" lon="-7.80360220"><ele>52.7</ele><time>2017-12-01T14:57:53Z</time></trkpt>
+	<trkpt lat="53.72840850" lon="-7.80469020"><ele>50.6</ele><time>2017-12-01T14:58:04Z</time></trkpt>
+	<trkpt lat="53.72776270" lon="-7.80672560"><ele>49.9</ele><time>2017-12-01T14:58:14Z</time></trkpt>
+	<trkpt lat="53.72725030" lon="-7.80714720"><ele>49.1</ele><time>2017-12-01T14:58:24Z</time></trkpt>
+	<trkpt lat="53.72616930" lon="-7.80679410"><ele>48.9</ele><time>2017-12-01T14:58:52Z</time></trkpt>
+	<trkpt lat="53.72616210" lon="-7.80662000"><ele>48.7</ele><time>2017-12-01T14:59:33Z</time></trkpt>
+	<trkpt lat="53.72621070" lon="-7.80675460"><ele>49.9</ele><time>2017-12-01T15:09:34Z</time></trkpt>
+	<trkpt lat="53.72637020" lon="-7.80654460"><ele>51.0</ele><time>2017-12-01T15:12:04Z</time></trkpt>
+	<trkpt lat="53.72635290" lon="-7.80603620"><ele>51.6</ele><time>2017-12-01T15:12:14Z</time></trkpt>
+	<trkpt lat="53.72567360" lon="-7.80515780"><ele>52.1</ele><time>2017-12-01T15:12:24Z</time></trkpt>
+	<trkpt lat="53.72526560" lon="-7.80453550"><ele>52.9</ele><time>2017-12-01T15:12:34Z</time></trkpt>
+	<trkpt lat="53.72512060" lon="-7.80437110"><ele>53.9</ele><time>2017-12-01T15:12:44Z</time></trkpt>
+	<trkpt lat="53.72526850" lon="-7.80390480"><ele>54.6</ele><time>2017-12-01T15:12:54Z</time></trkpt>
+	<trkpt lat="53.72597010" lon="-7.80268130"><ele>55.4</ele><time>2017-12-01T15:13:05Z</time></trkpt>
+	<trkpt lat="53.72629840" lon="-7.80210710"><ele>56.2</ele><time>2017-12-01T15:13:14Z</time></trkpt>
+	<trkpt lat="53.72585430" lon="-7.80165440"><ele>57.1</ele><time>2017-12-01T15:13:24Z</time></trkpt>
+	<trkpt lat="53.72539100" lon="-7.80117880"><ele>57.7</ele><time>2017-12-01T15:13:34Z</time></trkpt>
+	<trkpt lat="53.72535780" lon="-7.80057890"><ele>58.0</ele><time>2017-12-01T15:13:54Z</time></trkpt>
+	<trkpt lat="53.72548160" lon="-7.79925660"><ele>58.6</ele><time>2017-12-01T15:14:19Z</time></trkpt>
+	<trkpt lat="53.72570960" lon="-7.79883170"><ele>59.4</ele><time>2017-12-01T15:14:31Z</time></trkpt>
+	<trkpt lat="53.72548640" lon="-7.79847010"><ele>59.0</ele><time>2017-12-01T15:14:52Z</time></trkpt>
+	<trkpt lat="53.72494570" lon="-7.79764490"><ele>57.8</ele><time>2017-12-01T15:15:01Z</time></trkpt>
+	<trkpt lat="53.72414370" lon="-7.79676770"><ele>56.8</ele><time>2017-12-01T15:15:11Z</time></trkpt>
+	<trkpt lat="53.72338970" lon="-7.79565510"><ele>56.6</ele><time>2017-12-01T15:15:22Z</time></trkpt>
+	<trkpt lat="53.72293570" lon="-7.79468340"><ele>56.4</ele><time>2017-12-01T15:15:32Z</time></trkpt>
+	<trkpt lat="53.72327950" lon="-7.79394400"><ele>56.5</ele><time>2017-12-01T15:15:41Z</time></trkpt>
+	<trkpt lat="53.72370680" lon="-7.79307640"><ele>56.4</ele><time>2017-12-01T15:15:52Z</time></trkpt>
+	<trkpt lat="53.72379740" lon="-7.79288810"><ele>56.3</ele><time>2017-12-01T15:16:01Z</time></trkpt>
+	<trkpt lat="53.72405990" lon="-7.79196320"><ele>56.2</ele><time>2017-12-01T15:16:41Z</time></trkpt>
+	<trkpt lat="53.72445780" lon="-7.79091800"><ele>56.2</ele><time>2017-12-01T15:16:51Z</time></trkpt>
+	<trkpt lat="53.72452690" lon="-7.78999250"><ele>55.8</ele><time>2017-12-01T15:17:01Z</time></trkpt>
+	<trkpt lat="53.72417400" lon="-7.78919860"><ele>55.7</ele><time>2017-12-01T15:17:12Z</time></trkpt>
+	<trkpt lat="53.72453430" lon="-7.78846970"><ele>55.1</ele><time>2017-12-01T15:17:22Z</time></trkpt>
+	<trkpt lat="53.72512170" lon="-7.78817460"><ele>53.6</ele><time>2017-12-01T15:17:41Z</time></trkpt>
+	<trkpt lat="53.72508510" lon="-7.78801080"><ele>52.5</ele><time>2017-12-01T15:18:11Z</time></trkpt>
+	<trkpt lat="53.72503810" lon="-7.78731880"><ele>51.8</ele><time>2017-12-01T15:18:21Z</time></trkpt>
+	<trkpt lat="53.72465140" lon="-7.78686860"><ele>51.8</ele><time>2017-12-01T15:18:31Z</time></trkpt>
+	<trkpt lat="53.72425960" lon="-7.78696620"><ele>49.5</ele><time>2017-12-01T15:18:41Z</time></trkpt>
+	<trkpt lat="53.72450340" lon="-7.78687870"><ele>51.9</ele><time>2017-12-01T15:19:01Z</time></trkpt>
+	<trkpt lat="53.72449470" lon="-7.78672080"><ele>52.2</ele><time>2017-12-01T15:19:50Z</time></trkpt>
+	<trkpt lat="53.72446380" lon="-7.78651740"><ele>53.8</ele><time>2017-12-01T15:20:10Z</time></trkpt>
+	</trkseg>
+</trk>
+</gpx>
\ No newline at end of file
diff --git a/test/functional/org/openstreetmap/josm/data/imagery/ImageryCompareTestIT.java b/test/functional/org/openstreetmap/josm/data/imagery/ImageryCompareTestIT.java
index dabe655..762ba27 100644
--- a/test/functional/org/openstreetmap/josm/data/imagery/ImageryCompareTestIT.java
+++ b/test/functional/org/openstreetmap/josm/data/imagery/ImageryCompareTestIT.java
@@ -26,7 +26,7 @@ public class ImageryCompareTestIT {
      */
     @Rule
     @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
-    public JOSMTestRules test = new JOSMTestRules().preferences().timeout(30000);
+    public JOSMTestRules test = new JOSMTestRules().preferences().timeout(60000);
 
     /**
      * Test of imagery entries.
diff --git a/test/performance/org/openstreetmap/josm/data/osm/KeyValuePerformanceTest.java b/test/performance/org/openstreetmap/josm/data/osm/KeyValuePerformanceTest.java
index bffe1f0..046d168 100644
--- a/test/performance/org/openstreetmap/josm/data/osm/KeyValuePerformanceTest.java
+++ b/test/performance/org/openstreetmap/josm/data/osm/KeyValuePerformanceTest.java
@@ -13,14 +13,13 @@ import java.util.Random;
 
 import org.apache.commons.lang.RandomStringUtils;
 import org.junit.Before;
-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.PerformanceTestUtils;
 import org.openstreetmap.josm.PerformanceTestUtils.PerformanceTestTimer;
 import org.openstreetmap.josm.data.osm.OsmDataGenerator.KeyValueDataGenerator;
+import org.openstreetmap.josm.testutils.JOSMTestRules;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 
@@ -47,10 +46,9 @@ public class KeyValuePerformanceTest {
     /**
      * Prepare the test.
      */
-    @BeforeClass
-    public static void createJOSMFixture() {
-        JOSMFixture.createPerformanceTestFixture().init(true);
-    }
+    @Rule
+    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
+    public JOSMTestRules test = new JOSMTestRules().projection();
 
     /**
      * See if there is a big difference between Strings that are interned and those that are not.
diff --git a/test/performance/org/openstreetmap/josm/gui/mappaint/MapRendererPerformanceTest.java b/test/performance/org/openstreetmap/josm/gui/mappaint/MapRendererPerformanceTest.java
index d842d0d..ecfe6b3 100644
--- a/test/performance/org/openstreetmap/josm/gui/mappaint/MapRendererPerformanceTest.java
+++ b/test/performance/org/openstreetmap/josm/gui/mappaint/MapRendererPerformanceTest.java
@@ -49,6 +49,9 @@ import org.openstreetmap.josm.tools.Logging;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 
+/**
+ * Performance test of map renderer.
+ */
 public class MapRendererPerformanceTest {
 
     private static final boolean DUMP_IMAGE = false; // dump images to file for debugging purpose
@@ -86,6 +89,10 @@ public class MapRendererPerformanceTest {
     @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
     public Timeout globalTimeout = Timeout.seconds(15*60);
 
+    /**
+     * Initializes test environment.
+     * @throws Exception if any error occurs
+     */
     @BeforeClass
     public static void load() throws Exception {
         JOSMFixture.createPerformanceTestFixture().init(true);
@@ -151,6 +158,9 @@ public class MapRendererPerformanceTest {
         }
     }
 
+    /**
+     * Cleanup test environment.
+     */
     @AfterClass
     public static void cleanUp() {
         setFilterStyleActive(false);
@@ -318,10 +328,12 @@ public class MapRendererPerformanceTest {
     }
 
     private static void setFilterStyleActive(boolean active) {
-        if (filterStyle.active != active) {
-            MapPaintStyles.toggleStyleActive(filterStyleIdx);
+        if (filterStyle != null) {
+            if (filterStyle.active != active) {
+                MapPaintStyles.toggleStyleActive(filterStyleIdx);
+            }
+            Assert.assertEquals(active, filterStyle.active);
         }
-        Assert.assertEquals(active, filterStyle.active);
     }
 
     private static void dumpRenderedImage(String id) throws IOException {
diff --git a/test/unit/org/openstreetmap/josm/JOSMFixture.java b/test/unit/org/openstreetmap/josm/JOSMFixture.java
index 2f4a564..9a9ef86 100644
--- a/test/unit/org/openstreetmap/josm/JOSMFixture.java
+++ b/test/unit/org/openstreetmap/josm/JOSMFixture.java
@@ -137,12 +137,7 @@ public class JOSMFixture {
         DeleteCommand.setDeletionCallback(DeleteAction.defaultDeletionCallback);
 
         if (createGui) {
-            GuiHelper.runInEDTAndWaitWithException(new Runnable() {
-                @Override
-                public void run() {
-                    setupGUI();
-                }
-            });
+            GuiHelper.runInEDTAndWaitWithException(() -> setupGUI());
         }
     }
 
@@ -163,12 +158,6 @@ public class JOSMFixture {
         initToolbar();
         if (Main.main == null) {
             new MainApplication().initialize();
-        } else {
-            if (Main.main.panel == null) {
-                initMainPanel(false);
-                Main.main.panel = MainApplication.getMainPanel();
-            }
-            Main.main.panel.reAddListeners();
         }
         // Add a test layer to the layer manager to get the MapFrame
         MainApplication.getLayerManager().addLayer(new TestLayer());
diff --git a/test/unit/org/openstreetmap/josm/MainTest.java b/test/unit/org/openstreetmap/josm/MainTest.java
index cb05bc8..28604a7 100644
--- a/test/unit/org/openstreetmap/josm/MainTest.java
+++ b/test/unit/org/openstreetmap/josm/MainTest.java
@@ -4,12 +4,10 @@ package org.openstreetmap.josm;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
 import java.net.MalformedURLException;
 import java.net.URL;
-import java.util.Collection;
 import java.util.Map;
 
 import org.junit.Rule;
@@ -34,40 +32,6 @@ public class MainTest {
     public JOSMTestRules test = new JOSMTestRules().platform().https().devAPI().main().projection();
 
     /**
-     * Unit tests on log messages.
-     * @deprecated to remove end of 2017
-     */
-    @Test
-    @SuppressFBWarnings(value = "ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD")
-    @Deprecated
-    public void testLogs() {
-
-        assertNull(Main.getErrorMessage(null));
-
-        // Correct behaviour with errors
-        Main.error(new Exception("exception_error"));
-        Main.error("Error message on one line");
-        Main.error("Error message with {0}", "param");
-        Main.error("First line of error message on several lines\nline2\nline3\nline4");
-        Collection<String> errors = Main.getLastErrorAndWarnings();
-        assertTrue(errors.contains("E: java.lang.Exception: exception_error"));
-        assertTrue(errors.contains("E: Error message with param"));
-        assertTrue(errors.contains("E: Error message on one line"));
-        assertTrue(errors.contains("E: First line of error message on several lines"));
-
-        // Correct behaviour with warnings
-        Main.warn(new Exception("exception_warn", new Exception("root_cause")));
-        Main.warn(new Exception("exception_warn_bool"), true);
-        Main.warn("Warning message on one line");
-        Main.warn("First line of warning message on several lines\nline2\nline3\nline4");
-        Collection<String> warnings = Main.getLastErrorAndWarnings();
-        assertTrue(warnings.contains("W: java.lang.Exception: exception_warn. Cause: java.lang.Exception: root_cause"));
-        assertTrue(warnings.contains("W: java.lang.Exception: exception_warn_bool"));
-        assertTrue(warnings.contains("W: Warning message on one line"));
-        assertTrue(warnings.contains("W: First line of warning message on several lines"));
-    }
-
-    /**
      * Unit test of {@link Main#preConstructorInit}.
      */
     @Test
diff --git a/test/unit/org/openstreetmap/josm/actions/downloadtasks/PostDownloadHandlerTest.java b/test/unit/org/openstreetmap/josm/actions/downloadtasks/PostDownloadHandlerTest.java
index 5610192..c7ebc6f 100644
--- a/test/unit/org/openstreetmap/josm/actions/downloadtasks/PostDownloadHandlerTest.java
+++ b/test/unit/org/openstreetmap/josm/actions/downloadtasks/PostDownloadHandlerTest.java
@@ -78,6 +78,11 @@ public class PostDownloadHandlerTest {
             public String acceptsDocumentationSummary() {
                 return null;
             }
+
+            @Override
+            public void setZoomAfterDownload(boolean zoomAfterDownload) {
+                // Do nothing
+            }
         };
     }
 
diff --git a/test/unit/org/openstreetmap/josm/data/cache/JCSCacheManagerTest.java b/test/unit/org/openstreetmap/josm/data/cache/JCSCacheManagerTest.java
index ebfe25e..eb144d3 100644
--- a/test/unit/org/openstreetmap/josm/data/cache/JCSCacheManagerTest.java
+++ b/test/unit/org/openstreetmap/josm/data/cache/JCSCacheManagerTest.java
@@ -27,7 +27,7 @@ public class JCSCacheManagerTest {
      */
     @Rule
     @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
-    public JOSMTestRules test = new JOSMTestRules().preferences();
+    public JOSMTestRules test = new JOSMTestRules().preferences().timeout(20000);
 
     /**
      * Tests that {@code JCSCacheManager} satisfies utility class criterias.
diff --git a/test/unit/org/openstreetmap/josm/data/cache/JCSCachedTileLoaderJobTest.java b/test/unit/org/openstreetmap/josm/data/cache/JCSCachedTileLoaderJobTest.java
index d64236e..db22271 100644
--- a/test/unit/org/openstreetmap/josm/data/cache/JCSCachedTileLoaderJobTest.java
+++ b/test/unit/org/openstreetmap/josm/data/cache/JCSCachedTileLoaderJobTest.java
@@ -3,11 +3,13 @@ package org.openstreetmap.josm.data.cache;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 
 import java.io.IOException;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.nio.charset.StandardCharsets;
+import java.util.regex.Matcher;
 
 import org.apache.commons.jcs.access.behavior.ICacheAccess;
 import org.junit.Before;
@@ -170,4 +172,27 @@ public class JCSCachedTileLoaderJobTest {
     private static ICacheAccess<String, CacheEntry> getCache() throws IOException {
         return JCSCacheManager.getCache("test");
     }
+
+    /**
+     * Test that error message sent by Tomcat can be parsed.
+     */
+    @Test
+    public void testTomcatErrorMessage() {
+        Matcher m = JCSCachedTileLoaderJob.TOMCAT_ERR_MESSAGE.matcher(
+            "<html><head><title>Apache Tomcat/DGFiP - Rapport d''erreur</title><style><!--"+
+                "H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} "+
+                "H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} "+
+                "H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} "+
+                "BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} "+
+                "B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} "+
+                "P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}"+
+                "A {color : black;}A.name {color : black;}HR {color : #525D76;}"+
+            "--></style> </head><body><h1>Etat HTTP 400 - La commune demandée n'existe pas ou n'est pas accessible.</h1>"+
+            "<HR size=\"1\" noshade=\"noshade\">"+
+            "<p><b>type</b> Rapport d''état</p><p><b>message</b> <u>La commune demandée n'existe pas ou n'est pas accessible.</u></p>"+
+            "<p><b>description</b> <u>La requête envoyée par le client était syntaxiquement incorrecte.</u></p>"+
+            "<HR size=\"1\" noshade=\"noshade\"><h3>Apache Tomcat/DGFiP</h3></body></html>");
+        assertTrue(m.matches());
+        assertEquals("La commune demandée n'existe pas ou n'est pas accessible.", m.group(1));
+    }
 }
diff --git a/test/unit/org/openstreetmap/josm/data/gpx/GpxDataTest.java b/test/unit/org/openstreetmap/josm/data/gpx/GpxDataTest.java
index 2a25877..bedaf59 100644
--- a/test/unit/org/openstreetmap/josm/data/gpx/GpxDataTest.java
+++ b/test/unit/org/openstreetmap/josm/data/gpx/GpxDataTest.java
@@ -9,6 +9,7 @@ import static org.junit.Assert.assertTrue;
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.Date;
 import java.util.List;
@@ -423,7 +424,7 @@ public class GpxDataTest {
     }
 
     private static ImmutableGpxTrack emptyGpxTrack() {
-        return new ImmutableGpxTrack(Collections.emptyList(), Collections.emptyMap());
+        return new ImmutableGpxTrack(Collections.<Collection<WayPoint>>emptyList(), Collections.emptyMap());
     }
 
     private static ImmutableGpxTrack singleWaypointGpxTrack() {
diff --git a/test/unit/org/openstreetmap/josm/data/oauth/OAuthParametersTest.java b/test/unit/org/openstreetmap/josm/data/oauth/OAuthParametersTest.java
index 4e70313..263bb00 100644
--- a/test/unit/org/openstreetmap/josm/data/oauth/OAuthParametersTest.java
+++ b/test/unit/org/openstreetmap/josm/data/oauth/OAuthParametersTest.java
@@ -7,7 +7,6 @@ import static org.junit.Assert.assertNotNull;
 
 import org.junit.Rule;
 import org.junit.Test;
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.io.OsmApi;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
@@ -47,16 +46,6 @@ public class OAuthParametersTest {
     }
 
     /**
-     * Unit test of method {@link OAuthParameters#createFromPreferences}.
-     * @deprecated to remove end of 2017
-     */
-    @Test
-    @Deprecated
-    public void testCreateFromPreferences() {
-        assertNotNull(OAuthParameters.createFromPreferences(Main.pref));
-    }
-
-    /**
      * Unit test of methods {@link OAuthParameters#equals} and {@link OAuthParameters#hashCode}.
      */
     @Test
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 4bbe763..63b091f 100644
--- a/test/unit/org/openstreetmap/josm/data/validation/tests/MapCSSTagCheckerTest.java
+++ b/test/unit/org/openstreetmap/josm/data/validation/tests/MapCSSTagCheckerTest.java
@@ -262,4 +262,16 @@ public class MapCSSTagCheckerTest {
     public void testTicket14289() throws Exception {
         doTestNaturalWood(14289, "example2.osm", 3, 3);
     }
+
+    /**
+     * Non-regression test for <a href="https://josm.openstreetmap.de/ticket/15641">Bug #15641</a>.
+     * @throws ParseException if an error occurs
+     */
+    @Test
+    public void testTicket15641() throws ParseException {
+        assertNotNull(buildTagChecker(
+                "relation[type=public_transport][public_transport=stop_area_group] > way {" +
+                "  throwWarning: eval(count(parent_tags(public_transport)));" +
+                "}"));
+    }
 }
diff --git a/test/unit/org/openstreetmap/josm/gui/MainApplicationTest.java b/test/unit/org/openstreetmap/josm/gui/MainApplicationTest.java
index b71ee25..dc80bf4 100644
--- a/test/unit/org/openstreetmap/josm/gui/MainApplicationTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/MainApplicationTest.java
@@ -80,7 +80,6 @@ public class MainApplicationTest {
      * Make sure {@code MainApplication.mainPanel} is initialized.
      * @param reAddListeners {@code true} to re-add listeners
      */
-    @SuppressWarnings("deprecation")
     public static void initMainPanel(boolean reAddListeners) {
         if (MainApplication.mainPanel == null) {
             MainApplication.mainPanel = new MainPanel(MainApplication.getLayerManager());
@@ -88,31 +87,22 @@ public class MainApplicationTest {
         if (reAddListeners) {
             MainApplication.mainPanel.reAddListeners();
         }
-        if (Main.main != null) {
-            Main.main.panel = MainApplication.mainPanel;
-        }
     }
 
     /**
      * Make sure {@code MainApplication.menu} is initialized.
      */
-    @SuppressWarnings("deprecation")
     public static void initMainMenu() {
         MainApplication.menu = new MainMenu();
-        Main.main.menu = MainApplication.menu;
     }
 
     /**
      * Make sure {@link MainApplication#toolbar} is initialized.
      */
-    @SuppressWarnings("deprecation")
     public static void initToolbar() {
         if (MainApplication.toolbar == null) {
             MainApplication.toolbar = new ToolbarPreferences();
         }
-        if (Main.toolbar == null) {
-            Main.toolbar = MainApplication.getToolbar();
-        }
     }
 
     @SuppressFBWarnings(value = "DM_DEFAULT_ENCODING")
diff --git a/test/unit/org/openstreetmap/josm/gui/dialogs/MinimapDialogTest.java b/test/unit/org/openstreetmap/josm/gui/dialogs/MinimapDialogTest.java
index 2fbb0a1..565a275 100644
--- a/test/unit/org/openstreetmap/josm/gui/dialogs/MinimapDialogTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/dialogs/MinimapDialogTest.java
@@ -1,34 +1,44 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.dialogs;
 
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
-import static java.util.concurrent.TimeUnit.MILLISECONDS;
-
 import java.awt.Color;
 import java.awt.Component;
 import java.awt.Graphics2D;
+import java.awt.event.ComponentEvent;
 import java.awt.image.BufferedImage;
+import java.util.Arrays;
+import java.util.Map;
+import java.util.concurrent.Callable;
+import java.util.regex.Matcher;
 
 import javax.swing.JMenuItem;
 import javax.swing.JPopupMenu;
 
-import java.util.concurrent.Callable;
-
+import org.awaitility.Awaitility;
 import org.junit.Rule;
 import org.junit.Test;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.TestUtils;
+import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.projection.Projections;
+import org.openstreetmap.josm.gui.MainApplication;
+import org.openstreetmap.josm.gui.MapView;
 import org.openstreetmap.josm.gui.bbox.SlippyMapBBoxChooser;
 import org.openstreetmap.josm.gui.bbox.SourceButton;
+import org.openstreetmap.josm.gui.layer.LayerManagerTest.TestLayer;
+import org.openstreetmap.josm.gui.util.GuiHelper;
+import org.openstreetmap.josm.testutils.ImagePatternMatching;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+import com.google.common.collect.ImmutableMap;
 
-import org.awaitility.Awaitility;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 
 /**
  * Unit tests of {@link MinimapDialog} class.
@@ -54,7 +64,23 @@ public class MinimapDialogTest {
         assertFalse(dlg.isVisible());
     }
 
-    private static void assertSingleSelectedSourceLabel(JPopupMenu menu, String label) {
+    @FunctionalInterface
+    protected interface ThrowingRunnable {
+        void run() throws Throwable;
+    }
+
+    protected static Runnable uncheckExceptions(final ThrowingRunnable tr) {
+        return (() -> {
+            try {
+                tr.run();
+            } catch (Throwable e) {
+                throw new RuntimeException(e);
+            }
+        });
+    }
+
+    protected void assertSingleSelectedSourceLabel(final String label) {
+        JPopupMenu menu = this.sourceButton.getPopupMenu();
         boolean found = false;
         for (Component c: menu.getComponents()) {
             if (JPopupMenu.Separator.class.isInstance(c)) {
@@ -72,35 +98,49 @@ public class MinimapDialogTest {
         assertTrue("Selected source not found in menu", found);
     }
 
-    private static JMenuItem getSourceMenuItemByLabel(JPopupMenu menu, String label) {
-        for (Component c: menu.getComponents()) {
-            if (JPopupMenu.Separator.class.isInstance(c)) {
-                break;
-            } else if (((JMenuItem) c).getText() == label) {
-                return (JMenuItem) c;
-            }
-            // else continue...
+    protected void clickSourceMenuItemByLabel(final String label) {
+        try {
+            GuiHelper.runInEDTAndWaitWithException(() -> {
+                JPopupMenu menu = this.sourceButton.getPopupMenu();
+                for (Component c: menu.getComponents()) {
+                    if (JPopupMenu.Separator.class.isInstance(c)) {
+                        // sources should all come before any separators
+                        break;
+                    } else if (((JMenuItem) c).getText() == label) {
+                        ((JMenuItem) c).doClick();
+                        return;
+                    }
+                    // else continue...
+                }
+                fail();
+            });
+        } catch (Throwable e) {
+            // need to turn this *back* into an AssertionFailedError
+            fail(String.format("Failed to find menu item with label %s: %s", label, e));
         }
-        fail("Failed to find menu item with label " + label);
-        return null;
     }
 
     protected MinimapDialog minimap;
     protected SlippyMapBBoxChooser slippyMap;
     protected SourceButton sourceButton;
+    protected Callable<Boolean> slippyMapTasksFinished;
 
     protected static BufferedImage paintedSlippyMap;
 
-    protected void setUpMiniMap() throws Exception {
-        this.minimap = new MinimapDialog();
-        this.minimap.setSize(300, 200);
-        this.minimap.showDialog();
-        this.slippyMap = (SlippyMapBBoxChooser) TestUtils.getPrivateField(this.minimap, "slippyMap");
-        this.sourceButton = (SourceButton) TestUtils.getPrivateField(this.slippyMap, "iSourceButton");
+    protected void setUpMiniMap() {
+        GuiHelper.runInEDTAndWaitWithException(uncheckExceptions(() -> {
+            this.minimap = new MinimapDialog();
+            this.minimap.setSize(300, 200);
+            this.minimap.showDialog();
+            this.slippyMap = (SlippyMapBBoxChooser) TestUtils.getPrivateField(this.minimap, "slippyMap");
+            this.sourceButton = (SourceButton) TestUtils.getPrivateField(this.slippyMap, "iSourceButton");
 
-        // get dlg in a paintable state
-        this.minimap.addNotify();
-        this.minimap.doLayout();
+            // get minimap in a paintable state
+            this.minimap.addNotify();
+            this.minimap.doLayout();
+        }));
+
+        this.slippyMapTasksFinished = () -> !this.slippyMap.getTileController().getTileLoader().hasOutstandingTasks();
     }
 
     protected void paintSlippyMap() {
@@ -125,10 +165,6 @@ public class MinimapDialogTest {
         this.slippyMap.paintAll(g);
     }
 
-    protected Callable<Boolean> slippyMapTasksFinished() {
-        return () -> !this.slippyMap.getTileController().getTileLoader().hasOutstandingTasks();
-    }
-
     /**
      * Tests to switch imagery source.
      * @throws Exception if any error occurs
@@ -143,31 +179,31 @@ public class MinimapDialogTest {
         // an initial paint operation is required to trigger the tile fetches
         this.paintSlippyMap();
 
-        Awaitility.await().atMost(1000, MILLISECONDS).until(this.slippyMapTasksFinished());
+        Awaitility.await().atMost(1000, MILLISECONDS).until(this.slippyMapTasksFinished);
 
         this.paintSlippyMap();
 
         assertEquals(0xffffffff, paintedSlippyMap.getRGB(0, 0));
 
-        assertSingleSelectedSourceLabel(this.sourceButton.getPopupMenu(), "White Tiles");
+        this.assertSingleSelectedSourceLabel("White Tiles");
 
-        getSourceMenuItemByLabel(this.sourceButton.getPopupMenu(), "Magenta Tiles").doClick();
-        assertSingleSelectedSourceLabel(this.sourceButton.getPopupMenu(), "Magenta Tiles");
+        this.clickSourceMenuItemByLabel("Magenta Tiles");
+        this.assertSingleSelectedSourceLabel("Magenta Tiles");
         // call paint to trigger new tile fetch
         this.paintSlippyMap();
 
-        Awaitility.await().atMost(1000, MILLISECONDS).until(this.slippyMapTasksFinished());
+        Awaitility.await().atMost(1000, MILLISECONDS).until(this.slippyMapTasksFinished);
 
         this.paintSlippyMap();
 
         assertEquals(0xffff00ff, paintedSlippyMap.getRGB(0, 0));
 
-        getSourceMenuItemByLabel(this.sourceButton.getPopupMenu(), "Green Tiles").doClick();
-        assertSingleSelectedSourceLabel(this.sourceButton.getPopupMenu(), "Green Tiles");
+        this.clickSourceMenuItemByLabel("Green Tiles");
+        this.assertSingleSelectedSourceLabel("Green Tiles");
         // call paint to trigger new tile fetch
         this.paintSlippyMap();
 
-        Awaitility.await().atMost(1000, MILLISECONDS).until(this.slippyMapTasksFinished());
+        Awaitility.await().atMost(1000, MILLISECONDS).until(this.slippyMapTasksFinished);
 
         this.paintSlippyMap();
 
@@ -186,19 +222,19 @@ public class MinimapDialogTest {
 
         this.setUpMiniMap();
 
-        assertSingleSelectedSourceLabel(this.sourceButton.getPopupMenu(), "Green Tiles");
+        this.assertSingleSelectedSourceLabel("Green Tiles");
 
         // an initial paint operation is required to trigger the tile fetches
         this.paintSlippyMap();
 
-        Awaitility.await().atMost(1000, MILLISECONDS).until(this.slippyMapTasksFinished());
+        Awaitility.await().atMost(1000, MILLISECONDS).until(this.slippyMapTasksFinished);
 
         this.paintSlippyMap();
 
         assertEquals(0xff00ff00, paintedSlippyMap.getRGB(0, 0));
 
-        getSourceMenuItemByLabel(this.sourceButton.getPopupMenu(), "Magenta Tiles").doClick();
-        assertSingleSelectedSourceLabel(this.sourceButton.getPopupMenu(), "Magenta Tiles");
+        this.clickSourceMenuItemByLabel("Magenta Tiles");
+        this.assertSingleSelectedSourceLabel("Magenta Tiles");
 
         assertEquals("Magenta Tiles", Main.pref.get("slippy_map_chooser.mapstyle", "Fail"));
     }
@@ -213,15 +249,139 @@ public class MinimapDialogTest {
 
         this.setUpMiniMap();
 
-        assertSingleSelectedSourceLabel(this.sourceButton.getPopupMenu(), "White Tiles");
+        this.assertSingleSelectedSourceLabel("White Tiles");
 
         // an initial paint operation is required to trigger the tile fetches
         this.paintSlippyMap();
 
-        Awaitility.await().atMost(1000, MILLISECONDS).until(this.slippyMapTasksFinished());
+        Awaitility.await().atMost(1000, MILLISECONDS).until(this.slippyMapTasksFinished);
 
         this.paintSlippyMap();
 
         assertEquals(0xffffffff, paintedSlippyMap.getRGB(0, 0));
     }
+
+    /**
+     * test viewport marker rectangle matches the mapView's aspect ratio
+     * @throws Exception if any error occurs
+     */
+    @Test
+    public void testViewportAspectRatio() throws Exception {
+        // Add a test layer to the layer manager to get the MapFrame & MapView
+        MainApplication.getLayerManager().addLayer(new TestLayer());
+
+        Main.pref.put("slippy_map_chooser.mapstyle", "White Tiles");
+        // ensure projection matches JMapViewer's
+        Main.setProjection(Projections.getProjectionByCode("EPSG:3857"));
+
+        MapView mapView = MainApplication.getMap().mapView;
+        GuiHelper.runInEDTAndWaitWithException(() -> {
+            mapView.setVisible(true);
+            mapView.addNotify();
+            mapView.doLayout();
+            // ensure we have a square mapView viewport
+            mapView.setBounds(0, 0, 350, 350);
+        });
+
+        this.setUpMiniMap();
+
+        // attempt to set viewport to cover a non-square area
+        mapView.zoomTo(new Bounds(26.27, -18.23, 26.275, -18.229));
+
+        // an initial paint operation is required to trigger the tile fetches
+        this.paintSlippyMap();
+
+        Awaitility.await().atMost(1000, MILLISECONDS).until(this.slippyMapTasksFinished);
+
+        this.paintSlippyMap();
+
+        Map<Integer, String> paletteMap = ImmutableMap.<Integer, String>builder()
+            .put(0xffffffff, "w")
+            .put(0xff000000, "b")
+            .put(0xfff0d1d1, "p")
+            .build();
+
+        Matcher rowMatcher = ImagePatternMatching.rowMatch(
+            paintedSlippyMap,
+            paintedSlippyMap.getHeight()/2,
+            paletteMap,
+            "^(w+)b(p+)b(w+)$",
+            true
+        );
+
+        // (within a tolerance for numerical error) the number of pixels on the left of the viewport marker
+        // should equal the number on the right
+        assertTrue(
+            "Viewport marker not horizontally centered",
+            Math.abs(rowMatcher.group(1).length() - rowMatcher.group(3).length()) < 4
+        );
+
+        Matcher colMatcher = ImagePatternMatching.columnMatch(
+            paintedSlippyMap,
+            paintedSlippyMap.getWidth()/2,
+            paletteMap,
+            "^(w+)b(p+)b(w+)$",
+            true
+        );
+
+        // (within a tolerance for numerical error) the number of pixels on the top of the viewport marker
+        // should equal the number on the bottom
+        assertTrue(
+            "Viewport marker not vertically centered",
+            Math.abs(colMatcher.group(1).length() - colMatcher.group(3).length()) < 4
+        );
+
+        // (within a tolerance for numerical error) the viewport marker should be square
+        assertTrue(
+            "Viewport marker not square",
+            Math.abs(colMatcher.group(2).length() - rowMatcher.group(2).length()) < 4
+        );
+
+        // now change the mapView size
+        GuiHelper.runInEDTAndWaitWithException(() -> {
+            mapView.setBounds(0, 0, 150, 300);
+            Arrays.stream(mapView.getComponentListeners()).forEach(
+                cl -> cl.componentResized(new ComponentEvent(mapView, ComponentEvent.COMPONENT_RESIZED))
+            );
+        });
+        // minimap doesn't (yet?) listen for component resize events to update its viewport marker, so
+        // trigger a zoom change
+        mapView.zoomTo(mapView.getCenter().add(1., 0.));
+        this.paintSlippyMap();
+
+        rowMatcher = ImagePatternMatching.rowMatch(
+            paintedSlippyMap,
+            paintedSlippyMap.getHeight()/2,
+            paletteMap,
+            "^(w+)b(p+)b(w+)$",
+            true
+        );
+        assertTrue(
+            "Viewport marker not horizontally centered",
+            Math.abs(rowMatcher.group(1).length() - rowMatcher.group(3).length()) < 4
+        );
+
+        colMatcher = ImagePatternMatching.columnMatch(
+            paintedSlippyMap,
+            paintedSlippyMap.getWidth()/2,
+            paletteMap,
+            "^(w+)b(p+)b(w+)$",
+            true
+        );
+        assertTrue(
+            "Viewport marker not vertically centered",
+            Math.abs(colMatcher.group(1).length() - colMatcher.group(3).length()) < 4
+        );
+
+        try {
+            javax.imageio.ImageIO.write(paintedSlippyMap, "png", new java.io.File("failed.png"));
+        } catch (java.io.IOException ioe) {
+            System.err.println("Failed writing image");
+        }
+
+        assertTrue(
+            "Viewport marker not 2:1 aspect ratio",
+            Math.abs(colMatcher.group(2).length() - (rowMatcher.group(2).length()*2.0)) < 5
+        );
+    }
 }
diff --git a/test/unit/org/openstreetmap/josm/gui/help/HelpContentReaderTest.java b/test/unit/org/openstreetmap/josm/gui/help/HelpContentReaderTest.java
index 37357e5..e86627f 100644
--- a/test/unit/org/openstreetmap/josm/gui/help/HelpContentReaderTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/help/HelpContentReaderTest.java
@@ -19,7 +19,7 @@ public class HelpContentReaderTest {
      */
     @Rule
     @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
-    public JOSMTestRules test = new JOSMTestRules();
+    public JOSMTestRules test = new JOSMTestRules().timeout(20000);
 
     /**
      * Unit test of {@link HelpContentReader#fetchHelpTopicContent} - null case.
diff --git a/test/unit/org/openstreetmap/josm/gui/io/AsynchronousUploadPrimitivesTaskTest.java b/test/unit/org/openstreetmap/josm/gui/io/AsynchronousUploadPrimitivesTaskTest.java
index b229ce7..b4f7165 100644
--- a/test/unit/org/openstreetmap/josm/gui/io/AsynchronousUploadPrimitivesTaskTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/io/AsynchronousUploadPrimitivesTaskTest.java
@@ -1,12 +1,13 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.io;
 
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
-import org.junit.Rule;
-import org.junit.Before;
+import java.util.Optional;
+
 import org.junit.After;
-import org.junit.Test;
 import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
 import org.openstreetmap.josm.data.APIDataSet;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.Changeset;
@@ -17,8 +18,11 @@ import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.io.UploadStrategySpecification;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
-import java.util.Optional;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 
+/**
+ * Unit tests of {@link AsynchronousUploadPrimitivesTask}.
+ */
 public class AsynchronousUploadPrimitivesTaskTest {
 
     private UploadStrategySpecification strategy;
@@ -61,6 +65,7 @@ public class AsynchronousUploadPrimitivesTaskTest {
         layer = null;
         strategy = null;
         changeset = null;
+        uploadPrimitivesTask.cancel();
         uploadPrimitivesTask = null;
     }
 
diff --git a/test/unit/org/openstreetmap/josm/gui/layer/GpxLayerTest.java b/test/unit/org/openstreetmap/josm/gui/layer/GpxLayerTest.java
index 7561fd3..ad2c6e9 100644
--- a/test/unit/org/openstreetmap/josm/gui/layer/GpxLayerTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/layer/GpxLayerTest.java
@@ -76,13 +76,13 @@ public class GpxLayerTest {
         assertEquals("foo", layer.getName());
         assertFalse(layer.isLocalFile());
         assertEquals(Color.MAGENTA, layer.getColorProperty().get());
-        assertEquals("<html>0 tracks, 0 routes, 0 waypoints<br>Length: < 0.01 m<br></html>", layer.getToolTipText());
+        assertEquals("<html>0 tracks (0 segments), 0 routes, 0 waypoints<br>Length: < 0.01 m<br></html>", layer.getToolTipText());
 
         GpxLayer layer2 = new GpxLayer(new GpxData(), "bar", true);
         assertEquals("bar", layer2.getName());
         assertTrue(layer2.isLocalFile());
         assertEquals(Color.MAGENTA, layer2.getColorProperty().get());
-        assertEquals("<html>0 tracks, 0 routes, 0 waypoints<br>Length: < 0.01 m<br></html>", layer2.getToolTipText());
+        assertEquals("<html>0 tracks (0 segments), 0 routes, 0 waypoints<br>Length: < 0.01 m<br></html>", layer2.getToolTipText());
 
         assertTrue(layer.checkSaveConditions());
         assertTrue(layer.isInfoResizable());
@@ -101,6 +101,11 @@ public class GpxLayerTest {
     public void testGetInfoComponent() throws Exception {
         assertEquals("<html>\n"+
                      "  <head>\n" +
+                     "    <style type=\"text/css\">\n" +
+                     "      <!--\n" +
+                     "        td { padding-top: 4px; padding-bottom: 4px; padding-right: 16px; padding-left: 16px }\n" +
+                     "      -->\n" +
+                     "    </style>\n" +
                      "    \n" +
                      "  </head>\n" +
                      "  <body>\n" +
@@ -111,13 +116,18 @@ public class GpxLayerTest {
 
         assertEquals("<html>\n"+
                      "  <head>\n" +
+                     "    <style type=\"text/css\">\n" +
+                     "      <!--\n" +
+                     "        td { padding-top: 4px; padding-bottom: 4px; padding-right: 16px; padding-left: 16px }\n" +
+                     "      -->\n" +
+                     "    </style>\n" +
                      "    \n" +
                      "  </head>\n" +
                      "  <body>\n" +
                      "    <table>\n" +
                      "      <tr align=\"center\">\n" +
                      "        <td colspan=\"5\">\n" +
-                     "          1 track\n" +
+                     "          1 track, 1 track segments\n" +
                      "        </td>\n" +
                      "      </tr>\n" +
                      "      <tr align=\"center\">\n" +
@@ -134,6 +144,9 @@ public class GpxLayerTest {
                      "          Length\n" +
                      "        </td>\n" +
                      "        <td>\n" +
+                     "          Number of<br>Segments\n" +
+                     "        </td>\n" +
+                     "        <td>\n" +
                      "          URL\n" +
                      "        </td>\n" +
                      "      </tr>\n" +
@@ -151,6 +164,9 @@ public class GpxLayerTest {
                      "          12.0 m\n" +
                      "        </td>\n" +
                      "        <td>\n" +
+                     "          1\n" +
+                     "        </td>\n" +
+                     "        <td>\n" +
                      "          \n" +
                      "        </td>\n" +
                      "      </tr>\n" +
diff --git a/test/unit/org/openstreetmap/josm/gui/layer/OsmDataLayerTest.java b/test/unit/org/openstreetmap/josm/gui/layer/OsmDataLayerTest.java
index 707f03c..d472495 100644
--- a/test/unit/org/openstreetmap/josm/gui/layer/OsmDataLayerTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/layer/OsmDataLayerTest.java
@@ -8,9 +8,9 @@ import static org.junit.Assert.assertTrue;
 
 import java.io.File;
 
-import org.junit.BeforeClass;
+import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
-import org.openstreetmap.josm.JOSMFixture;
 import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.actions.ExpertToggleAction;
 import org.openstreetmap.josm.data.Bounds;
@@ -21,6 +21,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.gui.MainApplication;
+import org.openstreetmap.josm.testutils.JOSMTestRules;
+
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 
 /**
  * Unit tests of {@link OsmDataLayer} class.
@@ -30,9 +33,21 @@ public class OsmDataLayerTest {
     /**
      * Setup tests
      */
-    @BeforeClass
-    public static void setUpBeforeClass() {
-        JOSMFixture.createUnitTestFixture().init(true);
+    @Rule
+    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
+    public JOSMTestRules test = new JOSMTestRules().platform().projection().main();
+
+    private DataSet ds;
+    private OsmDataLayer layer;
+
+    /**
+     * Setup tests
+     */
+    @Before
+    public void setUp() {
+        ds = new DataSet();
+        layer = new OsmDataLayer(ds, "", null);
+        MainApplication.getLayerManager().addLayer(layer);
     }
 
     /**
@@ -40,27 +55,20 @@ public class OsmDataLayerTest {
      */
     @Test
     public void testRecentRelation() {
-        DataSet ds = new DataSet();
-        OsmDataLayer layer = new OsmDataLayer(ds, "", null);
-        try {
-            MainApplication.getLayerManager().addLayer(layer);
-            int n = OsmDataLayer.PROPERTY_RECENT_RELATIONS_NUMBER.get();
-            assertTrue(n > 0);
-            for (int i = 0; i < 2*n; i++) {
-                Relation r = new Relation(i, 1);
-                ds.addPrimitive(r);
-                layer.setRecentRelation(r);
-            }
-            assertEquals(n, layer.getRecentRelations().size());
-            for (OsmPrimitive r : ds.allPrimitives()) {
-                if (r instanceof Relation) {
-                    layer.removeRecentRelation((Relation) r);
-                }
+        int n = OsmDataLayer.PROPERTY_RECENT_RELATIONS_NUMBER.get();
+        assertTrue(n > 0);
+        for (int i = 0; i < 2*n; i++) {
+            Relation r = new Relation(i, 1);
+            ds.addPrimitive(r);
+            layer.setRecentRelation(r);
+        }
+        assertEquals(n, layer.getRecentRelations().size());
+        for (OsmPrimitive r : ds.allPrimitives()) {
+            if (r instanceof Relation) {
+                layer.removeRecentRelation((Relation) r);
             }
-            assertTrue(layer.getRecentRelations().isEmpty());
-        } finally {
-            MainApplication.getLayerManager().removeLayer(layer);
         }
+        assertTrue(layer.getRecentRelations().isEmpty());
     }
 
     /**
@@ -68,8 +76,6 @@ public class OsmDataLayerTest {
      */
     @Test
     public void testGetInfoComponent() {
-        DataSet ds = new DataSet();
-        OsmDataLayer layer = new OsmDataLayer(ds, "", null);
         assertNotNull(layer.getInfoComponent());
 
         layer.setUploadDiscouraged(true);
@@ -107,8 +113,6 @@ public class OsmDataLayerTest {
      */
     @Test
     public void testLayerStateChangeListenerNull() {
-        DataSet ds = new DataSet();
-        OsmDataLayer layer = new OsmDataLayer(ds, "", null);
         layer.addLayerStateChangeListener(null);
     }
 
@@ -117,8 +121,6 @@ public class OsmDataLayerTest {
      */
     @Test
     public void testGetIcon() {
-        DataSet ds = new DataSet();
-        OsmDataLayer layer = new OsmDataLayer(ds, "", null);
         assertNotNull(layer.getIcon());
         layer.setUploadDiscouraged(true);
         assertNotNull(layer.getIcon());
@@ -129,16 +131,9 @@ public class OsmDataLayerTest {
      */
     @Test
     public void testPaint() {
-        DataSet ds = new DataSet();
         fillDataSet(ds);
-        OsmDataLayer layer = new OsmDataLayer(ds, "", null);
-        try {
-            MainApplication.getLayerManager().addLayer(layer);
-            assertTrue(layer.getMenuEntries().length > 0);
-            layer.paint(TestUtils.newGraphics(), MainApplication.getMap().mapView, new Bounds(LatLon.ZERO));
-        } finally {
-            MainApplication.getLayerManager().removeLayer(layer);
-        }
+        assertNotNull(MainApplication.getMap());
+        layer.paint(TestUtils.newGraphics(), MainApplication.getMap().mapView, new Bounds(LatLon.ZERO));
     }
 
     /**
@@ -146,7 +141,6 @@ public class OsmDataLayerTest {
      */
     @Test
     public void testGetToolTipText() {
-        DataSet ds = new DataSet();
         assertEquals("<html>0 nodes<br>0 ways<br>0 relations</html>", new OsmDataLayer(ds, "", null).getToolTipText());
         fillDataSet(ds);
         assertEquals("<html>1 node<br>1 way<br>1 relation</html>", new OsmDataLayer(ds, "", null).getToolTipText());
@@ -158,16 +152,15 @@ public class OsmDataLayerTest {
      */
     @Test
     public void testMergeFrom() {
-        DataSet ds = new DataSet();
         fillDataSet(ds);
-        OsmDataLayer layer1 = new OsmDataLayer(ds, "", null);
         OsmDataLayer layer2 = new OsmDataLayer(new DataSet(), "", null);
+        MainApplication.getLayerManager().addLayer(layer2);
         assertTrue(layer2.data.allPrimitives().isEmpty());
-        assertTrue(layer2.isMergable(layer1));
-        layer2.mergeFrom(layer1);
+        assertTrue(layer2.isMergable(layer));
+        layer2.mergeFrom(layer);
         assertEquals(6, layer2.data.allPrimitives().size());
-        layer1.setUploadDiscouraged(true);
-        layer2.mergeFrom(layer1);
+        layer.setUploadDiscouraged(true);
+        layer2.mergeFrom(layer);
         assertTrue(layer2.isUploadDiscouraged());
     }
 
@@ -176,9 +169,7 @@ public class OsmDataLayerTest {
      */
     @Test
     public void testCleanupAfterUpload() {
-        DataSet ds = new DataSet();
         fillDataSet(ds);
-        OsmDataLayer layer = new OsmDataLayer(ds, "", null);
         assertEquals(6, layer.data.allPrimitives().size());
         layer.cleanupAfterUpload(ds.allPrimitives());
         assertEquals(3, layer.data.allPrimitives().size());
@@ -189,7 +180,6 @@ public class OsmDataLayerTest {
      */
     @Test
     public void testGetMenuEntries() {
-        OsmDataLayer layer = new OsmDataLayer(new DataSet(), "", null);
         ExpertToggleAction.getInstance().setExpert(true);
         assertEquals(16, layer.getMenuEntries().length);
 
@@ -202,9 +192,7 @@ public class OsmDataLayerTest {
      */
     @Test
     public void testToGpxData() {
-        DataSet ds = new DataSet();
         fillDataSet(ds);
-        OsmDataLayer layer = new OsmDataLayer(ds, "", null);
         assertNotNull(layer.toGpxData());
     }
 
@@ -213,9 +201,7 @@ public class OsmDataLayerTest {
      */
     @Test
     public void testContainsPoint() {
-        DataSet ds = new DataSet();
         fillDataSet(ds);
-        OsmDataLayer layer = new OsmDataLayer(ds, "", null);
         assertTrue(layer.containsPoint(LatLon.ZERO));
     }
 
@@ -224,8 +210,6 @@ public class OsmDataLayerTest {
      */
     @Test
     public void testIsModified() {
-        DataSet ds = new DataSet();
-        OsmDataLayer layer = new OsmDataLayer(ds, "", null);
         assertFalse(layer.isModified());
         fillDataSet(ds);
         assertTrue(layer.isModified());
@@ -236,7 +220,7 @@ public class OsmDataLayerTest {
      */
     @Test
     public void testProjectionChanged() {
-        new OsmDataLayer(new DataSet(), "", null).projectionChanged(null, null);
+        layer.projectionChanged(null, null);
     }
 
     /**
@@ -244,8 +228,6 @@ public class OsmDataLayerTest {
      */
     @Test
     public void testCheckSaveConditions() {
-        DataSet ds = new DataSet();
-        OsmDataLayer layer = new OsmDataLayer(ds, "", null);
         assertFalse(layer.checkSaveConditions());
         fillDataSet(ds);
         assertTrue(layer.checkSaveConditions());
diff --git a/test/unit/org/openstreetmap/josm/gui/layer/ValidatorLayerTest.java b/test/unit/org/openstreetmap/josm/gui/layer/ValidatorLayerTest.java
index afb4efe..384c8f1 100644
--- a/test/unit/org/openstreetmap/josm/gui/layer/ValidatorLayerTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/layer/ValidatorLayerTest.java
@@ -6,10 +6,13 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 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.data.osm.DataSet;
 import org.openstreetmap.josm.gui.MainApplication;
+import org.openstreetmap.josm.testutils.JOSMTestRules;
+
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 
 /**
  * Unit tests of {@link ValidatorLayer} class.
@@ -19,30 +22,22 @@ public class ValidatorLayerTest {
     /**
      * Setup tests
      */
-    @BeforeClass
-    public static void setUpBeforeClass() {
-        JOSMFixture.createUnitTestFixture().init(true);
-    }
+    @Rule
+    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
+    public JOSMTestRules test = new JOSMTestRules().platform().projection().main();
 
     /**
      * Unit test of {@link ValidatorLayer#ValidatorLayer}.
      */
     @Test
     public void testValidatorLayer() {
-        ValidatorLayer layer = null;
-        try {
-            layer = new ValidatorLayer();
-            MainApplication.getLayerManager().addLayer(layer);
-            assertFalse(layer.isMergable(null));
-            assertNotNull(layer.getIcon());
-            assertEquals("<html>No validation errors</html>", layer.getToolTipText());
-            assertEquals("<html>No validation errors</html>", layer.getInfoComponent());
-            assertTrue(layer.getMenuEntries().length > 0);
-        } finally {
-            // Ensure we clean the place before leaving, even if test fails.
-            if (layer != null) {
-                MainApplication.getLayerManager().removeLayer(layer);
-            }
-        }
+        MainApplication.getLayerManager().addLayer(new OsmDataLayer(new DataSet(), "", null));
+        ValidatorLayer layer = new ValidatorLayer();
+        MainApplication.getLayerManager().addLayer(layer);
+        assertFalse(layer.isMergable(null));
+        assertNotNull(layer.getIcon());
+        assertEquals("<html>No validation errors</html>", layer.getToolTipText());
+        assertEquals("<html>No validation errors</html>", layer.getInfoComponent());
+        assertTrue(layer.getMenuEntries().length > 0);
     }
 }
diff --git a/test/unit/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImagesTest.java b/test/unit/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImagesTest.java
index b39aa88..38769f3 100644
--- a/test/unit/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImagesTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImagesTest.java
@@ -2,6 +2,8 @@
 package org.openstreetmap.josm.gui.layer.geoimage;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 
 import java.util.Arrays;
 import java.util.Collections;
@@ -51,6 +53,9 @@ public class CorrelateGpxWithImagesTest {
         assertEquals(1, gpx.tracks.iterator().next().getSegments().size());
         assertEquals(185, gpx.tracks.iterator().next().getSegments().iterator().next().getWayPoints().size());
 
+        final ImageEntry ib = new ImageEntry();
+        ib.setExifTime(DateUtils.fromString("2016:01:03 11:54:58")); // 5 minutes before start of GPX
+        ib.createTmp();
         final ImageEntry i0 = new ImageEntry();
         i0.setExifTime(DateUtils.fromString("2016:01:03 11:59:54")); // 4 sec before start of GPX
         i0.createTmp();
@@ -64,12 +69,34 @@ public class CorrelateGpxWithImagesTest {
         i3.setExifTime(DateUtils.fromString("2016:01:03 12:05:05"));
         i3.createTmp();
 
-        assertEquals(4, CorrelateGpxWithImages.matchGpxTrack(Arrays.asList(i0, i1, i2, i3), gpx, 0));
+        assertEquals(4, CorrelateGpxWithImages.matchGpxTrack(Arrays.asList(ib, i0, i1, i2, i3), gpx, 0));
         assertEquals(new CachedLatLon(47.19286847859621, 8.79732714034617), i0.getPos()); // start of track
         assertEquals(new CachedLatLon(47.196979885920882, 8.79541271366179), i1.getPos()); // exact match
         assertEquals(new CachedLatLon(47.197319911792874, 8.792139580473304), i3.getPos()); // exact match
         assertEquals(new CachedLatLon((47.197131179273129 + 47.197186248376966) / 2, (8.792974585667253 + 8.792809881269932) / 2),
                 i2.getPos()); // interpolated
+        assertFalse(ib.hasNewGpsData());
+        assertTrue(i0.hasNewGpsData());
+        assertTrue(i1.hasNewGpsData());
+        assertTrue(i2.hasNewGpsData());
+        assertTrue(i3.hasNewGpsData());
+        // First waypoint has no speed in matchGpxTrack(). Speed is calculated
+        // and not taken from GPX track.
+        assertEquals(null, ib.getSpeed());
+        assertEquals(null, i0.getSpeed());
+        assertEquals(new Double(11.675317966018756), i1.getSpeed(), 0.000001);
+        assertEquals(new Double(24.992418392716967), i2.getSpeed(), 0.000001);
+        assertEquals(new Double(27.307968754679223), i3.getSpeed(), 0.000001);
+        assertEquals(null, ib.getElevation());
+        assertEquals(new Double(471.86), i0.getElevation(), 0.000001);
+        assertEquals(new Double(489.29), i1.getElevation(), 0.000001);
+        assertEquals(new Double((490.40 + 489.75) / 2), i2.getElevation(), 0.000001);
+        assertEquals(new Double(486.368333333), i3.getElevation(), 0.000001);
+        assertEquals(null, ib.getGpsTime());
+        assertEquals(DateUtils.fromString("2016:01:03 11:59:54"), i0.getGpsTime()); // original time is kept
+        assertEquals(DateUtils.fromString("2016:01:03 12:04:01"), i1.getGpsTime());
+        assertEquals(DateUtils.fromString("2016:01:03 12:04:57"), i2.getGpsTime());
+        assertEquals(DateUtils.fromString("2016:01:03 12:05:05"), i3.getGpsTime());
     }
 
     /**
diff --git a/test/unit/org/openstreetmap/josm/gui/oauth/OsmOAuthAuthorizationClientTest.java b/test/unit/org/openstreetmap/josm/gui/oauth/OsmOAuthAuthorizationClientTest.java
index d675287..76d0a25 100644
--- a/test/unit/org/openstreetmap/josm/gui/oauth/OsmOAuthAuthorizationClientTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/oauth/OsmOAuthAuthorizationClientTest.java
@@ -29,7 +29,7 @@ public class OsmOAuthAuthorizationClientTest {
      */
     @Rule
     @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
-    public JOSMTestRules test = new JOSMTestRules();
+    public JOSMTestRules test = new JOSMTestRules().timeout(20000);
 
     /**
      * Unit test of {@link OsmOAuthAuthorizationClient}.
diff --git a/test/unit/org/openstreetmap/josm/io/GeoJSONWriterTest.java b/test/unit/org/openstreetmap/josm/io/GeoJSONWriterTest.java
index 3cf7537..b7d85bb 100644
--- a/test/unit/org/openstreetmap/josm/io/GeoJSONWriterTest.java
+++ b/test/unit/org/openstreetmap/josm/io/GeoJSONWriterTest.java
@@ -42,18 +42,18 @@ public class GeoJSONWriterTest {
         final GeoJSONWriter writer = new GeoJSONWriter(ds);
         assertEquals(("" +
                 "{\n" +
-                "    'type':'FeatureCollection',\n" +
-                "    'generator':'JOSM',\n" +
-                "    'features':[\n" +
+                "    'type': 'FeatureCollection',\n" +
+                "    'generator': 'JOSM',\n" +
+                "    'features': [\n" +
                 "        {\n" +
-                "            'type':'Feature',\n" +
-                "            'properties':{\n" +
-                "                'name':'foo',\n" +
-                "                'source':'code'\n" +
+                "            'type': 'Feature',\n" +
+                "            'properties': {\n" +
+                "                'name': 'foo',\n" +
+                "                'source': 'code'\n" +
                 "            },\n" +
-                "            'geometry':{\n" +
-                "                'type':'Point',\n" +
-                "                'coordinates':[\n" +
+                "            'geometry': {\n" +
+                "                'type': 'Point',\n" +
+                "                'coordinates': [\n" +
                 "                    4.56000000000,\n" +
                 "                    12.30000000000\n" +
                 "                ]\n" +
@@ -80,17 +80,17 @@ public class GeoJSONWriterTest {
         final GeoJSONWriter writer = new GeoJSONWriter(ds);
         assertEquals(("" +
                 "{\n" +
-                "    'type':'FeatureCollection',\n" +
-                "    'generator':'JOSM',\n" +
-                "    'features':[\n" +
+                "    'type': 'FeatureCollection',\n" +
+                "    'generator': 'JOSM',\n" +
+                "    'features': [\n" +
                 "        {\n" +
-                "            'type':'Feature',\n" +
-                "            'properties':{\n" +
-                "                'highway':'footway'\n" +
+                "            'type': 'Feature',\n" +
+                "            'properties': {\n" +
+                "                'highway': 'footway'\n" +
                 "            },\n" +
-                "            'geometry':{\n" +
-                "                'type':'LineString',\n" +
-                "                'coordinates':[\n" +
+                "            'geometry': {\n" +
+                "                'type': 'LineString',\n" +
+                "                'coordinates': [\n" +
                 "                    [\n" +
                 "                        4.56000000000,\n" +
                 "                        12.30000000000\n" +
diff --git a/test/unit/org/openstreetmap/josm/io/GpxReaderTest.java b/test/unit/org/openstreetmap/josm/io/GpxReaderTest.java
index dac814f..582e04b 100644
--- a/test/unit/org/openstreetmap/josm/io/GpxReaderTest.java
+++ b/test/unit/org/openstreetmap/josm/io/GpxReaderTest.java
@@ -12,6 +12,8 @@ import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
+import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.gpx.GpxData;
 import org.openstreetmap.josm.data.gpx.WayPoint;
@@ -63,4 +65,15 @@ public class GpxReaderTest {
     public void testException() throws Exception {
         new GpxReader(new ByteArrayInputStream("--foo--bar--".getBytes(StandardCharsets.UTF_8))).parse(true);
     }
+
+    /**
+     * Non-regression test for ticket <a href="https://josm.openstreetmap.de/ticket/15634">#15634</a>
+     * @throws IOException if an error occurs during reading
+     * @throws SAXException if any XML error occurs
+     */
+    @Test
+    public void testTicket15634() throws IOException, SAXException {
+        assertEquals(new Bounds(53.7229357, -7.9135019, 53.9301103, -7.59656),
+                GpxReaderTest.parseGpxData(TestUtils.getRegressionDataFile(15634, "drumlish.gpx")).getMetaBounds());
+    }
 }
diff --git a/test/unit/org/openstreetmap/josm/io/session/SessionReaderTest.java b/test/unit/org/openstreetmap/josm/io/session/SessionReaderTest.java
index c6d5f56..95eb9e4 100644
--- a/test/unit/org/openstreetmap/josm/io/session/SessionReaderTest.java
+++ b/test/unit/org/openstreetmap/josm/io/session/SessionReaderTest.java
@@ -12,6 +12,7 @@ import java.util.List;
 import org.junit.Rule;
 import org.junit.Test;
 import org.openstreetmap.josm.TestUtils;
+import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.layer.AbstractTileSourceLayer;
 import org.openstreetmap.josm.gui.layer.GpxLayer;
@@ -128,8 +129,9 @@ public class SessionReaderTest {
         assertTrue(layers.get(0) instanceof ImageryLayer);
         final AbstractTileSourceLayer<?> image = (AbstractTileSourceLayer<?>) layers.get(0);
         assertEquals("Bing aerial imagery", image.getName());
-        assertEquals(-2.671667778864503, image.getDisplaySettings().getDx(), 1e-9);
-        assertEquals(13.89643478114158, image.getDisplaySettings().getDy(), 1e-9);
+        EastNorth displacement = image.getDisplaySettings().getDisplacement();
+        assertEquals(-2.671667778864503, displacement.east(), 1e-9);
+        assertEquals(13.89643478114158, displacement.north(), 1e-9);
     }
 
     /**
diff --git a/test/unit/org/openstreetmap/josm/testutils/ImagePatternMatching.java b/test/unit/org/openstreetmap/josm/testutils/ImagePatternMatching.java
new file mode 100644
index 0000000..456d226
--- /dev/null
+++ b/test/unit/org/openstreetmap/josm/testutils/ImagePatternMatching.java
@@ -0,0 +1,317 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.testutils;
+
+import static org.junit.Assert.fail;
+
+import java.awt.image.BufferedImage;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
+import java.util.function.IntFunction;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+import junit.framework.AssertionFailedError;
+
+/**
+ * Utilities to aid in making assertions about images using regular expressions.
+ */
+public final class ImagePatternMatching {
+    private ImagePatternMatching() {}
+
+    private static final Map<String, Pattern> patternCache = new HashMap<>();
+
+    private static Matcher imageStripPatternMatchInner(
+        final BufferedImage image,
+        final int columnOrRowIndex,
+        IntFunction<String> paletteMapFn,
+        final Map<Integer, String> paletteMap,
+        Pattern pattern,
+        final String patternString,
+        final boolean isColumn,
+        final boolean assertMatch
+    ) {
+        paletteMapFn = Optional.ofNullable(paletteMapFn)
+            // using "#" as the default "unmapped" character as it can be used in regexes without escaping
+            .orElse(i -> paletteMap.getOrDefault(i, "#"));
+        pattern = Optional.ofNullable(pattern)
+            .orElseGet(() -> patternCache.computeIfAbsent(patternString, k -> Pattern.compile(k)));
+
+        int[] columnOrRow = isColumn
+            ? image.getRGB(columnOrRowIndex, 0, 1, image.getHeight(), null, 0, 1)
+            : image.getRGB(0, columnOrRowIndex, image.getWidth(), 1, null, 0, image.getWidth());
+
+        String stringRepr = Arrays.stream(columnOrRow).mapToObj(paletteMapFn).collect(Collectors.joining());
+        Matcher result = pattern.matcher(stringRepr);
+
+        if (assertMatch && !result.matches()) {
+            System.err.println(String.format("Full strip failing to match pattern %s: %s", pattern, stringRepr));
+            fail(String.format(
+                "%s %d failed to match pattern %s",
+                isColumn ? "Column" : "Row",
+                columnOrRowIndex,
+                pattern
+            ));
+        }
+
+        return result;
+    }
+
+    /**
+     * Attempt to match column {@code colNumber}, once translated to characters according to {@code paletteMap}
+     * against the regular expression described by {@code patternString}.
+     *
+     * @param image         image to take column from
+     * @param colNumber     image column number for comparison
+     * @param paletteMap    {@link Map} of {@code Integer}s (denoting the color in ARGB format) to {@link String}s. It
+     *                      is advised to only map colors to single characters. Colors with no corresponding entry in
+     *                      the map are mapped to {@code #}.
+     * @param patternString string representation of regular expression to match against. These are simply used to
+     *                      construct a {@link Pattern} which is cached in case of re-use.
+     * @param assertMatch   whether to raise an (informative) {@link AssertionFailedError} if no match is found.
+     * @return {@link Matcher} produced by matching attempt
+     */
+    public static Matcher columnMatch(
+        final BufferedImage image,
+        final int colNumber,
+        final Map<Integer, String> paletteMap,
+        final String patternString,
+        final boolean assertMatch
+    ) {
+        return imageStripPatternMatchInner(
+            image,
+            colNumber,
+            null,
+            paletteMap,
+            null,
+            patternString,
+            true,
+            true
+        );
+    }
+
+    /**
+     * Attempt to match column {@code colNumber}, once translated to characters according to {@code paletteMapFn}
+     * against the regular expression described by {@code patternString}.
+     *
+     * @param image         image to take column from
+     * @param colNumber     image column number for comparison
+     * @param paletteMapFn  function mapping {@code Integer}s (denoting the color in ARGB format) to {@link String}s. It
+     *                      is advised to only map colors to single characters.
+     * @param patternString string representation of regular expression to match against. These are simply used to
+     *                      construct a {@link Pattern} which is cached in case of re-use.
+     * @param assertMatch   whether to raise an (informative) {@link AssertionFailedError} if no match is found.
+     * @return {@link Matcher} produced by matching attempt
+     */
+    public static Matcher columnMatch(
+        final BufferedImage image,
+        final int colNumber,
+        final IntFunction<String> paletteMapFn,
+        final String patternString,
+        final boolean assertMatch
+    ) {
+        return imageStripPatternMatchInner(
+            image,
+            colNumber,
+            paletteMapFn,
+            null,
+            null,
+            patternString,
+            true,
+            true
+        );
+    }
+
+    /**
+     * Attempt to match column {@code colNumber}, once translated to characters according to {@code paletteMap}
+     * against the regular expression {@code pattern}.
+     *
+     * @param image         image to take column from
+     * @param colNumber     image column number for comparison
+     * @param paletteMap    {@link Map} of {@code Integer}s (denoting the color in ARGB format) to {@link String}s. It
+     *                      is advised to only map colors to single characters. Colors with no corresponding entry in
+     *                      the map are mapped to {@code #}.
+     * @param pattern       regular expression to match against
+     * @param assertMatch   whether to raise an (informative) {@link AssertionFailedError} if no match is found.
+     * @return {@link Matcher} produced by matching attempt
+     */
+    public static Matcher columnMatch(
+        final BufferedImage image,
+        final int colNumber,
+        final Map<Integer, String> paletteMap,
+        final Pattern pattern,
+        final boolean assertMatch
+    ) {
+        return imageStripPatternMatchInner(
+            image,
+            colNumber,
+            null,
+            paletteMap,
+            pattern,
+            null,
+            true,
+            true
+        );
+    }
+
+    /**
+     * Attempt to match column {@code colNumber}, once translated to characters according to {@code paletteMapFn}
+     * against the regular expression {@code pattern}.
+     *
+     * @param image         image to take column from
+     * @param colNumber     image column number for comparison
+     * @param paletteMapFn  function mapping {@code Integer}s (denoting the color in ARGB format) to {@link String}s. It
+     *                      is advised to only map colors to single characters.
+     * @param pattern       regular expression to match against
+     * @param assertMatch   whether to raise an (informative) {@link AssertionFailedError} if no match is found.
+     * @return {@link Matcher} produced by matching attempt
+     */
+    public static Matcher columnMatch(
+        final BufferedImage image,
+        final int colNumber,
+        final IntFunction<String> paletteMapFn,
+        final Pattern pattern,
+        final boolean assertMatch
+    ) {
+        return imageStripPatternMatchInner(
+            image,
+            colNumber,
+            paletteMapFn,
+            null,
+            pattern,
+            null,
+            true,
+            true
+        );
+    }
+
+    /**
+     * Attempt to match row {@code rowNumber}, once translated to characters according to {@code paletteMap}
+     * against the regular expression described by {@code patternString}.
+     *
+     * @param image         image to take row from
+     * @param rowNumber     image row number for comparison
+     * @param paletteMap    {@link Map} of {@code Integer}s (denoting the or in ARGB format) to {@link String}s. It
+     *                      is advised to only map colors to single characters. Colors with no corresponding entry in
+     *                      the map are mapped to {@code #}.
+     * @param patternString string representation of regular expression to match against. These are simply used to
+     *                      construct a {@link Pattern} which is cached in case of re-use.
+     * @param assertMatch   whether to raise an (informative) {@link AssertionFailedError} if no match is found.
+     * @return {@link Matcher} produced by matching attempt
+     */
+    public static Matcher rowMatch(
+        final BufferedImage image,
+        final int rowNumber,
+        final Map<Integer, String> paletteMap,
+        final String patternString,
+        final boolean assertMatch
+    ) {
+        return imageStripPatternMatchInner(
+            image,
+            rowNumber,
+            null,
+            paletteMap,
+            null,
+            patternString,
+            false,
+            true
+        );
+    }
+
+    /**
+     * Attempt to match row {@code rowNumber}, once translated to characters according to {@code paletteMapFn}
+     * against the regular expression described by {@code patternString}.
+     *
+     * @param image         image to take row from
+     * @param rowNumber     image row number for comparison
+     * @param paletteMapFn  function mapping {@code Integer}s (denoting the color in ARGB format) to {@link String}s. It
+     *                      is advised to only map colors to single characters.
+     * @param patternString string representation of regular expression to match against. These are simply used to
+     *                      construct a {@link Pattern} which is cached in case of re-use.
+     * @param assertMatch   whether to raise an (informative) {@link AssertionFailedError} if no match is found.
+     * @return {@link Matcher} produced by matching attempt
+     */
+    public static Matcher rowMatch(
+        final BufferedImage image,
+        final int rowNumber,
+        final IntFunction<String> paletteMapFn,
+        final String patternString,
+        final boolean assertMatch
+    ) {
+        return imageStripPatternMatchInner(
+            image,
+            rowNumber,
+            paletteMapFn,
+            null,
+            null,
+            patternString,
+            false,
+            true
+        );
+    }
+
+    /**
+     * Attempt to match row {@code rowNumber}, once translated to characters according to {@code paletteMap}
+     * against the regular expression {@code pattern}.
+     *
+     * @param image         image to take row from
+     * @param rowNumber     image row number for comparison
+     * @param paletteMap    {@link Map} of {@code Integer}s (denoting the color in ARGB format) to {@link String}s. It
+     *                      is advised to only map colors to single characters. Colors with no corresponding entry in
+     *                      the map are mapped to {@code #}.
+     * @param pattern       regular expression to match against
+     * @param assertMatch   whether to raise an (informative) {@link AssertionFailedError} if no match is found.
+     * @return {@link Matcher} produced by matching attempt
+     */
+    public static Matcher rowMatch(
+        final BufferedImage image,
+        final int rowNumber,
+        final Map<Integer, String> paletteMap,
+        final Pattern pattern,
+        final boolean assertMatch
+    ) {
+        return imageStripPatternMatchInner(
+            image,
+            rowNumber,
+            null,
+            paletteMap,
+            pattern,
+            null,
+            false,
+            true
+        );
+    }
+
+    /**
+     * Attempt to match row {@code rowNumber}, once translated to characters according to {@code paletteMapFn}
+     * against the regular expression {@code pattern}.
+     *
+     * @param image         image to take row from
+     * @param rowNumber     image row number for comparison
+     * @param paletteMapFn  function mapping {@code Integer}s (denoting the color in ARGB format) to {@link String}s. It
+     *                      is advised to only map colors to single characters.
+     * @param pattern       regular expression to match against
+     * @param assertMatch   whether to raise an (informative) {@link AssertionFailedError} if no match is found.
+     * @return {@link Matcher} produced by matching attempt
+     */
+    public static Matcher rowMatch(
+        final BufferedImage image,
+        final int rowNumber,
+        final IntFunction<String> paletteMapFn,
+        final Pattern pattern,
+        final boolean assertMatch
+    ) {
+        return imageStripPatternMatchInner(
+            image,
+            rowNumber,
+            paletteMapFn,
+            null,
+            pattern,
+            null,
+            false,
+            true
+        );
+    }
+}
diff --git a/tools/checkstyle/META-INF/MANIFEST.MF b/tools/checkstyle/META-INF/MANIFEST.MF
index 53b1d9b..48b28c1 100644
--- a/tools/checkstyle/META-INF/MANIFEST.MF
+++ b/tools/checkstyle/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: JOSM Checkstyle Eclipse Plugin
 Bundle-SymbolicName: org.openstreetmap.josm.checkstyle-eclipse-plugin;singleton:=true
-Bundle-Version: 8.0.0.qualifier
+Bundle-Version: 8.5.0.qualifier
 Require-Bundle: net.sf.eclipsecs.checkstyle,
  net.sf.eclipsecs.core,
  net.sf.eclipsecs.ui
diff --git a/tools/checkstyle/josm_checks.xml b/tools/checkstyle/josm_checks.xml
index d1e28e1..38c7cc5 100644
--- a/tools/checkstyle/josm_checks.xml
+++ b/tools/checkstyle/josm_checks.xml
@@ -20,7 +20,6 @@ JOSM Checkstyle rules
       <property name="format" value="^(e[1-9]?|t|ex[1-9]?|[a-z][a-z][a-zA-Z]+)$"/>
     </module>
     <module name="CommentsIndentation"/>
-    <module name="FileContentsHolder"/>
     <module name="MissingDeprecated"/>
     <module name="MissingOverride"/>
     <module name="PackageAnnotation"/>
@@ -89,9 +88,7 @@ JOSM Checkstyle rules
       <property name="tokens" value="LITERAL_TRY,LITERAL_CATCH,LITERAL_FINALLY,LITERAL_DO,LITERAL_ELSE,LITERAL_FOR,INSTANCE_INIT,STATIC_INIT,LITERAL_SWITCH"/>
     </module>
     <module name="EmptyCatchBlock"/>
-    <module name="LeftCurly">
-      <property name="maxLineLength" value="140"/>
-    </module>
+    <module name="LeftCurly"/>
     <module name="RightCurly"/>
     <module name="NeedBraces">
       <property name="tokens" value="LITERAL_DO,LITERAL_FOR,LITERAL_WHILE"/>
@@ -103,6 +100,11 @@ JOSM Checkstyle rules
     <module name="FinalClass"/>
     <module name="HideUtilityClassConstructor"/>
     <module name="org.openstreetmap.josm.TopLevelJavadocCheck"/>
+    <module name="SuppressionCommentFilter">
+      <property name="offCommentFormat" value="CHECKSTYLE\.OFF\: ([\w\|]+)"/>
+      <property name="onCommentFormat" value="CHECKSTYLE\.ON\: ([\w\|]+)"/>
+      <property name="checkFormat" value="$1"/>
+    </module>
   </module>
   <module name="Header">
     <property name="header" value="// License: GPL. For details, see LICENSE file."/>
@@ -111,11 +113,6 @@ JOSM Checkstyle rules
   <module name="FileLength">
     <property name="fileExtensions" value=".java"/>
   </module>
-  <module name="SuppressionCommentFilter">
-    <property name="offCommentFormat" value="CHECKSTYLE\.OFF\: ([\w\|]+)"/>
-    <property name="onCommentFormat" value="CHECKSTYLE\.ON\: ([\w\|]+)"/>
-    <property name="checkFormat" value="$1"/>
-  </module>
   <module name="FileTabCharacter"/>
   <module name="NewlineAtEndOfFile">
     <property name="lineSeparator" value="lf"/>
diff --git a/tools/checkstyle/josm_filters.xml b/tools/checkstyle/josm_filters.xml
index ca6fdce..a6d2de4 100644
--- a/tools/checkstyle/josm_filters.xml
+++ b/tools/checkstyle/josm_filters.xml
@@ -44,7 +44,6 @@
   <suppress checks="HeaderCheck" files="MenuScroller\.java" />
   <suppress checks="HeaderCheck" files="MultiSplitLayout\.java" />
   <suppress checks="HeaderCheck" files="MultiSplitPane\.java" />
-  <suppress checks="HeaderCheck" files="DNSName(Fix)?\.java" />
   <suppress checks="FileLengthCheck" files="DomainValidator\.java" />
   <suppress checks="org.openstreetmap.josm.TopLevelJavadocCheck" files="package-info\.java" />
   <suppress checks="org.openstreetmap.josm.TopLevelJavadocCheck" files="[\\/]test[\\/]" />
diff --git a/tools/pmd/designer.bat b/tools/pmd/designer.bat
index c1cd497..51ef6ab 100644
--- a/tools/pmd/designer.bat
+++ b/tools/pmd/designer.bat
@@ -1,6 +1,6 @@
 @echo off
 set TOPDIR=%~dp0..
 set OPTS=
-set MAIN_CLASS=net.sourceforge.pmd.util.designer.Designer
+set MAIN_CLASS=net.sourceforge.pmd.util.fxdesigner.Designer
 
-java -classpath %TOPDIR%\pmd\* %OPTS% %MAIN_CLASS% %*
+java -classpath "%TOPDIR%\pmd\*" %OPTS% %MAIN_CLASS% %*
diff --git a/tools/pmd/josm-ruleset.xml b/tools/pmd/josm-ruleset.xml
index 5f106ec..5f6cdb3 100644
--- a/tools/pmd/josm-ruleset.xml
+++ b/tools/pmd/josm-ruleset.xml
@@ -6,107 +6,182 @@
  
   <description>JOSM PMD ruleset</description>
  
-  <!-- <rule ref="rulesets/java/basic.xml"/>
-  <rule ref="rulesets/java/braces.xml"/>
-  <rule ref="rulesets/java/clone.xml"/>
-  <rule ref="rulesets/java/codesize.xml"/>
-  <rule ref="rulesets/java/comments.xml"/>
-  <rule ref="rulesets/java/design.xml"/>
-  <rule ref="rulesets/java/empty.xml"/>
-  <rule ref="rulesets/java/finalizers.xml"/>
-  <rule ref="rulesets/java/imports.xml"/>
-  <rule ref="rulesets/java/migrating.xml"/>-->
-  <rule ref="rulesets/java/naming.xml">
-  	<exclude name="AbstractNaming"/>
-  	<exclude name="AvoidFieldNameMatchingMethodName"/>
-  	<exclude name="AvoidFieldNameMatchingTypeName"/>
-  	<exclude name="BooleanGetMethodName"/>
-  	<exclude name="LongVariable"/>
-  	<exclude name="ShortClassName"/>
-  	<exclude name="ShortMethodName"/>
-  	<exclude name="ShortVariable"/>
-  	<exclude name="MethodNamingConventions"/>
-  	<exclude name="VariableNamingConventions"/>
+  <rule ref="category/java/bestpractices.xml">
+    <exclude name="AccessorClassGeneration"/>
+    <exclude name="AccessorMethodGeneration"/>
+    <exclude name="ArrayIsStoredDirectly"/>
+    <exclude name="AvoidPrintStackTrace"/>
+    <exclude name="AvoidReassigningParameters"/>
+    <exclude name="AvoidStringBufferField"/>
+    <exclude name="AvoidUsingHardCodedIP"/>
+    <exclude name="ConstantsInInterface"/>
+    <exclude name="ForLoopCanBeForeach"/>
+    <exclude name="GuardLogStatement"/>
+    <exclude name="JUnit4TestShouldUseAfterAnnotation"/>
+    <exclude name="JUnit4TestShouldUseTestAnnotation"/>
+    <exclude name="LooseCoupling"/>
+    <exclude name="MethodReturnsInternalArray"/>
+    <exclude name="OneDeclarationPerLine"/>
+    <exclude name="PositionLiteralsFirstInComparisons"/>
+    <exclude name="PreserveStackTrace"/>
+    <exclude name="ReplaceHashtableWithMap"/>
+    <exclude name="SwitchStmtsShouldHaveDefault"/>
+    <exclude name="SystemPrintln"/>
+    <exclude name="UnusedFormalParameter"/>
+    <exclude name="UseVarargs"/>
   </rule>
-  <rule ref="rulesets/java/naming.xml/ShortMethodName">
+  <rule ref="category/java/bestpractices.xml/PreserveStackTrace">
+    <properties>
+        <property name="violationSuppressXPath" value="//PrimaryExpression/PrimaryPrefix/Name[@Image='BugReport.intercept']"/>
+    </properties>
+  </rule>
+  <rule ref="category/java/bestpractices.xml/UnusedFormalParameter">
+    <properties>
+        <property name="violationSuppressXPath" value="//Annotation[MarkerAnnotation/Name/@Image='Deprecated']/..[MethodDeclaration|ConstructorDeclaration]"/>
+    </properties>
+  </rule>
+  <rule ref="category/java/codestyle.xml">
+    <exclude name="AbstractNaming"/>
+    <exclude name="AtLeastOneConstructor"/>
+    <exclude name="AvoidFinalLocalVariable"/>
+    <exclude name="AvoidPrefixingMethodParameters"/>
+    <exclude name="BooleanGetMethodName"/>
+    <exclude name="CallSuperInConstructor"/>
+    <exclude name="CommentDefaultAccessModifier"/>
+    <exclude name="ConfusingTernary"/>
+    <exclude name="DefaultPackage"/>
+    <exclude name="EmptyMethodInAbstractClassShouldBeAbstract"/>
+    <exclude name="FieldDeclarationsShouldBeAtStartOfClass"/>
+    <exclude name="ForLoopsMustUseBraces"/>
+    <exclude name="IfElseStmtsMustUseBraces"/>
+    <exclude name="IfStmtsMustUseBraces"/>
+    <exclude name="LocalVariableCouldBeFinal"/>
+    <exclude name="LongVariable"/>
+    <exclude name="MethodArgumentCouldBeFinal"/>
+    <exclude name="MethodNamingConventions"/>
+    <exclude name="OnlyOneReturn"/>
+    <exclude name="PrematureDeclaration"/>
+    <exclude name="ShortClassName"/>
+    <exclude name="ShortMethodName"/>
+    <exclude name="ShortVariable"/>
+    <exclude name="TooManyStaticImports"/>
+    <exclude name="UnnecessaryConstructor"/>
+    <exclude name="UselessParentheses"/>
+    <exclude name="VariableNamingConventions"/>
+    <exclude name="WhileLoopsMustUseBraces"/>
+  </rule>
+  <rule ref="category/java/codestyle.xml/ShortMethodName">
     <properties>
         <property name="violationSuppressXPath" value="//MethodDeclarator[@Image='at' or @Image='ht' or @Image='of' or @Image='ok' or @Image='tr']
-        	| //MethodDeclarator/../../Annotation/MarkerAnnotation/Name[@Image='Deprecated']
-        	| //MethodDeclarator/../../../..[@Image='LambertConformalConic']"/>
+          | //MethodDeclarator/../../Annotation/MarkerAnnotation/Name[@Image='Deprecated']
+          | //MethodDeclarator/../../../..[@Image='LambertConformalConic']"/>
     </properties>
   </rule>
-  <rule ref="rulesets/java/naming.xml/MethodNamingConventions">
+  <rule ref="category/java/codestyle.xml/MethodNamingConventions">
     <properties>
         <property name="violationSuppressXPath" value="//MethodDeclarator/../../../..[@Image='Functions' or @Image='PseudoClasses' or @Image='Role' or @Image='TaggingPreset']"/>
     </properties>
   </rule>
-  <rule ref="rulesets/java/naming.xml/VariableNamingConventions">
+  <rule ref="category/java/codestyle.xml/VariableNamingConventions">
     <properties>
         <property name="violationSuppressXPath" value="//FieldDeclaration[@Public='true']
-        	| //FieldDeclaration/../Annotation/MarkerAnnotation/Name[@Image='pref']
-        	| //FieldDeclaration/Type/ReferenceType/ClassOrInterfaceType[@Image!='Boolean' and 
-        	                                                             @Image!='Byte' and 
-        	                                                             @Image!='Character' and 
-        	                                                             @Image!='Class' and 
-        	                                                             @Image!='Double' and 
-        	                                                             @Image!='Enum' and 
-        	                                                             @Image!='Float' and 
-        	                                                             @Image!='Integer' and
-        	                                                             @Image!='Long' and
-        	                                                             @Image!='Number' and
-        	                                                             @Image!='Short' and 
-        	                                                             @Image!='String' ]"/>
+          | //FieldDeclaration/../Annotation/MarkerAnnotation/Name[@Image='pref']
+          | //FieldDeclaration/Type/ReferenceType/ClassOrInterfaceType[@Image!='Boolean' and 
+                                                                       @Image!='Byte' and 
+                                                                       @Image!='Character' and 
+                                                                       @Image!='Class' and 
+                                                                       @Image!='Double' and 
+                                                                       @Image!='Enum' and 
+                                                                       @Image!='Float' and 
+                                                                       @Image!='Integer' and
+                                                                       @Image!='Long' and
+                                                                       @Image!='Number' and
+                                                                       @Image!='Short' and 
+                                                                       @Image!='String' ]"/>
     </properties>
   </rule>
-  <rule ref="rulesets/java/naming.xml/LongVariable">
+  <rule ref="category/java/codestyle.xml/LongVariable">
     <properties>
         <property name="minimum" value="44"/>
     </properties>
   </rule>
-  <rule ref="rulesets/java/optimizations.xml">
-  	<exclude name="LocalVariableCouldBeFinal"/>
-  	<exclude name="MethodArgumentCouldBeFinal"/>
-  	<exclude name="AvoidInstantiatingObjectsInLoops"/>
-  	<exclude name="PrematureDeclaration"/>
-  	<exclude name="SimplifyStartsWith"/>
-  	<exclude name="UseStringBufferForStringAppends"/>
-  	<exclude name="UseArrayListInsteadOfVector"/>
+  <rule ref="category/java/design.xml">
+    <exclude name="AvoidCatchingGenericException"/>
+    <exclude name="AvoidDeeplyNestedIfStmts"/>
+    <exclude name="AvoidRethrowingException"/>
+    <exclude name="CollapsibleIfStatements"/>
+    <exclude name="CouplingBetweenObjects"/>
+    <exclude name="CyclomaticComplexity"/>
+    <exclude name="DataClass"/>
+    <exclude name="ExceptionAsFlowControl"/>
+    <exclude name="ExcessiveClassLength"/>
+    <exclude name="ExcessiveImports"/>
+    <exclude name="ExcessiveMethodLength"/>
+    <exclude name="ExcessiveParameterList"/>
+    <exclude name="ExcessivePublicCount"/>
+    <exclude name="GodClass"/>
+    <exclude name="ImmutableField"/>
+    <exclude name="LawOfDemeter"/>
+    <exclude name="LoosePackageCoupling"/>
+    <exclude name="NcssCount"/>
+    <exclude name="NPathComplexity"/>
+    <exclude name="SignatureDeclareThrowsException"/>
+    <exclude name="SimplifiedTernary"/>
+    <exclude name="SimplifyConditional"/>
+    <exclude name="SingularField"/>
+    <exclude name="SwitchDensity"/>
+    <exclude name="TooManyFields"/>
+    <exclude name="TooManyMethods"/>
+    <exclude name="UseObjectForClearerAPI"/>
+    <exclude name="UselessOverridingMethod"/>
+    <exclude name="UseUtilityClass"/>
   </rule>
-  <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">
-  	<exclude name="AvoidDuplicateLiterals"/>
-  	<exclude name="ConsecutiveLiteralAppends"/>
-  	<exclude name="AvoidStringBufferField"/>
-  	<exclude name="StringToString"/>
-  	<exclude name="UselessStringValueOf"/>
-  	<exclude name="InefficientEmptyStringCheck"/>
-  </rule>
-  <rule ref="rulesets/java/typeresolution.xml">
-  	<exclude name="LooseCoupling"/>
-  	<exclude name="SignatureDeclareThrowsException"/>
-  </rule>
-  <rule ref="rulesets/java/typeresolution.xml/SignatureDeclareThrowsException">
+  <rule ref="category/java/design.xml/SignatureDeclareThrowsException">
     <properties>
         <property name="violationSuppressXPath" value="//MethodDeclaration/../Annotation/MarkerAnnotation/Name[@Image='Override']"/>
         <property name="IgnoreJUnitCompletely" value="true"/>
     </properties>
   </rule>
-  <rule ref="rulesets/java/unnecessary.xml">
-  	<exclude name="UselessParentheses"/>
-  	<exclude name="UselessOverridingMethod"/>
-  </rule>
-  <rule ref="rulesets/java/unusedcode.xml">
-  	<exclude name="UnusedFormalParameter"/>
+  <rule ref="category/java/errorprone.xml">
+    <exclude name="AssignmentInOperand"/>
+    <exclude name="AssignmentToNonFinalStatic"/>
+    <exclude name="AvoidBranchingStatementAsLastInLoop"/>
+    <exclude name="AvoidCatchingNPE"/>
+    <exclude name="AvoidDuplicateLiterals"/>
+    <exclude name="AvoidFieldNameMatchingMethodName"/>
+    <exclude name="AvoidFieldNameMatchingTypeName"/>
+    <exclude name="AvoidInstanceofChecksInCatchClause"/>
+    <exclude name="AvoidLiteralsInIfCondition"/>
+    <exclude name="BeanMembersShouldSerialize"/>
+    <exclude name="CompareObjectsWithEquals"/>
+    <exclude name="ConstructorCallsOverridableMethod"/>
+    <exclude name="DataflowAnomalyAnalysis"/>
+    <exclude name="DoNotCallSystemExit"/>
+    <exclude name="DontImportSun"/>
+    <exclude name="EmptyIfStmt"/>
+    <exclude name="EmptyWhileStmt"/>
+    <exclude name="MissingBreakInSwitch"/>
+    <exclude name="MissingSerialVersionUID"/>
+    <exclude name="MissingStaticMethodInNonInstantiatableClass"/>
+    <exclude name="NonStaticInitializer"/>
+    <exclude name="NullAssignment"/>
+    <exclude name="ReturnEmptyArrayRatherThanNull"/>
+    <exclude name="SimpleDateFormatNeedsLocale"/>
+    <exclude name="SingleMethodSingleton"/>
+    <exclude name="SingletonClassReturningNewInstance"/>
+    <exclude name="TestClassWithoutTestCases"/>
+    <exclude name="UseProperClassLoader"/>
   </rule>
-  <rule ref="rulesets/java/unusedcode.xml/UnusedFormalParameter">
-    <properties>
-        <property name="violationSuppressXPath" value="//Annotation[MarkerAnnotation/Name/@Image='Deprecated']/..[MethodDeclaration|ConstructorDeclaration]"/>
-    </properties>
+  <rule ref="category/java/performance.xml">
+    <exclude name="AvoidInstantiatingObjectsInLoops"/>
+    <exclude name="AvoidUsingShortType"/>
+    <exclude name="ConsecutiveLiteralAppends"/>
+    <exclude name="InefficientEmptyStringCheck"/>
+    <exclude name="SimplifyStartsWith"/>
+    <exclude name="TooFewBranchesForASwitchStatement"/>
+    <exclude name="UseArrayListInsteadOfVector"/>
+    <exclude name="UselessStringValueOf"/>
+    <exclude name="UseStringBufferForStringAppends"/>
   </rule>
 
-</ruleset>
\ No newline at end of file
+</ruleset>
diff --git a/tools/spotbugs/josm-filter.xml b/tools/spotbugs/josm-filter.xml
index 9222f3f..dc904a6 100644
--- a/tools/spotbugs/josm-filter.xml
+++ b/tools/spotbugs/josm-filter.xml
@@ -1,73 +1,76 @@
 <FindBugsFilter>
 
-	<Match>
-		<Bug pattern="DM_EXIT" />
-	</Match>
-	<Match>
-		<Bug pattern="DMI_HARDCODED_ABSOLUTE_FILENAME" />
-	</Match>
-	<Match>
-		<Bug pattern="EQ_DOESNT_OVERRIDE_EQUALS" />
-	</Match>
-	<Match>
-		<Bug pattern="IL_INFINITE_LOOP" />
-	</Match>
-	<Match>
-		<Bug pattern="NM_CONFUSING" />
-	</Match>
-	<Match>
-		<Bug pattern="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE" />
-	</Match>
-	<Match>
-		<Bug pattern="SE_BAD_FIELD" />
-	</Match>
-	<Match>
-		<Bug pattern="SE_TRANSIENT_FIELD_NOT_RESTORED" />
-	</Match>
-	<Match>
-		<Bug pattern="UI_INHERITANCE_UNSAFE_GETRESOURCE" />
-	</Match>
-	<Match>
-		<Bug pattern="UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR" />
-	</Match>
+    <Match>
+        <Bug pattern="DM_EXIT" />
+    </Match>
+    <Match>
+        <Bug pattern="DMI_HARDCODED_ABSOLUTE_FILENAME" />
+    </Match>
+    <Match>
+        <Bug pattern="EQ_DOESNT_OVERRIDE_EQUALS" />
+    </Match>
+    <Match>
+        <Bug pattern="IL_INFINITE_LOOP" />
+    </Match>
+    <Match>
+        <Bug pattern="NM_CONFUSING" />
+    </Match>
+    <Match>
+        <Bug pattern="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE" />
+    </Match>
+    <Match>
+        <Bug pattern="SE_BAD_FIELD" />
+    </Match>
+    <Match>
+        <Bug pattern="SE_TRANSIENT_FIELD_NOT_RESTORED" />
+    </Match>
+    <Match>
+        <Bug pattern="ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD" />
+    </Match>
+    <Match>
+        <Bug pattern="UI_INHERITANCE_UNSAFE_GETRESOURCE" />
+    </Match>
+    <Match>
+        <Bug pattern="UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR" />
+    </Match>
 
-	<Match>
-		<Bug pattern="EI_EXPOSE_REP2" />
-		<Class name="org.openstreetmap.josm.tools.CopyList" />
-	</Match>
-	<Match>
-		<Bug pattern="MS_CANNOT_BE_FINAL" />
-		<Class name="org.openstreetmap.josm.Main" />
-	</Match>
-	<Match>
-		<Bug pattern="MS_SHOULD_BE_FINAL" />
-		<Class name="org.openstreetmap.josm.Main" />
-	</Match>
+    <Match>
+        <Bug pattern="EI_EXPOSE_REP2" />
+        <Class name="org.openstreetmap.josm.tools.CopyList" />
+    </Match>
+    <Match>
+        <Bug pattern="MS_CANNOT_BE_FINAL" />
+        <Class name="org.openstreetmap.josm.Main" />
+    </Match>
+    <Match>
+        <Bug pattern="MS_SHOULD_BE_FINAL" />
+        <Class name="org.openstreetmap.josm.Main" />
+    </Match>
 
-	<Match>
-		<Class name="~com.*" />
-	</Match>
+    <Match>
+        <Class name="~com.*" />
+    </Match>
     <Match>
         <Class name="~gnu.getopt.*" />
     </Match>
     <Match>
         <Class name="~javax.json.*" />
     </Match>
-	<Match>
-		<Class name="~oauth.signpost.*" />
-	</Match>
-	<Match>
-		<Class name="~org.apache.*" />
-	</Match>
+    <Match>
+        <Class name="~oauth.signpost.*" />
+    </Match>
+    <Match>
+        <Class name="~org.apache.*" />
+    </Match>
     <Match>
         <Class name="~org.glassfish.json.*" />
     </Match>
-	<Match>
-		<Class name="~org.jdesktop.swinghelper.debug.*" />
-	</Match>
-	<Match>
-		<Class name="~org.openstreetmap.gui.jmapviewer.*" />
-	</Match>
+    <Match>
+        <Class name="~org.jdesktop.swinghelper.debug.*" />
+    </Match>
+    <Match>
+        <Class name="~org.openstreetmap.gui.jmapviewer.*" />
+    </Match>
     <Match>
         <Class name="~org.openstreetmap.josm.gui.mappaint.mapcss.parsergen.*" />
     </Match>
@@ -78,4 +81,4 @@
         <Class name="~org.w3._2001.xmlschema.*" />
     </Match>
 
-</FindBugsFilter>
\ No newline at end of file
+</FindBugsFilter>

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